Spread state context architecture (Fixes #18) (#30)
CI / build-and-test (push) Canceled after 0s

Reviewed-on: #30
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #30.
This commit is contained in:
2026-09-15 17:59:03 +00:00
committed by EIREXE
parent 43a04e9491
commit b8b65e60e9
15 changed files with 384 additions and 302 deletions
+9 -13
View File
@@ -1,6 +1,5 @@
use super::{FighterStateContext, FighterStateImpl};
use super::{CollisionContext, EnterContext, FighterStateImpl, InterruptContext, UpdateContext};
use crate::fighter::animation::AnimKind;
use crate::fighter::collision;
use crate::fighter::state::ground::GroundedStateCommon;
use crate::fighter::state::land::{LandingState, LandingType};
use crate::fighter::state::{FighterState, air, jump};
@@ -10,22 +9,19 @@ pub struct FallState;
impl FighterStateImpl for FallState {
const NAME: &'static str = "Fall";
fn check_interrupt(&self, state_context: &mut FighterStateContext) -> Option<FighterState> {
fn check_interrupt(&self, state_context: &mut InterruptContext) -> Option<FighterState> {
jump::check_input_double_jump(state_context)
}
fn on_enter(&mut self, state_context: &mut super::FighterStateContext) {
fn on_enter(&mut self, state_context: &mut EnterContext) {
state_context.play_animation(AnimKind::Fall, true);
}
fn update(&mut self, state_context: &mut super::FighterStateContext) {
air::integrate_gravity(
state_context.velocity,
&state_context.fighter_manifest.attributes,
);
fn update(&mut self, state_context: &mut UpdateContext) {
air::integrate_gravity(state_context.velocity, state_context.fighter_attributes);
air::apply_air_drift(
state_context.velocity,
&state_context.fighter_manifest.attributes,
state_context.fighter_attributes,
state_context.input,
);
air::apply_air_motion(
@@ -37,9 +33,9 @@ impl FighterStateImpl for FallState {
fn check_collision_interrupt(
&mut self,
state_context: &mut FighterStateContext,
state_context: &mut CollisionContext,
) -> Option<FighterState> {
if let Some(res) = collision::air_collide_with_stage(state_context) {
if let Some(res) = state_context.air_collide_with_stage() {
// Adjust translation
state_context.translation.0 = res.hit_position - state_context.ecb.get_bottom_point();
let grounded_common = GroundedStateCommon {
@@ -55,7 +51,7 @@ impl FighterStateImpl for FallState {
}
}
pub fn check_input(state_context: &FighterStateContext) -> Option<FighterState> {
pub fn check_input(state_context: &InterruptContext) -> Option<FighterState> {
let input_frame = state_context.input.get_last_frame();
if input_frame.movement.x.abs() < state_context.game_settings.input_common.stick_deadzone {