Reviewed-on: #42 Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #42.
This commit is contained in:
@@ -16,8 +16,7 @@ use crate::fighter::manifest::FighterManifest;
|
||||
use crate::fighter::state::hitstun::HitstunState;
|
||||
use crate::fighter::visual::FighterAnimations;
|
||||
use crate::fighter::{
|
||||
Fighter, FighterECB, FighterFacingDirection, FighterHitboxes, FighterHitstop,
|
||||
FighterPreviousTranslation, FighterTranslation, FighterVelocity,
|
||||
Fighter, FighterECB, FighterFacingDirection, FighterHitboxes, FighterHitstop, FighterHitstopShake, FighterHitstopShakeKind, FighterHitstopShakeRole, FighterPreviousTranslation, FighterTranslation, FighterVelocity,
|
||||
};
|
||||
use crate::game_settings::GameSettings;
|
||||
use crate::input::FighterInput;
|
||||
@@ -66,6 +65,10 @@ macro_rules! fighter_states {
|
||||
pub fn check_collision_interrupt(&mut self, ctx: &mut CollisionContext) -> Option<FighterState> {
|
||||
match self { $(Self::$variant(s) => s.check_collision_interrupt(ctx)),* }
|
||||
}
|
||||
|
||||
pub fn is_visually_grounded(&self) -> bool {
|
||||
match self { $(Self::$variant(s) => s.is_visually_grounded()),* }
|
||||
}
|
||||
}
|
||||
|
||||
$(impl From<$ty> for FighterState {
|
||||
@@ -91,6 +94,10 @@ pub trait FighterStateImpl: Sized {
|
||||
) -> Option<FighterState> {
|
||||
None
|
||||
}
|
||||
|
||||
fn is_visually_grounded<'a>(
|
||||
&'a self,
|
||||
) -> bool;
|
||||
}
|
||||
|
||||
pub struct AnimationStatus {
|
||||
@@ -320,6 +327,7 @@ pub struct StatefulFighterQuery {
|
||||
pub attack_script_assets: &'static FighterAttackScriptAssets,
|
||||
pub pending_hit_reaction: &'static mut FighterPendingHitReaction,
|
||||
pub hitstop: &'static mut FighterHitstop,
|
||||
pub hitstop_shake: &'static mut FighterHitstopShake,
|
||||
}
|
||||
|
||||
pub fn state_update_system(
|
||||
@@ -384,6 +392,7 @@ pub fn state_interrupt_system(
|
||||
attack_script_assets,
|
||||
mut pending_hit_reaction,
|
||||
mut hitstop,
|
||||
mut hitstop_shake,
|
||||
} = fighter;
|
||||
let manifest = fighter_manifests
|
||||
.get(&fighter.manifest)
|
||||
@@ -391,6 +400,16 @@ pub fn state_interrupt_system(
|
||||
|
||||
let new_state = if let Some(reaction) = pending_hit_reaction.take() {
|
||||
hitstop.remaining_frames = *reaction.hitstop_frames;
|
||||
let shake_frames = reaction.hitstop_frames.calculate_shake_frames(&game_settings);
|
||||
hitstop_shake.role = FighterHitstopShakeRole::Receiver;
|
||||
hitstop_shake.total_frames = shake_frames;
|
||||
hitstop_shake.remaining_frames = shake_frames;
|
||||
hitstop_shake.kind = if state.is_visually_grounded() {
|
||||
FighterHitstopShakeKind::Horizontal
|
||||
} else {
|
||||
FighterHitstopShakeKind::Vertical
|
||||
};
|
||||
|
||||
let mut hitstop_kind = match &*state {
|
||||
FighterState::Wait(value) => {
|
||||
hitstun::HitstopStateKind::Grounded(value.grounded_common.clone())
|
||||
|
||||
Reference in New Issue
Block a user