grunk/src/player/footsteps/footstep_controller.gd

28 lines
714 B
GDScript3
Raw Normal View History

2025-03-28 16:16:43 -06:00
class_name FootstepController extends Node3D
const BASE_VOLUME := -42.0
const MUTE_VELOCITY := 1.0
const VELOCITY_FACTOR := 2.0
var _on_right_foot := false
@onready var player: Player = owner
@onready var left_foot: FootController = %LeftFoot
@onready var right_foot: FootController = %RightFoot
func play_footstep() -> void:
var foot := right_foot if _on_right_foot else left_foot
var relative_speed := player.velocity.length() - MUTE_VELOCITY
if relative_speed < 0:
return
# TODO: detect surface material
var sfx := foot.get_player_for_material(FootController.SurfaceMaterial.METAL)
sfx.volume_db = BASE_VOLUME + relative_speed * VELOCITY_FACTOR
sfx.play()
_on_right_foot = not _on_right_foot