diff options
author | metamuffin <metamuffin@disroot.org> | 2024-07-01 20:02:50 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-07-01 20:02:50 +0200 |
commit | dbd0b769af6267426496b18bd788b8a68165c667 (patch) | |
tree | 59dc08576efd7ff9812e53606095b93c79a9aafd | |
parent | 76cadb3d882851f7de1aa4b0aac03ace08d06df2 (diff) | |
parent | 90ea661221ebf29c26bc44308d31fcf04f79ca2c (diff) | |
download | hurrycurry-dbd0b769af6267426496b18bd788b8a68165c667.tar hurrycurry-dbd0b769af6267426496b18bd788b8a68165c667.tar.bz2 hurrycurry-dbd0b769af6267426496b18bd788b8a68165c667.tar.zst |
Merge branch 'master' of https://codeberg.org/metamuffin/undercooked
-rw-r--r-- | client/audio/play_random.gd | 4 | ||||
-rw-r--r-- | client/audio/play_random.tscn | 2 | ||||
-rw-r--r-- | client/game.gd | 3 | ||||
-rw-r--r-- | client/game.tscn | 1 | ||||
-rw-r--r-- | client/map/items/item.gd | 9 | ||||
-rw-r--r-- | client/map/items/plate.gd | 9 | ||||
-rw-r--r-- | client/map/sounds/plate_down.ogg | bin | 0 -> 6900 bytes | |||
-rw-r--r-- | client/map/sounds/plate_down.ogg.import | 19 | ||||
-rw-r--r-- | client/menu/overlay.gd | 18 | ||||
-rw-r--r-- | client/menu/overlay.tscn | 121 | ||||
-rw-r--r-- | client/menu/sounds/failure.ogg | bin | 14740 -> 8296 bytes | |||
-rw-r--r-- | client/multiplayer.gd | 67 | ||||
-rw-r--r-- | client/player/effect.gd | 17 |
13 files changed, 190 insertions, 80 deletions
diff --git a/client/audio/play_random.gd b/client/audio/play_random.gd index d702756d..efaad7d8 100644 --- a/client/audio/play_random.gd +++ b/client/audio/play_random.gd @@ -52,6 +52,10 @@ func play_random(): s.pitch_scale = randf_range(0.9, 1.1) s.play() +func stop_all(): + for s in sounds: + s.stop() + func start_autoplay(): autoplay = true play_random() diff --git a/client/audio/play_random.tscn b/client/audio/play_random.tscn index f9b20842..44f3a10b 100644 --- a/client/audio/play_random.tscn +++ b/client/audio/play_random.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=2 format=3 uid="uid://bncx0wul2ikrg"] +[gd_scene load_steps=2 format=3 uid="uid://bbyb6s110my8c"] [ext_resource type="Script" path="res://audio/play_random.gd" id="1_c8pxf"] diff --git a/client/game.gd b/client/game.gd index ca25d77a..51f593a7 100644 --- a/client/game.gd +++ b/client/game.gd @@ -182,7 +182,10 @@ func _ready(): await get_parent().menu_anim_exit() ) + mp.server_message.connect(func(text): print(text)) + mp.score.connect($Overlay.update) + mp.hide_score.connect($Overlay.hide) func _process(delta): marker.position = lerp(marker.position, marker_target, delta * 40.0) diff --git a/client/game.tscn b/client/game.tscn index b44974b2..d71ae4be 100644 --- a/client/game.tscn +++ b/client/game.tscn @@ -29,6 +29,7 @@ script = ExtResource("6_fbxu8") [node name="FollowCamera" parent="." node_paths=PackedStringArray("target") instance=ExtResource("2_s8y6o")] transform = Transform3D(0.728777, 0.294253, -0.618303, 0, 0.902961, 0.429723, 0.684751, -0.313173, 0.658057, -2.36537, 1.99403, 3.29507) +current = true far = 150.0 target = NodePath("..") diff --git a/client/map/items/item.gd b/client/map/items/item.gd index d3acf200..7ab80fab 100644 --- a/client/map/items/item.gd +++ b/client/map/items/item.gd @@ -20,14 +20,17 @@ var owned_by: Node3D var base: Node3D = Node3D.new() var progress_instance: ProgressBar3D = preload("res://map/progress.tscn").instantiate() -var sound_instance: PlayRandom = preload("res://audio/play_random.tscn").instantiate() +var take_sound: PlayRandom = preload("res://audio/play_random.tscn").instantiate() +var put_sound: PlayRandom = preload("res://audio/play_random.tscn").instantiate() func _init(owned_by_: Node3D): progress_instance.position.y = 1 progress_instance.visible = false add_child(progress_instance) - add_child(sound_instance) - sound_instance.volume_db = -16 + take_sound.volume_db = -16 + put_sound.volume_db = -16 + add_child(take_sound) + add_child(put_sound) base.position = base_position() add_child(base) owned_by = owned_by_ diff --git a/client/map/items/plate.gd b/client/map/items/plate.gd index 88403b55..9b462e5c 100644 --- a/client/map/items/plate.gd +++ b/client/map/items/plate.gd @@ -19,10 +19,15 @@ extends Item func _init(owned_by_: Node3D): super(owned_by_) add_child(load("res://map/items/plate.tscn").instantiate()) - sound_instance.setup([preload("res://map/sounds/plate_up.ogg")]) + take_sound.setup([preload("res://map/sounds/plate_up.ogg")]) + put_sound.setup([preload("res://map/sounds/plate_down.ogg")]) func take(): - sound_instance.play_random() + take_sound.play_random() + super() + +func put(): + put_sound.play_random() super() static func base_position() -> Vector3: diff --git a/client/map/sounds/plate_down.ogg b/client/map/sounds/plate_down.ogg Binary files differnew file mode 100644 index 00000000..0827d902 --- /dev/null +++ b/client/map/sounds/plate_down.ogg diff --git a/client/map/sounds/plate_down.ogg.import b/client/map/sounds/plate_down.ogg.import new file mode 100644 index 00000000..86e34bbf --- /dev/null +++ b/client/map/sounds/plate_down.ogg.import @@ -0,0 +1,19 @@ +[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/menu/overlay.gd b/client/menu/overlay.gd index 0fc40f0b..92297704 100644 --- a/client/menu/overlay.gd +++ b/client/menu/overlay.gd @@ -7,11 +7,14 @@ var failed: int = 0 var completed: int = 0 var points: int = 0 -@onready var failed_label: Label = $Control/Paper/Margin/Lines/Line2/Failed -@onready var completed_label: Label = $Control/Paper/Margin/Lines/Line1/Completed -@onready var points_label: Label = $Control/Paper/Margin/Lines/Line3/Points +@onready var failed_label: Label = $Score/Paper/Margin/Lines/Line2/Failed +@onready var completed_label: Label = $Score/Paper/Margin/Lines/Line1/Completed +@onready var points_label: Label = $Score/Paper/Margin/Lines/Line3/Points +@onready var timer: Timer = $Timer +@onready var seconds_label: Label = $Time/Paper/Line/Seconds +@onready var decimals_label: Label = $Time/Paper/Line/Decimals -func update(failed_: int, completed_: int, points_: int): +func update(failed_: int, completed_: int, points_: int, time: float): if failed_ - failed: failed_label.text = str(failed_) failed_label.scale = LABEL_SCALE @@ -24,8 +27,15 @@ func update(failed_: int, completed_: int, points_: int): points_label.text = str(points_) points_label.scale = LABEL_SCALE points = points_ + timer.wait_time = time + + if timer.is_stopped(): + timer.start() func _process(delta): failed_label.scale = lerp(failed_label.scale, Vector2(1, 1), delta * 4.) completed_label.scale = lerp(completed_label.scale, Vector2(1, 1), delta * 4.) points_label.scale = lerp(points_label.scale, Vector2(1, 1), delta * 4.) + var seconds: float = floor(timer.time_left) + seconds_label.text = str(int(seconds)) + decimals_label.text = "%01d" % int((timer.time_left - seconds) * 10) diff --git a/client/menu/overlay.tscn b/client/menu/overlay.tscn index 66e2a9f3..9745de5d 100644 --- a/client/menu/overlay.tscn +++ b/client/menu/overlay.tscn @@ -21,35 +21,40 @@ color_ramp = SubResource("Gradient_pkrjd") noise = SubResource("FastNoiseLite_k7p6k") [node name="Overlay" type="PanelContainer"] -anchors_preset = 1 -anchor_left = 1.0 +anchors_preset = 15 anchor_right = 1.0 -offset_left = -290.0 -offset_bottom = 125.0 -grow_horizontal = 0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 theme = ExtResource("1_4kujw") theme_override_styles/panel = SubResource("StyleBoxFlat_04ujj") script = ExtResource("2_kbjds") -[node name="Control" type="Control" parent="."] +[node name="Timer" type="Timer" parent="."] +wait_time = 30.0 + +[node name="Score" type="Control" parent="."] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 +size_flags_horizontal = 8 +size_flags_vertical = 0 -[node name="Paper" type="TextureRect" parent="Control"] +[node name="Paper" type="TextureRect" parent="Score"] layout_mode = 1 -anchors_preset = 2 -anchor_top = 1.0 -anchor_bottom = 1.0 -offset_left = -88.0 -offset_top = -397.0 -offset_right = 424.0 -offset_bottom = 115.0 -grow_vertical = 0 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -214.0 +offset_top = -339.0 +offset_right = 298.0 +offset_bottom = 173.0 +grow_horizontal = 2 +grow_vertical = 2 rotation = 0.0610865 texture = SubResource("NoiseTexture2D_jq3d3") -[node name="Margin" type="MarginContainer" parent="Control/Paper"] +[node name="Margin" type="MarginContainer" parent="Score/Paper"] layout_mode = 1 anchors_preset = 2 anchor_top = 1.0 @@ -60,76 +65,130 @@ grow_vertical = 0 theme_override_constants/margin_left = 10 theme_override_constants/margin_bottom = 10 -[node name="Lines" type="VBoxContainer" parent="Control/Paper/Margin"] +[node name="Lines" type="VBoxContainer" parent="Score/Paper/Margin"] layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 8 -[node name="Line1" type="HBoxContainer" parent="Control/Paper/Margin/Lines"] +[node name="Line1" type="HBoxContainer" parent="Score/Paper/Margin/Lines"] layout_mode = 2 -[node name="Label" type="Label" parent="Control/Paper/Margin/Lines/Line1"] +[node name="Label" type="Label" parent="Score/Paper/Margin/Lines/Line1"] layout_mode = 2 theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 25 text = "Completed" -[node name="Spacer" type="Control" parent="Control/Paper/Margin/Lines/Line1"] +[node name="Spacer" type="Control" parent="Score/Paper/Margin/Lines/Line1"] layout_mode = 2 size_flags_horizontal = 3 -[node name="Completed" type="Label" parent="Control/Paper/Margin/Lines/Line1"] +[node name="Completed" type="Label" parent="Score/Paper/Margin/Lines/Line1"] custom_minimum_size = Vector2(100, 0) layout_mode = 2 +auto_translate = false theme_override_colors/font_color = Color(0, 0.278431, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 35 text = "0" horizontal_alignment = 1 -[node name="Line2" type="HBoxContainer" parent="Control/Paper/Margin/Lines"] +[node name="Line2" type="HBoxContainer" parent="Score/Paper/Margin/Lines"] layout_mode = 2 -[node name="Label" type="Label" parent="Control/Paper/Margin/Lines/Line2"] +[node name="Label" type="Label" parent="Score/Paper/Margin/Lines/Line2"] layout_mode = 2 theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 25 text = "Failed" -[node name="Spacer" type="Control" parent="Control/Paper/Margin/Lines/Line2"] +[node name="Spacer" type="Control" parent="Score/Paper/Margin/Lines/Line2"] layout_mode = 2 size_flags_horizontal = 3 -[node name="Failed" type="Label" parent="Control/Paper/Margin/Lines/Line2"] +[node name="Failed" type="Label" parent="Score/Paper/Margin/Lines/Line2"] custom_minimum_size = Vector2(100, 0) layout_mode = 2 +auto_translate = false theme_override_colors/font_color = Color(0.505882, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 35 text = "0" horizontal_alignment = 1 -[node name="Line3" type="HBoxContainer" parent="Control/Paper/Margin/Lines"] +[node name="Line3" type="HBoxContainer" parent="Score/Paper/Margin/Lines"] layout_mode = 2 -[node name="Label" type="Label" parent="Control/Paper/Margin/Lines/Line3"] +[node name="Label" type="Label" parent="Score/Paper/Margin/Lines/Line3"] layout_mode = 2 theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 35 text = "Points" -[node name="Spacer" type="Control" parent="Control/Paper/Margin/Lines/Line3"] +[node name="Spacer" type="Control" parent="Score/Paper/Margin/Lines/Line3"] layout_mode = 2 size_flags_horizontal = 3 -[node name="Points" type="Label" parent="Control/Paper/Margin/Lines/Line3"] +[node name="Points" type="Label" parent="Score/Paper/Margin/Lines/Line3"] custom_minimum_size = Vector2(100, 0) layout_mode = 2 +auto_translate = false theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_fonts/font = ExtResource("3_u54fv") theme_override_font_sizes/font_size = 45 text = "0" horizontal_alignment = 1 + +[node name="Time" type="Control" parent="."] +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 8 + +[node name="Paper" type="TextureRect" parent="Time"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -193.0 +offset_top = -208.0 +offset_right = 319.0 +offset_bottom = 304.0 +grow_horizontal = 2 +grow_vertical = 2 +rotation = 0.0610865 +texture = SubResource("NoiseTexture2D_jq3d3") + +[node name="Line" type="HBoxContainer" parent="Time/Paper"] +layout_mode = 0 + +[node name="Seconds" type="Label" parent="Time/Paper/Line"] +custom_minimum_size = Vector2(100, 0) +layout_mode = 2 +auto_translate = false +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("3_u54fv") +theme_override_font_sizes/font_size = 45 +text = "300" +horizontal_alignment = 2 + +[node name="Point" type="Label" parent="Time/Paper/Line"] +layout_mode = 2 +auto_translate = false +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("3_u54fv") +theme_override_font_sizes/font_size = 45 +text = "." +horizontal_alignment = 1 + +[node name="Decimals" type="Label" parent="Time/Paper/Line"] +layout_mode = 2 +auto_translate = false +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("3_u54fv") +theme_override_font_sizes/font_size = 45 +text = "00" diff --git a/client/menu/sounds/failure.ogg b/client/menu/sounds/failure.ogg Binary files differindex cbe6db14..ef6d6ea4 100644 --- a/client/menu/sounds/failure.ogg +++ b/client/menu/sounds/failure.ogg diff --git a/client/multiplayer.gd b/client/multiplayer.gd index 68c0c0f3..eae2a7f0 100644 --- a/client/multiplayer.gd +++ b/client/multiplayer.gd @@ -43,7 +43,9 @@ signal remove_player_item(player: int) signal set_progress(tile: Vector2i, progress: float, warn: bool) signal set_finished(tile: Vector2i, warn: bool) signal set_ingame(state: bool) -signal score(demands_failed: int, demands_completed: int, points: int) +signal score(demands_failed: int, demands_completed: int, points: int, time_remaining: float) +signal hide_score() +signal server_message(text: String) signal connection_closed(reason: String) @@ -71,7 +73,9 @@ func _process(_delta): elif state == WebSocketPeer.STATE_CLOSED: var code = socket.get_close_code() var reason = socket.get_close_reason() - emit_signal("connection_closed", "WebSocket closed with code: %d, reason %s. Clean: %s" % [code, reason, code != -1]) + connection_closed.emit( + "WebSocket closed with code: %d, reason %s. Clean: %s" % [code, reason, code != -1] + ) self.queue_free() func handle_packet(bytes: PackedByteArray): @@ -84,75 +88,65 @@ func handle_packet(bytes: PackedByteArray): match packet_type: "init": var player_id = decoded["id"] - emit_signal("init", player_id) + init.emit(player_id) "data": var item_names = decoded["data"]["item_names"] var tile_names = decoded["data"]["tile_names"] var tile_collide = decoded["data"]["tile_collide"] var tile_interact = decoded["data"]["tile_interact"] - emit_signal("data", - item_names, - tile_names, - tile_collide, - tile_interact - ) + data.emit(item_names, tile_names, tile_collide, tile_interact) "add_player": var id = decoded["id"] var player_name = decoded["name"] var pos = decoded["position"] var character = decoded["character"] - emit_signal("add_player", id, player_name, pos_to_vec2(pos), character) + add_player.emit(id, player_name, pos_to_vec2(pos), character) "remove_player": var id = decoded["id"] - emit_signal("remove_player", id) + remove_player.emit(id) "position": var player = decoded["player"] var pos = decoded["pos"] var rot = decoded["rot"] - emit_signal("position", player, pos_to_vec2(pos), rot) + position.emit(player, pos_to_vec2(pos), rot) "take_item": var tile = pos_to_vec2i(decoded["tile"]) var player = decoded["player"] - emit_signal("take_item", tile, player) + take_item.emit(tile, player) "put_item": var tile = pos_to_vec2i(decoded["tile"]) var player = decoded["player"] - emit_signal("put_item", tile, player) + put_item.emit(tile, player) "set_active": var tile = pos_to_vec2i(decoded["tile"]) var warn = decoded["warn"] var progress = decoded.get("progress") if progress != null: - emit_signal("set_progress", tile, decoded["progress"], warn) + set_progress.emit(tile, decoded["progress"], warn) else: - emit_signal("set_finished", tile, warn) + set_finished.emit(tile, warn) "set_tile_item": var tile = pos_to_vec2i(decoded["tile"]) var item = decoded.get("item") if item != null: - emit_signal("set_tile_item", tile, item) + set_tile_item.emit(tile, item) else: - emit_signal("remove_tile_item", tile) + remove_tile_item.emit(tile) "set_player_item": var player = decoded["player"] var item = decoded.get("item") if item != null: - emit_signal("set_player_item", player, decoded["item"]) + set_player_item.emit(player, decoded["item"]) else: - emit_signal("remove_player_item", player) + remove_player_item.emit(player) "update_map": var tile: Vector2i = pos_to_vec2i(decoded["tile"]) var kind = decoded.get("kind") var neighbors: Array = decoded["neighbors"] if kind != null: - emit_signal( - "set_tile", - tile, - kind, - neighbors, - ) + set_tile.emit(tile, kind, neighbors) else: - emit_signal("remove_tile", tile) + remove_tile.emit(tile) "communicate": var player: int = decoded["player"] var message = decoded.get("message") @@ -162,18 +156,18 @@ func handle_packet(bytes: PackedByteArray): var text = message.get("text") var effect = message.get("effect") if item != null: - emit_signal("item_message", player, item, persist) + item_message.emit(player, item, persist) elif text != null: - emit_signal("text_message", player, text, persist) + text_message.emit(player, text, persist) elif effect != null: - emit_signal("effect_message", player, effect, persist) + effect_message.emit(player, effect, persist) else: push_error("neither text, item nor effect provided") else: - emit_signal("clear_message", player) + clear_message.emit(player) "set_ingame": var state = decoded["state"] - emit_signal("set_ingame", state) + set_ingame.emit(state) "error": var message = decoded["message"] push_warning("server error: %s" % message) @@ -181,7 +175,14 @@ func handle_packet(bytes: PackedByteArray): var demands_failed: int = decoded["demands_failed"] var demands_completed: int = decoded["demands_completed"] var points: int = decoded["points"] - emit_signal("score", demands_failed, demands_completed, points) + var time_remaining = decoded.get("time_remaining") + if time_remaining != null: + score.emit(demands_failed, demands_completed, points, time_remaining) + else: + hide_score.emit() + "server_message": + var text = decoded["text"] + server_message.emit(text) _: push_error("Unrecognized packet type: %s" % packet_type) diff --git a/client/player/effect.gd b/client/player/effect.gd index 8371d99d..fedf548f 100644 --- a/client/player/effect.gd +++ b/client/player/effect.gd @@ -1,18 +1,19 @@ # Undercooked - a game about cooking -# Copyright 2024 nokoe, tpart -# +# Copyright 2024 nokoe +# Copyright 2024 tpart +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, version 3 of the License only. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. -# +# class_name Effect extends Node3D @@ -37,4 +38,8 @@ func set_effect(e: String): push_warning("effect %s unknown" % e) func clear_effect(): - $Stars.emitting = false + stars.emitting = false + success.stop() + angry.emitting = false + angry_grunt.stop_all() + failure.stop() |