39 lines
1.1 KiB
GDScript
39 lines
1.1 KiB
GDScript
class_name WindSound extends Node
|
|
|
|
@onready var fastPlayer: AudioStreamPlayer = $Fast
|
|
@onready var slowPlayer: AudioStreamPlayer = $Slow
|
|
|
|
@export var slowSound: AudioStream
|
|
@export var fastSound: AudioStream
|
|
@export var fullFast: float = 250
|
|
@export var fullSlow: float = 100
|
|
|
|
func _ready() -> void:
|
|
fastPlayer.stream = fastSound
|
|
slowPlayer.stream = slowSound
|
|
fastPlayer.play()
|
|
slowPlayer.play()
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _physics_process(delta: float) -> void:
|
|
if (City.moving && is_instance_valid(Sleigh.instance)):
|
|
if (Sleigh.instance.speed < fullSlow):
|
|
fastPlayer.volume_db = -80
|
|
slowPlayer.volume_db = 0
|
|
elif (Sleigh.instance.speed > fullFast):
|
|
fastPlayer.volume_db = 0
|
|
slowPlayer.volume_db = -80
|
|
else:
|
|
var ratio: float = lerpf(0, 1, (Sleigh.instance.speed - fullSlow) / (fullFast - fullSlow))
|
|
fastPlayer.volume_db = linear_to_db(ratio)
|
|
slowPlayer.volume_db = linear_to_db(1 - ratio)
|
|
else:
|
|
fastPlayer.volume_db = -80
|
|
slowPlayer.volume_db = -10
|
|
|
|
func _on_slow_finished() -> void:
|
|
slowPlayer.play()
|
|
|
|
func _on_fast_finished() -> void:
|
|
fastPlayer.play()
|