summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornokoe <nokoe@mailbox.org>2024-09-27 22:34:19 +0200
committernokoe <nokoe@mailbox.org>2024-09-27 22:35:35 +0200
commitd18b148be6470a0e91bbfcf30437be70b4ef3b57 (patch)
treeb7daee462a49cde8015ff12310318ce6db33788a
parentf47aea76992f2e8c465e0bca515010d8ed00cca6 (diff)
downloadhurrycurry-d18b148be6470a0e91bbfcf30437be70b4ef3b57.tar
hurrycurry-d18b148be6470a0e91bbfcf30437be70b4ef3b57.tar.bz2
hurrycurry-d18b148be6470a0e91bbfcf30437be70b4ef3b57.tar.zst
move progress data and sounds from progress bar to item
-rw-r--r--client/map/items/item.gd33
-rw-r--r--client/map/progress.gd44
-rw-r--r--client/map/tiles/sounds/beep.ogg.import6
3 files changed, 33 insertions, 50 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
diff --git a/client/map/progress.gd b/client/map/progress.gd
index 96edb574..fc31408c 100644
--- a/client/map/progress.gd
+++ b/client/map/progress.gd
@@ -18,45 +18,7 @@
class_name ProgressBar3D
extends MeshInstance3D
-const PLAY_RANDOM_SCENE = preload("res://audio/play_random.tscn")
-
-var beep_node: PlayRandom = PLAY_RANDOM_SCENE.instantiate()
-var ding_node: PlayRandom = PLAY_RANDOM_SCENE.instantiate()
-
-var speed := 0.
-var position_ := 0.
-var warn := false
-
-func _ready():
- add_child(beep_node)
- add_child(ding_node)
-
- beep_node.randomize_pitch = false
- beep_node.volume_db = -12
- beep_node.setup([load("res://map/tiles/sounds/beep.ogg")])
-
- ding_node.randomize_pitch = false
- ding_node.volume_db = -12
- ding_node.setup([load("res://map/tiles/sounds/ding.ogg")])
-
-func update(new_position: float, new_speed: float, new_warn: bool):
- speed = new_speed
- position_ = new_position
- warn = new_warn
-
- var mat: ShaderMaterial = get_active_material(0)
- mat.set_shader_parameter("progress", position_)
- mat.set_shader_parameter("bad", warn)
-
- # Always play ding sound if item is making progress while warn
- if warn and speed > 0.: ding_node.play_random()
-
-func _process(delta: float):
- position_ += delta * speed
- var time_remaining = (1 - position_) / speed
-
- if warn and speed > 0 and time_remaining < 5.: beep_node.start_autoplay()
- else: beep_node.stop_autoplay()
-
+func update(new_position: float, new_warn: bool):
var mat: ShaderMaterial = get_active_material(0)
- mat.set_shader_parameter("progress", position_)
+ mat.set_shader_parameter("progress", new_position)
+ mat.set_shader_parameter("bad", new_warn)
diff --git a/client/map/tiles/sounds/beep.ogg.import b/client/map/tiles/sounds/beep.ogg.import
index 85526c5e..4b1f1322 100644
--- a/client/map/tiles/sounds/beep.ogg.import
+++ b/client/map/tiles/sounds/beep.ogg.import
@@ -12,8 +12,8 @@ dest_files=["res://.godot/imported/beep.ogg-fd24b57085580112faf45d17e578f198.ogg
[params]
-loop=false
-loop_offset=0
-bpm=0
+loop=true
+loop_offset=0.0
+bpm=0.0
beat_count=0
bar_beats=4