Compare commits

..
1 Commits
Author SHA1 Message Date
EIREXE 2e06cbb4b7 Fix debug UI not working at all
CI / build-and-test (pull_request) Successful in 1m30s
CI / production-build (pull_request) Successful in 10m51s
2026-09-24 22:29:34 +02:00
4 changed files with 30 additions and 28 deletions
+23 -4
View File
@@ -3,11 +3,9 @@
use std::{collections::HashMap, time::Duration}; use std::{collections::HashMap, time::Duration};
use bevy::{ use bevy::{
input::InputSystems, camera::{CameraOutputMode, visibility::RenderLayers}, input::InputSystems, prelude::*, render::render_resource::BlendState, settings::{ReflectSettingsGroup, SaveSettingsDeferred, SettingsGroup},
prelude::*,
settings::{ReflectSettingsGroup, SaveSettingsDeferred, SettingsGroup},
}; };
use bevy_egui::{EguiContexts, EguiPrimaryContextPass, egui}; use bevy_egui::{EguiContexts, EguiGlobalSettings, EguiPrimaryContextPass, PrimaryEguiContext, egui};
use bevy_ggrs::{RollbackFrameRate, RunGgrsSystems}; use bevy_ggrs::{RollbackFrameRate, RunGgrsSystems};
use enum_cycling::EnumCycle; use enum_cycling::EnumCycle;
use enum_cycling_derive::EnumCycle; use enum_cycling_derive::EnumCycle;
@@ -397,6 +395,7 @@ impl Plugin for DebugToolsPlugin {
.before(RunGgrsSystems) .before(RunGgrsSystems)
.run_if(in_state(AppState::InMatch)), .run_if(in_state(AppState::InMatch)),
) )
.add_systems(Startup, spawn_egui_camera)
.add_systems(PreUpdate, restore_frame_step_time.after(RunGgrsSystems)) .add_systems(PreUpdate, restore_frame_step_time.after(RunGgrsSystems))
.add_systems( .add_systems(
Update, Update,
@@ -408,6 +407,26 @@ impl Plugin for DebugToolsPlugin {
} }
} }
pub fn spawn_egui_camera(mut commands: Commands, mut egui_global_settings: ResMut<EguiGlobalSettings>,) {
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<usize> { fn player_handles(players: &Query<&Player>) -> Vec<usize> {
let mut handles = players let mut handles = players
.iter() .iter()
+3 -14
View File
@@ -1,19 +1,8 @@
use bevy::{picking::pointer::PointerId, prelude::*}; use bevy::{picking::pointer::PointerId, prelude::*};
use crate::{ use crate::{
AppState, AppState, fighter::manifest::{FighterManifest, FighterManifestRegistry}, game_settings::CommonAssets, input::{LocalInputAssignments, LocalInputSource}, menus::{
fighter::manifest::{FighterManifest, FighterManifestRegistry}, 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},
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},
}, },
}; };
@@ -241,7 +230,7 @@ pub fn copy_cursor_transform_to_token(
character_boxes: Query<(&CharacterBox, &ComputedNode, &UiGlobalTransform)>, character_boxes: Query<(&CharacterBox, &ComputedNode, &UiGlobalTransform)>,
match_config: Res<MenuMatchConfig>, match_config: Res<MenuMatchConfig>,
cursors: Query<&UiGlobalTransform, With<FGMenuCursor>>, cursors: Query<&UiGlobalTransform, With<FGMenuCursor>>,
cam: Single<&Camera>, cam: Single<&Camera, With<MenuCameraMarker>>,
ui_scale: Res<UiScale>, ui_scale: Res<UiScale>,
) -> Result { ) -> Result {
let camera = cam.into_inner(); let camera = cam.into_inner();
+3 -6
View File
@@ -9,11 +9,8 @@ use bevy::{
}; };
use crate::{ use crate::{
input::{LocalInputAssignments, LocalInputSource}, input::{LocalInputAssignments, LocalInputSource}, menus::{
menus::{ MenuCameraMarker, input::{MenuInput, MenuInputState}, scaling, style::FGUiStyle,
input::{MenuInput, MenuInputState},
scaling,
style::FGUiStyle,
}, },
}; };
@@ -181,7 +178,7 @@ pub fn cursor_input(
} }
pub fn update_cursor_transform( pub fn update_cursor_transform(
camera: Single<&Camera>, camera: Single<&Camera, With<MenuCameraMarker>>,
query: Query<(&mut Node, &PointerLocation), With<FGMenuCursor>>, query: Query<(&mut Node, &PointerLocation), With<FGMenuCursor>>,
ui_scale: Res<UiScale>, ui_scale: Res<UiScale>,
) { ) {
+1 -4
View File
@@ -53,6 +53,7 @@ pub fn wrap_menu(menu: impl Scene) -> impl Scene {
#MenuCamera #MenuCamera
Camera Camera
Camera2d Camera2d
MenuCameraMarker
), ),
( (
#MenuContainer #MenuContainer
@@ -73,7 +74,6 @@ pub fn wrap_menu(menu: impl Scene) -> impl Scene {
pub fn despawn_menu( pub fn despawn_menu(
existing_menu: Option<Single<Entity, With<MenuMarker>>>, existing_menu: Option<Single<Entity, With<MenuMarker>>>,
existing_menu_camera: Option<Single<Entity, With<MenuCameraMarker>>>,
mut commands: Commands, mut commands: Commands,
) { ) {
if let Some(entity) = existing_menu { if let Some(entity) = existing_menu {
@@ -82,9 +82,6 @@ pub fn despawn_menu(
.despawn(); .despawn();
} }
if let Some(menu_cam) = existing_menu_camera {
commands.entity(*menu_cam).despawn();
}
} }
pub fn spawn_menu( pub fn spawn_menu(