Implement damage UI, damage and stale moves. #45

Merged
EIREXE merged 6 commits from damage_ui into master 2026-09-19 15:40:44 +00:00
3 changed files with 24 additions and 4 deletions
Showing only changes of commit 31f400f7fb - Show all commits
+22 -4
View File
@@ -1,3 +1,5 @@
use std::collections::HashSet;
use bevy::prelude::*;
use bevy_ggrs::prelude::GgrsSchedule;
@@ -11,9 +13,9 @@ use crate::{
pub fn resolve_fighter_hits(
mut pending_hits: ResMut<FighterPendingHits>,
mut attacker: Query<(
&FighterStaleMoveQueue,
&mut FighterStaleMoveQueue,
&FighterFacingDirection,
&FighterHitboxes,
&mut FighterHitboxes,
&Player,
&mut FighterHitstop,
&mut FighterHitstopShake,
@@ -26,6 +28,8 @@ pub fn resolve_fighter_hits(
let hits = std::mem::take(&mut pending_hits.0);
let mut hit_offset = 0;
let mut stalled_attackers = HashSet::<Entity>::new();
while hit_offset < hits.len() {
let defender = hits[hit_offset].defender;
let next_defender = hits[hit_offset..]
@@ -42,7 +46,7 @@ pub fn resolve_fighter_hits(
let damage_data = hits[hit_offset..next_defender]
.iter()
.filter_map(|hit| {
let Ok((stale_move_queue, facing_dir, _hitboxes, player, _, _)) =
let Ok((stale_move_queue, facing_dir, _, player, _, _)) =
attacker.get(hit.attacker)
else {
return None;
@@ -91,6 +95,8 @@ pub fn resolve_fighter_hits(
angle
};
// Attacker hitstop and data
stalled_attackers.insert(attacker_entity);
let hitstop = HitStop::calculate(FighterDamage(attack_damage), false);
reactions.push((
attacker_entity,
@@ -109,7 +115,7 @@ pub fn resolve_fighter_hits(
receiver_damage.0 += total_damage_received_this_frame;
for (attacker_entity, _, reaction) in &reactions {
let Ok((.., mut hitstop, mut hitstop_shake)) = attacker.get_mut(*attacker_entity) else {
let Ok((.., _, mut hitstop, mut hitstop_shake)) = attacker.get_mut(*attacker_entity) else {
continue;
};
@@ -136,6 +142,18 @@ pub fn resolve_fighter_hits(
hit_offset = next_defender;
}
for hit in hits {
let Ok((mut stale_move_queue, _facing_direction, mut hitboxes, ..)) = attacker.get_mut(hit.attacker) else {
continue;
};
if let Some(ref mut hitbox) = hitboxes.0 {
if !hitbox.stalled {
stale_move_queue.push(hitbox.kind);
}
}
}
Ok(())
}
+1
View File
@@ -259,6 +259,7 @@ pub struct FighterActiveAttack {
pub active_hitboxes: Vec<usize>,
pub solved_hitboxes: Vec<attack::FighterSolvedHitbox>,
pub hit_fighters: Vec<Entity>,
pub stalled: bool
}
#[derive(Component, Clone, Debug, Default, Hash)]
+1
View File
@@ -53,6 +53,7 @@ impl FighterStateImpl for GroundAttackState {
active_hitboxes: Vec::new(),
solved_hitboxes: Vec::new(),
hit_fighters: Vec::new(),
stalled: false
});
}