func update(input: InputPacket, delta: float):
- player.velocity = get_new_velocity_from_input(input, delta)
+ player.velocity = get_new_velocity_from_input(input, delta, player.walk_speed)
player.move_and_slide()
-
+ update_skin(delta)
+
+
+func on_enter_state():
+ player.skin.transition_move()
+
+
+func update_skin(delta: float):
# update skin rotation
var skin_target_angle := Vector3.BACK.signed_angle_to(
player.last_movement_direction,
),
player.rotation_speed * delta * 0.25
)
+
+ player.skin.set_walking_speed(player.velocity.length())
-
-
-func get_new_velocity_from_input(input: InputPacket, delta: float) -> Vector3:
+func get_new_velocity_from_input(input: InputPacket, delta: float, speed: float) -> Vector3:
# Get the XZ input direction based on player's input relative to the camera
var forward := camera.global_basis.z
var right := camera.global_basis.x
player.floor_normal = player.get_floor_normal()
player.ground_slope_input = (PI / 2) - player.velocity.angle_to(player.floor_normal)
var new_velocity = player.velocity.move_toward(
- movement_direction * (player.walk_speed + player.ground_slope_input * player.walk_speed),
+ movement_direction * (speed + player.ground_slope_input * speed),
player.acceleration * delta
)