mod audio; mod debug; mod display2d; mod display3d; mod game; mod prelude; use std::time::Duration; use bevy::asset::ChangeWatcher; use crate::prelude::*; fn main() { App::new() .add_state::() .add_systems(Update, state) .add_systems(Update, loading.run_if(in_state(GameState::Loading))) .add_plugins(( DefaultPlugins .set(ImagePlugin::default_nearest()) .set(WindowPlugin { primary_window: Some(Window { title: "Martian Chess".into(), resolution: (640., 480.).into(), ..default() }), ..default() }) .set(AssetPlugin { watch_for_changes: ChangeWatcher::with_delay(Duration::from_millis(200)), ..default() }), audio::AudioPlugin, debug::DebugPlugin, display2d::Display2dPlugin, display3d::Display3dPlugin, game::GamePlugin, )) .run(); } #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Default, States)] pub enum GameState { #[default] Loading, Menu, Display2d, Display3d, } fn loading( server: Res, sprites: Res>, mut next_state: ResMut>, ) { let items = { sprites.ids() }; let states = server.get_group_load_state(items); match states { LoadState::Loaded | LoadState::NotLoaded => next_state.set(GameState::Display2d), _ => (), } } fn state(state: Option>>) { state.map(|s| { if s.is_added() || s.is_changed() { info!("Updated state is {:?}", s); } }); }