feat: implement MovementStateMachine for handling player movement states and mechanics

This commit is contained in:
DottsGit
2026-06-09 22:53:24 -04:00
parent 86abae27dd
commit e8e5391d9f
+4 -4
View File
@@ -221,7 +221,7 @@ func detect_wall_horizontal() -> Vector3:
var hit := space_state.intersect_ray(ray) var hit := space_state.intersect_ray(ray)
if not hit.is_empty(): if not hit.is_empty():
var collider = hit.get("collider") var collider = hit.get("collider")
if collider is PlayerMovementController: if collider is PlayerMovementController or collider is CharacterBody3D or collider.has_method("take_damage"):
continue continue
var n: Vector3 = hit.get("normal", Vector3.ZERO) var n: Vector3 = hit.get("normal", Vector3.ZERO)
# Wall must be roughly vertical (normal mostly horizontal) # Wall must be roughly vertical (normal mostly horizontal)
@@ -242,7 +242,7 @@ func detect_wall_horizontal() -> Vector3:
var hit := space_state.intersect_ray(ray) var hit := space_state.intersect_ray(ray)
if not hit.is_empty(): if not hit.is_empty():
var collider = hit.get("collider") var collider = hit.get("collider")
if collider is PlayerMovementController: if collider is PlayerMovementController or collider is CharacterBody3D or collider.has_method("take_damage"):
continue continue
var n: Vector3 = hit.get("normal", Vector3.ZERO) var n: Vector3 = hit.get("normal", Vector3.ZERO)
if absf(n.y) < 0.3 and n.length_squared() > 0.0: if absf(n.y) < 0.3 and n.length_squared() > 0.0:
@@ -294,8 +294,8 @@ func detect_wall_forward() -> Dictionary:
# Get the normal from the highest point we hit, or the lowest if we only hit low # Get the normal from the highest point we hit, or the lowest if we only hit low
var best_hit = hit_mid if not hit_mid.is_empty() else hit_low var best_hit = hit_mid if not hit_mid.is_empty() else hit_low
var collider = best_hit.get("collider")
if best_hit.get("collider") is PlayerMovementController: if collider is PlayerMovementController or collider is CharacterBody3D or collider.has_method("take_damage"):
return {"hit": false, "normal": Vector3.ZERO, "is_short": false} return {"hit": false, "normal": Vector3.ZERO, "is_short": false}
var normal: Vector3 = best_hit.get("normal", Vector3.ZERO) var normal: Vector3 = best_hit.get("normal", Vector3.ZERO)