|
|
@@ -1,8 +1,9 @@ |
|
|
|
use crate::resources::spritesheet::SpriteSheetMap; |
|
|
|
use crate::resources::{font::FontResource, spritesheet::SpriteSheetMap}; |
|
|
|
use amethyst::{ |
|
|
|
core::transform::Transform, |
|
|
|
prelude::*, |
|
|
|
renderer::{Camera, SpriteRender}, |
|
|
|
ui::{Anchor, UiImage, UiText, UiTransform}, |
|
|
|
window::ScreenDimensions, |
|
|
|
}; |
|
|
|
use nalgebra::Vector3; |
|
|
@@ -17,6 +18,7 @@ impl TitleScreenState { |
|
|
|
/// initialize the titlescreen |
|
|
|
fn init(&self, world: &mut World, dimensions: ScreenDimensions) { |
|
|
|
self.init_camera(world, &dimensions); |
|
|
|
self.init_ui(world); |
|
|
|
self.init_scenery(world, &dimensions); |
|
|
|
} |
|
|
|
|
|
|
@@ -32,6 +34,62 @@ impl TitleScreenState { |
|
|
|
.build(); |
|
|
|
} |
|
|
|
|
|
|
|
fn init_ui(&self, world: &mut World) { |
|
|
|
// get the font handle |
|
|
|
let font_handle = { |
|
|
|
if let Some(font_rsc) = world.try_fetch::<FontResource>() { |
|
|
|
font_rsc.get_handle().clone() |
|
|
|
} else { |
|
|
|
panic!("failed to get a handle on font resource"); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// create the button transforms |
|
|
|
let exit_btn_transform = UiTransform::new( |
|
|
|
"exit_button".into(), |
|
|
|
Anchor::BottomRight, |
|
|
|
Anchor::Middle, |
|
|
|
-100.0, |
|
|
|
50.0, |
|
|
|
0.0, |
|
|
|
100.0, |
|
|
|
50.0, |
|
|
|
); |
|
|
|
let settings_btn_transform = UiTransform::new( |
|
|
|
"settings_button".into(), |
|
|
|
Anchor::BottomRight, |
|
|
|
Anchor::Middle, |
|
|
|
0.0, |
|
|
|
0.0, |
|
|
|
0.0, |
|
|
|
200.0, |
|
|
|
50.0, |
|
|
|
); |
|
|
|
|
|
|
|
// create the button ui text |
|
|
|
let exit_btn_text = |
|
|
|
UiText::new(font_handle.clone(), "Exit".into(), [1.0, 1.0, 1.0, 1.0], 30.0); |
|
|
|
let settings_btn_text = |
|
|
|
UiText::new(font_handle, "Settings".into(), [1.0, 1.0, 1.0, 1.0], 30.0); |
|
|
|
|
|
|
|
// create ui image |
|
|
|
let btn_image = UiImage::SolidColor([0.0, 0.0, 0.0, 1.0]); |
|
|
|
|
|
|
|
// create the button |
|
|
|
world |
|
|
|
.create_entity() |
|
|
|
.with(exit_btn_transform) |
|
|
|
.with(exit_btn_text) |
|
|
|
.with(btn_image.clone()) |
|
|
|
.build(); |
|
|
|
world |
|
|
|
.create_entity() |
|
|
|
.with(settings_btn_transform) |
|
|
|
.with(settings_btn_text) |
|
|
|
.with(btn_image) |
|
|
|
.build(); |
|
|
|
} |
|
|
|
|
|
|
|
// initialize the scenery |
|
|
|
fn init_scenery(&self, world: &mut World, dimensions: &ScreenDimensions) { |
|
|
|
// create the scale vector |
|
|
@@ -53,13 +111,14 @@ impl TitleScreenState { |
|
|
|
.expect("could not find title_screen sprite sheet") |
|
|
|
.clone() |
|
|
|
} else { |
|
|
|
panic!("failed to find") |
|
|
|
panic!("failed to get a handle on the spritesheet map") |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// create a sprite render |
|
|
|
let mut sprite_render = SpriteRender { sprite_sheet: spritesheet_handle, sprite_number: 2 }; |
|
|
|
|
|
|
|
// render background stuff |
|
|
|
world.create_entity().with(transform.clone()).with(sprite_render.clone()).build(); |
|
|
|
sprite_render.sprite_number = 1; |
|
|
|
world.create_entity().with(transform.clone()).with(sprite_render.clone()).build(); |
|
|
|