Files
shinespark/src/stage/debug.rs
T
EIREXE 9b974d0dd6
CI / build-and-test (push) Successful in 2m15s
CI / production-build (push) Successful in 12m24s
Initial work on ledge & improved baking of root motion. (#90)
Reviewed-on: #90
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
2026-10-12 20:58:27 +00:00

87 lines
2.9 KiB
Rust

use bevy::{color::palettes::css::RED, prelude::*};
use crate::{
match_loading::MatchConfig, math::{int::FGi32, vec3::FGVec3}, stage::{
line::{StageCollision, StageLedgeSide},
manifest::{StageManifest, StageManifestRegistry},
},
};
pub fn debug_draw_scene(mut gizmos: Gizmos, stage_collision: Res<StageCollision>) {
for poly in stage_collision.stage_polys.iter() {
for segment in &poly.segments {
let from = segment.segment.point1().to_vec2();
let to = segment.segment.point2().to_vec2();
let from_3d = Vec3::new(from.x, from.y, 0.0);
let end_3d = Vec3::new(to.x, to.y, 0.0);
let normal_3d = Vec3::new(segment.normal.x.to_num(), segment.normal.y.to_num(), 0.0);
gizmos.line(from_3d, end_3d, RED);
let midpoint = (from_3d + end_3d) * 0.5;
gizmos.arrow(midpoint, midpoint + normal_3d, RED);
}
}
for ledge in &stage_collision.ledges {
let position = ledge.position.to_vec2().extend(0.0);
let direction = match ledge.hang_side {
StageLedgeSide::Left => Vec3::NEG_X,
StageLedgeSide::Right => Vec3::X,
};
gizmos.circle(position, 1.5, bevy::color::palettes::css::LIME);
gizmos.arrow(
position,
position + direction * 4.0,
bevy::color::palettes::css::LIME,
);
}
}
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,
);
}
pub fn debug_draw_spawn_positions(
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;
};
for spawn_point in stage_manifest.spawn_points.iter() {
gizmos.cross(FGVec3::new(spawn_point.x, spawn_point.y, FGi32::ZERO).to_vec3(), 2.0, bevy::color::palettes::css::BLUE);
}
for respawn_point in stage_manifest.respawn_points.iter() {
gizmos.cross(FGVec3::new(respawn_point.x, respawn_point.y, FGi32::ZERO).to_vec3(), 2.0, bevy::color::palettes::css::HOT_PINK);
}
}