|
|
|
|
@ -13,28 +13,30 @@ use fighter::*;
|
|
|
|
|
fn main() {
|
|
|
|
|
App::new()
|
|
|
|
|
.add_plugins((DefaultPlugins, BlocksPlugin, FighterPlugin))
|
|
|
|
|
.init_state::<Loading>()
|
|
|
|
|
.init_state::<Debugger>()
|
|
|
|
|
.init_state::<GameState>()
|
|
|
|
|
.init_resource::<AllAssets>()
|
|
|
|
|
.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<UntypedHandle>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// 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<NextState<GameState>>, server: Res<AssetServer>, assets: Res<AllAssets>) {
|
|
|
|
|
for asset in assets.handles.iter() {
|
|
|
|
|
let state = server.get_load_state(asset.id());
|
|
|
|
|
println!("{:?}", state);
|
|
|
|
|
fn load(mut next: ResMut<NextState<Loading>>, server: Res<AssetServer>, assets: Res<AllAssets>) {
|
|
|
|
|
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<T> to an entity
|
|
|
|
|
|