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 or $"../OnFootPhysics".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: 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 and phys.just_landed_medium: $JumpLanding.play() elif phys.just_landed_terminally: $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 or $"../OnFootPhysics".is_on_floor() var velocity = $"../MovementInput".input_xz if not on_floor or velocity.length() == 0: 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()