Attack system revamp (#82)
- Add crouch cancelling - Add IASA for aerial attacks - Add scaffolding for autocancel - Add hitbox group system - Add new ergonomic features for attack scripting - Add more information to the hitbox viewer - Improve the looks of debug capsules Reviewed-on: #82 Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #82.
This commit is contained in:
@@ -139,6 +139,7 @@ pub struct InterruptContext<'a> {
|
||||
pub surface: &'a FighterSurfaceState,
|
||||
pub animation: AnimationStatus,
|
||||
pub stage_collision: &'a StageCollision,
|
||||
pub attack_scripts: &'a Assets<FighterAttackScript>,
|
||||
pub attack_script_assets: &'a FighterAttackScriptAssets,
|
||||
}
|
||||
|
||||
@@ -300,6 +301,7 @@ impl<'w, 's> FighterFrameQueryItem<'w, 's> {
|
||||
baked_animations: &'a Assets<BakedFighterAnimations>,
|
||||
attributes: &'a FighterAttributes,
|
||||
stage_collision: &'a StageCollision,
|
||||
attack_scripts: &'a Assets<FighterAttackScript>,
|
||||
attack_script_assets: &'a FighterAttackScriptAssets,
|
||||
) -> InterruptContext<'a> {
|
||||
let animation = self.animation_status(animations, baked_animations);
|
||||
@@ -312,6 +314,7 @@ impl<'w, 's> FighterFrameQueryItem<'w, 's> {
|
||||
surface: &self.surface,
|
||||
stage_collision,
|
||||
attack_script_assets: attack_script_assets,
|
||||
attack_scripts,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -471,6 +474,7 @@ pub fn state_interrupt_system(
|
||||
game_settings: Res<GameSettings>,
|
||||
baked_animations: Res<Assets<BakedFighterAnimations>>,
|
||||
fighter_manifests: Res<Assets<FighterManifest>>,
|
||||
attack_scripts: Res<Assets<FighterAttackScript>>,
|
||||
stage_collision: Res<StageCollision>,
|
||||
) {
|
||||
for fighter in &mut query {
|
||||
@@ -490,9 +494,9 @@ pub fn state_interrupt_system(
|
||||
.expect("Fighter manifest should be valid");
|
||||
|
||||
let new_state = if let Some(reaction) = pending_hit_reaction.take() {
|
||||
hitstop.remaining_frames = *reaction.hitstop_frames;
|
||||
hitstop.remaining_frames = *reaction.victim_hitstop_frames;
|
||||
let shake_frames = reaction
|
||||
.hitstop_frames
|
||||
.victim_hitstop_frames
|
||||
.calculate_shake_frames(&game_settings);
|
||||
hitstop_shake.role = FighterHitstopShakeRole::Receiver;
|
||||
hitstop_shake.total_frames = shake_frames;
|
||||
@@ -511,7 +515,7 @@ pub fn state_interrupt_system(
|
||||
|
||||
if let hitstun::HitstopStateKind::Grounded = hitstop_kind {
|
||||
let straight_up_angle = FGi32::lit("90.0");
|
||||
if reaction.hitstop_frames
|
||||
if reaction.victim_hitstop_frames
|
||||
>= HitStop::new(game_settings.fighter_common.tumble_bounce_hitstop_threshold)
|
||||
{
|
||||
hitstop_kind = hitstun::HitstopStateKind::Airborne;
|
||||
@@ -547,6 +551,7 @@ pub fn state_interrupt_system(
|
||||
&baked_animations,
|
||||
&manifest.attributes,
|
||||
&stage_collision,
|
||||
&attack_scripts,
|
||||
attack_script_assets,
|
||||
))
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user