From 578648d2ec42e6b6c4ae7fced7de19748bce8f32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Rom=C3=A1n=20N=C3=BA=C3=B1ez?= Date: Mon, 14 Sep 2026 18:47:55 +0200 Subject: [PATCH 1/3] Add debug frame stepping --- src/debug_tools.rs | 85 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/src/debug_tools.rs b/src/debug_tools.rs index 9ad23db..92c3f17 100644 --- a/src/debug_tools.rs +++ b/src/debug_tools.rs @@ -3,11 +3,12 @@ use std::{collections::HashMap, time::Duration}; use bevy::{ + input::InputSystems, prelude::*, settings::{ReflectSettingsGroup, SaveSettingsDeferred, SettingsGroup}, }; use bevy_egui::{EguiContexts, EguiPrimaryContextPass, egui}; -use bevy_ggrs::RollbackFrameRate; +use bevy_ggrs::{RollbackFrameRate, RunGgrsSystems}; use enum_cycling::EnumCycle; use enum_cycling_derive::EnumCycle; @@ -114,6 +115,7 @@ enum DebugFlag { Hurtboxes, Camera, DrawThroughGeometry, + FrameStepping, } #[derive(Clone, Copy)] @@ -174,6 +176,10 @@ const WORLD_MENU: &[DebugMenuEntry] = &[ DebugMenuEntry::GameSpeed { label: "Game speed", }, + DebugMenuEntry::Toggle { + label: "Frame stepping", + flag: DebugFlag::FrameStepping, + }, ]; const DIAGNOSTICS_MENU: &[DebugMenuEntry] = &[DebugMenuEntry::Toggle { @@ -233,6 +239,8 @@ pub struct DebugSettings { selections: Vec, #[reflect(ignore)] pub player_rows: HashMap, + #[reflect(ignore)] + pub frame_stepping: bool, pub network: bool, pub ecb: bool, pub stage_collision: bool, @@ -253,6 +261,7 @@ impl Default for DebugSettings { pages: vec![DebugMenuPage::Static(ROOT_MENU)], selections: vec![0], player_rows: HashMap::new(), + frame_stepping: false, network: false, ecb: false, stage_collision: false, @@ -325,6 +334,7 @@ impl DebugSettings { DebugFlag::Hurtboxes => self.hurtboxes, DebugFlag::DrawThroughGeometry => self.draw_through_geometry, DebugFlag::Camera => self.camera, + DebugFlag::FrameStepping => self.frame_stepping, } } @@ -340,6 +350,7 @@ impl DebugSettings { self.draw_through_geometry = !self.draw_through_geometry } DebugFlag::Camera => self.camera = !self.camera, + DebugFlag::FrameStepping => self.frame_stepping = !self.frame_stepping, } } @@ -356,9 +367,24 @@ impl DebugSettings { pub struct DebugToolsPlugin; +#[derive(Resource, Default)] +struct FrameStepState { + requested: bool, + time_backup: Option