Add the ability to debug draw blastzones & update blastzone formatting
CI / build-and-test (pull_request) Failing after 1m30s
CI / production-build (pull_request) Failing after 2m49s

This commit is contained in:
2026-09-26 18:31:26 +02:00
parent 90412fa80d
commit 11fc7ba704
4 changed files with 58 additions and 11 deletions
+13
View File
@@ -109,6 +109,7 @@ impl FighterDebugRowKind {
enum DebugFlag {
Network,
Ecb,
BlastZones,
StageCollision,
AnimationBones,
AttackHitboxes,
@@ -150,6 +151,10 @@ const FIGHTER_MENU: &[DebugMenuEntry] = &[
label: "ECB",
flag: DebugFlag::Ecb,
},
DebugMenuEntry::Toggle {
label: "Blast Zones",
flag: DebugFlag::BlastZones,
},
DebugMenuEntry::Toggle {
label: "Animation bones",
flag: DebugFlag::AnimationBones,
@@ -243,6 +248,7 @@ pub struct DebugSettings {
pub frame_stepping: bool,
pub network: bool,
pub ecb: bool,
pub blast_zones: bool,
pub stage_collision: bool,
pub animation_bones: bool,
pub attack_hitboxes: bool,
@@ -264,6 +270,7 @@ impl Default for DebugSettings {
frame_stepping: false,
network: false,
ecb: false,
blast_zones: true,
stage_collision: false,
animation_bones: false,
attack_hitboxes: false,
@@ -328,6 +335,7 @@ impl DebugSettings {
match flag {
DebugFlag::Network => self.network,
DebugFlag::Ecb => self.ecb,
DebugFlag::BlastZones => self.blast_zones,
DebugFlag::StageCollision => self.stage_collision,
DebugFlag::AnimationBones => self.animation_bones,
DebugFlag::AttackHitboxes => self.attack_hitboxes,
@@ -342,6 +350,7 @@ impl DebugSettings {
match flag {
DebugFlag::Network => self.network = !self.network,
DebugFlag::Ecb => self.ecb = !self.ecb,
DebugFlag::BlastZones => self.blast_zones = !self.blast_zones,
DebugFlag::StageCollision => self.stage_collision = !self.stage_collision,
DebugFlag::AnimationBones => self.animation_bones = !self.animation_bones,
DebugFlag::AttackHitboxes => self.attack_hitboxes = !self.attack_hitboxes,
@@ -884,6 +893,10 @@ pub fn stage_collision_enabled(settings: Res<DebugSettings>) -> bool {
settings.stage_collision
}
pub fn blast_zones_enabled(settings: Res<DebugSettings>) -> bool {
settings.blast_zones
}
pub fn animation_bones_enabled(settings: Res<DebugSettings>) -> bool {
settings.animation_bones
}
+29 -1
View File
@@ -1,6 +1,12 @@
use bevy::{color::palettes::css::RED, prelude::*};
use crate::stage::line::StageCollision;
use crate::{
match_loading::MatchConfig,
stage::{
line::StageCollision,
manifest::{StageManifest, StageManifestRegistry},
},
};
pub fn debug_draw_scene(mut gizmos: Gizmos, stage_collision: Res<StageCollision>) {
for poly in stage_collision.stage_polys.iter() {
@@ -16,3 +22,25 @@ pub fn debug_draw_scene(mut gizmos: Gizmos, stage_collision: Res<StageCollision>
}
}
}
pub fn debug_draw_blast_zones(
mut gizmos: Gizmos,
stage_registry: Res<StageManifestRegistry>,
stage_manifests: Res<Assets<StageManifest>>,
match_config: Res<MatchConfig>,
) {
let Some(stage_manifest_handle) = stage_registry.get(match_config.stage) else {
return;
};
let Some(stage_manifest) = stage_manifests.get(&stage_manifest_handle) else {
return;
};
let top_left = stage_manifest.blast_zone_top_left.to_vec2();
let bottom_right = stage_manifest.blast_zone_bottom_right.to_vec2();
let center = (top_left + bottom_right) / 2.0;
let size = (bottom_right - top_left).abs();
gizmos.rect(Vec3::new(center.x, center.y, 0.0), size, bevy::color::palettes::css::BLUE);
}
+7 -6
View File
@@ -7,14 +7,10 @@ use strum::IntoEnumIterator;
use strum_macros::EnumIter;
use crate::{
AppState,
game_settings::GameSettings,
math::vec::FGVec2,
stage::{
AppState, game_settings::GameSettings, math::{int::FGi32, vec::FGVec2}, stage::{
StagePoly,
line::{StageCollision, StagePolyLineSegmentType, StagePolyType},
},
texture_reference::TextureReference,
}, texture_reference::TextureReference,
};
use bevy::prelude::*;
@@ -87,6 +83,11 @@ pub struct StageManifest {
pub icon: TextureReference,
pub camera: StageCameraProfile,
pub polygons: Vec<StagePolyDefinition>,
#[reflect(ignore)]
pub blast_zone_top_left: FGVec2,
#[reflect(ignore)]
pub blast_zone_bottom_right: FGVec2,
}
#[derive(Resource)]
+9 -4
View File
@@ -10,7 +10,7 @@ pub mod scene;
pub use line::{StagePlaneIntersectResult, StagePoly};
use crate::stage::{line::StageCollision, manifest::StageCameraProfile};
use crate::{match_loading::MatchConfig, stage::{line::StageCollision, manifest::StageCameraProfile}};
/// Owns the stage geometry: which scene gets spawned and how it is drawn.
#[derive(Default)]
@@ -20,9 +20,14 @@ impl Plugin for StagePlugin {
fn build(&self, app: &mut App) {
app.add_systems(
Update,
debug::debug_draw_scene
.run_if(resource_exists::<line::StageCollision>)
.run_if(crate::debug_tools::stage_collision_enabled),
(
(debug::debug_draw_scene
.run_if(resource_exists::<line::StageCollision>)
.run_if(crate::debug_tools::stage_collision_enabled)),
(debug::debug_draw_blast_zones
.run_if(resource_exists::<MatchConfig>)
.run_if(crate::debug_tools::blast_zones_enabled),),
),
);
}
}