aboutsummaryrefslogtreecommitdiff
path: root/client/map/items
diff options
context:
space:
mode:
Diffstat (limited to 'client/map/items')
-rw-r--r--client/map/items/item.gd33
1 files changed, 27 insertions, 6 deletions
diff --git a/client/map/items/item.gd b/client/map/items/item.gd
index 5c31d70f..80aa4d6d 100644
--- a/client/map/items/item.gd
+++ b/client/map/items/item.gd
@@ -24,8 +24,14 @@ var base: Node3D = Node3D.new()
var progress_instance: ProgressBar3D = preload("res://map/progress.tscn").instantiate()
var take_sound: PlayRandom = preload("res://audio/play_random.tscn").instantiate()
var put_sound: PlayRandom = preload("res://audio/play_random.tscn").instantiate()
+var ding_sound := AudioStreamPlayer3D.new()
+var beep_sound := AudioStreamPlayer3D.new()
var sound_id
+var progress_speed := 0.
+var progress_position := 0.
+var progress_warn := false
+
var destroy_timeout = null
var creation_timer = 0.0
var item_owned = false
@@ -39,6 +45,10 @@ func _init(owned_by_: Node3D):
put_sound.volume_db = -16
add_child(take_sound)
add_child(put_sound)
+ ding_sound.stream = preload("res://map/tiles/sounds/ding.ogg")
+ beep_sound.stream = preload("res://map/tiles/sounds/beep.ogg")
+ add_child(ding_sound)
+ add_child(beep_sound)
setup_sounds()
@warning_ignore("static_called_on_instance")
base.position = base_position()
@@ -65,17 +75,28 @@ func _process(delta):
else: scale = Vector3.ONE * creation_timer
if destroy_timeout != null:
destroy_timeout -= delta * 5.0
- if is_instance_valid(progress_instance): progress_instance.queue_free()
+ if is_instance_valid(progress_instance): progress_instance.hide()
if destroy_timeout <= 0: queue_free()
else: scale = Vector3.ONE * destroy_timeout
+
+ progress_position += delta * progress_speed
+ progress_instance.update(progress_position, progress_warn)
+ var time_remaining = (1 - progress_position) / progress_speed
+
+ if progress_warn and progress_speed > 0 and time_remaining < 5.:
+ if not beep_sound.playing:
+ beep_sound.play()
+ else: beep_sound.stop()
+
func progress(position_: float, speed: float, warn: bool):
progress_instance.visible = true
- progress_instance.update(position_, speed, warn)
-
- # TODO: Fix finish
- # if p >= 1.:
- # finish(warn)
+ progress_position = position_
+ progress_speed = speed
+ progress_warn = warn
+
+ # Always play ding sound if item is making progress while warn
+ if warn and speed > 0.: ding_sound.play()
func finish():
progress_instance.visible = false