diff --git a/src/fighter/mod.rs b/src/fighter/mod.rs index b1b4ec8..922e0bc 100644 --- a/src/fighter/mod.rs +++ b/src/fighter/mod.rs @@ -201,7 +201,9 @@ impl Plugin for FighterPlugin { ) .add_systems( GgrsSchedule, - push::apply_grounded_pushes.in_set(GameplaySet::Physics), + push::apply_grounded_pushes + .before(state::state_update_system) + .in_set(GameplaySet::StateUpdate), ) .add_systems( PostUpdate, diff --git a/src/fighter/push.rs b/src/fighter/push.rs index 934594c..9c10800 100644 --- a/src/fighter/push.rs +++ b/src/fighter/push.rs @@ -75,13 +75,12 @@ fn calculate_push_deltas( pub fn apply_grounded_pushes( roster: Res, - fighters: Query<( + mut fighters: Query<( &Fighter, - &FighterTranslation, + &mut FighterTranslation, &FighterFacingDirection, &FighterSurfaceState, )>, - mut translations: Query<&mut FighterTranslation>, manifests: Res>, settings: Res, stage: Res, @@ -115,7 +114,7 @@ pub fn apply_grounded_pushes( if delta == FGi32::ZERO { continue; } - if let Ok(mut translation) = translations.get_mut(*entity) { + if let Ok((_, mut translation, _, _)) = fighters.get_mut(*entity) { translation.x += delta; } } @@ -135,6 +134,7 @@ mod tests { (FGVec2::lit("0", "0"), StagePolyLineSegmentType::Floor), (FGVec2::lit("10", "0"), StagePolyLineSegmentType::Floor), (FGVec2::lit("20", "0"), StagePolyLineSegmentType::Floor), + (FGVec2::lit("30", "0"), StagePolyLineSegmentType::Floor), ], )], } @@ -204,4 +204,13 @@ mod tests { vec![FGi32::lit("-0.6"), FGi32::ZERO, FGi32::lit("0.6")] ); } + + #[test] + fn system_parameters_initialize_without_query_conflicts() { + let mut world = World::new(); + let mut schedule = Schedule::default(); + schedule.add_systems(apply_grounded_pushes); + + schedule.initialize(&mut world).unwrap(); + } }