Add shifting ECB based on bone positions (melee-like)
CI / build-and-test (pull_request) Successful in 1m33s
CI / production-build (pull_request) Successful in 10m48s

This commit is contained in:
2026-09-25 15:45:55 +02:00
parent d521461625
commit 0cb81ec2e9
17 changed files with 317 additions and 115 deletions
+10 -20
View File
@@ -34,24 +34,13 @@ pub use motion::{
pub use surface::FighterSurfaceState;
use crate::{
AppState,
fighter::{
AppState, fighter::{
attack::{
AttackKind, FighterAttackPlugin, FighterAttackScriptAssets, FighterDamage,
FighterKnockbackVelocity, FighterPendingHitReaction, FighterSolvedHurtboxes,
FighterStaleMoveQueue,
},
baked_animation::{FighterBoneIndexMap, FighterBoneMatrices},
manifest::FighterManifest,
state::{FighterState, air::AirborneStateCommon, fall::FallState},
visual::FighterAnimations,
},
input::FighterInput,
math::{int::FGi32, vec::FGVec2},
player::Player,
schedule::GameplaySet,
scripting::FighterAttackScript,
stage::line::StageCollision,
}, baked_animation::{FighterBoneIndexMap, FighterBoneMatrices}, ecb::FighterECBBoneIndices, manifest::FighterManifest, state::{FighterState, air::AirborneStateCommon, fall::FallState}, visual::FighterAnimations,
}, input::FighterInput, math::{int::FGi32, vec::FGVec2}, player::Player, schedule::GameplaySet, scripting::FighterAttackScript, stage::line::StageCollision,
};
use state::state_interrupt_system;
@@ -182,7 +171,7 @@ impl Plugin for FighterPlugin {
)*/
.add_systems(
GgrsSchedule,
state::state_collision_interrupt_system.in_set(GameplaySet::Collision),
(ecb::update_ecb, state::state_collision_interrupt_system, ecb::decrement_ecb_lockout).chain().in_set(GameplaySet::Collision),
)
.add_systems(
Update,
@@ -286,6 +275,7 @@ pub fn spawn_fighter(
animations: FighterAnimations,
attack_scripts: FighterAttackScriptAssets,
visual_root: WorldAssetRoot,
ecb_bone_indices: Vec<usize>,
) -> Entity {
commands
.spawn((
@@ -296,14 +286,14 @@ pub fn spawn_fighter(
Fighter { manifest: manifest },
FighterFacingDirection::Right,
FighterPreviousFacingDirection(FighterFacingDirection::Right),
FighterSurfaceState::Airborne,
FighterSurfaceState::default(),
Transform::from_scale(Vec3::splat(model_scale.to_num())),
(
FighterECB {
vertical_half: FGi32::lit("5.0"),
horizontal_half: FGi32::lit("2.5"),
},
FighterECB::default(),
FighterHitboxes::default(),
FighterECBBoneIndices {
indices: ecb_bone_indices
}
),
(
FighterVelocity::default(),