aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/game.gd23
-rw-r--r--client/menu/setup_menu.tscn26
-rw-r--r--client/multiplayer.gd18
-rw-r--r--client/player/character/character.tscn2
-rw-r--r--client/player/effect.gd28
-rw-r--r--client/player/effect.tscn10
-rw-r--r--client/player/item_bubble.gd3
-rw-r--r--client/player/player.gd40
-rw-r--r--client/player/stars.tscn2
9 files changed, 121 insertions, 31 deletions
diff --git a/client/game.gd b/client/game.gd
index 799b987b..a2893cc8 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -149,32 +149,37 @@ func _ready():
t.finish(warn)
)
- mp.text_message.connect(func(player: int, text: String):
+ mp.text_message.connect(func(player: int, text: String, persist: bool):
var p: Player = players[player]
- p.chat_bubble.set_text(text)
+ p.text_message(text, persist)
)
- mp.clear_message.connect(func(player: int):
+ mp.item_message.connect(func(player: int, item: int, persist: bool):
+ var p: Player = players[player]
+ p.item_message(item_names[item], persist)
+ )
+
+ mp.effect_message.connect(func(player: int, effect: String, persist: bool):
var p: Player = players[player]
- p.item_bubble.remove_item()
- p.chat_bubble.remove_text()
+ p.effect_message(effect, persist)
)
- mp.item_message.connect(func(player: int, item: int):
+ mp.clear_message.connect(func(player: int):
var p: Player = players[player]
- p.item_bubble.set_item(item_names[item])
+ p.clear_message()
)
+
mp.send_join(Global.profile["username"], Global.profile["character"])
mp.set_ingame.connect(func (state):
- if state:
+ if state:
await transition.fade_out()
map.gi_bake()
await transition.fade_in()
map.autobake = true
else:
- map.autobake = false
+ map.autobake = false
await transition.fade_out()
)
diff --git a/client/menu/setup_menu.tscn b/client/menu/setup_menu.tscn
index 98eb9e66..c1d796ef 100644
--- a/client/menu/setup_menu.tscn
+++ b/client/menu/setup_menu.tscn
@@ -3,34 +3,34 @@
[ext_resource type="Script" path="res://menu/setup_menu.gd" id="1_mo46n"]
[ext_resource type="Theme" uid="uid://ci2qajdoa1an1" path="res://menu/theme/paper.tres" id="1_yq0aa"]
-[sub_resource type="Animation" id="Animation_s1to2"]
-resource_name = "paper_slide"
+[sub_resource type="Animation" id="Animation_m4a1a"]
+length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("ScrollContainer:position")
-tracks/0/interp = 2
+tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
-"times": PackedFloat32Array(0, 1),
-"transitions": PackedFloat32Array(1, 1),
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
"update": 0,
-"values": [Vector2(0, 600), Vector2(0, 0)]
+"values": [Vector2(0, 0)]
}
-[sub_resource type="Animation" id="Animation_m4a1a"]
-length = 0.001
+[sub_resource type="Animation" id="Animation_s1to2"]
+resource_name = "paper_slide"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("ScrollContainer:position")
-tracks/0/interp = 1
+tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
-"times": PackedFloat32Array(0),
-"transitions": PackedFloat32Array(1),
+"times": PackedFloat32Array(0, 1),
+"transitions": PackedFloat32Array(1, 1),
"update": 0,
-"values": [Vector2(0, 0)]
+"values": [Vector2(0, 600), Vector2(0, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_wjgak"]
@@ -86,6 +86,8 @@ layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
+offset_right = 1152.0
+offset_bottom = 648.0
grow_horizontal = 2
grow_vertical = 2
horizontal_scroll_mode = 0
diff --git a/client/multiplayer.gd b/client/multiplayer.gd
index 6ea36595..68c0c0f3 100644
--- a/client/multiplayer.gd
+++ b/client/multiplayer.gd
@@ -28,8 +28,9 @@ signal data(
signal set_tile(tile: Vector2i, kind: int, neighbors: Array)
signal remove_tile(tile: Vector2i)
signal clear_message(player: int)
-signal text_message(player: int, text: String)
-signal item_message(player: int, item: int)
+signal text_message(player: int, text: String, persist: bool)
+signal item_message(player: int, item: int, persist: bool)
+signal effect_message(player: int, effect: String, persist: bool)
signal add_player(player: int, name: String, pos: Vector2, character: int)
signal remove_player(player: int)
signal position(player: int, position: Vector2, rotation: float)
@@ -153,17 +154,21 @@ func handle_packet(bytes: PackedByteArray):
else:
emit_signal("remove_tile", tile)
"communicate":
- var player = decoded["player"]
+ var player: int = decoded["player"]
var message = decoded.get("message")
+ var persist: bool = decoded["persist"]
if message != null:
var item = message.get("item")
var text = message.get("text")
+ var effect = message.get("effect")
if item != null:
- emit_signal("item_message", player, item)
+ emit_signal("item_message", player, item, persist)
elif text != null:
- emit_signal("text_message", player, text)
+ emit_signal("text_message", player, text, persist)
+ elif effect != null:
+ emit_signal("effect_message", player, effect, persist)
else:
- push_error("neither text nor item provided")
+ push_error("neither text, item nor effect provided")
else:
emit_signal("clear_message", player)
"set_ingame":
@@ -204,6 +209,7 @@ func send_interact(pos: Vector2i, edge: bool):
func send_chat(message: String):
send_packet({
"type": "communicate",
+ "persist": false,
"message": {
"text": message
}
diff --git a/client/player/character/character.tscn b/client/player/character/character.tscn
index cb5aa988..d55296a5 100644
--- a/client/player/character/character.tscn
+++ b/client/player/character/character.tscn
@@ -575,7 +575,7 @@ height = 0.2
_data = [Vector2(0, 0.054945), 0.0, 0.0, 0, 0, Vector2(0.174157, 1), 0.0, 0.0, 0, 0, Vector2(0.573034, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 4
-[node name="guy" type="Node3D"]
+[node name="Character" type="Node3D"]
script = ExtResource("1_12lbh")
[node name="Main" type="MeshInstance3D" parent="."]
diff --git a/client/player/effect.gd b/client/player/effect.gd
new file mode 100644
index 00000000..eba2e66f
--- /dev/null
+++ b/client/player/effect.gd
@@ -0,0 +1,28 @@
+# Undercooked - a game about cooking
+# Copyright 2024 nokoe
+#
+# 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
+
+func set_effect(e: String):
+ clear_effect()
+ match e:
+ "satisfied":
+ $Stars.emitting = true
+ _:
+ push_warning("effect %s unknown" % e)
+
+func clear_effect():
+ $Stars.emitting = false
diff --git a/client/player/effect.tscn b/client/player/effect.tscn
new file mode 100644
index 00000000..787997e9
--- /dev/null
+++ b/client/player/effect.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=3 format=3 uid="uid://dn2ne30t81ame"]
+
+[ext_resource type="Script" path="res://player/effect.gd" id="1_aqsk6"]
+[ext_resource type="PackedScene" uid="uid://yaed1vnhd0aa" path="res://player/stars.tscn" id="2_shb5l"]
+
+[node name="Effect" type="Node3D"]
+script = ExtResource("1_aqsk6")
+
+[node name="Stars" parent="." instance=ExtResource("2_shb5l")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
diff --git a/client/player/item_bubble.gd b/client/player/item_bubble.gd
index e57fbace..6bfe60b1 100644
--- a/client/player/item_bubble.gd
+++ b/client/player/item_bubble.gd
@@ -29,7 +29,8 @@ func set_item(t: String):
func remove_item():
visible = false
- item.queue_free()
+ if item != null:
+ item.queue_free()
func _process(delta):
if item != null:
diff --git a/client/player/player.gd b/client/player/player.gd
index b20eba14..75e3861e 100644
--- a/client/player/player.gd
+++ b/client/player/player.gd
@@ -30,6 +30,9 @@ var position_anim = Vector2(0, 0)
var character: Character = preload("res://player/character/character.tscn").instantiate()
var chat_bubble: ChatBubble = preload("res://player/chat_bubble.tscn").instantiate()
var item_bubble: ItemBubble = preload("res://player/item_bubble.tscn").instantiate()
+var effect: Effect = preload("res://player/effect.tscn").instantiate()
+
+var clear_timer: Timer = Timer.new()
var hand: Item = null
var hand_base: Node3D = Node3D.new()
@@ -50,12 +53,18 @@ func _init(_id: int, new_name: String, pos: Vector2, new_character_idx: int, new
add_child(chat_bubble)
add_child(item_bubble)
-
+ add_child(effect)
+
+ clear_timer.one_shot = true
+ clear_timer.wait_time = 5.
+ add_child(clear_timer)
+
character_idx = new_character_idx
-
+
func _ready():
character.select_hairstyle(character_idx)
+ clear_timer.timeout.connect(clear_message)
func update_position(new_position: Vector2, new_rotation: float):
position_ = new_position
@@ -97,3 +106,30 @@ func _process(delta):
position.z = position_anim.y
rotation.y = rotation_anim
character.walking = position_.distance_squared_to(position_anim) > 0.001
+
+
+func clear_message():
+ item_bubble.remove_item()
+ chat_bubble.remove_text()
+ effect.clear_effect()
+
+func item_message(item_name: String, persist: bool):
+ item_bubble.set_item(item_name)
+ if persist:
+ clear_timer.stop()
+ else:
+ clear_timer.start()
+
+func text_message(m: String, persist: bool):
+ chat_bubble.set_text(m)
+ if persist:
+ clear_timer.stop()
+ else:
+ clear_timer.start()
+
+func effect_message(effect_name: String, persist: bool):
+ effect.set_effect(effect_name)
+ if persist:
+ clear_timer.stop()
+ else:
+ clear_timer.start()
diff --git a/client/player/stars.tscn b/client/player/stars.tscn
index e3fcc587..5c96c291 100644
--- a/client/player/stars.tscn
+++ b/client/player/stars.tscn
@@ -22,8 +22,10 @@ offsets = PackedFloat32Array(0, 0.711828, 1)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
[node name="Stars" type="CPUParticles3D"]
+emitting = false
amount = 5
lifetime = 2.0
+one_shot = true
explosiveness = 1.0
mesh = SubResource("QuadMesh_d0lru")
direction = Vector3(0, 1, 0)