aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/audio/play_random.gd4
-rw-r--r--client/audio/play_random.tscn2
-rw-r--r--client/game.gd3
-rw-r--r--client/game.tscn1
-rw-r--r--client/map/items/item.gd9
-rw-r--r--client/map/items/plate.gd9
-rw-r--r--client/map/sounds/plate_down.oggbin0 -> 6900 bytes
-rw-r--r--client/map/sounds/plate_down.ogg.import19
-rw-r--r--client/menu/overlay.gd18
-rw-r--r--client/menu/overlay.tscn121
-rw-r--r--client/menu/sounds/failure.oggbin14740 -> 8296 bytes
-rw-r--r--client/multiplayer.gd67
-rw-r--r--client/player/effect.gd17
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
new file mode 100644
index 00000000..0827d902
--- /dev/null
+++ b/client/map/sounds/plate_down.ogg
Binary files differ
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
index cbe6db14..ef6d6ea4 100644
--- a/client/menu/sounds/failure.ogg
+++ b/client/menu/sounds/failure.ogg
Binary files differ
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()