Fix bone resampling breaking hitbox interpolation (#73)
CI / build-and-test (push) Successful in 1m57s
CI / production-build (push) Successful in 11m37s

Reviewed-on: #73
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #73.
This commit is contained in:
2026-09-27 15:52:42 +00:00
committed by EIREXE
parent 6f1d8a7706
commit e02dff58e5
3 changed files with 132 additions and 25 deletions
+26 -1
View File
@@ -8,7 +8,7 @@ pub use crate::math::fixed_transform::FixedMat4;
pub use asset_baking::{BakedAnimationAssetProcessingPlugin, BakedAnimationPlugin};
pub use runtime::{
BakedAnimationClip, BakedFighterAnimations, FighterBoneIndexMap, FighterBoneMatrices,
update_fighter_bone_matrices,
resample_fighter_bone_matrices, update_fighter_bone_matrices,
};
pub const BAKED_ANIMATION_FPS: u32 = 60;
@@ -275,6 +275,31 @@ mod tests {
assert_eq!(capacities, matrices.buffer_capacities());
}
#[test]
fn same_frame_resample_preserves_previous_gameplay_pose() {
let names = ["root".into()];
let parents = [None];
let mut pose_a = FixedMat4::IDENTITY;
pose_a.translate(FGVec3::lit("1", "0", "0"));
let mut pose_b = FixedMat4::IDENTITY;
pose_b.translate(FGVec3::lit("2", "0", "0"));
let mut snapped_pose = FixedMat4::IDENTITY;
snapped_pose.translate(FGVec3::lit("3", "0", "0"));
let mut matrices = FighterBoneMatrices::default();
matrices.set_pose(AnimKind::Wait, &names, &parents, &[pose_a], FGi32::ONE);
matrices.set_pose(AnimKind::Wait, &names, &parents, &[pose_b], FGi32::ONE);
matrices.resample_pose(
AnimKind::Landing,
&names,
&parents,
&[snapped_pose],
FGi32::ONE,
);
assert_eq!(matrices.get_index(0), Some((pose_a, snapped_pose)));
}
#[test]
fn model_scale_affects_gameplay_bones_without_changing_visual_locals() {
let mut root = FixedMat4::IDENTITY;