chore: readability and consistency pass on player logic

This commit is contained in:
Sara Gerretsen 2026-05-14 12:43:49 +02:00
parent 1c78bd1e0f
commit 3d21a81329

View file

@ -154,8 +154,8 @@ func property_move_toward(property : String, target, speed) -> float:
set(property, new_value)
return new_value
func _process(delta: float) -> void:
var speed : float = abs(body.velocity.x) + abs(body.velocity.z)
func _physics_process(delta: float) -> void:
var speed : float = Vector2(body.velocity.x, body.velocity.z).length()
set(\"parameters/Speed/scale\", clamp(speed / full_speed, 0.0, 1.0))
var deceleration_distance : float = 0.0 if behaviour_tree.get_world_move_input().dot(body.velocity) > 0.0 else clamp(speed / min_skid_speed, 0.0, 1.0)
property_move_toward(\"parameters/Decelerating/blend_amount\", deceleration_distance, delta * min_skid_speed)
@ -215,10 +215,10 @@ resource_name = "PlayerLedgeHangAction"
script/source = "extends PlayerAction
var wall_normal : Vector3
var distance_from_hang_point : Vector3
func _enter() -> int:
blackboard.anim.set(\"parameters/Ledge/request\", AnimationNodeOneShot.ONE_SHOT_REQUEST_FIRE)
blackboard.anim.set(\"parameters/Air/blend_amount\", 0.0)
wall_normal = body.get_wall_normal()
wall_normal = Vector3(wall_normal.x, 0, wall_normal.z).normalized()
blackboard.character.look_at(blackboard.character.global_position - wall_normal)
@ -226,29 +226,44 @@ func _enter() -> int:
func _execute() -> int:
if get_status() == Running:
var diff : Vector3 = blackboard.hang_ray.get_collision_point() - blackboard.hang_ray.global_position
body.velocity = Vector3.ZERO
body.global_position = body.global_position.lerp(body.global_position + diff, 0.25)
var input_dot_wall : float = wall_normal.dot(blackboard.get_world_move_input())
if diff.length() < 0.05 and input_dot_wall < -0.5:
return Success
if body.is_on_floor() or input_dot_wall > 0.5:
blackboard.anim.set(\"parameters/Ledge/request\", AnimationNodeOneShot.ONE_SHOT_REQUEST_FADE_OUT);
return Fail
maintain_animation_state()
distance_from_hang_point = blackboard.hang_ray.get_collision_point() - blackboard.hang_ray.global_position
update_physics_state()
return check_input_changes()
return get_status()
func _exit():
%LedgeHangTimer.start()
func maintain_animation_state():
blackboard.anim.set(\"parameters/Air/blend_amount\", 0.0)
blackboard.anim.set(\"parameters/Wall/blend_amount\", 0.0)
func update_physics_state():
body.velocity = Vector3.ZERO
body.global_position = body.global_position.lerp(body.global_position + distance_from_hang_point, 0.25)
func check_input_changes():
var input_dot_wall : float = wall_normal.dot(blackboard.get_world_move_input())
if distance_from_hang_point.length() < 0.05 and input_dot_wall < -0.5:
return Success
if body.is_on_floor() or input_dot_wall > 0.5:
blackboard.anim.set(\"parameters/Ledge/request\", AnimationNodeOneShot.ONE_SHOT_REQUEST_FADE_OUT);
return Fail
return get_status()
"
[sub_resource type="GDScript" id="GDScript_i8sra"]
resource_name = "PlayerLedgeClimbAnimation"
script/source = "extends PlayerAnimationAction
func _exit():
func _execute() ->int:
blackboard.anim.set(\"parameters/Wall/blend_amount\", 0.0)
blackboard.anim.set(\"parameters/Air/blend_amount\", 0.0)
blackboard.anim.set(\"parameters/Ledge/request\", AnimationNodeOneShot.ONE_SHOT_REQUEST_ABORT)
return get_status()
func _exit():
blackboard.anim.set(\"parameters/Ledge/request\", AnimationNodeOneShot.ONE_SHOT_REQUEST_FADE_OUT)
"
[sub_resource type="GDScript" id="GDScript_nmc1l"]
@ -263,7 +278,7 @@ script/source = "extends PlayerAction
func _enter() -> int:
var flat_wall := Vector3(body.get_wall_normal().x, 0, body.get_wall_normal().z)
var input_into_wall := blackboard.get_world_move_input().normalized().dot(body.get_wall_normal()) < -0.7
if body.is_on_wall_only() and input_into_wall:
if body.is_on_wall_only() and input_into_wall and not blackboard.hang_ray.is_colliding():
if Input.is_action_just_pressed(\"jump\"):
body.velocity = flat_wall * jump_normal_force
body.velocity.y = jump_vertical_force
@ -300,7 +315,7 @@ func _enter() -> int:
var flat_velocity := Vector2(body.velocity.x, body.velocity.z)
var input_velocity_dot : float = blackboard.get_world_move_input().normalized().dot(body.velocity.normalized())
var ground_velocity := Vector3(body.velocity.x, 0, body.velocity.z)
if body.is_on_wall_only() and input_velocity_dot > 0.01 and ground_velocity.length() >= min_ground_speed and flat_velocity.length() > -body.velocity.y * 4.0:
if body.is_on_wall_only() and input_velocity_dot > 0.01 and ground_velocity.length() >= min_ground_speed and flat_velocity.length() > -body.velocity.y * 4.0 and not blackboard.hang_ray.is_colliding():
if Input.is_action_just_pressed(\"jump\") and run_time > min_run_time:
var wall_flat := Vector3(body.get_wall_normal().x, 0, body.get_wall_normal().z)
body.velocity = wall_flat * jump_normal_force + (ground_velocity + blackboard.get_world_move_input()).normalized() * jump_input_force * ground_velocity.length()