Fix fighter visuals after landing snap (#67)
## Summary - Mark landing position corrections as presentation discontinuities. - Render and frame fighters from the current position for the snap frame. - Keep previous translation history unchanged for gameplay collision and attack logic. Reviewed-on: #67 Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #67.
This commit is contained in:
@@ -123,6 +123,7 @@ pub fn collision_interrupt(
|
||||
ctx.ecb.left -= diff;
|
||||
ctx.ecb.right -= diff;
|
||||
ctx.translation.0 = res.hit_position;
|
||||
ctx.presentation_snap.0 = true;
|
||||
ctx.surface.land(res.line_id);
|
||||
Some(FighterState::Land(LandingState::create(landing_type)))
|
||||
}
|
||||
|
||||
@@ -376,6 +376,7 @@ mod tests {
|
||||
right: FGVec2::lit("0.5", "0.0"),
|
||||
};
|
||||
let previous_ecb = FighterPreviousECB::from(ecb);
|
||||
let mut presentation_snap = crate::fighter::FighterPresentationSnap::default();
|
||||
let mut context = CollisionContext {
|
||||
translation: &mut translation,
|
||||
prev_translation: &previous_translation,
|
||||
@@ -386,6 +387,7 @@ mod tests {
|
||||
prev_ecb: &previous_ecb,
|
||||
stage_collision: &stage_collision,
|
||||
leave_ground_ecb_lock_duration: 10,
|
||||
presentation_snap: &mut presentation_snap,
|
||||
downward_stick_threshold: FGi32::ONE,
|
||||
};
|
||||
|
||||
@@ -429,6 +431,7 @@ mod tests {
|
||||
right: FGVec2::lit("0.5", "0.0"),
|
||||
};
|
||||
let previous_ecb = FighterPreviousECB::from(ecb);
|
||||
let mut presentation_snap = crate::fighter::FighterPresentationSnap::default();
|
||||
let mut context = CollisionContext {
|
||||
translation: &mut translation,
|
||||
prev_translation: &previous_translation,
|
||||
@@ -439,6 +442,7 @@ mod tests {
|
||||
prev_ecb: &previous_ecb,
|
||||
stage_collision: &stage_collision,
|
||||
leave_ground_ecb_lock_duration: 10,
|
||||
presentation_snap: &mut presentation_snap,
|
||||
downward_stick_threshold: FGi32::ONE,
|
||||
};
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ use crate::fighter::{
|
||||
Fighter, FighterECB, FighterFacingDirection, FighterHitboxes, FighterHitstop,
|
||||
FighterHitstopShake, FighterHitstopShakeKind, FighterHitstopShakeRole,
|
||||
FighterPreviousTranslation, FighterSurfaceState, FighterTranslation, FighterVelocity,
|
||||
FighterPresentationSnap,
|
||||
};
|
||||
use crate::fighter::surface::EcbLockPolicy;
|
||||
use crate::game_settings::GameSettings;
|
||||
@@ -200,6 +201,7 @@ pub struct CollisionContext<'a> {
|
||||
pub prev_ecb: &'a FighterPreviousECB,
|
||||
pub stage_collision: &'a StageCollision,
|
||||
pub leave_ground_ecb_lock_duration: u32,
|
||||
pub presentation_snap: &'a mut FighterPresentationSnap,
|
||||
pub downward_stick_threshold: FGi32,
|
||||
}
|
||||
|
||||
@@ -244,6 +246,7 @@ fighter_states! {
|
||||
pub struct FighterFrameQuery {
|
||||
pub translation: &'static mut FighterTranslation,
|
||||
pub prev_translation: &'static mut FighterPreviousTranslation,
|
||||
pub presentation_snap: &'static mut FighterPresentationSnap,
|
||||
pub input: &'static mut FighterInput,
|
||||
pub hitboxes: &'static mut FighterHitboxes,
|
||||
pub velocity: &'static mut FighterVelocity,
|
||||
@@ -354,6 +357,7 @@ impl<'w, 's> FighterFrameQueryItem<'w, 's> {
|
||||
CollisionContext {
|
||||
translation: &mut self.translation,
|
||||
prev_translation: &self.prev_translation,
|
||||
presentation_snap: &mut self.presentation_snap,
|
||||
input: &self.input,
|
||||
velocity: &mut self.velocity,
|
||||
surface: &mut self.surface,
|
||||
|
||||
Reference in New Issue
Block a user