generated from krampus/template-godot4
28 lines
714 B
GDScript3
28 lines
714 B
GDScript3
|
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
|