.
This commit is contained in:
@@ -10,7 +10,7 @@ amethyst = "0.15.0"
|
|||||||
log = { version = "0.4.8", features = ["serde"] }
|
log = { version = "0.4.8", features = ["serde"] }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
#default = ["vulkan"]
|
default = ["vulkan"]
|
||||||
#empty = ["amethyst/empty"]
|
#empty = ["amethyst/empty"]
|
||||||
#metal = ["amethyst/metal"]
|
#metal = ["amethyst/metal"]
|
||||||
vulkan = ["amethyst/vulkan"]
|
vulkan = ["amethyst/vulkan"]
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
mod components;
|
mod components;
|
||||||
mod systems;
|
mod systems;
|
||||||
mod state;
|
mod ready_state;
|
||||||
|
mod play_state;
|
||||||
|
mod splash_state;
|
||||||
|
|
||||||
use amethyst::{
|
use amethyst::{
|
||||||
input::{InputBundle, StringBindings},
|
input::{InputBundle, StringBindings},
|
||||||
core::transform::TransformBundle,
|
core::transform::TransformBundle,
|
||||||
@@ -22,6 +25,7 @@ use crate::components::*;
|
|||||||
use crate::systems::*;
|
use crate::systems::*;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
use crate::splash_state::SplashState;
|
||||||
|
|
||||||
fn main() -> amethyst::Result<()> {
|
fn main() -> amethyst::Result<()> {
|
||||||
|
|
||||||
@@ -54,7 +58,7 @@ fn main() -> amethyst::Result<()> {
|
|||||||
|
|
||||||
|
|
||||||
// Creates the app with the startup state and bound game data
|
// Creates the app with the startup state and bound game data
|
||||||
let mut game = Application::new(resources, state::SplashState::default(), game_data)?;
|
let mut game = Application::new(resources, SplashState::default(), game_data)?;
|
||||||
game.run();
|
game.run();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
104
src/play_state.rs
Normal file
104
src/play_state.rs
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
use amethyst::{
|
||||||
|
assets::{AssetStorage, Loader},
|
||||||
|
core::transform::Transform,
|
||||||
|
core::math::Vector3,
|
||||||
|
input::{get_key, is_close_requested, is_key_down, VirtualKeyCode},
|
||||||
|
prelude::*,
|
||||||
|
renderer::{Camera, ImageFormat, SpriteRender, SpriteSheet, SpriteSheetFormat, Texture},
|
||||||
|
window::ScreenDimensions,
|
||||||
|
ecs::prelude::{Dispatcher, DispatcherBuilder, Component, DenseVecStorage, Entity},
|
||||||
|
};
|
||||||
|
|
||||||
|
use log::info;
|
||||||
|
use crate::components::*;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use crate::systems::{BirbGravity, ScrollScrollables};
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
pub struct PlayState<'a, 'b> {
|
||||||
|
|
||||||
|
// Custom dispatch systems for this state
|
||||||
|
dispatcher: Option<Dispatcher<'a, 'b>>,
|
||||||
|
|
||||||
|
sprites: Vec<Entity>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, 'b> PlayState<'a, 'b> {
|
||||||
|
|
||||||
|
fn init_sprites(&mut self, world: &mut World) {
|
||||||
|
|
||||||
|
let sprites = world.try_fetch_mut::<HashMap<String, SpriteRender>>().unwrap().clone();
|
||||||
|
let dimensions = (*world.read_resource::<ScreenDimensions>()).clone();
|
||||||
|
|
||||||
|
let birb_sprite = sprites
|
||||||
|
.get("floppy").unwrap();
|
||||||
|
|
||||||
|
let mut transform = Transform::default();
|
||||||
|
transform.set_scale(Vector3::new(3.0, 3.0, 3.0));
|
||||||
|
transform.set_translation_xyz(dimensions.width()/2.0, dimensions.height()/2.0, 0.2);
|
||||||
|
|
||||||
|
self.sprites.push(world
|
||||||
|
.create_entity()
|
||||||
|
.with(birb_sprite.clone()) // Sprite Render
|
||||||
|
.with(Birb {
|
||||||
|
vertical_speed: 0.0,
|
||||||
|
position: 0.0,
|
||||||
|
starting_height: 0.0
|
||||||
|
})
|
||||||
|
.with(transform)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, 'b> SimpleState for PlayState<'a, 'b> {
|
||||||
|
|
||||||
|
fn on_start(&mut self, data: StateData<'_, GameData<'_, '_>>) {
|
||||||
|
|
||||||
|
let world = data.world;
|
||||||
|
let dimensions = (*world.read_resource::<ScreenDimensions>()).clone();
|
||||||
|
|
||||||
|
// Create the `DispatcherBuilder` and register some `System`s that should only run for this `State`.
|
||||||
|
let mut dispatcher_builder = DispatcherBuilder::new();
|
||||||
|
dispatcher_builder.add(BirbGravity { fired: false }, "gravity", &[]);
|
||||||
|
|
||||||
|
let mut dispatcher = dispatcher_builder.build();
|
||||||
|
dispatcher.setup(world);
|
||||||
|
|
||||||
|
self.dispatcher = Some(dispatcher);
|
||||||
|
|
||||||
|
PlayState::init_sprites(self, world);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_event(
|
||||||
|
&mut self,
|
||||||
|
mut data: StateData<'_, GameData<'_, '_>>,
|
||||||
|
event: StateEvent,
|
||||||
|
) -> SimpleTrans {
|
||||||
|
|
||||||
|
if let StateEvent::Window(event) = &event {
|
||||||
|
// Check if the window should be closed
|
||||||
|
if is_close_requested(&event) || is_key_down(&event, VirtualKeyCode::Escape) {
|
||||||
|
return Trans::Quit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if is_key_down(&event, VirtualKeyCode::P) {
|
||||||
|
let world = data.world;
|
||||||
|
for i in &self.sprites {
|
||||||
|
world.delete_entity(*i);
|
||||||
|
}
|
||||||
|
self.sprites.clear();
|
||||||
|
return Trans::Pop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Trans::None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update(&mut self, data: &mut StateData<'_, GameData<'_, '_>>) -> SimpleTrans {
|
||||||
|
|
||||||
|
if let Some(dispatcher) = self.dispatcher.as_mut() {
|
||||||
|
dispatcher.dispatch(&data.world);
|
||||||
|
}
|
||||||
|
Trans::None
|
||||||
|
}
|
||||||
|
}
|
||||||
104
src/ready_state.rs
Normal file
104
src/ready_state.rs
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
use amethyst::{
|
||||||
|
assets::{AssetStorage, Loader},
|
||||||
|
core::transform::Transform,
|
||||||
|
core::math::Vector3,
|
||||||
|
input::{get_mouse_button, get_key, is_close_requested, is_key_down, VirtualKeyCode},
|
||||||
|
prelude::*,
|
||||||
|
renderer::{Camera, ImageFormat, SpriteRender, SpriteSheet, SpriteSheetFormat, Texture},
|
||||||
|
window::ScreenDimensions,
|
||||||
|
ecs::prelude::{Dispatcher, DispatcherBuilder, Component, DenseVecStorage, Entity},
|
||||||
|
};
|
||||||
|
|
||||||
|
use log::info;
|
||||||
|
use crate::components::*;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use crate::systems::{BirbGravity, ScrollScrollables};
|
||||||
|
use crate::play_state::PlayState;
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
pub struct ReadyState {
|
||||||
|
sprites: Vec<Entity>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ReadyState {
|
||||||
|
|
||||||
|
fn init_sprites(&mut self, world: &mut World) {
|
||||||
|
|
||||||
|
let dimensions = (*world.read_resource::<ScreenDimensions>()).clone();
|
||||||
|
let sprites = world.try_fetch_mut::<HashMap<String, SpriteRender>>().unwrap().clone();
|
||||||
|
|
||||||
|
let get_ready_text_sprite = sprites
|
||||||
|
.get("get-ready-text").unwrap().clone();
|
||||||
|
|
||||||
|
let tap_tap_dialogue_sprite = sprites
|
||||||
|
.get("tap-tap-dialogue").unwrap().clone();
|
||||||
|
|
||||||
|
let mut transform = Transform::default();
|
||||||
|
transform.set_scale(Vector3::new(3.0, 3.0, 3.0));
|
||||||
|
|
||||||
|
transform.set_translation_xyz(dimensions.width()*0.5, dimensions.height()*0.8, 0.2);
|
||||||
|
|
||||||
|
self.sprites.push(world
|
||||||
|
.create_entity()
|
||||||
|
.with(get_ready_text_sprite.clone()) // Sprite Render
|
||||||
|
.with(transform.clone())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
transform.set_translation_xyz(dimensions.width()*0.5, dimensions.height()*0.5, 0.2);
|
||||||
|
|
||||||
|
self.sprites.push(world
|
||||||
|
.create_entity()
|
||||||
|
.with(tap_tap_dialogue_sprite.clone()) // Sprite Render
|
||||||
|
.with(transform.clone())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl SimpleState for ReadyState {
|
||||||
|
|
||||||
|
fn on_start(&mut self, data: StateData<'_, GameData<'_, '_>>) {
|
||||||
|
let world = data.world;
|
||||||
|
ReadyState::init_sprites(self, world);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_resume(&mut self, data: StateData<'_, GameData<'_, '_>>) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_event(
|
||||||
|
&mut self,
|
||||||
|
mut data: StateData<'_, GameData<'_, '_>>,
|
||||||
|
event: StateEvent,
|
||||||
|
) -> SimpleTrans {
|
||||||
|
|
||||||
|
if let StateEvent::Ui(event) = &event {
|
||||||
|
|
||||||
|
if event.event_type == UiEventType::Click {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if let StateEvent::Window(event) = &event {
|
||||||
|
// Check if the window should be closed
|
||||||
|
if is_close_requested(&event) || is_key_down(&event, VirtualKeyCode::Escape) {
|
||||||
|
return Trans::Quit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the window should be closed
|
||||||
|
if is_key_down(&event, VirtualKeyCode::Space) {
|
||||||
|
let world = data.world;
|
||||||
|
for i in &self.sprites {
|
||||||
|
world.delete_entity(*i);
|
||||||
|
}
|
||||||
|
self.sprites.clear();
|
||||||
|
|
||||||
|
return Trans::Push(Box::new(PlayState::default()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Trans::None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update(&mut self, data: &mut StateData<'_, GameData<'_, '_>>) -> SimpleTrans {
|
||||||
|
Trans::None
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,95 +13,8 @@ use log::info;
|
|||||||
use crate::components::*;
|
use crate::components::*;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use crate::systems::{BirbGravity, ScrollScrollables};
|
use crate::systems::{BirbGravity, ScrollScrollables};
|
||||||
|
use crate::ready_state::ReadyState;
|
||||||
|
|
||||||
#[derive(Default)]
|
|
||||||
pub struct PlayState<'a, 'b> {
|
|
||||||
|
|
||||||
// Custom dispatch systems for this state
|
|
||||||
dispatcher: Option<Dispatcher<'a, 'b>>,
|
|
||||||
|
|
||||||
sprites: Vec<Entity>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a, 'b> PlayState<'a, 'b> {
|
|
||||||
|
|
||||||
fn init_sprites(&mut self, world: &mut World) {
|
|
||||||
|
|
||||||
let sprites = world.try_fetch_mut::<HashMap<String, SpriteRender>>().unwrap().clone();
|
|
||||||
let dimensions = (*world.read_resource::<ScreenDimensions>()).clone();
|
|
||||||
|
|
||||||
let birb_sprite = sprites
|
|
||||||
.get("floppy").unwrap();
|
|
||||||
|
|
||||||
let mut transform = Transform::default();
|
|
||||||
transform.set_scale(Vector3::new(3.0, 3.0, 3.0));
|
|
||||||
transform.set_translation_xyz(dimensions.width()/2.0, dimensions.height()/2.0, 0.2);
|
|
||||||
|
|
||||||
self.sprites.push(world
|
|
||||||
.create_entity()
|
|
||||||
.with(birb_sprite.clone()) // Sprite Render
|
|
||||||
.with(Birb {
|
|
||||||
vertical_speed: 0.0,
|
|
||||||
position: 0.0,
|
|
||||||
starting_height: 0.0
|
|
||||||
})
|
|
||||||
.with(transform)
|
|
||||||
.build());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a, 'b> SimpleState for PlayState<'a, 'b> {
|
|
||||||
|
|
||||||
fn on_start(&mut self, data: StateData<'_, GameData<'_, '_>>) {
|
|
||||||
|
|
||||||
let world = data.world;
|
|
||||||
let dimensions = (*world.read_resource::<ScreenDimensions>()).clone();
|
|
||||||
|
|
||||||
// Create the `DispatcherBuilder` and register some `System`s that should only run for this `State`.
|
|
||||||
let mut dispatcher_builder = DispatcherBuilder::new();
|
|
||||||
dispatcher_builder.add(BirbGravity { fired: false }, "gravity", &[]);
|
|
||||||
|
|
||||||
let mut dispatcher = dispatcher_builder.build();
|
|
||||||
dispatcher.setup(world);
|
|
||||||
|
|
||||||
self.dispatcher = Some(dispatcher);
|
|
||||||
|
|
||||||
PlayState::init_sprites(self, world);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handle_event(
|
|
||||||
&mut self,
|
|
||||||
mut data: StateData<'_, GameData<'_, '_>>,
|
|
||||||
event: StateEvent,
|
|
||||||
) -> SimpleTrans {
|
|
||||||
|
|
||||||
if let StateEvent::Window(event) = &event {
|
|
||||||
// Check if the window should be closed
|
|
||||||
if is_close_requested(&event) || is_key_down(&event, VirtualKeyCode::Escape) {
|
|
||||||
return Trans::Quit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if is_key_down(&event, VirtualKeyCode::P) {
|
|
||||||
let world = data.world;
|
|
||||||
for i in &self.sprites {
|
|
||||||
world.delete_entity(*i);
|
|
||||||
}
|
|
||||||
self.sprites.clear();
|
|
||||||
return Trans::Pop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Trans::None
|
|
||||||
}
|
|
||||||
|
|
||||||
fn update(&mut self, data: &mut StateData<'_, GameData<'_, '_>>) -> SimpleTrans {
|
|
||||||
|
|
||||||
if let Some(dispatcher) = self.dispatcher.as_mut() {
|
|
||||||
dispatcher.dispatch(&data.world);
|
|
||||||
}
|
|
||||||
Trans::None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct SplashState {
|
pub struct SplashState {
|
||||||
@@ -111,7 +24,74 @@ pub struct SplashState {
|
|||||||
|
|
||||||
impl SplashState {
|
impl SplashState {
|
||||||
|
|
||||||
|
fn load_sprites(world: &mut World) -> HashMap<String, SpriteRender> {
|
||||||
|
// Load the texture for our sprites. We'll later need to
|
||||||
|
// add a handle to this texture to our `SpriteRender`s, so
|
||||||
|
// we need to keep a reference to it.
|
||||||
|
let texture_handle = {
|
||||||
|
let loader = world.read_resource::<Loader>();
|
||||||
|
let texture_storage = world.read_resource::<AssetStorage<Texture>>();
|
||||||
|
loader.load(
|
||||||
|
"sprites/flappy.png",
|
||||||
|
ImageFormat::default(),
|
||||||
|
(),
|
||||||
|
&texture_storage,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
// Load the spritesheet definition file, which contains metadata on our
|
||||||
|
// spritesheet texture.
|
||||||
|
let sheet_handle = {
|
||||||
|
let loader = world.read_resource::<Loader>();
|
||||||
|
let sheet_storage = world.read_resource::<AssetStorage<SpriteSheet>>();
|
||||||
|
loader.load(
|
||||||
|
"sprites/flappy.ron",
|
||||||
|
SpriteSheetFormat(texture_handle),
|
||||||
|
(),
|
||||||
|
&sheet_storage,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
let sprite_map = vec![
|
||||||
|
("day-background".to_string(), 0),
|
||||||
|
("night-background".to_string(), 1),
|
||||||
|
("down-pipe".to_string(), 2),
|
||||||
|
("up-pipe".to_string(), 3),
|
||||||
|
("ground".to_string(), 4),
|
||||||
|
("floppy".to_string(), 5),
|
||||||
|
("tap-tap-dialogue".to_string(), 6),
|
||||||
|
("play-button".to_string(), 7),
|
||||||
|
("leaderboard-button".to_string(), 8),
|
||||||
|
("get-ready-text".to_string(), 9),
|
||||||
|
("flappy-bird-text".to_string(), 10),
|
||||||
|
];
|
||||||
|
|
||||||
|
sprite_map.iter()
|
||||||
|
.map(|i| (i.0.clone(), SpriteRender {
|
||||||
|
sprite_sheet: sheet_handle.clone(),
|
||||||
|
sprite_number: i.1,
|
||||||
|
}))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn init_camera(world: &mut World) {
|
||||||
|
|
||||||
|
let dimensions = (*world.read_resource::<ScreenDimensions>()).clone();
|
||||||
|
|
||||||
|
// Center the camera in the middle of the screen, and let it cover
|
||||||
|
// the entire screen
|
||||||
|
let mut transform = Transform::default();
|
||||||
|
transform.set_translation_xyz(dimensions.width() * 0.5, dimensions.height() * 0.5, 1.);
|
||||||
|
|
||||||
|
world
|
||||||
|
.create_entity()
|
||||||
|
.with(Camera::standard_2d(dimensions.width(), dimensions.height()))
|
||||||
|
.with(transform)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
fn init_sprites(&mut self, world: &mut World) {
|
fn init_sprites(&mut self, world: &mut World) {
|
||||||
|
|
||||||
let sprites = world.try_fetch_mut::<HashMap<String, SpriteRender>>().unwrap().clone();
|
let sprites = world.try_fetch_mut::<HashMap<String, SpriteRender>>().unwrap().clone();
|
||||||
|
|
||||||
let dimensions = (*world.read_resource::<ScreenDimensions>()).clone();
|
let dimensions = (*world.read_resource::<ScreenDimensions>()).clone();
|
||||||
@@ -212,72 +192,6 @@ impl SplashState {
|
|||||||
.with(transform.clone())
|
.with(transform.clone())
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn init_camera(world: &mut World) {
|
|
||||||
|
|
||||||
let dimensions = (*world.read_resource::<ScreenDimensions>()).clone();
|
|
||||||
|
|
||||||
// Center the camera in the middle of the screen, and let it cover
|
|
||||||
// the entire screen
|
|
||||||
let mut transform = Transform::default();
|
|
||||||
transform.set_translation_xyz(dimensions.width() * 0.5, dimensions.height() * 0.5, 1.);
|
|
||||||
|
|
||||||
world
|
|
||||||
.create_entity()
|
|
||||||
.with(Camera::standard_2d(dimensions.width(), dimensions.height()))
|
|
||||||
.with(transform)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
fn load_sprites(world: &mut World) -> HashMap<String, SpriteRender> {
|
|
||||||
// Load the texture for our sprites. We'll later need to
|
|
||||||
// add a handle to this texture to our `SpriteRender`s, so
|
|
||||||
// we need to keep a reference to it.
|
|
||||||
let texture_handle = {
|
|
||||||
let loader = world.read_resource::<Loader>();
|
|
||||||
let texture_storage = world.read_resource::<AssetStorage<Texture>>();
|
|
||||||
loader.load(
|
|
||||||
"sprites/flappy.png",
|
|
||||||
ImageFormat::default(),
|
|
||||||
(),
|
|
||||||
&texture_storage,
|
|
||||||
)
|
|
||||||
};
|
|
||||||
|
|
||||||
// Load the spritesheet definition file, which contains metadata on our
|
|
||||||
// spritesheet texture.
|
|
||||||
let sheet_handle = {
|
|
||||||
let loader = world.read_resource::<Loader>();
|
|
||||||
let sheet_storage = world.read_resource::<AssetStorage<SpriteSheet>>();
|
|
||||||
loader.load(
|
|
||||||
"sprites/flappy.ron",
|
|
||||||
SpriteSheetFormat(texture_handle),
|
|
||||||
(),
|
|
||||||
&sheet_storage,
|
|
||||||
)
|
|
||||||
};
|
|
||||||
|
|
||||||
let sprite_map = vec![
|
|
||||||
("day-background".to_string(), 0),
|
|
||||||
("night-background".to_string(), 1),
|
|
||||||
("down-pipe".to_string(), 2),
|
|
||||||
("up-pipe".to_string(), 3),
|
|
||||||
("ground".to_string(), 4),
|
|
||||||
("floppy".to_string(), 5),
|
|
||||||
("tap-tap-dialogue".to_string(), 6),
|
|
||||||
("play-button".to_string(), 7),
|
|
||||||
("leaderboard-button".to_string(), 8),
|
|
||||||
("get-ready-text".to_string(), 9),
|
|
||||||
("flappy-bird-text".to_string(), 10),
|
|
||||||
];
|
|
||||||
|
|
||||||
sprite_map.iter()
|
|
||||||
.map(|i| (i.0.clone(), SpriteRender {
|
|
||||||
sprite_sheet: sheet_handle.clone(),
|
|
||||||
sprite_number: i.1,
|
|
||||||
}))
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SimpleState for SplashState {
|
impl SimpleState for SplashState {
|
||||||
@@ -325,83 +239,3 @@ impl SimpleState for SplashState {
|
|||||||
Trans::None
|
Trans::None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
|
||||||
pub struct ReadyState {
|
|
||||||
sprites: Vec<Entity>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ReadyState {
|
|
||||||
|
|
||||||
fn init_sprites(&mut self, world: &mut World) {
|
|
||||||
|
|
||||||
let dimensions = (*world.read_resource::<ScreenDimensions>()).clone();
|
|
||||||
let sprites = world.try_fetch_mut::<HashMap<String, SpriteRender>>().unwrap().clone();
|
|
||||||
|
|
||||||
let get_ready_text_sprite = sprites
|
|
||||||
.get("get-ready-text").unwrap().clone();
|
|
||||||
|
|
||||||
let tap_tap_dialogue_sprite = sprites
|
|
||||||
.get("tap-tap-dialogue").unwrap().clone();
|
|
||||||
|
|
||||||
let mut transform = Transform::default();
|
|
||||||
transform.set_scale(Vector3::new(3.0, 3.0, 3.0));
|
|
||||||
|
|
||||||
transform.set_translation_xyz(dimensions.width()*0.5, dimensions.height()*0.8, 0.2);
|
|
||||||
|
|
||||||
self.sprites.push(world
|
|
||||||
.create_entity()
|
|
||||||
.with(get_ready_text_sprite.clone()) // Sprite Render
|
|
||||||
.with(transform.clone())
|
|
||||||
.build());
|
|
||||||
|
|
||||||
transform.set_translation_xyz(dimensions.width()*0.5, dimensions.height()*0.5, 0.2);
|
|
||||||
|
|
||||||
self.sprites.push(world
|
|
||||||
.create_entity()
|
|
||||||
.with(tap_tap_dialogue_sprite.clone()) // Sprite Render
|
|
||||||
.with(transform.clone())
|
|
||||||
.build());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl SimpleState for ReadyState {
|
|
||||||
|
|
||||||
fn on_start(&mut self, data: StateData<'_, GameData<'_, '_>>) {
|
|
||||||
let world = data.world;
|
|
||||||
ReadyState::init_sprites(self, world);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn on_resume(&mut self, data: StateData<'_, GameData<'_, '_>>) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handle_event(
|
|
||||||
&mut self,
|
|
||||||
mut data: StateData<'_, GameData<'_, '_>>,
|
|
||||||
event: StateEvent,
|
|
||||||
) -> SimpleTrans {
|
|
||||||
|
|
||||||
if let StateEvent::Window(event) = &event {
|
|
||||||
// Check if the window should be closed
|
|
||||||
if is_close_requested(&event) || is_key_down(&event, VirtualKeyCode::Escape) {
|
|
||||||
return Trans::Quit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the window should be closed
|
|
||||||
if is_key_down(&event, VirtualKeyCode::Space) {
|
|
||||||
let world = data.world;
|
|
||||||
for i in &self.sprites {
|
|
||||||
world.delete_entity(*i);
|
|
||||||
}
|
|
||||||
self.sprites.clear();
|
|
||||||
|
|
||||||
return Trans::Push(Box::new(PlayState::default()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Trans::None
|
|
||||||
}
|
|
||||||
|
|
||||||
fn update(&mut self, data: &mut StateData<'_, GameData<'_, '_>>) -> SimpleTrans {
|
|
||||||
Trans::None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -19,8 +19,6 @@ pub struct ScrollScrollables;
|
|||||||
/*
|
/*
|
||||||
Pausable systems
|
Pausable systems
|
||||||
https://book.amethyst.rs/stable/controlling_system_execution/pausable_systems.html
|
https://book.amethyst.rs/stable/controlling_system_execution/pausable_systems.html
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// This system iterates all the objects with transform (and falling object) component
|
// This system iterates all the objects with transform (and falling object) component
|
||||||
|
|||||||
Reference in New Issue
Block a user