Specify ground to air transitions and thresholds (#41)
CI / build-and-test (push) Successful in 1m10s
CI / build-and-test (push) Successful in 1m10s
Reviewed-on: #41 Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #41.
This commit is contained in:
@@ -7,8 +7,7 @@ use bevy::prelude::*;
|
||||
|
||||
use crate::fighter::animation::{AnimKind, FighterAnimationFrame};
|
||||
use crate::fighter::attack::{
|
||||
FighterAttackScriptAssets, FighterKnockbackVelocity, FighterPendingHitReaction,
|
||||
FighterStaleMoveQueue,
|
||||
FighterAttackScriptAssets, FighterKnockbackVelocity, FighterPendingHitReaction, FighterStaleMoveQueue, HitStop,
|
||||
};
|
||||
use crate::fighter::attributes::FighterAttributes;
|
||||
use crate::fighter::baked_animation::BakedFighterAnimations;
|
||||
@@ -22,6 +21,7 @@ use crate::fighter::{
|
||||
};
|
||||
use crate::game_settings::GameSettings;
|
||||
use crate::input::FighterInput;
|
||||
use crate::math::int::FGi32;
|
||||
use crate::scripting::FighterAttackScript;
|
||||
use crate::stage::line::StageCollision;
|
||||
|
||||
@@ -391,7 +391,7 @@ pub fn state_interrupt_system(
|
||||
|
||||
let new_state = if let Some(reaction) = pending_hit_reaction.take() {
|
||||
hitstop.remaining_frames = *reaction.hitstop_frames;
|
||||
let hitstop_kind = match &*state {
|
||||
let mut hitstop_kind = match &*state {
|
||||
FighterState::Wait(value) => {
|
||||
hitstun::HitstopStateKind::Grounded(value.grounded_common.clone())
|
||||
}
|
||||
@@ -412,6 +412,26 @@ pub fn state_interrupt_system(
|
||||
}
|
||||
_ => hitstun::HitstopStateKind::Airborne,
|
||||
};
|
||||
|
||||
if let hitstun::HitstopStateKind::Grounded(_) = hitstop_kind {
|
||||
let straight_up_angle = FGi32::lit("90.0");
|
||||
if reaction.hitstop_frames >= HitStop::new(game_settings.fighter_common.tumble_bounce_hitstop_threshold) {
|
||||
hitstop_kind = hitstun::HitstopStateKind::Airborne;
|
||||
// TODO: Use floor normal here
|
||||
} else if reaction.launch_angle.abs_diff(straight_up_angle) < game_settings.fighter_common.attack_ground_to_airborne_transition_vertical_angle_threshold {
|
||||
hitstop_kind = hitstun::HitstopStateKind::Airborne;
|
||||
} else {
|
||||
// straight down is 270
|
||||
let straight_down_angle = FGi32::lit("270.0");
|
||||
let meteor_threshold = game_settings.fighter_common.meteor_angle_threshold;
|
||||
if (reaction.launch_angle - straight_down_angle).abs() <= meteor_threshold {
|
||||
// TODO: Floor bounce
|
||||
hitstop_kind = hitstun::HitstopStateKind::Airborne;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
info!("Entering hitstop kind: {:?}", hitstop_kind);
|
||||
Some(FighterState::Hitstun(HitstunState {
|
||||
hit_reaction: reaction,
|
||||
hitstop_kind,
|
||||
|
||||
Reference in New Issue
Block a user