feat: implement modular state-based player movement system with chain mechanics

This commit is contained in:
DottsGit
2026-06-04 10:26:18 -04:00
parent cb04df1df3
commit a86ef53622
6 changed files with 2 additions and 11 deletions
+1 -3
View File
@@ -57,10 +57,8 @@ func _process(delta: float) -> void:
var hspeed := Vector2(player.velocity.x, player.velocity.z).length() var hspeed := Vector2(player.velocity.x, player.velocity.z).length()
# Dash FOV (highest priority) # Dash FOV (highest priority)
if hspeed > params.dash_speed * 0.8: if hspeed > params.walk_speed * 1.5:
_target_fov = params.dash_fov _target_fov = params.dash_fov
elif hspeed > params.sprint_speed * 0.8:
_target_fov = params.sprint_fov
camera.fov = lerpf(camera.fov, _target_fov, 1.0 - exp(-params.fov_lerp_speed * delta)) camera.fov = lerpf(camera.fov, _target_fov, 1.0 - exp(-params.fov_lerp_speed * delta))
-1
View File
@@ -61,7 +61,6 @@ func _ramp_static(pos: Vector3, size: Vector3, rot_deg: Vector3, color: Color, n
func _build_input_map() -> void: func _build_input_map() -> void:
var bindings := { var bindings := {
"jump": [KEY_SPACE], "jump": [KEY_SPACE],
"sprint": [KEY_SHIFT],
"crouch": [KEY_CTRL], "crouch": [KEY_CTRL],
"dash": [KEY_SHIFT], "dash": [KEY_SHIFT],
"fire": [MOUSE_BUTTON_LEFT], "fire": [MOUSE_BUTTON_LEFT],
+1 -3
View File
@@ -2,8 +2,7 @@ extends Resource
class_name MovementParams class_name MovementParams
# ── Ground ──────────────────────────────────────────────────────────────────── # ── Ground ────────────────────────────────────────────────────────────────────
@export var walk_speed: float = 7.0 @export var walk_speed: float = 11.0
@export var sprint_speed: float = 11.0
@export var crouch_speed: float = 4.0 @export var crouch_speed: float = 4.0
@export var ground_friction: float = 10.0 @export var ground_friction: float = 10.0
@export var ground_acceleration: float = 50.0 @export var ground_acceleration: float = 50.0
@@ -82,7 +81,6 @@ class_name MovementParams
# ── Camera ──────────────────────────────────────────────────────────────────── # ── Camera ────────────────────────────────────────────────────────────────────
@export var mouse_sensitivity: float = 0.002 @export var mouse_sensitivity: float = 0.002
@export var base_fov: float = 90.0 @export var base_fov: float = 90.0
@export var sprint_fov: float = 100.0
@export var dash_fov: float = 110.0 @export var dash_fov: float = 110.0
@export var fov_lerp_speed: float = 10.0 @export var fov_lerp_speed: float = 10.0
@export var head_bob_frequency: float = 12.0 @export var head_bob_frequency: float = 12.0
-1
View File
@@ -18,7 +18,6 @@ var input_dir: Vector2 = Vector2.ZERO
var wish_dir_world: Vector3 = Vector3.ZERO var wish_dir_world: Vector3 = Vector3.ZERO
var input_jump_pressed: bool = false var input_jump_pressed: bool = false
var input_jump_just_pressed: bool = false var input_jump_just_pressed: bool = false
var input_sprint: bool = false
var input_crouch: bool = false var input_crouch: bool = false
var input_dash: bool = false var input_dash: bool = false
-1
View File
@@ -46,7 +46,6 @@ func _physics_process(_delta: float) -> void:
# Poll input in _physics_process so it's synchronized with the state machine tick # Poll input in _physics_process so it's synchronized with the state machine tick
sm.input_jump_just_pressed = Input.is_action_just_pressed("jump") sm.input_jump_just_pressed = Input.is_action_just_pressed("jump")
sm.input_jump_pressed = Input.is_action_pressed("jump") sm.input_jump_pressed = Input.is_action_pressed("jump")
sm.input_sprint = Input.is_action_pressed("sprint")
sm.input_crouch = Input.is_action_pressed("crouch") sm.input_crouch = Input.is_action_pressed("crouch")
sm.input_dash = Input.is_action_just_pressed("dash") sm.input_dash = Input.is_action_just_pressed("dash")
-2
View File
@@ -58,8 +58,6 @@ func update(delta: float) -> void:
var speed := params.walk_speed var speed := params.walk_speed
if machine.input_crouch: if machine.input_crouch:
speed = params.crouch_speed speed = params.crouch_speed
elif machine.input_sprint and wish_dir.length_squared() > 0.01:
speed = params.sprint_speed
var effective_speed := machine.get_effective_speed(speed) var effective_speed := machine.get_effective_speed(speed)
# ── Horizontal movement (exponential interpolation for smoothness) ─── # ── Horizontal movement (exponential interpolation for smoothness) ───