Add pulsing effect when invulnerable/intangible, make airdodge make the player intangible. (#75)
CI / build-and-test (push) Successful in 2m3s
CI / production-build (push) Successful in 15m42s

Reviewed-on: #75
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #75.
This commit is contained in:
2026-09-28 15:44:50 +00:00
committed by EIREXE
parent ccf2657d29
commit 3af36c4bc8
14 changed files with 311 additions and 43 deletions
+18 -3
View File
@@ -41,8 +41,8 @@ use crate::{
AttackKind, FighterAttackPlugin, FighterAttackScriptAssets, FighterDamage,
FighterKnockbackVelocity, FighterPendingHitReaction, FighterSolvedHurtboxes,
FighterStaleMoveQueue,
}, baked_animation::{FighterBoneIndexMap, FighterBoneMatrices}, ecb::FighterECBBoneIndices, manifest::FighterManifest, state::{FighterState, air::AirborneStateCommon, fall::FallState}, visual::FighterAnimations,
}, input::FighterInput, math::{int::FGi32, vec::FGVec2}, player::Player, schedule::GameplaySet, scripting::FighterAttackScript, stage::line::StageCollision,
}, baked_animation::{FighterBoneIndexMap, FighterBoneMatrices}, ecb::FighterECBBoneIndices, manifest::FighterManifest, state::{FighterState, air::AirborneStateCommon, fall::FallState}, visual::{FighterAnimations, FighterInvulnerabilityVisualState},
}, game_settings::GameSettings, input::FighterInput, math::{int::FGi32, vec::FGVec2}, player::Player, schedule::GameplaySet, scripting::FighterAttackScript, stage::line::StageCollision,
};
use state::state_interrupt_system;
@@ -85,6 +85,14 @@ pub struct FighterHitstop {
pub remaining_frames: u32,
}
#[derive(Component, Default, Copy, Clone, Hash, PartialEq, Eq)]
pub enum FighterInvulnerabilityState {
#[default]
Vulnerable,
Invulnerable,
Intangible
}
impl FighterFacingDirection {
fn reverse(&self) -> Self {
match self {
@@ -140,7 +148,9 @@ pub struct FighterPendingRespawn(bool);
FighterPendingRespawn,
FighterHitstop,
FighterKnockbackVelocity,
FighterTranslation
FighterTranslation,
FighterInvulnerabilityState,
FighterInvulnerabilityVisualState,
)]
pub struct Fighter {
pub manifest: Handle<FighterManifest>,
@@ -229,6 +239,8 @@ impl Plugin for FighterPlugin {
.checksum_component_with_hash::<FighterPendingRespawn>()
.rollback_component_with_copy::<FighterHitstop>()
.checksum_component_with_hash::<FighterHitstop>()
.rollback_component_with_copy::<FighterInvulnerabilityState>()
.checksum_component_with_hash::<FighterInvulnerabilityState>()
.rollback_component_with_copy::<FighterKnockbackVelocity>()
.checksum_component_with_hash::<FighterKnockbackVelocity>()
.rollback_resource_with_reflect::<StageCollision>()
@@ -256,6 +268,9 @@ impl Plugin for FighterPlugin {
.run_if(crate::debug_tools::attack_hitboxes_enabled)
.run_if(in_state(AppState::InMatch)),
)
.add_systems(FixedPostUpdate,
visual::update_status_colors.run_if(resource_exists::<GameSettings>)
)
.add_systems(
FixedPostUpdate,
debug::hurtbox_debug.run_if(crate::debug_tools::hurtboxes_enabled),