diff options
34 files changed, 264 insertions, 95 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="."] diff --git a/client/game.gd b/client/game.gd index 98c8986b..d3ad3bb5 100644 --- a/client/game.gd +++ b/client/game.gd @@ -201,7 +201,7 @@ func _ready(): mp.server_message.connect(func(text): print(text)) mp.score.connect($Overlay.update) - mp.hide_score.connect($Overlay.hide) + mp.hide_score.connect($Overlay.reset) func _process(delta): marker.position = Global.interpolate(marker.position, marker_target, delta * 30.) diff --git a/client/global.gd b/client/global.gd index 2dd5f735..d9d5614b 100644 --- a/client/global.gd +++ b/client/global.gd @@ -17,6 +17,8 @@ # extends Node +signal settings_changed() + # Each setting contains a dictionary with the following keys: # "type": The type of the setting. Can be "toggle", "line", "range", "dropdown", or "dropdown_preset" # "value": The value of the setting. When using "dropdown", this contains an int @@ -37,6 +39,8 @@ var languages := [tr("System default"), "en", "de"] var default_settings := { "language": DropdownSetting.new(tr("Language"), 0, languages), + "aa": DropdownSetting.new(tr("Anti-aliasing"), 2, [tr("Disabled"), "FXAA", "MSAA 2x", "MSAA 4x"]), + "taa": ToggleSetting.new(tr("Temporal Anti-Aliasing"), false), "fullscreen": ToggleSetting.new(tr("Fullscreen"), false), "touch_controls": ToggleSetting.new(tr("Enable touch screen conrols"), DisplayServer.is_touchscreen_available()), "interpolate_camera_rotation": ToggleSetting.new(tr("Interpolate the camera rotation"), true), @@ -55,14 +59,13 @@ var settings: Dictionary var server_url = "" var error_message = "" -func _init(): - profile = load_dict("user://profile", default_profile) - load_settings("user://settings") - update_fullscreen() - update_language() - var focused_node: Control + func _ready(): + profile = load_dict("user://profile", default_profile) + load_settings("user://settings") + apply_settings() + get_viewport().gui_focus_changed.connect(Sound.play_hover_maybe) get_viewport().gui_focus_changed.connect(func (node): focused_node = node) @@ -72,6 +75,34 @@ func _input(_event): save_settings() update_fullscreen() +func apply_settings(): + update_fullscreen() + update_language() + + # Anti-aliasing + match get_setting("aa"): + 0: + get_viewport().msaa_2d = Viewport.MSAA_DISABLED + get_viewport().msaa_3d = Viewport.MSAA_DISABLED + get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + 1: + get_viewport().msaa_2d = Viewport.MSAA_DISABLED + get_viewport().msaa_3d = Viewport.MSAA_DISABLED + get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_FXAA + 2: + get_viewport().msaa_2d = Viewport.MSAA_2X + get_viewport().msaa_3d = Viewport.MSAA_2X + get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + 3: + get_viewport().msaa_2d = Viewport.MSAA_4X + get_viewport().msaa_3d = Viewport.MSAA_4X + get_viewport().screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + + # Temporal Anti-aliasing + get_viewport().use_taa = get_setting("taa") + + emit_signal("settings_changed") + func update_language(): var lang_idx: int = get_setting("language") var lang = languages[lang_idx] @@ -84,7 +115,7 @@ func update_language(): func update_fullscreen(): if get_setting("fullscreen"): DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) - else: + elif DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) func save_profile(): diff --git a/client/map/items/food_processor.gd b/client/map/items/food_processor.gd index f2226e5f..588777ff 100644 --- a/client/map/items/food_processor.gd +++ b/client/map/items/food_processor.gd @@ -28,10 +28,18 @@ func progress(p: float, warn: bool): processing.emitting = true processing.rotation.y += p * TAU base.rotation.y += p * TAU + if sound_id == null: + sound_id = Sound.item_progress( + self, + preload("res://map/items/sounds/food_processor_running.ogg"), + preload("res://map/items/sounds/food_processor_stopping.ogg") + ) func finish(warn: bool): super(warn) - processing.emitting = false + if sound_id != null: + processing.emitting = false + Sound.item_finished(sound_id) static func base_position() -> Vector3: return Vector3(0., 0.4, 0.) diff --git a/client/map/items/item.gd b/client/map/items/item.gd index 84d3f3fa..6433d5db 100644 --- a/client/map/items/item.gd +++ b/client/map/items/item.gd @@ -22,6 +22,7 @@ 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 sound_id func _init(owned_by_: Node3D): progress_instance.position.y = 1 @@ -50,8 +51,8 @@ func finish(_warn: bool): progress_instance.visible = false func setup_sounds(): - take_sound.setup([preload("res://map/sounds/generic_up.ogg")]) - put_sound.setup([preload("res://map/sounds/plate_down.ogg")]) + take_sound.setup([preload("res://map/items/sounds/generic_take.ogg")]) + put_sound.setup([preload("res://map/items/sounds/plate_put.ogg")]) func take(): take_sound.play_random() diff --git a/client/map/items/plate.gd b/client/map/items/plate.gd index 9d2fe538..73ffc5d9 100644 --- a/client/map/items/plate.gd +++ b/client/map/items/plate.gd @@ -21,8 +21,8 @@ func _init(owned_by_: Node3D): add_child(load("res://map/items/plate.tscn").instantiate()) func setup_sounds(): - take_sound.setup([preload("res://map/sounds/plate_up.ogg")]) - put_sound.setup([preload("res://map/sounds/plate_down.ogg")]) + take_sound.setup([preload("res://map/items/sounds/plate_take.ogg")]) + put_sound.setup([preload("res://map/items/sounds/plate_put.ogg")]) static func base_position() -> Vector3: return Vector3(0., 0.05, 0.) diff --git a/client/map/items/pot.gd b/client/map/items/pot.gd index 89cbf4c4..e802b7e9 100644 --- a/client/map/items/pot.gd +++ b/client/map/items/pot.gd @@ -35,5 +35,9 @@ func finish(warn: bool): super(warn) steam.emitting = false +func setup_sounds(): + take_sound.setup([preload("res://map/items/sounds/pot_take.ogg")]) + put_sound.setup([preload("res://map/items/sounds/pot_put.ogg")]) + static func base_position() -> Vector3: return Vector3(0., 0.015, 0.) diff --git a/client/map/items/sounds/food_processor_running.ogg b/client/map/items/sounds/food_processor_running.ogg Binary files differnew file mode 100644 index 00000000..10ebaf90 --- /dev/null +++ b/client/map/items/sounds/food_processor_running.ogg diff --git a/client/map/items/sounds/food_processor_running.ogg.import b/client/map/items/sounds/food_processor_running.ogg.import new file mode 100644 index 00000000..d16ab2a5 --- /dev/null +++ b/client/map/items/sounds/food_processor_running.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://rxjywx4vm0v8" +path="res://.godot/imported/food_processor_running.ogg-6506a6a5653ba2f2b6b730a02c0666b6.oggvorbisstr" + +[deps] + +source_file="res://map/items/sounds/food_processor_running.ogg" +dest_files=["res://.godot/imported/food_processor_running.ogg-6506a6a5653ba2f2b6b730a02c0666b6.oggvorbisstr"] + +[params] + +loop=true +loop_offset=0.0 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/client/map/items/sounds/food_processor_stopping.ogg b/client/map/items/sounds/food_processor_stopping.ogg Binary files differnew file mode 100644 index 00000000..471e264a --- /dev/null +++ b/client/map/items/sounds/food_processor_stopping.ogg diff --git a/client/map/items/sounds/food_processor_stopping.ogg.import b/client/map/items/sounds/food_processor_stopping.ogg.import new file mode 100644 index 00000000..88ad40f0 --- /dev/null +++ b/client/map/items/sounds/food_processor_stopping.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dghbc6sebonde" +path="res://.godot/imported/food_processor_stopping.ogg-ff77c875a73e7d6e0dc852e7de936ae8.oggvorbisstr" + +[deps] + +source_file="res://map/items/sounds/food_processor_stopping.ogg" +dest_files=["res://.godot/imported/food_processor_stopping.ogg-ff77c875a73e7d6e0dc852e7de936ae8.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/client/map/sounds/generic_down.ogg b/client/map/items/sounds/generic_put.ogg Binary files differindex 2646fc02..2646fc02 100644 --- a/client/map/sounds/generic_down.ogg +++ b/client/map/items/sounds/generic_put.ogg diff --git a/client/map/items/sounds/generic_put.ogg.import b/client/map/items/sounds/generic_put.ogg.import new file mode 100644 index 00000000..c3c06725 --- /dev/null +++ b/client/map/items/sounds/generic_put.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://74413o382cgr" +path="res://.godot/imported/generic_put.ogg-71f756ad7da95a854dc079b882d88098.oggvorbisstr" + +[deps] + +source_file="res://map/items/sounds/generic_put.ogg" +dest_files=["res://.godot/imported/generic_put.ogg-71f756ad7da95a854dc079b882d88098.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/client/map/sounds/generic_up.ogg b/client/map/items/sounds/generic_take.ogg Binary files differindex 89577f19..89577f19 100644 --- a/client/map/sounds/generic_up.ogg +++ b/client/map/items/sounds/generic_take.ogg diff --git a/client/map/items/sounds/generic_take.ogg.import b/client/map/items/sounds/generic_take.ogg.import new file mode 100644 index 00000000..90ee9e85 --- /dev/null +++ b/client/map/items/sounds/generic_take.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dimmyptj1wxlm" +path="res://.godot/imported/generic_take.ogg-58b7a86e64dc39c372d275df9a89f825.oggvorbisstr" + +[deps] + +source_file="res://map/items/sounds/generic_take.ogg" +dest_files=["res://.godot/imported/generic_take.ogg-58b7a86e64dc39c372d275df9a89f825.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/client/map/items/sounds/plate_put.ogg b/client/map/items/sounds/plate_put.ogg Binary files differnew file mode 100644 index 00000000..17059fa1 --- /dev/null +++ b/client/map/items/sounds/plate_put.ogg diff --git a/client/map/items/sounds/plate_put.ogg.import b/client/map/items/sounds/plate_put.ogg.import new file mode 100644 index 00000000..e748930c --- /dev/null +++ b/client/map/items/sounds/plate_put.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bmsdt2xav3dfi" +path="res://.godot/imported/plate_put.ogg-4e332f97bec21a96276803836308400a.oggvorbisstr" + +[deps] + +source_file="res://map/items/sounds/plate_put.ogg" +dest_files=["res://.godot/imported/plate_put.ogg-4e332f97bec21a96276803836308400a.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/client/map/items/sounds/plate_take.ogg b/client/map/items/sounds/plate_take.ogg Binary files differnew file mode 100644 index 00000000..4ee7fd37 --- /dev/null +++ b/client/map/items/sounds/plate_take.ogg diff --git a/client/map/items/sounds/plate_take.ogg.import b/client/map/items/sounds/plate_take.ogg.import new file mode 100644 index 00000000..c8f13933 --- /dev/null +++ b/client/map/items/sounds/plate_take.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dytee1arrjb2j" +path="res://.godot/imported/plate_take.ogg-dd95f70134d26571c8fd012af38d2e8a.oggvorbisstr" + +[deps] + +source_file="res://map/items/sounds/plate_take.ogg" +dest_files=["res://.godot/imported/plate_take.ogg-dd95f70134d26571c8fd012af38d2e8a.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/client/map/items/sounds/pot_put.ogg b/client/map/items/sounds/pot_put.ogg Binary files differnew file mode 100644 index 00000000..13e1abf9 --- /dev/null +++ b/client/map/items/sounds/pot_put.ogg diff --git a/client/map/items/sounds/pot_put.ogg.import b/client/map/items/sounds/pot_put.ogg.import new file mode 100644 index 00000000..363d3784 --- /dev/null +++ b/client/map/items/sounds/pot_put.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dfmty54bviifx" +path="res://.godot/imported/pot_put.ogg-1c886ef2769ab239bdd47fb1253a9552.oggvorbisstr" + +[deps] + +source_file="res://map/items/sounds/pot_put.ogg" +dest_files=["res://.godot/imported/pot_put.ogg-1c886ef2769ab239bdd47fb1253a9552.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/client/map/items/sounds/pot_take.ogg b/client/map/items/sounds/pot_take.ogg Binary files differnew file mode 100644 index 00000000..2736101b --- /dev/null +++ b/client/map/items/sounds/pot_take.ogg diff --git a/client/map/items/sounds/pot_take.ogg.import b/client/map/items/sounds/pot_take.ogg.import new file mode 100644 index 00000000..4e8e0f4f --- /dev/null +++ b/client/map/items/sounds/pot_take.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cpeig1y5bsar2" +path="res://.godot/imported/pot_take.ogg-d1e77bdb4ef71d0a80a6b45ecef61ed6.oggvorbisstr" + +[deps] + +source_file="res://map/items/sounds/pot_take.ogg" +dest_files=["res://.godot/imported/pot_take.ogg-d1e77bdb4ef71d0a80a6b45ecef61ed6.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/client/map/sounds/generic_down.ogg.import b/client/map/sounds/generic_down.ogg.import deleted file mode 100644 index 8bdaf0da..00000000 --- a/client/map/sounds/generic_down.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://74413o382cgr" -path="res://.godot/imported/generic_down.ogg-f6d254ca3073bfe53a9d25f0138ad218.oggvorbisstr" - -[deps] - -source_file="res://map/sounds/generic_down.ogg" -dest_files=["res://.godot/imported/generic_down.ogg-f6d254ca3073bfe53a9d25f0138ad218.oggvorbisstr"] - -[params] - -loop=false -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/client/map/sounds/generic_up.ogg.import b/client/map/sounds/generic_up.ogg.import deleted file mode 100644 index 96dab74e..00000000 --- a/client/map/sounds/generic_up.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://dimmyptj1wxlm" -path="res://.godot/imported/generic_up.ogg-fe69b207b9c1d21d7754ffe5f7b09f51.oggvorbisstr" - -[deps] - -source_file="res://map/sounds/generic_up.ogg" -dest_files=["res://.godot/imported/generic_up.ogg-fe69b207b9c1d21d7754ffe5f7b09f51.oggvorbisstr"] - -[params] - -loop=false -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/client/map/sounds/plate_down.ogg b/client/map/sounds/plate_down.ogg Binary files differdeleted file mode 100644 index 0827d902..00000000 --- a/client/map/sounds/plate_down.ogg +++ /dev/null diff --git a/client/map/sounds/plate_down.ogg.import b/client/map/sounds/plate_down.ogg.import deleted file mode 100644 index 86e34bbf..00000000 --- a/client/map/sounds/plate_down.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://dy4bab6rn1cyu" -path="res://.godot/imported/plate_down.ogg-97c6d5277190ef2a4619a7c4fee5a3bb.oggvorbisstr" - -[deps] - -source_file="res://map/sounds/plate_down.ogg" -dest_files=["res://.godot/imported/plate_down.ogg-97c6d5277190ef2a4619a7c4fee5a3bb.oggvorbisstr"] - -[params] - -loop=false -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/client/map/sounds/plate_up.ogg b/client/map/sounds/plate_up.ogg Binary files differdeleted file mode 100644 index 21a96811..00000000 --- a/client/map/sounds/plate_up.ogg +++ /dev/null diff --git a/client/map/sounds/plate_up.ogg.import b/client/map/sounds/plate_up.ogg.import deleted file mode 100644 index 5f2128e4..00000000 --- a/client/map/sounds/plate_up.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://dyt45wi23lmmh" -path="res://.godot/imported/plate_up.ogg-321cdd38fc6e820b2112fd77d567bcc9.oggvorbisstr" - -[deps] - -source_file="res://map/sounds/plate_up.ogg" -dest_files=["res://.godot/imported/plate_up.ogg-321cdd38fc6e820b2112fd77d567bcc9.oggvorbisstr"] - -[params] - -loop=false -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/client/menu/overlay.gd b/client/menu/overlay.gd index 58e1415c..66ee8976 100644 --- a/client/menu/overlay.gd +++ b/client/menu/overlay.gd @@ -33,6 +33,10 @@ func update(failed_: int, completed_: int, points_: int, time: float): if timer.is_stopped(): timer.start() +func reset(): + hide() + timer.stop() + func _process(delta): failed_label.scale = Global.interpolate(failed_label.scale, Vector2(1, 1), delta * 4.) completed_label.scale = Global.interpolate(completed_label.scale, Vector2(1, 1), delta * 4.) diff --git a/client/menu/settings.gd b/client/menu/settings.gd index efd462ca..1835d620 100644 --- a/client/menu/settings.gd +++ b/client/menu/settings.gd @@ -19,8 +19,7 @@ extends Menu func _on_back_pressed(): Global.save_settings() - Global.update_language() - Global.update_fullscreen() + Global.apply_settings() exit() func _ready(): diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd index 82365b83..8ba11097 100644 --- a/client/player/controllable_player.gd +++ b/client/player/controllable_player.gd @@ -138,6 +138,10 @@ func update_position(_new_position: Vector2, _new_rotation: float): func submit_message(text: String): game.mp.send_chat(text) +func progress(p: float, warn: bool): + super(p, warn) + Input.start_joy_vibration(0, 0.5, 0.1, 0.15) + func interact(): var tile = game.map.get_tile_instance(target) if tile != null: diff --git a/client/project.godot b/client/project.godot index 48b6523e..d1518e25 100644 --- a/client/project.godot +++ b/client/project.godot @@ -148,6 +148,5 @@ locale/translations_pot_files=PackedStringArray("res://menu/main_menu.tscn", "re [rendering] textures/vram_compression/import_etc2_astc=true -anti_aliasing/quality/msaa_2d=2 -anti_aliasing/quality/msaa_3d=2 -anti_aliasing/quality/use_taa=true +anti_aliasing/quality/msaa_2d=1 +anti_aliasing/quality/msaa_3d=1 |