use bevy::audio::{AudioPlugin, SpatialScale}; use bevy::prelude::{default, *}; mod assets; mod camera; mod main_menu; mod movement; mod player; mod statue; #[derive(States, Default, Debug, Clone, PartialEq, Eq, Hash)] pub enum Game { #[default] Running, Paused, } #[derive(States, Default, Debug, Clone, PartialEq, Eq, Hash)] pub enum View { // #[default] // LoadingScreen, #[default] MainMenu, InGame, } #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)] struct MainMenuSet; #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)] struct InGameSet; fn main() { let mut app = App::new(); app.init_resource::(); app.insert_state(View::default()); app.insert_state(Game::default()); app.add_plugins((DefaultPlugins .set(WindowPlugin { primary_window: Some(Window { title: "Kodo Tag".into(), mode: bevy::window::WindowMode::BorderlessFullscreen, // resolution: (640. * 2., 360. * 2.).into(), ..default() }), ..default() }) .set(AudioPlugin { default_spatial_scale: SpatialScale::new_2d(1.), global_volume: GlobalVolume::new(1.), ..default() }) .set(ImagePlugin::default_nearest()),)) .add_systems(OnEnter(View::MainMenu), main_menu::startup) .add_systems(OnExit(View::MainMenu), main_menu::exit) .add_systems(OnEnter(View::InGame), (player::startup, statue::startup)) .add_systems(OnExit(View::InGame), (player::exit, statue::exit)) .add_systems(Startup, (assets::startup, camera::startup)) .add_systems( Update, ( ( player::sprite_select, player::controls, movement::update_velocity_by_heading, movement::resolve_velocity.after(movement::update_velocity_by_heading), movement::ysort.after(movement::update_velocity_by_heading), camera::update .after(player::controls) .after(movement::resolve_velocity), ) .in_set(InGameSet) .run_if(in_state(View::InGame)), (main_menu::update) .in_set(MainMenuSet) .run_if(in_state(View::MainMenu)), ), ) .insert_resource(ClearColor(Color::rgb(0.1, 0.1, 0.1))) .insert_resource(AmbientLight { color: Color::rgb(1., 1., 1.), brightness: 1., }); app.run() }