| @@ -1,8 +1,9 @@ | |||||
| use crate::resources::spritesheet::SpriteSheetMap; | |||||
| use crate::resources::{font::FontResource, spritesheet::SpriteSheetMap}; | |||||
| use amethyst::{ | use amethyst::{ | ||||
| core::transform::Transform, | core::transform::Transform, | ||||
| prelude::*, | prelude::*, | ||||
| renderer::{Camera, SpriteRender}, | renderer::{Camera, SpriteRender}, | ||||
| ui::{Anchor, UiImage, UiText, UiTransform}, | |||||
| window::ScreenDimensions, | window::ScreenDimensions, | ||||
| }; | }; | ||||
| use nalgebra::Vector3; | use nalgebra::Vector3; | ||||
| @@ -17,6 +18,7 @@ impl TitleScreenState { | |||||
| /// initialize the titlescreen | /// initialize the titlescreen | ||||
| fn init(&self, world: &mut World, dimensions: ScreenDimensions) { | fn init(&self, world: &mut World, dimensions: ScreenDimensions) { | ||||
| self.init_camera(world, &dimensions); | self.init_camera(world, &dimensions); | ||||
| self.init_ui(world); | |||||
| self.init_scenery(world, &dimensions); | self.init_scenery(world, &dimensions); | ||||
| } | } | ||||
| @@ -32,6 +34,62 @@ impl TitleScreenState { | |||||
| .build(); | .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 | // initialize the scenery | ||||
| fn init_scenery(&self, world: &mut World, dimensions: &ScreenDimensions) { | fn init_scenery(&self, world: &mut World, dimensions: &ScreenDimensions) { | ||||
| // create the scale vector | // create the scale vector | ||||
| @@ -53,13 +111,14 @@ impl TitleScreenState { | |||||
| .expect("could not find title_screen sprite sheet") | .expect("could not find title_screen sprite sheet") | ||||
| .clone() | .clone() | ||||
| } else { | } else { | ||||
| panic!("failed to find") | |||||
| panic!("failed to get a handle on the spritesheet map") | |||||
| } | } | ||||
| }; | }; | ||||
| // create a sprite render | // create a sprite render | ||||
| let mut sprite_render = SpriteRender { sprite_sheet: spritesheet_handle, sprite_number: 2 }; | 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(); | world.create_entity().with(transform.clone()).with(sprite_render.clone()).build(); | ||||
| sprite_render.sprite_number = 1; | sprite_render.sprite_number = 1; | ||||
| world.create_entity().with(transform.clone()).with(sprite_render.clone()).build(); | world.create_entity().with(transform.clone()).with(sprite_render.clone()).build(); | ||||