Implement being able to drop through soft platforms (#64)
Reviewed-on: #64 Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #64.
This commit is contained in:
@@ -42,6 +42,7 @@ pub mod turn;
|
||||
pub mod wait;
|
||||
pub mod walk;
|
||||
pub mod crouch;
|
||||
pub mod platform_pass;
|
||||
|
||||
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
|
||||
pub enum SurfacePolicy {
|
||||
@@ -127,7 +128,9 @@ pub struct InterruptContext<'a> {
|
||||
pub facing_direction: &'a mut FighterFacingDirection,
|
||||
pub game_settings: &'a GameSettings,
|
||||
pub fighter_attributes: &'a FighterAttributes,
|
||||
pub surface: &'a FighterSurfaceState,
|
||||
pub animation: AnimationStatus,
|
||||
pub stage_collision: &'a StageCollision,
|
||||
}
|
||||
|
||||
impl InterruptContext<'_> {
|
||||
@@ -148,8 +151,10 @@ pub struct EnterContext<'a> {
|
||||
pub stale_move_queue: &'a mut FighterStaleMoveQueue,
|
||||
pub facing_direction: &'a mut FighterFacingDirection,
|
||||
pub animation_frame: &'a mut FighterAnimationFrame,
|
||||
pub surface: &'a mut FighterSurfaceState,
|
||||
pub fighter_attributes: &'a FighterAttributes,
|
||||
pub attack_script_assets: &'a FighterAttackScriptAssets,
|
||||
pub game_settings: &'a GameSettings,
|
||||
}
|
||||
|
||||
impl EnterContext<'_> {
|
||||
@@ -160,6 +165,7 @@ impl EnterContext<'_> {
|
||||
|
||||
pub struct ExitContext<'a> {
|
||||
pub hitboxes: &'a mut FighterHitboxes,
|
||||
pub surface: &'a mut FighterSurfaceState,
|
||||
}
|
||||
|
||||
pub struct UpdateContext<'a> {
|
||||
@@ -214,6 +220,7 @@ impl CollisionContext<'_> {
|
||||
fighter_states! {
|
||||
Wait => wait::WaitState,
|
||||
Walk => walk::WalkState,
|
||||
PlatformPass => platform_pass::PlatformPassState,
|
||||
Crouch => crouch::CrouchState,
|
||||
Dash => dash::DashState,
|
||||
Run => run::RunState,
|
||||
@@ -268,6 +275,7 @@ impl<'w, 's> FighterFrameQueryItem<'w, 's> {
|
||||
animations: &'a FighterAnimations,
|
||||
baked_animations: &'a Assets<BakedFighterAnimations>,
|
||||
attributes: &'a FighterAttributes,
|
||||
stage_collision: &'a StageCollision,
|
||||
) -> InterruptContext<'a> {
|
||||
let animation = self.animation_status(animations, baked_animations);
|
||||
InterruptContext {
|
||||
@@ -276,6 +284,8 @@ impl<'w, 's> FighterFrameQueryItem<'w, 's> {
|
||||
game_settings,
|
||||
fighter_attributes: attributes,
|
||||
animation,
|
||||
surface: &self.surface,
|
||||
stage_collision,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,6 +293,7 @@ impl<'w, 's> FighterFrameQueryItem<'w, 's> {
|
||||
&'a mut self,
|
||||
attributes: &'a FighterAttributes,
|
||||
attack_script_assets: &'a FighterAttackScriptAssets,
|
||||
game_settings: &'a GameSettings,
|
||||
) -> EnterContext<'a> {
|
||||
EnterContext {
|
||||
input: &mut self.input,
|
||||
@@ -292,14 +303,17 @@ impl<'w, 's> FighterFrameQueryItem<'w, 's> {
|
||||
stale_move_queue: &mut self.stale_move_queue,
|
||||
facing_direction: &mut self.facing_direction,
|
||||
animation_frame: &mut self.animation_frame,
|
||||
surface: &mut self.surface,
|
||||
fighter_attributes: attributes,
|
||||
attack_script_assets,
|
||||
game_settings
|
||||
}
|
||||
}
|
||||
|
||||
fn exit_context(&mut self) -> ExitContext<'_> {
|
||||
ExitContext {
|
||||
hitboxes: &mut self.hitboxes,
|
||||
surface: &mut self.surface,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -407,7 +421,7 @@ fn transition_state(
|
||||
game_settings.fighter_common.leave_ground_ecb_frame_lock_duration,
|
||||
);
|
||||
}
|
||||
next.on_enter(&mut frame.enter_context(attributes, attack_script_assets));
|
||||
next.on_enter(&mut frame.enter_context(attributes, attack_script_assets, game_settings));
|
||||
*current = next;
|
||||
info!("{} -> {}", old_name, new_name);
|
||||
}
|
||||
@@ -417,6 +431,7 @@ pub fn state_interrupt_system(
|
||||
game_settings: Res<GameSettings>,
|
||||
baked_animations: Res<Assets<BakedFighterAnimations>>,
|
||||
fighter_manifests: Res<Assets<FighterManifest>>,
|
||||
stage_collision: Res<StageCollision>,
|
||||
) {
|
||||
for fighter in &mut query {
|
||||
let StatefulFighterQueryItem {
|
||||
@@ -490,6 +505,7 @@ pub fn state_interrupt_system(
|
||||
animations,
|
||||
&baked_animations,
|
||||
&manifest.attributes,
|
||||
&stage_collision
|
||||
))
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user