feat(movement): add movement state machine with air/ground/wallrun/slide/dash/ground states

- MovementStateMachine: core state machine base
- MovementParams: export-rich tunable resource
- StateGround/StateAir: grounded & aeriel locomotion with coyote, buffered jump, bunny hop
- StateWallRun / StateWallCling: wall-based traversal with wall-jump off
- StateSlide: sprint-parallel slide with friction fallout
- StateDash: burst dash with momentum brake
- PlayerMovementController: entry point wiring to CharacterBody3D
- input_map.cfg: full action map reference file
- characters/player/player_base.tscn: placeholder scene
- movement/tests/test_fsm_runner.gd: 9-state unit test runner

Closes #1
This commit is contained in:
2026-06-02 22:36:00 -04:00
parent a4863a7b08
commit 202f67fa32
14 changed files with 993 additions and 6 deletions
+76
View File
@@ -0,0 +1,76 @@
extends Resource
class_name MovementParams
# ── Ground ────────────────────────────────────────────────────────────────────
@export var walk_speed: float = 7.0
@export var sprint_speed: float = 11.0
@export var crouch_speed: float = 4.0
@export var ground_friction: float = 8.0
@export var ground_acceleration: float = 30.0
@export var ground_deceleration: float = 20.0
# ── Jump / Air ────────────────────────────────────────────────────────────────
@export var jump_velocity: float = 8.5
@export var coyote_time: float = 0.15
@export var jump_buffer: float = 0.12
@export var air_control: float = 0.3
@export var air_acceleration: float = 25.0
@export var max_air_speed: float = 16.0
@export var gravity: float = 20.0
@export var fall_multiplier: float = 2.0
@export var low_jump_multiplier: float = 1.5
# ── Bunny Hop ─────────────────────────────────────────────────────────────────
@export var bunny_hop_impulse: float = 1.15
@export var bunny_hop_speed_gain: float = 0.5
@export var bunny_hop_speed_cap: float = 16.0
# ── Slide ─────────────────────────────────────────────────────────────────────
@export var slide_speed: float = 14.0
@export var slide_friction: float = 0.88
@export var slide_min_speed: float = 12.0
@export var slide_duration: float = 0.8
@export var slide_into_sprint_delay: float = 0.15
# ── Wall Run ──────────────────────────────────────────────────────────────────
@export var wall_run_speed: float = 12.0
@export var wall_run_vertical_speed: float = 8.0
@export var wall_run_duration: float = 1.2
@export var wall_run_gravity: float = -2.0
@export var wall_run_auto_jump_speed: float = 15.0
@export var wall_run_jump_horizontal: float = 14.0
@export var wall_run_jump_off_normal: float = 9.0
@export var wall_angle_threshold: float = 70.0
@export var wall_detect_distance: float = 1.0
@export var wall_ray_up_height: float = 1.2
@export var wall_ray_down_height: float = 0.4
# ── Wall Cling ────────────────────────────────────────────────────────────────
@export var wall_cling_horizontal_speed: float = 0.0
@export var wall_cling_vertical_speed: float = 0.0
@export var wall_cling_stamina_drain: float = 2.0
@export var wall_cling_max_stamina: float = 2.0
# ── Dash ──────────────────────────────────────────────────────────────────────
@export var dash_speed: float = 18.0
@export var dash_duration: float = 0.25
@export var dash_cooldown: float = 1.0
@export var dash_invulnerability_time: float = 0.1
# ── Rocket Jump ───────────────────────────────────────────────────────────────
@export var rocket_jump_self_damage: float = 15.0
@export var rocket_jump_up_impulse: float = 20.0
@export var rocket_jump_explosion_radius: float = 6.0
@export var rocket_jump_falloff: float = 1.5
# ── Shotgun Jump ──────────────────────────────────────────────────────────────
@export var shotgun_jump_impulse: float = 20.0
# ── Double Jump ───────────────────────────────────────────────────────────────
@export var double_jump_velocity: float = 8.0
@export var double_jump_max_count: int = 1
# ── Chaining ──────────────────────────────────────────────────────────────────
@export var chain_bonus_per_success: float = 0.05
@export var chain_bonus_cap: float = 0.50
@export var chain_window: float = 0.4