2023-12-25 13:49:52 -06:00
|
|
|
use bevy::audio::{AudioPlugin, SpatialScale};
|
2024-07-29 16:29:39 -05:00
|
|
|
use bevy::prelude::{default, *};
|
2023-12-19 11:17:49 -06:00
|
|
|
|
2023-12-20 13:24:16 -06:00
|
|
|
mod assets;
|
|
|
|
mod camera;
|
2024-02-03 21:15:30 -06:00
|
|
|
mod main_menu;
|
2023-12-20 13:36:34 -06:00
|
|
|
mod movement;
|
|
|
|
mod player;
|
2023-12-23 16:50:08 -06:00
|
|
|
mod statue;
|
2023-12-19 11:17:49 -06:00
|
|
|
|
2024-07-29 16:29:39 -05:00
|
|
|
#[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;
|
|
|
|
|
2023-12-19 11:17:49 -06:00
|
|
|
fn main() {
|
|
|
|
let mut app = App::new();
|
2023-12-24 21:30:18 -06:00
|
|
|
|
2024-07-29 16:29:39 -05:00
|
|
|
app.init_resource::<assets::AssetLoader>();
|
|
|
|
|
|
|
|
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(),
|
2023-12-24 21:30:18 -06:00
|
|
|
..default()
|
2024-07-29 16:29:39 -05:00
|
|
|
}),
|
|
|
|
..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.,
|
|
|
|
});
|
2023-12-19 11:17:49 -06:00
|
|
|
|
|
|
|
app.run()
|
|
|
|
}
|