Add pulsing effect when invulnerable/intangible, make airdodge make the player intangible. (#75)
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:
@@ -169,6 +169,8 @@ mod tests {
|
||||
air_dodge_duration: 0,
|
||||
air_dodge_velocity: FGi32::ZERO,
|
||||
air_dodge_decay: FGi32::ZERO,
|
||||
air_dodge_intangible_duration: 29,
|
||||
air_dodge_intangible_start: 4,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
use crate::{
|
||||
fighter::{
|
||||
animation::AnimKind,
|
||||
state::{
|
||||
FighterInvulnerabilityState, animation::AnimKind, state::{
|
||||
CollisionContext, EnterContext, FighterState, FighterStateImpl, InterruptContext,
|
||||
UpdateContext,
|
||||
air::{self, AirborneStateCommon},
|
||||
fall::FallState,
|
||||
land::LandingType,
|
||||
},
|
||||
},
|
||||
input,
|
||||
math::vec::FGVec2,
|
||||
}, input, math::vec::FGVec2,
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone, Hash)]
|
||||
@@ -32,6 +29,12 @@ impl FighterStateImpl for AirDodgeState {
|
||||
}
|
||||
|
||||
fn update(&mut self, state_context: &mut UpdateContext) {
|
||||
let airdodge_intangible_end = state_context.fighter_attributes.air_dodge_intangible_start + state_context.fighter_attributes.air_dodge_intangible_duration;
|
||||
if state_context.animation_frame == state_context.fighter_attributes.air_dodge_intangible_start {
|
||||
*state_context.vulnerability = FighterInvulnerabilityState::Intangible;
|
||||
} else if state_context.animation_frame >= airdodge_intangible_end {
|
||||
*state_context.vulnerability = FighterInvulnerabilityState::Vulnerable;
|
||||
}
|
||||
state_context.velocity.0 *= state_context.fighter_attributes.air_dodge_decay;
|
||||
|
||||
air::apply_air_motion(
|
||||
@@ -62,6 +65,14 @@ impl FighterStateImpl for AirDodgeState {
|
||||
fn surface_policy(&self) -> super::SurfacePolicy {
|
||||
super::SurfacePolicy::Airborne(crate::fighter::surface::EcbLockPolicy::StartOnDetach)
|
||||
}
|
||||
|
||||
fn on_exit(&mut self, state_context: &mut super::ExitContext) {
|
||||
*state_context.vulnerability = FighterInvulnerabilityState::Vulnerable;
|
||||
}
|
||||
|
||||
fn name(&self) -> String {
|
||||
Self::NAME.to_owned()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn check_input(state_context: &InterruptContext) -> Option<FighterState> {
|
||||
|
||||
@@ -18,10 +18,7 @@ use crate::fighter::state::hitstun::HitstunState;
|
||||
use crate::fighter::surface::EcbLockPolicy;
|
||||
use crate::fighter::visual::FighterAnimations;
|
||||
use crate::fighter::{
|
||||
Fighter, FighterECB, FighterFacingDirection, FighterHitboxes, FighterHitstop,
|
||||
FighterHitstopShake, FighterHitstopShakeKind, FighterHitstopShakeRole, FighterPendingRespawn,
|
||||
FighterPresentationSnap, FighterPreviousTranslation, FighterSurfaceState, FighterTranslation,
|
||||
FighterVelocity, FighterDamage,
|
||||
Fighter, FighterDamage, FighterECB, FighterFacingDirection, FighterHitboxes, FighterHitstop, FighterHitstopShake, FighterHitstopShakeKind, FighterHitstopShakeRole, FighterInvulnerabilityState, FighterPendingRespawn, FighterPresentationSnap, FighterPreviousTranslation, FighterSurfaceState, FighterTranslation, FighterVelocity,
|
||||
};
|
||||
use crate::game_settings::GameSettings;
|
||||
use crate::input::FighterInput;
|
||||
@@ -173,6 +170,7 @@ impl EnterContext<'_> {
|
||||
pub struct ExitContext<'a> {
|
||||
pub hitboxes: &'a mut FighterHitboxes,
|
||||
pub surface: &'a mut FighterSurfaceState,
|
||||
pub vulnerability: &'a mut FighterInvulnerabilityState,
|
||||
}
|
||||
|
||||
pub struct UpdateContext<'a> {
|
||||
@@ -183,6 +181,7 @@ pub struct UpdateContext<'a> {
|
||||
pub velocity: &'a mut FighterVelocity,
|
||||
pub surface: &'a mut FighterSurfaceState,
|
||||
pub knockback_velocity: &'a mut FighterKnockbackVelocity,
|
||||
pub vulnerability: &'a mut FighterInvulnerabilityState,
|
||||
pub game_settings: &'a GameSettings,
|
||||
pub animation_frame: u32,
|
||||
pub fighter_attributes: &'a FighterAttributes,
|
||||
@@ -265,6 +264,7 @@ pub struct FighterFrameQuery {
|
||||
pub prev_ecb: &'static FighterPreviousECB,
|
||||
pub facing_direction: &'static mut FighterFacingDirection,
|
||||
pub animation_frame: &'static mut FighterAnimationFrame,
|
||||
pub vulnerability: &'static mut FighterInvulnerabilityState,
|
||||
pub fighter: &'static Fighter,
|
||||
}
|
||||
|
||||
@@ -330,6 +330,7 @@ impl<'w, 's> FighterFrameQueryItem<'w, 's> {
|
||||
ExitContext {
|
||||
hitboxes: &mut self.hitboxes,
|
||||
surface: &mut self.surface,
|
||||
vulnerability: &mut self.vulnerability,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,6 +351,7 @@ impl<'w, 's> FighterFrameQueryItem<'w, 's> {
|
||||
knockback_velocity: &mut self.knockback_velocity,
|
||||
game_settings,
|
||||
animation_frame: self.animation_frame.frame,
|
||||
vulnerability: &mut self.vulnerability,
|
||||
fighter_attributes: attributes,
|
||||
attack_scripts,
|
||||
attack_script_assets,
|
||||
|
||||
Reference in New Issue
Block a user