From cd9c39b70c40e9caf49c9f7d4338c7dcea8f742b 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 20:03:47 +0000 Subject: [PATCH] Add debug frame stepping (#5) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-on: https://git.eirexe.moe/EIREXE/shinespark/pulls/5 Co-authored-by: Álex Román Núñez --- .gitea/workflows/ci.yml | 2 +- src/debug_tools.rs | 101 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 99 insertions(+), 4 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index e78cfe8..ef57c78 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -10,7 +10,7 @@ on: jobs: build-and-test: runs-on: ubuntu-latest - timeout-minutes: 15 + timeout-minutes: 30 steps: - name: Check out source uses: actions/checkout@v4 diff --git a/src/debug_tools.rs b/src/debug_tools.rs index 9ad23db..28e27f2 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,25 @@ impl DebugSettings { pub struct DebugToolsPlugin; +#[derive(Resource, Default)] +struct FrameStepState { + requested: bool, + time_backup: Option