| @@ -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(); | |||