aboutsummaryrefslogtreecommitdiff
path: root/client/audio
diff options
context:
space:
mode:
Diffstat (limited to 'client/audio')
-rw-r--r--client/audio/sound.gd43
-rw-r--r--client/audio/sound.tscn2
2 files changed, 44 insertions, 1 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)
diff --git a/client/audio/sound.tscn b/client/audio/sound.tscn
index 7c0458dc..3f2607c8 100644
--- a/client/audio/sound.tscn
+++ b/client/audio/sound.tscn
@@ -4,7 +4,7 @@
[ext_resource type="AudioStream" uid="uid://cpyn511c5mtni" path="res://menu/sounds/click.ogg" id="2_mhrce"]
[ext_resource type="AudioStream" uid="uid://dtr1khfyqr56o" path="res://menu/sounds/hover.ogg" id="3_qft2s"]
-[node name="Sound" type="Node"]
+[node name="Sound" type="Node3D"]
script = ExtResource("1_b0qb1")
[node name="UI" type="Node" parent="."]