From 48c9845624c0eb5b9575e2bd0ba9543c3cc9031c Mon Sep 17 00:00:00 2001 From: JonShard Date: Fri, 31 Jul 2026 14:03:53 +0200 Subject: [PATCH] Add Table handles Sides --- Containers/container.gd | 4 + GameManager.gd | 4 +- Prefabs/combinable_item.gd | 14 +- Prefabs/food_item.gd | 1 + Scenes/JonScene.tscn | 359 ++++++++++++++++++++- Scenes/multiplayer_world.gd | 7 +- Stations/hob.gd | 2 +- Stations/sink.gd | 2 +- Stations/table.gd | 181 +++++++---- Stations/table.tscn | 2 +- addons/godot-xr-tools/objects/snap_zone.gd | 4 +- helper.gd | 10 + helper.gd.uid | 1 + library_changes.md | 15 + project.godot | 1 + 15 files changed, 528 insertions(+), 79 deletions(-) create mode 100644 helper.gd create mode 100644 helper.gd.uid diff --git a/Containers/container.gd b/Containers/container.gd index 2ceb2db..aa6322b 100644 --- a/Containers/container.gd +++ b/Containers/container.gd @@ -91,6 +91,10 @@ func _add_item(item: Node3D) -> void: plate_controller.contained_ids = updated NetworkManager.despawn_item(item) + # In case the container is on a table that needs to register this addition, + # ask all table in scene to absorb any new items. + print("Container group call absorb_items()") + get_tree().call_group("table", "absorb_items") func erase_item(item: FoodItem) -> void: diff --git a/GameManager.gd b/GameManager.gd index 2316183..983b434 100644 --- a/GameManager.gd +++ b/GameManager.gd @@ -11,7 +11,7 @@ enum GameState { } static var game_state: GameState = GameState.RUNNING - + static func _restart(): print("restart Game") game_state = GameState.RUNNING @@ -27,6 +27,7 @@ static func get_random_meal() -> String: static func get_random_side() -> String: + print("GameManager: get_random_side() ") if sides_in_play.size() == 0: push_error("GameManager: get_random_side() called but sides_in_play is empty") return "" @@ -35,7 +36,6 @@ static func get_random_side() -> String: return sides_in_play[rand_index] - static func game_over(): print("Game Over") game_state = GameState.GAME_OVER diff --git a/Prefabs/combinable_item.gd b/Prefabs/combinable_item.gd index 5bbefbd..bbd8e2a 100644 --- a/Prefabs/combinable_item.gd +++ b/Prefabs/combinable_item.gd @@ -57,7 +57,7 @@ func _on_body_entered(body: Node3D) -> void: print("CombinableItem _on_body_entered: other is our own pickable") return - var other := _find_food_item(body) + var other := Helper.find_food_item(body) if not other: print("CombinableItem _on_body_entered: other is not a foodItem") return @@ -71,7 +71,7 @@ func _on_body_entered(body: Node3D) -> void: # Instantiate the result of combination and free the two ingredient items func _combine(other_body: Node3D, result: PackedScene) -> void: - print("CombinableItem _combine: combining %s + %s into %s" % [_food_item.id, _find_food_item(other_body).id, result.resource_path]) + print("CombinableItem _combine: combining %s + %s into %s" % [_food_item.id, Helper.find_food_item(other_body).id, result.resource_path]) # Get Snapzone var snap_zone := _pickable.get_picked_up_by() @@ -91,13 +91,3 @@ func _combine(other_body: Node3D, result: PackedScene) -> void: # Snap the result into the now-empty zone. snap_zone.pick_up_object(result_instance) - - -# Find a FoodItem among the direct children of [param node]. -func _find_food_item(node: Node) -> FoodItem: - if not node: - return null - for child in node.get_children(): - if child is FoodItem: - return child - return null diff --git a/Prefabs/food_item.gd b/Prefabs/food_item.gd index 95eb5bd..3d13a01 100644 --- a/Prefabs/food_item.gd +++ b/Prefabs/food_item.gd @@ -7,3 +7,4 @@ enum Type { MEAL, SIDE, INGREDIENT, NONE } @export var id: String @export var type: Type = Type.NONE @export var sell_value = 1 +var is_absorbed = false # Used by tables to keep track of whether the item has been registered as delivered already \ No newline at end of file diff --git a/Scenes/JonScene.tscn b/Scenes/JonScene.tscn index adac1e3..8c9a707 100644 --- a/Scenes/JonScene.tscn +++ b/Scenes/JonScene.tscn @@ -4,12 +4,23 @@ [ext_resource type="PackedScene" uid="uid://j5s5wus7tuhb" path="res://XROrigin.tscn" id="2_o1b3t"] [ext_resource type="Material" uid="uid://cmia50cfqxxo4" path="res://textures/dev_material_3d.tres" id="3_irf4n"] [ext_resource type="Sky" uid="uid://c1abtpwhdm2d5" path="res://textures/sky/NightSkyHDRI009_16K.tres" id="7_n8fyw"] +[ext_resource type="PackedScene" uid="uid://q37nqadkibbp" path="res://scenes/door.tscn" id="10_l51r2"] +[ext_resource type="PackedScene" uid="uid://b3m2ag8g5rj4r" path="res://items/hamburger.tscn" id="11_c8vo7"] +[ext_resource type="PackedScene" uid="uid://da6yrsnxvsrif" path="res://scenes/wall.tscn" id="11_slo47"] +[ext_resource type="PackedScene" uid="uid://bp3v1jl8pctro" path="res://Containers/plate.tscn" id="12_1f3bw"] [ext_resource type="PackedScene" uid="uid://bbg7dwsbxxh1t" path="res://scenes/cube_side_dispense.tscn" id="12_57ppd"] +[ext_resource type="PackedScene" uid="uid://dlw5geheupgpt" path="res://stations/hatch.tscn" id="12_dpf3b"] +[ext_resource type="PackedScene" uid="uid://e4i6o5oriecx" path="res://items/PickupCube.tscn" id="13_1f3bw"] +[ext_resource type="PackedScene" uid="uid://caf0xanmxbshy" path="res://stations/table.tscn" id="13_yjosk"] +[ext_resource type="PackedScene" uid="uid://j7caslh27nor" path="res://stations/Hob.tscn" id="14_2ndvi"] [ext_resource type="PackedScene" uid="uid://clujaf3u776a3" path="res://addons/godot-xr-tools/objects/viewport_2d_in_3d.tscn" id="14_di04w"] [ext_resource type="PackedScene" uid="uid://efaec6ymgabo" path="res://stations/Counter.tscn" id="15_di04w"] [ext_resource type="PackedScene" uid="uid://xtcei2uvd5li" path="res://UI/game_over_panel.tscn" id="15_eoxxy"] -[ext_resource type="PackedScene" uid="uid://bu6jt26pq2y0k" path="res://content/static_resturants/resturant.tscn" id="15_ubjeu"] +[ext_resource type="PackedScene" uid="uid://ck5tuftqmyiue" path="res://stations/plate_dispenser.tscn" id="15_qxyk8"] [ext_resource type="Script" uid="uid://cwijoksyou1ey" path="res://scenes/GameOvercontroler.gd" id="16_n8fyw"] +[ext_resource type="PackedScene" uid="uid://dvrk268s7gkxh" path="res://stations/sink.tscn" id="16_u5c1m"] +[ext_resource type="PackedScene" uid="uid://cwnwo4i28upap" path="res://stations/raw_burger_dispenser.tscn" id="17_y7baw"] +[ext_resource type="PackedScene" uid="uid://c6rift56ql3f8" path="res://stations/BurgerBunsDispenser.tscn" id="18_wvcs1"] [sub_resource type="Environment" id="Environment_bvwq1"] background_mode = 2 @@ -33,6 +44,24 @@ size = Vector3(20, 0.1, 20) [sub_resource type="BoxShape3D" id="BoxShape3D_24d3s"] size = Vector3(20, 10, 0.1) +[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_vlqg6"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_24d3s"] +albedo_color = Color(0.35, 0.12250001, 0.12250001, 1) + +[sub_resource type="PlaneMesh" id="PlaneMesh_vlqg6"] +material = SubResource("StandardMaterial3D_24d3s") +size = Vector2(6, 10) +center_offset = Vector3(3, 0, 0) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_yqrpd"] +albedo_color = Color(0.35, 0.35, 0.35, 1) + +[sub_resource type="PlaneMesh" id="PlaneMesh_kk3mq"] +material = SubResource("StandardMaterial3D_yqrpd") +size = Vector2(6, 10) +center_offset = Vector3(-3, 0, 0) + [node name="Main" type="Node3D" unique_id=1312265607] script = ExtResource("1_57ppd") @@ -111,5 +140,331 @@ script = ExtResource("16_n8fyw") [node name="CubeSideDispenser2" parent="." unique_id=200950572 instance=ExtResource("12_57ppd")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.8484511, 0, 2.9119425) -[node name="Resturant" parent="." unique_id=1083608050 instance=ExtResource("15_ubjeu")] +[node name="Resturant" type="Node3D" parent="." unique_id=1083608050] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.6212463e-05, -0.010500789, 0.0014204979) + +[node name="StaticBody3D" type="StaticBody3D" parent="Resturant" unique_id=1814285538] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Resturant/StaticBody3D" unique_id=1661443874] +shape = SubResource("WorldBoundaryShape3D_vlqg6") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Resturant" unique_id=888732490] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, 0, 0) +mesh = SubResource("PlaneMesh_vlqg6") + +[node name="MeshInstance3D2" type="MeshInstance3D" parent="Resturant" unique_id=836421800] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, 0, 0) +mesh = SubResource("PlaneMesh_kk3mq") + +[node name="Door" parent="Resturant" unique_id=964400290 instance=ExtResource("10_l51r2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.4, 0, 0) + +[node name="Walls" type="Node3D" parent="Resturant" unique_id=1804204696] + +[node name="Wall" parent="Resturant/Walls" unique_id=434181749 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.6000001, 0, 0) + +[node name="Wall2" parent="Resturant/Walls" unique_id=1183111925 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.2, 0, 0) + +[node name="Wall3" parent="Resturant/Walls" unique_id=1561473949 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.8, 0, 0) + +[node name="Wall4" parent="Resturant/Walls" unique_id=1593528497 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.60000014, 0, 0) + +[node name="Wall5" parent="Resturant/Walls" unique_id=2071060763 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.3841858e-07, 0, 0) + +[node name="Wall6" parent="Resturant/Walls" unique_id=1607012472 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5999999, 0, 0) + +[node name="Wall7" parent="Resturant/Walls" unique_id=990512055 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.8, 0, 0) + +[node name="Wall8" parent="Resturant/Walls" unique_id=751907897 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.200001, 0, 0) + +[node name="Wall9" parent="Resturant/Walls" unique_id=358743133 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.6000004, 0, 0) + +[node name="Wall10" parent="Resturant/Walls" unique_id=1374842161 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.2000002, 0, 0) + +[node name="Wall11" parent="Resturant/Walls" unique_id=1408132826 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.8000002, 0, 0) + +[node name="Wall12" parent="Resturant/Walls" unique_id=1937209307 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.60000014, 0, -6) + +[node name="Wall13" parent="Resturant/Walls" unique_id=1714975985 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.3841858e-07, 0, -6) + +[node name="Wall14" parent="Resturant/Walls" unique_id=1732121903 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5999999, 0, -6) + +[node name="Wall15" parent="Resturant/Walls" unique_id=1311494308 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.2000002, 0, -6) + +[node name="Wall16" parent="Resturant/Walls" unique_id=364484178 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.8000002, 0, -6) + +[node name="Wall17" parent="Resturant/Walls" unique_id=485501605 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.3999999, 0, -6) + +[node name="Wall18" parent="Resturant/Walls" unique_id=378206350 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.9999998, 0, -6) + +[node name="Wall19" parent="Resturant/Walls" unique_id=294380188 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.6, 0, -6) + +[node name="Wall20" parent="Resturant/Walls" unique_id=1122365254 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.7999998, 0, -6) + +[node name="Wall21" parent="Resturant/Walls" unique_id=111446334 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.1999998, 0, -6) + +[node name="Wall22" parent="Resturant/Walls" unique_id=999769595 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.6000001, 0, -6) + +[node name="Wall23" parent="Resturant/Walls" unique_id=1832835858 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.0000002, 0, -6) + +[node name="Wall24" parent="Resturant/Walls" unique_id=927052367 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.4, 0, -6) + +[node name="Wall25" parent="Resturant/Walls" unique_id=1163278593 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.2000003, 0, -6) + +[node name="Wall26" parent="Resturant/Walls" unique_id=1074868471 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.8, 0, -6) + +[node name="Wall27" parent="Resturant/Walls" unique_id=510219954 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.2, 0, -6) + +[node name="Wall28" parent="Resturant/Walls" unique_id=1615161517 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.8, 0, -6) + +[node name="Wall29" parent="Resturant/Walls" unique_id=11605666 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.60000014, 0, 6) + +[node name="Wall30" parent="Resturant/Walls" unique_id=2032513926 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.3841858e-07, 0, 6) + +[node name="Wall31" parent="Resturant/Walls" unique_id=1308803807 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5999999, 0, 6) + +[node name="Wall32" parent="Resturant/Walls" unique_id=493869823 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.2000002, 0, 6) + +[node name="Wall33" parent="Resturant/Walls" unique_id=699535234 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.8000002, 0, 6) + +[node name="Wall34" parent="Resturant/Walls" unique_id=238973326 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.3999999, 0, 6) + +[node name="Wall35" parent="Resturant/Walls" unique_id=836717647 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.9999998, 0, 6) + +[node name="Wall36" parent="Resturant/Walls" unique_id=446988148 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.6, 0, 6) + +[node name="Wall37" parent="Resturant/Walls" unique_id=49950412 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.7999998, 0, 6) + +[node name="Wall38" parent="Resturant/Walls" unique_id=607255208 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.1999998, 0, 6) + +[node name="Wall39" parent="Resturant/Walls" unique_id=1089866573 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.6000001, 0, 6) + +[node name="Wall40" parent="Resturant/Walls" unique_id=2078240231 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.0000002, 0, 6) + +[node name="Wall41" parent="Resturant/Walls" unique_id=592669722 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.4, 0, 6) + +[node name="Wall42" parent="Resturant/Walls" unique_id=1393176200 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.2000003, 0, 6) + +[node name="Wall43" parent="Resturant/Walls" unique_id=1885346301 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.8, 0, 6) + +[node name="Wall44" parent="Resturant/Walls" unique_id=2021916640 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.2, 0, 6) + +[node name="Wall45" parent="Resturant/Walls" unique_id=1289086279 instance=ExtResource("11_slo47")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.8, 0, 6) + +[node name="Wall46" parent="Resturant/Walls" unique_id=396503450 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8, 0, 1.2000003) + +[node name="Wall47" parent="Resturant/Walls" unique_id=300373285 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8, 0, 0.6000004) + +[node name="Wall49" parent="Resturant/Walls" unique_id=1072273787 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8, 0, 1.8000002) + +[node name="Wall50" parent="Resturant/Walls" unique_id=896022741 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8, 0, 2.4000006) + +[node name="Wall51" parent="Resturant/Walls" unique_id=2089599721 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8000007, 0, -1.7999992) + +[node name="Wall52" parent="Resturant/Walls" unique_id=965479737 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8000007, 0, -2.3999996) + +[node name="Wall53" parent="Resturant/Walls" unique_id=43762332 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8000007, 0, -3) + +[node name="Wall54" parent="Resturant/Walls" unique_id=921007094 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8000007, 0, -1.1999998) + +[node name="Wall55" parent="Resturant/Walls" unique_id=2144411980 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8, 0, -0.5999994) + +[node name="Wall56" parent="Resturant/Walls" unique_id=370330637 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8, 0, 4.2000003) + +[node name="Wall57" parent="Resturant/Walls" unique_id=537562206 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8, 0, 3.6000004) + +[node name="Wall58" parent="Resturant/Walls" unique_id=1918288432 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8, 0, 3.0000002) + +[node name="Wall59" parent="Resturant/Walls" unique_id=944759951 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8, 0, 4.8000007) + +[node name="Wall60" parent="Resturant/Walls" unique_id=1128237563 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8, 0, 5.4000006) + +[node name="Wall61" parent="Resturant/Walls" unique_id=1755969864 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8000007, 0, -3.5999994) + +[node name="Wall62" parent="Resturant/Walls" unique_id=949006312 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8000007, 0, -4.2) + +[node name="Wall63" parent="Resturant/Walls" unique_id=1826688195 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8000007, 0, -4.799999) + +[node name="Wall64" parent="Resturant/Walls" unique_id=116523059 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -4.8000007, 0, -5.3999996) + +[node name="Wall65" parent="Resturant/Walls" unique_id=711153775 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.8, 0, 1.2000003) + +[node name="Wall66" parent="Resturant/Walls" unique_id=741047 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.8, 0, 0.6000004) + +[node name="Wall67" parent="Resturant/Walls" unique_id=664067327 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.8, 0, 1.8000002) + +[node name="Wall68" parent="Resturant/Walls" unique_id=1294537251 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.8, 0, 2.4000006) + +[node name="Wall69" parent="Resturant/Walls" unique_id=1152383 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.7999997, 0, -1.7999992) + +[node name="Wall70" parent="Resturant/Walls" unique_id=1710172322 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.7999997, 0, -2.3999996) + +[node name="Wall71" parent="Resturant/Walls" unique_id=597518110 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.7999997, 0, -3) + +[node name="Wall72" parent="Resturant/Walls" unique_id=1028573693 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.7999997, 0, -1.1999998) + +[node name="Wall73" parent="Resturant/Walls" unique_id=1232042046 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.8, 0, -0.5999994) + +[node name="Wall74" parent="Resturant/Walls" unique_id=1159091046 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.8, 0, 4.2000003) + +[node name="Wall75" parent="Resturant/Walls" unique_id=904470924 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.8, 0, 3.6000004) + +[node name="Wall76" parent="Resturant/Walls" unique_id=1709758099 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.8, 0, 3.0000002) + +[node name="Wall77" parent="Resturant/Walls" unique_id=1252446997 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.8, 0, 4.8000007) + +[node name="Wall78" parent="Resturant/Walls" unique_id=1207579491 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.8, 0, 5.4000006) + +[node name="Wall79" parent="Resturant/Walls" unique_id=1798073342 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.7999997, 0, -3.5999994) + +[node name="Wall80" parent="Resturant/Walls" unique_id=36005990 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.7999997, 0, -4.2) + +[node name="Wall81" parent="Resturant/Walls" unique_id=79516947 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.7999997, 0, -4.799999) + +[node name="Wall82" parent="Resturant/Walls" unique_id=1363235805 instance=ExtResource("11_slo47")] +transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 4.7999997, 0, -5.3999996) + +[node name="Hatches" type="Node3D" parent="Resturant" unique_id=1561045769] + +[node name="ServingCounter" parent="Resturant/Hatches" unique_id=1341321603 instance=ExtResource("12_dpf3b")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2, 0, 0) + +[node name="ServingCounter2" parent="Resturant/Hatches" unique_id=1325232371 instance=ExtResource("12_dpf3b")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.8000001, 0, 0) + +[node name="ServingCounter3" parent="Resturant/Hatches" unique_id=539914523 instance=ExtResource("12_dpf3b")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.2, 0, 0) + +[node name="ServingCounter4" parent="Resturant/Hatches" unique_id=2078770951 instance=ExtResource("12_dpf3b")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.4, 0, 0) + +[node name="ServingCounter5" parent="Resturant/Hatches" unique_id=2019049083 instance=ExtResource("12_dpf3b")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 0) + +[node name="Table2" parent="Resturant" unique_id=1457688277 instance=ExtResource("13_yjosk")] +transform = Transform3D(1, 0, -1.7484555e-07, 0, 1, 0, 1.7484555e-07, 0, 1, 0.5999999, 0.48000002, -3) + +[node name="Hob" parent="Resturant" unique_id=172418174 instance=ExtResource("14_2ndvi")] +transform = Transform3D(1.3113416e-07, 0, -1, 0, 1, 0, 1, 0, 1.3113416e-07, 4.2000003, 0.54, 1.7999992) + +[node name="Hob2" parent="Resturant" unique_id=980569400 instance=ExtResource("14_2ndvi")] +transform = Transform3D(1.3113416e-07, 0, -1, 0, 1, 0, 1, 0, 1.3113416e-07, 4.200001, 0.54, 1.1999999) + +[node name="Counter" parent="Resturant" unique_id=1487893288 instance=ExtResource("15_di04w")] +transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 4.200001, 0.54, 2.3999996) + +[node name="Counter2" parent="Resturant" unique_id=5128912 instance=ExtResource("15_di04w")] +transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 4.200001, 0.54, 3) + +[node name="Counter3" parent="Resturant" unique_id=1298458612 instance=ExtResource("15_di04w")] +transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 4.2000003, 0.54, 0.5999999) + +[node name="Counter4" parent="Resturant" unique_id=1764980142 instance=ExtResource("15_di04w")] +transform = Transform3D(1.3113416e-07, 0, 1, 0, 1, 0, -1, 0, 1.3113416e-07, 4.7683716e-07, 0.54, 2.3999996) + +[node name="Counter5" parent="Resturant" unique_id=1015820252 instance=ExtResource("15_di04w")] +transform = Transform3D(1.3113416e-07, 0, 1, 0, 1, 0, -1, 0, 1.3113416e-07, 4.7683716e-07, 0.54, 3) + +[node name="PlateDispenser" parent="Resturant" unique_id=710538846 instance=ExtResource("15_qxyk8")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.6) + +[node name="Sink" parent="Resturant" unique_id=2055277359 instance=ExtResource("16_u5c1m")] +transform = Transform3D(-1, 0, 8.742278e-08, 0, 1, 0, -8.742278e-08, 0, -1, 0.6, 0.48000002, -0.6) + +[node name="Counter6" parent="Resturant" unique_id=2141915043 instance=ExtResource("15_di04w")] +transform = Transform3D(-1, 0, 8.742277e-08, 0, 1, 0, -8.742277e-08, 0, -1, 4.7683716e-07, 0.54, -0.6000006) + +[node name="RawBurgerDispenser" parent="Resturant" unique_id=235630131 instance=ExtResource("17_y7baw")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1.2) + +[node name="BurgerBunsDispenser" parent="Resturant" unique_id=1720683779 instance=ExtResource("18_wvcs1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1.8000001) + +[node name="Hamburger" parent="." unique_id=1675596942 instance=ExtResource("11_c8vo7")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8000001, -0.6) + +[node name="Plate" parent="." unique_id=190487773 instance=ExtResource("12_1f3bw")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.3800001, -0.6) + +[node name="PickableObject" parent="." unique_id=1084951838 instance=ExtResource("13_1f3bw")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.6, 1.2, -0.6) diff --git a/Scenes/multiplayer_world.gd b/Scenes/multiplayer_world.gd index 4848afc..2663589 100644 --- a/Scenes/multiplayer_world.gd +++ b/Scenes/multiplayer_world.gd @@ -94,8 +94,8 @@ func _populate_world_if_owner() -> void: layout.queue_free() return + _init_recipes() _populated = true - GameManager.meals_in_play = ["hamburger"] var stations := layout.get_stations() var items := layout.get_items() layout.queue_free() @@ -108,6 +108,11 @@ func _populate_world_if_owner() -> void: NetworkManager.log_line("World populated") +func _init_recipes(): + GameManager.meals_in_play = ["hamburger"] + GameManager.sides_in_play = ["cube"] + + # Free the authored template nodes. Done immediately rather than with # queue_free() so the names are released before the replicated copies are # spawned under the same ones. diff --git a/Stations/hob.gd b/Stations/hob.gd index cbde497..3610cb2 100644 --- a/Stations/hob.gd +++ b/Stations/hob.gd @@ -86,7 +86,7 @@ func _on_object_picked_up(_item) -> void: # The setters above already refresh the display and start the flames. -func _on_object_dropped() -> void: +func _on_object_dropped(_item) -> void: print("Hob: object drop ") time_cooked = 0 cooking_result = "" diff --git a/Stations/sink.gd b/Stations/sink.gd index b9ecec0..f30abb1 100644 --- a/Stations/sink.gd +++ b/Stations/sink.gd @@ -66,7 +66,7 @@ func _on_object_picked_up(_item) -> void: is_washing = plate.is_dirty -func _on_object_dropped() -> void: +func _on_object_dropped(_item) -> void: print("Sink: object drop ") _reset_sink() diff --git a/Stations/table.gd b/Stations/table.gd index 393e4de..a570a74 100644 --- a/Stations/table.gd +++ b/Stations/table.gd @@ -4,9 +4,9 @@ extends StaticBody3D const GAME_MANAGER = preload("res://GameManager.gd") @export var thinking_duration: float = 3.0 -@export var ordering_duration: float = 40.0 -@export var primary_duration: float = 40.0 -@export var friend_duration: float = 10.0 +@export var ordering_duration: float = 50.0 +@export var primary_duration: float = 70.0 +@export var friend_duration: float = 12.0 @export var eating_duration: float = 5.0 @export var money_sound: AudioStream @@ -43,9 +43,59 @@ enum TableState { var _state: TableState = TableState.EMPTY var _state_time: float = 0.0 var _state_duration: float = 0.0 # set in _set_state_time +var _original_orders: Array[String] = [] var _unsatisfied_orders: Array[String] = [] var _players_count: int = 0 + +func place_order() -> void: + print("Table place_order()") + var new_orders: Array[String] = _unsatisfied_orders.duplicate() + new_orders.append(GAME_MANAGER.get_random_meal()) + new_orders.append(GAME_MANAGER.get_random_meal()) + new_orders.append(GAME_MANAGER.get_random_side()) + _unsatisfied_orders = new_orders + _original_orders = _unsatisfied_orders.duplicate() + + +func absorb_items(): + print("Table: absorb_items()") + for snap_zone_node in snap_zones: + var held_object = snap_zone_node.picked_up_object + if not held_object: + continue + + _absorb_item_if_correct(held_object) + + +func satisfyAllOrders() -> void: + print("Table: satisfyAllOrders()") + _unsatisfied_orders.clear() + _original_orders.clear() + clearAllFood() + _setState(TableState.EMPTY) + + +func clearAllFood() -> void: + print("Table: clearAllFood()") + for zone in snap_zones: + var held_object = zone.picked_up_object + if not held_object: + continue + + var plate: PlateController = _get_plate_controller_from_item(held_object) + var food_item: FoodItem = Helper.find_food_item(held_object) + if plate: + plate.container.clear() + plate.is_dirty = true + + # Side or other food item directly on table + elif food_item and food_item.type == FoodItem.Type.SIDE: + zone.drop_object() + NetworkManager.despawn_item(held_object) + + + func _ready() -> void: if not label_3d: push_error("Table is missing reference to Label3D") @@ -85,10 +135,21 @@ func _on_object_picked_up(_item) -> void: _absorb_item_if_correct(_item) -func _on_object_dropped() -> void: - print("Table: object dropped ") +func _on_object_dropped(_item) -> void: + print("Table: object dropped, item: ", _item) + # If then player picks up a food_item (side) the table has already registerd, unregister + var food_item: FoodItem = Helper.find_food_item(_item) + if food_item and food_item.type == FoodItem.Type.SIDE: + var original_count = _original_orders.count(food_item.id) + var unsatisfied_count = _unsatisfied_orders.count(food_item.id) + if original_count > unsatisfied_count: + _unsatisfied_orders.append(food_item.id) +# original : burger cube, cube +# unsatisfied : burger cube +# table : + # There is no on_stay signal, we have to track player with bool func _on_player_enter(_body): _players_count += 1 @@ -107,33 +168,62 @@ func _place_order_if_player(): place_order() _setState(TableState.WAITING_PRIMARY) -func _get_plate_from_item(_item: Node) -> PlateController: - return _item.get_children().filter(func(c): return c is PlateController).front() as PlateController -# TODO: Handle a case where a side is added to a plate after it's served. +# func _get_plate_controller_from_item(_item: Node) -> PlateController: +# return _item.get_children().filter(func(c): return c is PlateController).front() as PlateController + + +func _get_plate_controller_from_item(_item: Node) -> PlateController: + if not _item: + print("_item is null") + return null + + for child in _item.get_children(): + if child is PlateController: + print("found child") + return child + + print("no match") + return null + + func _absorb_item_if_correct(_item: Node) -> void: + print("Table _absorb_item_if_correct, item: ", _item) if not _item: return - - # Get plate controller in childer of _item (hopefully a plate XRpickable) - var plate_controller = _get_plate_from_item(_item) - if not plate_controller: - print("Table: held object is not a Plate") + if not (_state == TableState.WAITING_PRIMARY or _state == TableState.WAITING_FRIEND): return - #print("Table: held a Plate!") - # Absorm items from the plate we want - for food_item in plate_controller.container.contained_items: - #print("Table: held a plate with FoodItem: ", food_item.id) - if food_item.id in _unsatisfied_orders: - print("Table: held a plate with FoodItem that is in unsatisfied orders, removing it") - (plate_controller.get_parent() as XRToolsPickable).get_picked_up_by().enabled = false # Lock meal that is deliverd - _unsatisfied_orders.erase(food_item.id) - _update_state_from_orders() + # Plate: Get plate controller in child of _item (hopefully a plate XRpickable) + var plate_controller = _get_plate_controller_from_item(_item) + print("Table _absorb_item_if_correct plate_controller ref: ", plate_controller) + _item.print_tree_pretty() + + if plate_controller: + # Absorm items from the plate we want + for food_item: FoodItem in plate_controller.container.contained_items: # TOOD: handle registering the meal again when a side is added to the plate + if food_item.id in _unsatisfied_orders and not food_item.is_absorbed: + print("Table: _absorb_item_if_correct held a plate with FoodItem that is in unsatisfied orders, removing it") + (plate_controller.get_parent() as XRToolsPickable).get_picked_up_by().enabled = false # Lock meal that is deliverd + _unsatisfied_orders.erase(food_item.id) + food_item.is_absorbed = true + _update_state_from_orders() + return + + # Side pickable item, no container + var food_item: FoodItem = Helper.find_food_item(_item) + if food_item and food_item.type == FoodItem.Type.SIDE: + print("Table: _absorb_item_if_correct held a side that is in unsatisfied orders, removing it") + # Do not lock snap zone here. Problem if table want many meals, but to many sides have filled up slots, so can't place plates. + _unsatisfied_orders.erase(food_item.id) + _update_state_from_orders() + return + + print("Table: absorb_item_if_correct() held object is not a Plate or Side") func _update_state_from_orders(): - print("Table _update_state_from_orders: ", _unsatisfied_orders) + print("Table _update_state_from_orders: unsatisfied_orders: ", _unsatisfied_orders) if _unsatisfied_orders.size() > 0 and _state != TableState.EATING: _setState(TableState.WAITING_FRIEND) @@ -142,43 +232,21 @@ func _update_state_from_orders(): _setState(TableState.EATING) -func _collect_money_from_plates(): +func _collect_money_from_food(): for snap_zone_node in snap_zones: var held_object = snap_zone_node.picked_up_object if not held_object: continue - var plate: PlateController = _get_plate_from_item(held_object) - for fi: FoodItem in plate.get_food_items(): - GAME_MANAGER.money += fi.sell_value - print("Table _collect_money_from_plates(), money: ", GAME_MANAGER.money) - -func place_order() -> void: - print("Table place_order()") - var new_orders = _unsatisfied_orders.duplicate() - new_orders.append(GAME_MANAGER.get_random_meal()) - new_orders.append(GAME_MANAGER.get_random_meal()) - _unsatisfied_orders = new_orders - - -func satisfyAllOrders() -> void: - print("Table: satisfyAllOrders()") - _unsatisfied_orders.clear() - clearAllPlates() - _setState(TableState.EMPTY) - - -func clearAllPlates() -> void: - print("Table: clearAllPlates()") - for snap_zone_node in snap_zones: - var held_object = snap_zone_node.picked_up_object - if not held_object: - continue - - var plate = _get_plate_from_item(held_object) + var plate: PlateController = _get_plate_controller_from_item(held_object) + var food_item: FoodItem = Helper.find_food_item(held_object) if plate: - plate.container.clear() - plate.is_dirty = true + for fi: FoodItem in plate.get_food_items(): + GAME_MANAGER.money += fi.sell_value + elif food_item: + GAME_MANAGER.money += food_item.sell_value + + print("Table _collect_money_from_food(), money: ", GAME_MANAGER.money) func _set_snap_zones_enabled(value: bool) -> void: @@ -219,14 +287,13 @@ func _setState(newState: TableState) -> void: TableState.EATING: _state_time = eating_duration _state_duration = eating_duration - _collect_money_from_plates() + _collect_money_from_food() _set_snap_zones_enabled(false) audio_player.stream = money_sound audio_player.play() _state = newState - # When state timer is finished, do this stuff before moving to next state func _state_end(oldState: TableState): print("Table State END : ", TableState.keys()[oldState]) @@ -239,7 +306,7 @@ func _state_end(oldState: TableState): _setState(TableState.ORDERING) TableState.EATING: - clearAllPlates() + clearAllFood() _set_snap_zones_enabled(true) _setState(TableState.EMPTY) diff --git a/Stations/table.tscn b/Stations/table.tscn index 194a656..de852e1 100644 --- a/Stations/table.tscn +++ b/Stations/table.tscn @@ -29,7 +29,7 @@ properties/2/replication_mode = 1 [sub_resource type="BoxShape3D" id="BoxShape3D_vlqg6"] size = Vector3(2.1, 0.5, 2.1) -[node name="Table" type="StaticBody3D" unique_id=1863572470 groups=["station"]] +[node name="Table" type="StaticBody3D" unique_id=1863572470 groups=["station", "table"]] script = ExtResource("1_2vcpj") money_sound = ExtResource("2_jslhm") diff --git a/addons/godot-xr-tools/objects/snap_zone.gd b/addons/godot-xr-tools/objects/snap_zone.gd index 3616175..88d8eb1 100644 --- a/addons/godot-xr-tools/objects/snap_zone.gd +++ b/addons/godot-xr-tools/objects/snap_zone.gd @@ -7,7 +7,7 @@ extends Area3D signal has_picked_up(what) ## Signal emitted when the snap-zone drops something -signal has_dropped +signal has_dropped(what) # Signal emitted when the highlight state changes signal highlight_updated(pickable, enable) @@ -164,9 +164,9 @@ func drop_object() -> void: return # let go of this object + has_dropped.emit(picked_up_object) picked_up_object.let_go(self, Vector3.ZERO, Vector3.ZERO) picked_up_object = null - has_dropped.emit() highlight_updated.emit(self, enabled) diff --git a/helper.gd b/helper.gd new file mode 100644 index 0000000..2857263 --- /dev/null +++ b/helper.gd @@ -0,0 +1,10 @@ +class_name Helper + +# Find a FoodItem among the direct children of [param node]. +static func find_food_item(node: Node) -> FoodItem: + if not node: + return null + for child in node.get_children(): + if child is FoodItem: + return child + return null diff --git a/helper.gd.uid b/helper.gd.uid new file mode 100644 index 0000000..004e047 --- /dev/null +++ b/helper.gd.uid @@ -0,0 +1 @@ +uid://cx1wi21lhnimb diff --git a/library_changes.md b/library_changes.md index 4c14be1..9b0b0de 100644 --- a/library_changes.md +++ b/library_changes.md @@ -4,3 +4,18 @@ function_pickup.gd: Add nil check in func _pick_up_object(target: Node3D) 440: if target and target.has_method("pick_up"): target.pick_up(self) + + +Add (what) to singal dropped in snap_zone + signal has_dropped(what) + # Pickup Method: Drop the currently picked up object + ... + func drop_object() -> void: + if not is_instance_valid(picked_up_object): + return + + # let go of this object + has_dropped.emit(picked_up_object) + picked_up_object.let_go(self, Vector3.ZERO, Vector3.ZERO) + picked_up_object = null + highlight_updated.emit(self, enabled) diff --git a/project.godot b/project.godot index 16b6ec2..59ec8c7 100644 --- a/project.godot +++ b/project.godot @@ -46,6 +46,7 @@ import/blender/enabled=false platalbe_item="Meals, sides, augments for meals" station="Hobs, Counters ..." +table="all nodes with table script" [input]