Skip to content

Commit

Permalink
Refactor, enable possible dynamic level loading (later)
Browse files Browse the repository at this point in the history
  • Loading branch information
bas-ie committed Dec 29, 2024
1 parent ac5ae58 commit e44290c
Show file tree
Hide file tree
Showing 9 changed files with 66 additions and 29 deletions.
15 changes: 15 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ version = "0.1.0"
avian2d = { git = "https://github.com/Jondolf/avian", branch = "main" }
bevy = "0.15.0"
bevy-inspector-egui = "0.28.0"
bevy_asset_loader = { features = ["2d"], version = "0.22.0" }
bevy_asset_loader = { features = ["2d", "standard_dynamic_assets"], version = "0.22.0" }
bevy_sparse_tilemap = "0.4.0"
leafwing-input-manager = "0.16.0"
# Compile low-severity logs out of native builds for performance.
Expand Down
3 changes: 2 additions & 1 deletion src/dev_tools.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ use bevy::{
};
use bevy_inspector_egui::quick::WorldInspectorPlugin;

use crate::screens::Screen;
use crate::{game::Game, screens::Screen};

pub(super) fn plugin(app: &mut App) {
app.add_systems(Update, log_transitions::<Screen>);
app.add_systems(Update, log_transitions::<Game>);

app.add_plugins(DebugUiPlugin);
app.add_plugins(WorldInspectorPlugin::default().run_if(input_toggle_active(false, TOGGLE_KEY)));
Expand Down
31 changes: 31 additions & 0 deletions src/game.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
use bevy::prelude::*;

use crate::screens::Screen;

#[derive(SubStates, Clone, PartialEq, Eq, Hash, Debug, Default)]
#[source(Screen = Screen::InGame)]
pub enum Game {
/// Player has successfully completed the level.
Complete,
/// Player has failed the level, menu shows with offer to retry or quit.
Failed,
/// Takes care of loading resources for the level to come, and providing hints to the player.
#[default]
Intro,
/// Player has hit the pause key, pause menu shows.
Paused,
/// Active gameplay.
Playing,
}

pub fn plugin(app: &mut App) {
app.init_state::<Game>();
app.enable_state_scoped_entities::<Game>();

app.add_systems(OnEnter(Game::Intro), init);
}

fn init(mut next_state: ResMut<NextState<Game>>) {
// TODO: later, we can use this state for intro screens and/or resource loading
next_state.set(Game::Playing);
}
3 changes: 2 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
mod assets;
#[cfg(feature = "dev")]
mod dev_tools;
mod game;
mod screens;
mod ui;

Expand Down Expand Up @@ -52,7 +53,7 @@ impl Plugin for GamePlugin {
}),
);

app.add_plugins((assets::plugin, screens::plugin));
app.add_plugins((assets::plugin, screens::plugin, game::plugin));

#[cfg(feature = "dev")]
app.add_plugins(dev_tools::plugin);
Expand Down
16 changes: 3 additions & 13 deletions src/screens.rs
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
mod ingame;
mod loading;
mod playing;
mod splash;
mod title;

use bevy::prelude::*;

pub fn plugin(app: &mut App) {
app.init_state::<Screen>();
app.init_state::<Game>();
app.enable_state_scoped_entities::<Screen>();
app.enable_state_scoped_entities::<Game>();

app.add_plugins((
loading::plugin,
playing::plugin,
ingame::plugin,
splash::plugin,
title::plugin,
));
Expand All @@ -23,16 +21,8 @@ pub fn plugin(app: &mut App) {
pub enum Screen {
Loading,
// Over,
Playing,
InGame,
#[default]
Splash,
Title,
}

#[derive(SubStates, Clone, PartialEq, Eq, Hash, Debug, Default)]
#[source(Screen = Screen::Playing)]
pub enum Game {
#[default]
Playing,
Paused,
}
14 changes: 3 additions & 11 deletions src/screens/playing.rs → src/screens/ingame.rs
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
mod pause;

use crate::game::Game;
use bevy::{input::common_conditions::input_just_pressed, prelude::*};

use crate::screens::Screen;

use super::Game;

pub fn plugin(app: &mut App) {
app.add_plugins(pause::plugin);
// app.add_systems(OnEnter(Screen::Playing), spawn_level);

// app.load_resource::<PlayingMusic>();
// app.add_systems(OnEnter(Screen::Playing), play_gameplay_music);
// app.add_systems(OnExit(Screen::Playing), stop_music);

app.add_systems(
Update,
pause.run_if(in_state(Screen::Playing).and(input_just_pressed(KeyCode::Escape))),
);
}

fn init(mut commands: Commands) {}

// fn spawn_level(mut commands: Commands) {
// commands.queue(spawn_level_command);
// }
Expand Down Expand Up @@ -58,7 +54,3 @@ pub fn plugin(app: &mut App) {
// commands.entity(entity).despawn_recursive();
// }
// }

fn pause(mut game: ResMut<NextState<Game>>) {
game.set(Game::Paused);
}
9 changes: 8 additions & 1 deletion src/screens/playing/pause.rs → src/screens/ingame/pause.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ pub fn plugin(app: &mut App) {

app.add_systems(
Update,
pause.run_if(in_state(Game::Paused).and(input_just_pressed(KeyCode::Escape))),
pause.run_if(in_state(Game::Playing).and(input_just_pressed(KeyCode::Escape))),
);
app.add_systems(
Update,
unpause.run_if(in_state(Game::Paused).and(input_just_pressed(KeyCode::Escape))),
);
}

Expand Down Expand Up @@ -114,3 +118,6 @@ fn init(mut commands: Commands) {
fn pause(mut game: ResMut<NextState<Game>>) {
game.set(Game::Paused);
}
fn unpause(mut game: ResMut<NextState<Game>>) {
game.set(Game::Playing);
}
2 changes: 1 addition & 1 deletion src/screens/title.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ fn spawn_title_screen(mut commands: Commands) {
})
.observe(
|_ev: Trigger<Pointer<Click>>, mut next_state: ResMut<NextState<Screen>>| {
next_state.set(Screen::Playing);
next_state.set(Screen::InGame);
},
);
});
Expand Down

0 comments on commit e44290c

Please sign in to comment.