diff options
Diffstat (limited to 'client/map')
-rw-r--r-- | client/map/items/item.gd | 33 | ||||
-rw-r--r-- | client/map/progress.gd | 44 | ||||
-rw-r--r-- | client/map/tiles/sounds/beep.ogg.import | 6 |
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 |