diff --git a/src/game/mod.rs b/src/game/mod.rs deleted file mode 100644 index 0f79cdb..0000000 --- a/src/game/mod.rs +++ /dev/null @@ -1,13 +0,0 @@ -pub mod title_screen; - -use amethyst::prelude::*; -use title_screen::TitleScreen; - -/// a simple state for initializing the game -pub struct InitialState; - -impl SimpleState for InitialState { - fn on_start(&mut self, _data: StateData<'_, GameData<'_, '_>>) { - Trans::Push(Box::new(TitleScreen)); - } -} diff --git a/src/game/title_screen/components.rs b/src/game/title_screen/components.rs deleted file mode 100644 index 2504c8e..0000000 --- a/src/game/title_screen/components.rs +++ /dev/null @@ -1,47 +0,0 @@ -use amethyst::ecs::prelude::*; - -// deep water component -pub struct DeepWater { - pub y: f32, -} - -impl Component for DeepWater { - type Storage = DenseVecStorage; -} - -// shallow water component -pub struct ShallowWater { - pub y: f32, -} - -impl Component for ShallowWater { - type Storage = DenseVecStorage; -} - -// islands component -pub struct Islands; - -impl Component for Islands { - type Storage = DenseVecStorage; -} - -// sea component -pub struct Sea; - -impl Component for Sea { - type Storage = DenseVecStorage; -} - -// sky component -pub struct Sky; - -impl Component for Sky { - type Storage = DenseVecStorage; -} - -// title component -pub struct Title; - -impl Component for Title { - type Storage = DenseVecStorage; -} diff --git a/src/game/title_screen/mod.rs b/src/game/title_screen/mod.rs deleted file mode 100644 index ba00abf..0000000 --- a/src/game/title_screen/mod.rs +++ /dev/null @@ -1,171 +0,0 @@ -mod components; - -// namespacing -use crate::utils::{load_font, load_sprite_sheet, load_texture}; -use amethyst::{ - assets::Handle, - core::transform::Transform, - ecs::prelude::*, - prelude::*, - renderer::{Camera, SpriteRender, SpriteSheet}, - ui::{Anchor, FontAsset, UiText, UiTransform}, - window::ScreenDimensions, -}; -use components::*; -use nalgebra::Vector3; - -// constants -const DEFAULT_SPRITE_WIDTH: f32 = 256.0; -const DEFAULT_SPRITE_HEIGHT: f32 = 144.0; - -/// a simple state for the title screen -pub struct TitleScreen; - -impl SimpleState for TitleScreen { - fn on_start(&mut self, data: StateData<'_, GameData<'_, '_>>) { - let world = data.world; - let dimensions = (*world.read_resource::()).clone(); - - let sprite_sheet = init_sprite_sheet(world); - let font_asset = load_font("fnt/8x8_wide_mono_bold.ttf", world); - - world.register::(); - world.register::(); - world.register::(); - world.register::(); - world.register::(); - - init_scene_entities(world, sprite_sheet, font_asset, &dimensions); - - init_camera(world, &dimensions); - } - - fn handle_event( - &mut self, - mut _data: StateData<'_, GameData<'_, '_>>, - _event: StateEvent, - ) -> SimpleTrans { - // keep going - Trans::None - } -} - -fn init_sprite_sheet(world: &World) -> Handle { - let texture_handle = load_texture("img/title_screen_texture.png", world); - load_sprite_sheet("img/title_screen_sprite_sheet.ron", world, texture_handle) -} - -// initialize the camera -fn init_camera(world: &mut World, dimensions: &ScreenDimensions) { - let mut transform = Transform::default(); - transform.set_translation_xyz(dimensions.width() * 0.5, dimensions.height() * 0.5, 1.0); - - world - .create_entity() - .with(Camera::standard_2d(dimensions.width(), dimensions.height())) - .with(transform) - .build(); -} - -// initailize the entities for the scene -fn init_scene_entities( - world: &mut World, - sprite_sheet_handle: Handle, - font_asset_handle: Handle, - dimensions: &ScreenDimensions, -) { - // create the scale vector - let scale_vector3 = Vector3::new( - dimensions.width() / DEFAULT_SPRITE_WIDTH, - dimensions.height() / DEFAULT_SPRITE_HEIGHT, - 0.0, - ); - - // create the scenery transform - let mut scenery_transform = Transform::default(); - scenery_transform.set_translation_xyz(dimensions.width() * 0.5, dimensions.height() * 0.5, 0.0); - scenery_transform.set_scale(scale_vector3); - - // create the shallow water entity - let sprite_render = SpriteRender { - sprite_sheet: sprite_sheet_handle.clone(), - sprite_number: 1, - }; - world - .create_entity() - .with(ShallowWater { y: 0.0 }) - .with(scenery_transform.clone()) - .with(sprite_render) - .build(); - - // create the deep water entity - let sprite_render = SpriteRender { - sprite_sheet: sprite_sheet_handle.clone(), - sprite_number: 0, - }; - world - .create_entity() - .with(DeepWater { y: 0.0 }) - .with(scenery_transform.clone()) - .with(sprite_render) - .build(); - - // create the islands entity - let sprite_render = SpriteRender { - sprite_sheet: sprite_sheet_handle.clone(), - sprite_number: 2, - }; - world - .create_entity() - .with(Islands) - .with(scenery_transform.clone()) - .with(sprite_render) - .build(); - - // create the sky entity - let sprite_render = SpriteRender { - sprite_sheet: sprite_sheet_handle.clone(), - sprite_number: 3, - }; - world - .create_entity() - .with(Sky) - .with(scenery_transform.clone()) - .with(sprite_render) - .build(); - - // create the sea entity - let sprite_render = SpriteRender { - sprite_sheet: sprite_sheet_handle, - sprite_number: 4, - }; - world - .create_entity() - .with(Sea) - .with(scenery_transform) - .with(sprite_render) - .build(); - - // create the title entity - let title_transform = UiTransform::new( - "title".to_owned(), - Anchor::TopLeft, - Anchor::TopLeft, - 150.0, - -150.0, - 1.0, - 450.0, - 45.0, - ); - - world - .create_entity() - .with(UiText::new( - font_asset_handle, - "Merchant Seas".to_string(), - [1.0, 1.0, 1.0, 1.0], - 45.0, - )) - .with(title_transform) - .build(); -} diff --git a/src/main.rs b/src/main.rs index 6982b28..c783b99 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,6 @@ +// modules +mod states; + // namespacing use amethyst::{ core::transform::TransformBundle, @@ -12,10 +15,6 @@ use amethyst::{ utils::application_root_dir, }; -mod game; -// a collection of utility functions -mod utils; - fn main() -> amethyst::Result<()> { // enable engine logging amethyst::start_logger(Default::default()); @@ -32,7 +31,7 @@ fn main() -> amethyst::Result<()> { RenderToWindow::from_config_path(display_config)?.with_clear([1.0, 1.0, 1.0, 1.0]); // set up keybindings configuration - let bindings = app_root.join("config").join("bindings.ron"); + let bindings = app_root.join("config").join("bindings_config.ron"); let input_bundle = InputBundle::::new().with_bindings_from_file(bindings)?; // initialize the game data struct @@ -46,16 +45,10 @@ fn main() -> amethyst::Result<()> { .with_plugin(render_to_window) .with_plugin(RenderUi::default()) .with_plugin(RenderFlat2D::default()), - )? - // systems inclusion - .with( - utils::systems::ExitGameSystem, - "exit_system", - &["input_system"], - ); + )?; // create and run the game - let mut game = Application::new(assets, game::title_screen::TitleScreen, game_data)?; + let mut game = Application::new(assets, states::preload_state::PreloadState, game_data)?; game.run(); Ok(()) diff --git a/src/utils/mod.rs b/src/utils/mod.rs deleted file mode 100644 index cc1b30e..0000000 --- a/src/utils/mod.rs +++ /dev/null @@ -1,53 +0,0 @@ -/// set of generic systems to be used through out the game -pub mod systems; - -// namespacing -use amethyst::{ - assets::{AssetStorage, Handle, Loader}, - prelude::*, - renderer::{ImageFormat, SpriteSheet, SpriteSheetFormat, Texture}, - ui::{FontAsset, TtfFormat}, -}; - -/// wrap the image loading functions -pub fn load_texture(name: T, world: &World) -> Handle -where - T: Into, -{ - let loader = world.read_resource::(); - loader.load( - name, - ImageFormat::default(), - (), - &world.read_resource::>(), - ) -} - -/// wrap spritesheet loading -pub fn load_sprite_sheet( - name: T, - world: &World, - texture_handle: Handle, -) -> Handle -where - T: Into, -{ - let loader = world.read_resource::(); - let spritesheet_store = world.read_resource::>(); - loader.load( - name, - SpriteSheetFormat(texture_handle), - (), - &spritesheet_store, - ) -} - -/// wrap font loading -pub fn load_font(name: T, world: &World) -> Handle -where - T: Into, -{ - world - .read_resource::() - .load(name, TtfFormat, (), &world.read_resource()) -}