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)
if not hit.is_empty():
var collider = hit.get("collider")
if collider is PlayerMovementController:
if collider is PlayerMovementController or collider is CharacterBody3D or collider.has_method("take_damage"):
continue
var n: Vector3 = hit.get("normal", Vector3.ZERO)
# Wall must be roughly vertical (normal mostly horizontal)
@@ -242,7 +242,7 @@ func detect_wall_horizontal() -> Vector3:
var hit := space_state.intersect_ray(ray)
if not hit.is_empty():
var collider = hit.get("collider")
if collider is PlayerMovementController:
if collider is PlayerMovementController or collider is CharacterBody3D or collider.has_method("take_damage"):
continue
var n: Vector3 = hit.get("normal", Vector3.ZERO)
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
var best_hit = hit_mid if not hit_mid.is_empty() else hit_low
if best_hit.get("collider") is PlayerMovementController:
var collider = best_hit.get("collider")
if collider is PlayerMovementController or collider is CharacterBody3D or collider.has_method("take_damage"):
return {"hit": false, "normal": Vector3.ZERO, "is_short": false}
var normal: Vector3 = best_hit.get("normal", Vector3.ZERO)