diff --git a/.gitattributes b/.gitattributes index c1e5f83..35820e4 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,3 +2,4 @@ *.glb filter=lfs diff=lfs merge=lfs -text *.wav filter=lfs diff=lfs merge=lfs -text *.mp3 filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text diff --git a/Cargo.toml b/Cargo.toml index a785866..f2a11f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,7 @@ bevy = { version = "0.18.0", features = [ "3d", "wav", "mp3", + "bevy_ui_debug", "bevy_dev_tools", ] } bevy_atmosphere = { git = "https://github.com/Arthur-Aillet/bevy_atmosphere", branch = "feat/z-up" } diff --git a/assets/VCR_OSD_MONO_1.001.ttf b/assets/VCR_OSD_MONO_1.001.ttf new file mode 100644 index 0000000..227241f --- /dev/null +++ b/assets/VCR_OSD_MONO_1.001.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01918d86cb163a715dcb97165b997256734dfcc9f550beeb7c142fa4a064cf1c +size 75864 diff --git a/src/debug.rs b/src/debug.rs index dc1f8bf..cc575f6 100644 --- a/src/debug.rs +++ b/src/debug.rs @@ -1,10 +1,13 @@ use avian3d::prelude::{PhysicsDebugPlugin, PhysicsGizmos}; use bevy::dev_tools::fps_overlay::{FpsOverlayConfig, FpsOverlayPlugin, FrameTimeGraphConfig}; use bevy::prelude::*; +use bevy::ui_render::UiDebugOptions; use bevy_inspector_egui::bevy_egui::EguiPlugin; use bevy_inspector_egui::quick::WorldInspectorPlugin; +use crate::node::OilNode; use crate::player::WorldModelCamera; +use crate::player::marker::PLAYER_PLACE_DIST; use crate::settings::Settings; use crate::ui::OverlayImage; @@ -31,14 +34,30 @@ impl Plugin for DebugPlugin { }) .add_plugins((EguiPlugin::default(), PhysicsDebugPlugin)) .add_plugins(WorldInspectorPlugin::new().run_if(if_debug_display)) - .add_systems(Update, toggle_debug); + .add_systems( + Update, + ( + toggle_debug, + display_oil_nodes_debug.run_if(if_debug_display), + ), + ); } } -pub fn if_debug_display(settings: Res) -> bool { +fn if_debug_display(settings: Res) -> bool { settings.debug_display } +fn display_oil_nodes_debug(mut gizmos: Gizmos, oil_nodes: Query<&GlobalTransform, With>) { + for oil_node in oil_nodes { + gizmos.sphere( + oil_node.translation(), + PLAYER_PLACE_DIST, + Color::srgb(1., 0.7, 0.7), + ); + } +} + fn toggle_debug( input: Res>, mut fps_overlay: ResMut, @@ -46,6 +65,7 @@ fn toggle_debug( mut image_overlay: Single<&mut Visibility, With>, mut settings: ResMut, mut store: ResMut, + mut debug_ui: ResMut, ) { if input.just_pressed(KeyCode::F1) { fps_overlay.enabled = !fps_overlay.enabled; @@ -67,6 +87,7 @@ fn toggle_debug( } else { **image_overlay = Visibility::Visible; } + debug_ui.enabled = settings.debug && !settings.debug_display; let phys_config = store.config_mut::().0; if settings.debug_display == true { diff --git a/src/ladder.rs b/src/ladder.rs new file mode 100644 index 0000000..b186809 --- /dev/null +++ b/src/ladder.rs @@ -0,0 +1,146 @@ +use bevy::{light::NotShadowCaster, prelude::*}; +use bevy_sprite3d::Sprite3d; + +use crate::{node::OilNodeResource, player::PlayerCamera, ui::CenteredText}; + +pub struct LadderPlugin; + +impl Plugin for LadderPlugin { + fn build(&self, app: &mut App) { + app.insert_resource(Ladder::default()) + .add_systems(Startup, load_ladder) + .add_systems(Update, spawn_ladder) + .add_systems(PostUpdate, game_state) + .insert_resource(GameState::default()); + } +} + +#[derive(Resource, Default)] +pub struct GameState { + current_step: Step, + since_last_change: Timer, +} + +#[derive(Default, PartialEq)] +pub enum Step { + #[default] + LocateOil, + Exit, + SorryBuddy, +} + +pub fn game_state( + text: Single<(&mut Node, &mut Text), With>, + oil_res: If>, + mut game_state: ResMut, + ladder: Single<&GlobalTransform, With>, + mut ladder_parent: Single<&mut Transform, With>, + player_cam: Single<&GlobalTransform, With>, + time: Res