diff options
author | nokoe <nokoe@mailbox.org> | 2024-07-03 15:04:02 +0200 |
---|---|---|
committer | nokoe <nokoe@mailbox.org> | 2024-07-03 15:04:02 +0200 |
commit | 11d2b799739d6e4a0fa7496a74cf10bff925b6ea (patch) | |
tree | b46927ad0a7629ee7753937f267141f62983faee /client/audio/sound.gd | |
parent | e994feebe11e4c1d8b7f3825f2e1c9bbd2069e82 (diff) | |
download | hurrycurry-11d2b799739d6e4a0fa7496a74cf10bff925b6ea.tar hurrycurry-11d2b799739d6e4a0fa7496a74cf10bff925b6ea.tar.bz2 hurrycurry-11d2b799739d6e4a0fa7496a74cf10bff925b6ea.tar.zst |
add progress sound
Diffstat (limited to 'client/audio/sound.gd')
-rw-r--r-- | client/audio/sound.gd | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/client/audio/sound.gd b/client/audio/sound.gd index 6a562d75..c4ef0ad2 100644 --- a/client/audio/sound.gd +++ b/client/audio/sound.gd @@ -3,6 +3,9 @@ extends Node @onready var click_sound = $UI/Click @onready var hover_sound = $UI/Hover +var item_sounds: Dictionary = {} +var item_id: int = 0 + func play_click(): click_sound.play() @@ -14,3 +17,43 @@ func play_hover_maybe(element): if element.is_hovered(): return play_hover() + +func item_progress(item: Item, running: AudioStream, stopping: AudioStream) -> int: + item_id += 1 + var running_player: AudioStreamPlayer3D = AudioStreamPlayer3D.new() + running_player.stream = running + running_player.name = "Running%d" % item_id + add_child(running_player) + var stopping_player: AudioStreamPlayer3D = AudioStreamPlayer3D.new() + stopping_player.stream = stopping + stopping_player.name = "Stopping%d" % item_id + running_player.play() + add_child(stopping_player) + item_sounds[item_id] = [item, running_player, stopping_player, false] + return item_id + +func item_finished(id: int): + var running_player: AudioStreamPlayer3D = item_sounds[id][1] + var stopping_player: AudioStreamPlayer3D = item_sounds[id][2] + item_sounds[id][3] = true + running_player.stop() + stopping_player.play() + stopping_player.finished.connect(func(): + free_sound(id) + ) + +func free_sound(id: int): + var running_player: AudioStreamPlayer3D = item_sounds[id][1] + var stopping_player: AudioStreamPlayer3D = item_sounds[id][2] + running_player.queue_free() + stopping_player.queue_free() + item_sounds.erase(id) + +func _physics_process(_delta): + for k in item_sounds.keys(): + if item_sounds[k][0] != null: + var position: Vector3 = item_sounds[k][0].position + item_sounds[k][1].position = position + item_sounds[k][2].position = position + elif not item_sounds[k][3]: + item_finished(k) |