feat: implement MovementStateMachine for handling player movement states and mechanics
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user