From 2e06cbb4b7c9076abeb777a0e51d765e50bc1530 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Rom=C3=A1n=20N=C3=BA=C3=B1ez?= Date: Thu, 24 Sep 2026 22:29:34 +0200 Subject: [PATCH] Fix debug UI not working at all --- src/debug_tools.rs | 27 +++++++++++++++++++++++---- src/menus/character_select/mod.rs | 17 +++-------------- src/menus/cursor.rs | 9 +++------ src/menus/mod.rs | 5 +---- 4 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/debug_tools.rs b/src/debug_tools.rs index 29b226b..f420345 100644 --- a/src/debug_tools.rs +++ b/src/debug_tools.rs @@ -3,11 +3,9 @@ use std::{collections::HashMap, time::Duration}; use bevy::{ - input::InputSystems, - prelude::*, - settings::{ReflectSettingsGroup, SaveSettingsDeferred, SettingsGroup}, + camera::{CameraOutputMode, visibility::RenderLayers}, input::InputSystems, prelude::*, render::render_resource::BlendState, settings::{ReflectSettingsGroup, SaveSettingsDeferred, SettingsGroup}, }; -use bevy_egui::{EguiContexts, EguiPrimaryContextPass, egui}; +use bevy_egui::{EguiContexts, EguiGlobalSettings, EguiPrimaryContextPass, PrimaryEguiContext, egui}; use bevy_ggrs::{RollbackFrameRate, RunGgrsSystems}; use enum_cycling::EnumCycle; use enum_cycling_derive::EnumCycle; @@ -397,6 +395,7 @@ impl Plugin for DebugToolsPlugin { .before(RunGgrsSystems) .run_if(in_state(AppState::InMatch)), ) + .add_systems(Startup, spawn_egui_camera) .add_systems(PreUpdate, restore_frame_step_time.after(RunGgrsSystems)) .add_systems( Update, @@ -408,6 +407,26 @@ impl Plugin for DebugToolsPlugin { } } +pub fn spawn_egui_camera(mut commands: Commands, mut egui_global_settings: ResMut,) { + egui_global_settings.auto_create_primary_context = false; + commands.spawn(( + // The `PrimaryEguiContext` component requires everything needed to render a primary context. + PrimaryEguiContext, + Camera2d, + // Setting RenderLayers to none makes sure we won't render anything apart from the UI. + RenderLayers::none(), + Camera { + order: 2, + output_mode: CameraOutputMode::Write { + blend_state: Some(BlendState::ALPHA_BLENDING), + clear_color: ClearColorConfig::None, + }, + clear_color: ClearColorConfig::Custom(Color::NONE), + ..default() + }, + )); +} + fn player_handles(players: &Query<&Player>) -> Vec { let mut handles = players .iter() diff --git a/src/menus/character_select/mod.rs b/src/menus/character_select/mod.rs index cd5dd75..5ab96ab 100644 --- a/src/menus/character_select/mod.rs +++ b/src/menus/character_select/mod.rs @@ -1,19 +1,8 @@ use bevy::{picking::pointer::PointerId, prelude::*}; use crate::{ - AppState, - fighter::manifest::{FighterManifest, FighterManifestRegistry}, - game_settings::CommonAssets, - input::{LocalInputAssignments, LocalInputSource}, - menus::{ - MenuMarker, - button::FGUiButton, - character_select::{character_box::CharacterBox, token::CharacterSelectToken}, - cursor::{FGMenuCursor, MenuCursorInputSource}, - errors::MenuErrors::FighterManifestNotFound, - match_config::{MenuMatchConfig, MenuMatchPlayerSlot}, - scaling, spawn_menu, - style::{FGUiButtonType, FGUiStyle}, + AppState, fighter::manifest::{FighterManifest, FighterManifestRegistry}, game_settings::CommonAssets, input::{LocalInputAssignments, LocalInputSource}, menus::{ + MenuCameraMarker, MenuMarker, button::FGUiButton, character_select::{character_box::CharacterBox, token::CharacterSelectToken}, cursor::{FGMenuCursor, MenuCursorInputSource}, errors::MenuErrors::FighterManifestNotFound, match_config::{MenuMatchConfig, MenuMatchPlayerSlot}, scaling, spawn_menu, style::{FGUiButtonType, FGUiStyle}, }, }; @@ -241,7 +230,7 @@ pub fn copy_cursor_transform_to_token( character_boxes: Query<(&CharacterBox, &ComputedNode, &UiGlobalTransform)>, match_config: Res, cursors: Query<&UiGlobalTransform, With>, - cam: Single<&Camera>, + cam: Single<&Camera, With>, ui_scale: Res, ) -> Result { let camera = cam.into_inner(); diff --git a/src/menus/cursor.rs b/src/menus/cursor.rs index 40a4845..554ddc6 100644 --- a/src/menus/cursor.rs +++ b/src/menus/cursor.rs @@ -9,11 +9,8 @@ use bevy::{ }; use crate::{ - input::{LocalInputAssignments, LocalInputSource}, - menus::{ - input::{MenuInput, MenuInputState}, - scaling, - style::FGUiStyle, + input::{LocalInputAssignments, LocalInputSource}, menus::{ + MenuCameraMarker, input::{MenuInput, MenuInputState}, scaling, style::FGUiStyle, }, }; @@ -181,7 +178,7 @@ pub fn cursor_input( } pub fn update_cursor_transform( - camera: Single<&Camera>, + camera: Single<&Camera, With>, query: Query<(&mut Node, &PointerLocation), With>, ui_scale: Res, ) { diff --git a/src/menus/mod.rs b/src/menus/mod.rs index ff7d0f1..3976631 100644 --- a/src/menus/mod.rs +++ b/src/menus/mod.rs @@ -53,6 +53,7 @@ pub fn wrap_menu(menu: impl Scene) -> impl Scene { #MenuCamera Camera Camera2d + MenuCameraMarker ), ( #MenuContainer @@ -73,7 +74,6 @@ pub fn wrap_menu(menu: impl Scene) -> impl Scene { pub fn despawn_menu( existing_menu: Option>>, - existing_menu_camera: Option>>, mut commands: Commands, ) { if let Some(entity) = existing_menu { @@ -82,9 +82,6 @@ pub fn despawn_menu( .despawn(); } - if let Some(menu_cam) = existing_menu_camera { - commands.entity(*menu_cam).despawn(); - } } pub fn spawn_menu(