chore: readability and consistency pass on player logic
This commit is contained in:
parent
1c78bd1e0f
commit
3d21a81329
1 changed files with 31 additions and 16 deletions
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue