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:
@@ -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
|
||||
Reference in New Issue
Block a user