diff --git a/Cargo.lock b/Cargo.lock index 2f2b3ea..b72d183 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2910,6 +2910,9 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" [[package]] name = "hum" version = "0.1.0" +dependencies = [ + "engine", +] [[package]] name = "iana-time-zone" diff --git a/hum/Cargo.toml b/hum/Cargo.toml index 4e4ea56..bd962a0 100644 --- a/hum/Cargo.toml +++ b/hum/Cargo.toml @@ -3,4 +3,5 @@ name = "hum" version = "0.1.0" edition = "2024" -[dependencies] +[dependencies.engine] +path = "../engine" diff --git a/tetris/src/blocks.rs b/tetris/src/blocks.rs index 59ab989..998c8e9 100644 --- a/tetris/src/blocks.rs +++ b/tetris/src/blocks.rs @@ -12,7 +12,7 @@ impl Plugin for BlocksPlugin { fn build(&self, app: &mut App) { app.init_asset::() .init_asset_loader::() - .add_systems(OnEnter(LoadState::Loading), load_assets) + .add_systems(OnEnter(Loading::Active), load_assets.run_if(run_once)) .add_systems(OnEnter(GameState::Setup), (setup_camera, setup_blocks)) .add_observer(add_shape); } diff --git a/tetris/src/main.rs b/tetris/src/main.rs index e5c97db..4ce3aef 100644 --- a/tetris/src/main.rs +++ b/tetris/src/main.rs @@ -13,28 +13,30 @@ use fighter::*; fn main() { App::new() .add_plugins((DefaultPlugins, BlocksPlugin, FighterPlugin)) + .init_state::() + .init_state::() .init_state::() .init_resource::() - .add_systems(Update, load.run_if(in_state(LoadState::Loading))) + .add_systems(Update, load) .run(); } -#[derive(Default, Resource)] +#[derive(Default, Resource, Debug)] struct AllAssets { handles: Vec, } /// Reports if the game is loading assets #[derive(States, Default, Clone, Eq, Debug, PartialEq, Hash)] -enum LoadState { +enum Loading { #[default] - Loading, - Loaded, + Active, + Idle, } /// Tracks if the game is in debug mode #[derive(States, Default, Clone, Eq, Debug, PartialEq, Hash)] -enum DebugState { +enum Debugger { #[default] Off, On, @@ -48,12 +50,10 @@ enum GameState { Run, } -fn load(mut next: ResMut>, server: Res, assets: Res) { - for asset in assets.handles.iter() { - let state = server.get_load_state(asset.id()); - println!("{:?}", state); +fn load(mut next: ResMut>, server: Res, assets: Res) { + if assets.handles.iter().all(|h| matches!(server.get_load_state(h.id()), Some(LoadState::Loaded))) { + next.set(Loading::Idle); } - next.set(GameState::Setup); } /// A wrapper around a handle for assigning an arbitrary Handle to an entity