meat_madness_redux/godot/effects/player/MovementSoundsAnimations.gd

62 lines
1.5 KiB
GDScript

extends Node
var played_takeoff: bool = false
var falling: bool = false
var measure = 0.0
func jump():
var phys = $"../OnFootPhysics"
var on_floor = $"../OnFootPhysics/Floor".is_on_floor
var jump_intent = $"../MovementInput".jump_intent
if jump_intent and not on_floor and not played_takeoff:
$Jump.play()
played_takeoff = true
if phys.just_landed:
$Jump.stop()
played_takeoff = false
if phys.just_landed_medium and not $CameraAnimation.is_playing():
$CameraAnimation.play("jump_landing")
var landing_playing = $JumpLanding.playing or $JumpLandingHardCrunch.playing or $JumpLandingHardOuch.playing
if not landing_playing:
if not phys.just_landed_terminally:
$JumpLanding.play()
else:
$JumpLandingHardCrunch.play()
$JumpLandingHardOuch.play()
if not on_floor and phys.is_falling_velocity_terminal() and not $FallingSound.playing:
$FallingSound.play()
$FallingSound.pitch_scale = rand_range(0.8, 1.2)
elif on_floor:
$FallingSound.stop()
func footsteps():
var on_floor = $"../OnFootPhysics/Floor".is_on_floor
var velocity = $"../MovementInput".input_xz
if not on_floor or velocity.length() == 0:
$Footsteps.stop()
return
if $Footsteps/Timer.time_left > 0.0:
return
$Footsteps.pitch_scale = rand_range(0.9, 1.1)
$Footsteps.play()
var is_sprinting = $"../MovementInput".sprinting
if is_sprinting:
$Footsteps/Timer.start(0.3)
else:
$Footsteps/Timer.start(0.5)
func _process(_delta):
if $"..".is_on_foot():
jump()
footsteps()