|
|
@@ -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::<ScreenDimensions>()).clone(); |
|
|
|
|
|
|
|
let sprite_sheet = init_sprite_sheet(world); |
|
|
|
let font_asset = load_font("fnt/8x8_wide_mono_bold.ttf", world); |
|
|
|
|
|
|
|
world.register::<DeepWater>(); |
|
|
|
world.register::<ShallowWater>(); |
|
|
|
world.register::<Islands>(); |
|
|
|
world.register::<Sky>(); |
|
|
|
world.register::<Sea>(); |
|
|
|
|
|
|
|
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<SpriteSheet> { |
|
|
|
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<SpriteSheet>, |
|
|
|
font_asset_handle: Handle<FontAsset>, |
|
|
|
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(); |
|
|
|
} |