Compare commits
11 Commits
20a437681a
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
| cd466c73b5 | |||
| acb96933a7 | |||
| d895bc0a47 | |||
| 4f9e22f0b9 | |||
| d83e276c52 | |||
| 0bb00735b2 | |||
| 4a8d5b879e | |||
| 1a7f641974 | |||
| f0bb044d12 | |||
| 08c3950583 | |||
| 9f33ee68c2 |
@@ -0,0 +1,13 @@
|
||||
# Instructions
|
||||
|
||||
- Never do any commits.
|
||||
- Keep answers short and concise.
|
||||
- Don't do huge comments. Make them very short and only when necessary.
|
||||
- Any comment that doesn't add more context than the code already provides should be omitted.
|
||||
- Match the comment style of the rest of the project.
|
||||
- Instead of commenting a block about what a function does, use short one-liner comments over sections of code within it. For example, where there are nested for loops and if statements, have one comment saying `# Find node based on criteria`.
|
||||
- Always check syntax with the game engine.
|
||||
- Read logs to confirm expected behavior when possible.
|
||||
|
||||
## About the project
|
||||
- All players will always play as clients. The server will be headless.
|
||||
+15
-55
@@ -1,94 +1,54 @@
|
||||
[gd_scene format=3 uid="uid://c0lknik4noobs"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c8l60rnugru40" path="res://addons/godot-xr-tools/objects/pickable.tscn" id="1_g1t48"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="2_rwqhn"]
|
||||
[ext_resource type="Animation" uid="uid://s1vqcxyqcvea" path="res://addons/godot-xr-tools/hands/animations/right/Grip 5.res" id="3_qaxva"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="4_wb51u"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="5_wqyr2"]
|
||||
[ext_resource type="Animation" uid="uid://bediglpx0rj7i" path="res://addons/godot-xr-tools/hands/animations/left/Grip 5.res" id="6_ftab3"]
|
||||
[ext_resource type="PackedScene" uid="uid://3lr2dhy62rhk" path="res://prefabs/combinable_item.tscn" id="7_wb51u"]
|
||||
[ext_resource type="PackedScene" uid="uid://bfj80jh13t6e5" path="res://prefabs/food_item.tscn" id="8_t9y3x"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5ukku8i0hilb" path="res://prefabs/despawning_item.tscn" id="10_46e7r"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="20_netpk"]
|
||||
[ext_resource type="PackedScene" uid="uid://d8jo0402pgl6" path="res://abstract/food_item.tscn" id="1_food_item"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_vlqg6"]
|
||||
height = 0.10708985
|
||||
radius = 0.107910156
|
||||
|
||||
[sub_resource type="Resource" id="Resource_wkb0k"]
|
||||
script = ExtResource("4_wb51u")
|
||||
closed_pose = ExtResource("3_qaxva")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_j68hc"]
|
||||
script = ExtResource("4_wb51u")
|
||||
closed_pose = ExtResource("6_ftab3")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hoqox"]
|
||||
albedo_color = Color(0.6784191, 0.54546416, 0.016760282, 1)
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_np_buns"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = false
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:quaternion")
|
||||
properties/1/spawn = false
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("NetPickable:net_held_by")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
|
||||
[node name="BurgerBuns" unique_id=1088240294 instance=ExtResource("1_g1t48")]
|
||||
second_hand_grab = 1
|
||||
[node name="BurgerBuns" unique_id=1088240294 instance=ExtResource("1_food_item")]
|
||||
|
||||
[node name="CollisionShape3D" parent="." index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.05776599, 0)
|
||||
shape = SubResource("CylinderShape3D_vlqg6")
|
||||
|
||||
[node name="GrabPointHandRight" parent="." index="1" unique_id=141610509 instance=ExtResource("2_rwqhn")]
|
||||
transform = Transform3D(0.9978254, -0.06591213, 0, 0.06591213, 0.9978254, 0, 0, 0, 1, 0.08952884, 0.07439406, -0.056857675)
|
||||
hand_pose = SubResource("Resource_wkb0k")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="." index="2" unique_id=826213104 instance=ExtResource("5_wqyr2")]
|
||||
[node name="GrabPointHandLeft" parent="." index="1"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.08001605, 0.07612594, -0.05340144)
|
||||
hand_pose = SubResource("Resource_j68hc")
|
||||
|
||||
[node name="CSGCombiner3DBuns" type="CSGCombiner3D" parent="." index="3" unique_id=178629624]
|
||||
[node name="GrabPointHandRight" parent="." index="2"]
|
||||
transform = Transform3D(0.9978254, -0.06591213, 0, 0.06591213, 0.9978254, 0, 0, 0, 1, 0.08952884, 0.07439406, -0.056857675)
|
||||
|
||||
[node name="FoodItem" parent="." index="3"]
|
||||
id = "burger_buns"
|
||||
type = 2
|
||||
sell_value = 1
|
||||
|
||||
[node name="CSGCombiner3DBuns" type="CSGCombiner3D" parent="Model" index="0" unique_id=178629624]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.021904588, 0.025076538, -0.0044593215)
|
||||
autosmooth = true
|
||||
smoothing_angle = 138.9
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="CSGCombiner3DBuns" index="0" unique_id=110174152]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Model/CSGCombiner3DBuns" index="0" unique_id=110174152]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.004122257, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_hoqox")
|
||||
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="CSGCombiner3DBuns" index="1" unique_id=2003491826]
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="Model/CSGCombiner3DBuns" index="1" unique_id=2003491826]
|
||||
transform = Transform3D(0.82770383, -0.5611652, 0, 0.5611652, 0.82770383, 0, 0, 0, 1, -0.048392475, 0.029736161, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_hoqox")
|
||||
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="CSGCombiner3DBuns/CSGCylinder3D3" index="0" unique_id=391028348]
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="Model/CSGCombiner3DBuns/CSGCylinder3D3" index="0" unique_id=391028348]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.9604645e-08, 0.040259957, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
cone = true
|
||||
material = SubResource("StandardMaterial3D_hoqox")
|
||||
|
||||
[node name="FoodItem" parent="." index="4" unique_id=123456789 instance=ExtResource("8_t9y3x")]
|
||||
id = "burger_buns"
|
||||
type = 2
|
||||
|
||||
[node name="CombinableItem" parent="." index="5" unique_id=996936271 instance=ExtResource("7_wb51u")]
|
||||
|
||||
[node name="NetPickable" type="MultiplayerSynchronizer" parent="." index="6" unique_id=2086885420]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_buns")
|
||||
script = ExtResource("20_netpk")
|
||||
|
||||
[node name="DespawningItem" parent="." index="7" unique_id=303090111 instance=ExtResource("10_46e7r")]
|
||||
|
||||
+7
-52
@@ -1,15 +1,6 @@
|
||||
[gd_scene format=3 uid="uid://cucc3gaqu2nab"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c8l60rnugru40" path="res://addons/godot-xr-tools/objects/pickable.tscn" id="1_r73y2"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="2_nfmuy"]
|
||||
[ext_resource type="Animation" uid="uid://db62hs5s4n2b3" path="res://addons/godot-xr-tools/hands/animations/left/Grip 4.res" id="3_bsb6f"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="4_mgacb"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="5_vw7i6"]
|
||||
[ext_resource type="Animation" uid="uid://d1xnpyc08njjx" path="res://addons/godot-xr-tools/hands/animations/right/Grip 4.res" id="6_cp3eg"]
|
||||
[ext_resource type="PackedScene" uid="uid://bfj80jh13t6e5" path="res://prefabs/food_item.tscn" id="7_mde49"]
|
||||
[ext_resource type="PackedScene" uid="uid://3lr2dhy62rhk" path="res://prefabs/combinable_item.tscn" id="8_wmrff"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5ukku8i0hilb" path="res://prefabs/despawning_item.tscn" id="10_6ypk4"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="20_netpk"]
|
||||
[ext_resource type="PackedScene" uid="uid://d8jo0402pgl6" path="res://abstract/food_item.tscn" id="1_food_item"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_gkni8"]
|
||||
height = 0.1
|
||||
@@ -24,52 +15,16 @@ top_radius = 0.1
|
||||
bottom_radius = 0.1
|
||||
height = 0.1
|
||||
|
||||
[sub_resource type="Resource" id="Resource_lc22d"]
|
||||
script = ExtResource("4_mgacb")
|
||||
closed_pose = ExtResource("3_bsb6f")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qyiot"]
|
||||
script = ExtResource("4_mgacb")
|
||||
closed_pose = ExtResource("6_cp3eg")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_np_charcoal"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = false
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:quaternion")
|
||||
properties/1/spawn = false
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("NetPickable:net_held_by")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
|
||||
[node name="PickableObject" unique_id=1675596942 instance=ExtResource("1_r73y2")]
|
||||
second_hand_grab = 1
|
||||
[node name="PickableObject" unique_id=1675596942 instance=ExtResource("1_food_item")]
|
||||
|
||||
[node name="CollisionShape3D" parent="." index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
|
||||
shape = SubResource("CylinderShape3D_gkni8")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="." index="1" unique_id=1223689787]
|
||||
mesh = SubResource("CylinderMesh_vebgy")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="." index="2" unique_id=1571481674 instance=ExtResource("2_nfmuy")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.067650706, 0.04601878, -0.08606844)
|
||||
hand_pose = SubResource("Resource_lc22d")
|
||||
|
||||
[node name="GrabPointHandRight" parent="." index="3" unique_id=514404634 instance=ExtResource("5_vw7i6")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.06531982, 0.042291984, -0.08604182)
|
||||
hand_pose = SubResource("Resource_qyiot")
|
||||
|
||||
[node name="FoodItem" parent="." index="4" unique_id=345678912 instance=ExtResource("7_mde49")]
|
||||
[node name="FoodItem" parent="." index="3"]
|
||||
id = "charcoal"
|
||||
type = 2
|
||||
sell_value = 1
|
||||
|
||||
[node name="CombinableItem" parent="." index="5" unique_id=996936271 instance=ExtResource("8_wmrff")]
|
||||
|
||||
[node name="NetPickable" type="MultiplayerSynchronizer" parent="." index="6" unique_id=1070495412]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_charcoal")
|
||||
script = ExtResource("20_netpk")
|
||||
|
||||
[node name="DespawningItem" parent="." index="7" unique_id=303090111 instance=ExtResource("10_6ypk4")]
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Model" index="0" unique_id=1223689787]
|
||||
mesh = SubResource("CylinderMesh_vebgy")
|
||||
|
||||
+7
-52
@@ -1,15 +1,6 @@
|
||||
[gd_scene format=3 uid="uid://e4i6o5oriecx"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c8l60rnugru40" path="res://addons/godot-xr-tools/objects/pickable.tscn" id="1_dbtw8"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="2_pxnkq"]
|
||||
[ext_resource type="Animation" uid="uid://db62hs5s4n2b3" path="res://addons/godot-xr-tools/hands/animations/left/Grip 4.res" id="3_iqyul"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="4_hc3f7"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="5_a0a5b"]
|
||||
[ext_resource type="Animation" uid="uid://d1xnpyc08njjx" path="res://addons/godot-xr-tools/hands/animations/right/Grip 4.res" id="6_bdp75"]
|
||||
[ext_resource type="PackedScene" uid="uid://3lr2dhy62rhk" path="res://prefabs/combinable_item.tscn" id="7_bdp75"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5ukku8i0hilb" path="res://prefabs/despawning_item.tscn" id="10_uygc5"]
|
||||
[ext_resource type="PackedScene" uid="uid://bfj80jh13t6e5" path="res://prefabs/food_item.tscn" id="11_vjw41"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="20_netpk"]
|
||||
[ext_resource type="PackedScene" uid="uid://d8jo0402pgl6" path="res://abstract/food_item.tscn" id="1_food_item"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_m1xbq"]
|
||||
size = Vector3(0.1, 0.1, 0.1)
|
||||
@@ -21,52 +12,16 @@ albedo_color = Color(0.1764706, 1, 1, 1)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
size = Vector3(0.1, 0.1, 0.1)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_lc22d"]
|
||||
script = ExtResource("4_hc3f7")
|
||||
closed_pose = ExtResource("3_iqyul")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qyiot"]
|
||||
script = ExtResource("4_hc3f7")
|
||||
closed_pose = ExtResource("6_bdp75")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_np_cube"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = false
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:quaternion")
|
||||
properties/1/spawn = false
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("NetPickable:net_held_by")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
|
||||
[node name="PickableObject" unique_id=1675596942 groups=["platalbe_item"] instance=ExtResource("1_dbtw8")]
|
||||
second_hand_grab = 1
|
||||
[node name="PickableObject" unique_id=1675596942 groups=["platalbe_item"] instance=ExtResource("1_food_item")]
|
||||
|
||||
[node name="CollisionShape3D" parent="." index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
|
||||
shape = SubResource("BoxShape3D_m1xbq")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="." index="1" unique_id=1223689787]
|
||||
mesh = SubResource("BoxMesh_vlqg6")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="." index="2" unique_id=1571481674 instance=ExtResource("2_pxnkq")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.067650706, 0.04601878, -0.08606844)
|
||||
hand_pose = SubResource("Resource_lc22d")
|
||||
|
||||
[node name="GrabPointHandRight" parent="." index="3" unique_id=514404634 instance=ExtResource("5_a0a5b")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.06531982, 0.042291984, -0.08604182)
|
||||
hand_pose = SubResource("Resource_qyiot")
|
||||
|
||||
[node name="FoodItem" parent="." index="4" unique_id=63948206 instance=ExtResource("11_vjw41")]
|
||||
[node name="FoodItem" parent="." index="3"]
|
||||
id = "cube"
|
||||
type = 1
|
||||
sell_value = 1
|
||||
|
||||
[node name="CombinableItem" parent="." index="5" unique_id=996936271 instance=ExtResource("7_bdp75")]
|
||||
|
||||
[node name="NetPickable" type="MultiplayerSynchronizer" parent="." index="6" unique_id=1858332513]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_cube")
|
||||
script = ExtResource("20_netpk")
|
||||
|
||||
[node name="DespawningItem" parent="." index="7" unique_id=303090111 instance=ExtResource("10_uygc5")]
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Model" index="0" unique_id=1223689787]
|
||||
mesh = SubResource("BoxMesh_vlqg6")
|
||||
|
||||
+11
-53
@@ -1,15 +1,7 @@
|
||||
[gd_scene format=3 uid="uid://dpot5qie20vf6"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c8l60rnugru40" path="res://addons/godot-xr-tools/objects/pickable.tscn" id="1_fco8w"]
|
||||
[ext_resource type="PackedScene" uid="uid://d8jo0402pgl6" path="res://abstract/food_item.tscn" id="1_food_item"]
|
||||
[ext_resource type="Texture2D" uid="uid://7jt8macx4f5m" path="res://textures/1.png" id="2_r8jvx"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="3_qixic"]
|
||||
[ext_resource type="Animation" uid="uid://db62hs5s4n2b3" path="res://addons/godot-xr-tools/hands/animations/left/Grip 4.res" id="4_bw8vh"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="5_w8sii"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="6_mvnl5"]
|
||||
[ext_resource type="Animation" uid="uid://d1xnpyc08njjx" path="res://addons/godot-xr-tools/hands/animations/right/Grip 4.res" id="7_wqxjj"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5ukku8i0hilb" path="res://prefabs/despawning_item.tscn" id="10_l4hsd"]
|
||||
[ext_resource type="PackedScene" uid="uid://bfj80jh13t6e5" path="res://prefabs/food_item.tscn" id="10_yxtxs"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="20_netpk"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_fco8w"]
|
||||
height = 0.0338974
|
||||
@@ -18,56 +10,22 @@ radius = 0.08544922
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_bvwq1"]
|
||||
albedo_texture = ExtResource("2_r8jvx")
|
||||
|
||||
[sub_resource type="Resource" id="Resource_lc22d"]
|
||||
script = ExtResource("5_w8sii")
|
||||
closed_pose = ExtResource("4_bw8vh")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qyiot"]
|
||||
script = ExtResource("5_w8sii")
|
||||
closed_pose = ExtResource("7_wqxjj")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_np_burger"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = false
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:quaternion")
|
||||
properties/1/spawn = false
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("NetPickable:net_held_by")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
|
||||
[node name="raw_burger" unique_id=1675596942 instance=ExtResource("1_fco8w")]
|
||||
second_hand_grab = 1
|
||||
[node name="raw_burger" unique_id=1675596942 instance=ExtResource("1_food_item")]
|
||||
|
||||
[node name="CollisionShape3D" parent="." index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.00077831745, 0)
|
||||
shape = SubResource("CylinderShape3D_fco8w")
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="." index="1" unique_id=59319982]
|
||||
[node name="FoodItem" parent="." index="3" unique_id=63948206]
|
||||
id = "raw_burger"
|
||||
type = 2
|
||||
sell_value = 1
|
||||
|
||||
[node name="CombinableItem" parent="." index="8"]
|
||||
enabled = false
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Model" parent_id_path=PackedInt32Array(1015960306) index="0" unique_id=59319982]
|
||||
radius = 0.08300781
|
||||
height = 0.03
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_bvwq1")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="." index="2" unique_id=1571481674 instance=ExtResource("3_qixic")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.067650706, 0.04601878, -0.08606844)
|
||||
hand_pose = SubResource("Resource_lc22d")
|
||||
|
||||
[node name="GrabPointHandRight" parent="." index="3" unique_id=514404634 instance=ExtResource("6_mvnl5")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.06531982, 0.042291984, -0.08604182)
|
||||
hand_pose = SubResource("Resource_qyiot")
|
||||
|
||||
[node name="FoodItem" parent="." index="4" unique_id=63948206 instance=ExtResource("10_yxtxs")]
|
||||
id = "raw_burger"
|
||||
type = 2
|
||||
|
||||
[node name="NetPickable" type="MultiplayerSynchronizer" parent="." index="5" unique_id=1382968688]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_burger")
|
||||
script = ExtResource("20_netpk")
|
||||
|
||||
[node name="DespawningItem" parent="." index="6" unique_id=303090111 instance=ExtResource("10_l4hsd")]
|
||||
|
||||
[node name="SoundManager" type="Node3D" parent="." index="7" unique_id=118155212]
|
||||
|
||||
+44
-84
@@ -1,254 +1,214 @@
|
||||
[gd_scene format=3 uid="uid://duwrbvwcqcuk3"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="1_g660j"]
|
||||
[ext_resource type="Script" uid="uid://bfrlpbsqg5lqr" path="res://addons/godot-xr-tools/objects/pickable.gd" id="1_skw8o"]
|
||||
[ext_resource type="Animation" uid="uid://db62hs5s4n2b3" path="res://addons/godot-xr-tools/hands/animations/left/Grip 4.res" id="2_skw8o"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="3_j0320"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="4_krlan"]
|
||||
[ext_resource type="Animation" uid="uid://d1xnpyc08njjx" path="res://addons/godot-xr-tools/hands/animations/right/Grip 4.res" id="5_ygjl7"]
|
||||
[ext_resource type="PackedScene" uid="uid://bfj80jh13t6e5" path="res://prefabs/food_item.tscn" id="6_66ydo"]
|
||||
[ext_resource type="PackedScene" uid="uid://3lr2dhy62rhk" path="res://prefabs/combinable_item.tscn" id="7_qlknf"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="8_do54s"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5ukku8i0hilb" path="res://prefabs/despawning_item.tscn" id="9_obvwg"]
|
||||
[ext_resource type="PackedScene" uid="uid://d8jo0402pgl6" path="res://abstract/food_item.tscn" id="1_food_item"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_m1xbq"]
|
||||
size = Vector3(0.1, 0.1, 0.1)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_lc22d"]
|
||||
script = ExtResource("3_j0320")
|
||||
closed_pose = ExtResource("2_skw8o")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qyiot"]
|
||||
script = ExtResource("3_j0320")
|
||||
closed_pose = ExtResource("5_ygjl7")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vlqg6"]
|
||||
albedo_color = Color(1, 0.26, 0.26, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_24d3s"]
|
||||
albedo_color = Color(0.66, 0.58300006, 0.19800001, 1)
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_np_cube"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = false
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:quaternion")
|
||||
properties/1/spawn = false
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("NetPickable:net_held_by")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
|
||||
[node name="Chips" type="RigidBody3D" unique_id=1028364693 groups=["platalbe_item"]]
|
||||
[node name="Chips" unique_id=1675596942 groups=["platalbe_item"] instance=ExtResource("1_food_item")]
|
||||
collision_layer = 4
|
||||
collision_mask = 196615
|
||||
freeze_mode = 1
|
||||
script = ExtResource("1_skw8o")
|
||||
second_hand_grab = 1
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1621665718]
|
||||
[node name="CollisionShape3D" parent="." index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
|
||||
shape = SubResource("BoxShape3D_m1xbq")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="." unique_id=389569681 instance=ExtResource("1_g660j")]
|
||||
[node name="GrabPointHandLeft" parent="." index="1"]
|
||||
transform = Transform3D(0.99971306, 0.023955148, 0, -0.023955148, 0.99971306, 0, 0, 0, 1, -0.042430807, 0.04601878, -0.066400535)
|
||||
hand_pose = SubResource("Resource_lc22d")
|
||||
|
||||
[node name="GrabPointHandRight" parent="." unique_id=332233083 instance=ExtResource("4_krlan")]
|
||||
[node name="GrabPointHandRight" parent="." index="2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.039321173, 0.042291984, -0.06561862)
|
||||
hand_pose = SubResource("Resource_qyiot")
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="." unique_id=965503334]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Model" unique_id=965503334]
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="CSGCombiner3D" unique_id=816650852]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Model/CSGCombiner3D" unique_id=816650852]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 0.7, 0, -0.008749997, 0)
|
||||
radius = 0.055
|
||||
height = 0.10250001
|
||||
sides = 32
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="CSGCombiner3D/CSGCylinder3D" unique_id=387203621]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Model/CSGCombiner3D/CSGCylinder3D" unique_id=387203621]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00010003522, 0.004754007, -0.0005688625)
|
||||
operation = 2
|
||||
radius = 0.05
|
||||
height = 0.0934961
|
||||
sides = 32
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D" unique_id=93328108]
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=93328108]
|
||||
transform = Transform3D(0.7620723, -0.15403531, 0.62890285, 0.14065021, 0.98747945, 0.07142768, -0.632031, 0.034022264, 0.77419585, 0, 0.023602298, 0)
|
||||
size = Vector3(0.01, 0.1472046, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D" unique_id=916963062]
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=916963062]
|
||||
transform = Transform3D(0.8856182, 0, -0.46441403, 0, 1, 0, 0.46441403, 0, 0.8856182, -0.025303185, 0.017004399, -0.011429907)
|
||||
size = Vector3(0.01, 0.1340088, 0.012324219)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D" unique_id=2028227382]
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=2028227382]
|
||||
transform = Transform3D(0.9982952, 0.058366816, 0, -0.058366816, 0.9982952, 0, 0, 0, 1, 0.01182463, 0.014508067, -0.020026028)
|
||||
size = Vector3(0.005488281, 0.12901612, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D" unique_id=281966004]
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=281966004]
|
||||
transform = Transform3D(0.7529522, 0.17319141, -0.63487613, -0.17018878, 0.98317415, 0.06636462, 0.6356876, 0.058079403, 0.7697584, 0.030878175, 0.017004376, 0.0073254704)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1396476812]
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1396476812]
|
||||
transform = Transform3D(0.9059609, 0.09732082, -0.4120236, 0.057229556, 0.93613446, 0.3469537, 0.41947538, -0.33790648, 0.8425318, 0.022142533, 0.013039222, 0.0003975192)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D6" type="CSGBox3D" parent="CSGCombiner3D" unique_id=799991689]
|
||||
[node name="CSGBox3D6" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=799991689]
|
||||
transform = Transform3D(0.84679973, -0.153204, -0.5093709, 0.13128299, 0.9881946, -0.07896996, 0.5154561, 0, 0.856916, -0.035753187, 0.02232056, 0.006355174)
|
||||
size = Vector3(0.010739746, 0.14464112, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D7" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1801209773]
|
||||
[node name="CSGBox3D7" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1801209773]
|
||||
transform = Transform3D(0.97630554, 0.034820024, 0.21357699, 0, 0.98696935, -0.16090819, -0.21639681, 0.15709558, 0.96358365, 0.013860466, 0.019146731, 0.016792327)
|
||||
size = Vector3(0.01, 0.13829346, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D8" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1457970557]
|
||||
[node name="CSGBox3D8" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1457970557]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.014735691, 0.014813228, 0.009678945)
|
||||
size = Vector3(0.01, 0.12962647, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D9" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1215031746]
|
||||
[node name="CSGBox3D9" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1215031746]
|
||||
transform = Transform3D(0.98743933, -0.15799865, 0, 0.15799865, 0.98743933, 0, 0, 0, 1, -0.00090237334, 0.017004391, -0.023620732)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D10" type="CSGBox3D" parent="CSGCombiner3D" unique_id=532075410]
|
||||
[node name="CSGBox3D10" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=532075410]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.021327257, 0.013287356, 0.022823062)
|
||||
size = Vector3(0.010739746, 0.12657471, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D11" type="CSGBox3D" parent="CSGCombiner3D" unique_id=2073146495]
|
||||
[node name="CSGBox3D11" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=2073146495]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.03040018, 0.009017946, 0.020780522)
|
||||
size = Vector3(0.01, 0.11803589, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D12" type="CSGBox3D" parent="CSGCombiner3D" unique_id=75858017]
|
||||
[node name="CSGBox3D12" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=75858017]
|
||||
transform = Transform3D(0.97359693, 0, 0.22827391, 0.051342297, 0.9743782, -0.21897686, -0.22242515, 0.22491528, 0.9486517, -0.0036671162, 0.017004391, 0.02201752)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D13" type="CSGBox3D" parent="CSGCombiner3D" unique_id=632405164]
|
||||
[node name="CSGBox3D13" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=632405164]
|
||||
transform = Transform3D(0.77419585, 0, 0.6329461, 0, 0.52134585, 0, -0.6329461, 0, 0.77419585, 0, -0.007927237, 0)
|
||||
size = Vector3(0.01, 0.1472046, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D14" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1656744815]
|
||||
[node name="CSGBox3D14" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1656744815]
|
||||
transform = Transform3D(-0.8283986, -0.2356963, 0.46195662, -0.27667236, 0.7057101, 0.1542864, -0.48704025, 0, -0.8733795, 0.021192847, -0.004947574, 0.01600693)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D15" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1543269420]
|
||||
[node name="CSGBox3D15" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1543269420]
|
||||
transform = Transform3D(-0.91507524, 0.2995426, 0.023545321, 0.40246198, 0.68106806, -0.010355539, -0.025721962, -5.579416e-10, -0.99966913, -0.01809039, 0.0024462799, 0.0042534657)
|
||||
size = Vector3(0.005488281, 0.15618286, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D16" type="CSGBox3D" parent="CSGCombiner3D" unique_id=254315930]
|
||||
[node name="CSGBox3D16" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=254315930]
|
||||
transform = Transform3D(-0.92201805, 0, 0.38714674, 0, 0.7440292, 0, -0.38714674, 0, -0.92201805, -0.03251951, -0.0049475897, 0.0013081154)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D17" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1486469355]
|
||||
[node name="CSGBox3D17" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1486469355]
|
||||
transform = Transform3D(-0.99966913, 0, 0.025721963, 0, 0.7440292, 0, -0.025721963, 0, -0.99966913, -0.023322525, -0.0049475795, -0.00594615)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D18" type="CSGBox3D" parent="CSGCombiner3D" unique_id=630552823]
|
||||
[node name="CSGBox3D18" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=630552823]
|
||||
transform = Transform3D(-0.83532625, 0.10253985, 0.5321998, 0.116231225, 0.7369294, -0.07405278, -0.5373271, 0, -0.84337395, 0.032662854, -0.0009921952, -0.0025184364)
|
||||
size = Vector3(0.010739746, 0.14464112, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D19" type="CSGBox3D" parent="CSGCombiner3D" unique_id=239318459]
|
||||
[node name="CSGBox3D19" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=239318459]
|
||||
transform = Transform3D(-0.9815485, 0, -0.19121267, 0, 0.74402916, 0, 0.19121267, 0, -0.9815485, -0.016665924, -0.0033536162, -0.014228297)
|
||||
size = Vector3(0.01, 0.13829346, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D20" type="CSGBox3D" parent="CSGCombiner3D" unique_id=928371372]
|
||||
[node name="CSGBox3D20" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=928371372]
|
||||
transform = Transform3D(-0.99966913, 0, 0.025721963, 0, 0.7440292, 0, -0.025721963, 0, -0.99966913, 0.011737803, -0.00657787, -0.006381719)
|
||||
size = Vector3(0.01, 0.12962647, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D21" type="CSGBox3D" parent="CSGCombiner3D" unique_id=226684342]
|
||||
[node name="CSGBox3D21" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=226684342]
|
||||
transform = Transform3D(-0.99966913, 0, 0.025721963, 0, 0.7440292, 0, -0.025721963, 0, -0.99966913, 0.0084346505, -0.0049475795, 0.026858818)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D22" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1692336606]
|
||||
[node name="CSGBox3D22" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1692336606]
|
||||
transform = Transform3D(-0.99966913, 0, 0.025721963, 0, 0.7440292, 0, -0.025721963, 0, -0.99966913, 0.01866528, -0.0077131614, -0.019351937)
|
||||
size = Vector3(0.010739746, 0.12657471, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D23" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1460106852]
|
||||
[node name="CSGBox3D23" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1460106852]
|
||||
transform = Transform3D(-0.99966913, 0, 0.025721963, 0, 0.7440292, 0, -0.025721963, 0, -0.99966913, -0.03309758, -0.010889728, -0.018640606)
|
||||
size = Vector3(0.01, 0.11803589, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D24" type="CSGBox3D" parent="CSGCombiner3D" unique_id=814233916]
|
||||
[node name="CSGBox3D24" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=814233916]
|
||||
transform = Transform3D(-0.9791465, 0, -0.20315555, 0, 0.74402934, 0, 0.20315555, 0, -0.9791465, 0.0009902613, -0.0049475795, -0.019000916)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D25" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1206566850]
|
||||
[node name="CSGBox3D25" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1206566850]
|
||||
transform = Transform3D(0.9997566, 0, -0.022063702, 0, 0.7440293, 0, 0.022063702, 0, 0.9997566, 0.034941338, -0.0049475897, -0.015364999)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D26" type="CSGBox3D" parent="CSGCombiner3D" unique_id=782469494]
|
||||
[node name="CSGBox3D26" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=782469494]
|
||||
transform = Transform3D(0.9394602, 0, 0.34265807, 0, 0.7440292, 0, -0.34265807, 0, 0.9394602, 0.029045265, -0.0049475795, -0.0052434783)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D27" type="CSGBox3D" parent="CSGCombiner3D" unique_id=615899037]
|
||||
[node name="CSGBox3D27" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=615899037]
|
||||
transform = Transform3D(0.9816637, 0, -0.19062132, 0, 0.74402916, 0, 0.19062132, 0, 0.9816637, -0.024296898, -0.0009921952, 0.012097965)
|
||||
size = Vector3(0.010739746, 0.14464112, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D28" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1440223352]
|
||||
[node name="CSGBox3D28" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1440223352]
|
||||
transform = Transform3D(0.84304994, 0, 0.537835, 0, 0.74402916, 0, -0.537835, 0, 0.84304994, 0.025889535, -0.0033536162, 0.0049027367)
|
||||
size = Vector3(0.01, 0.13829346, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D29" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1162134484]
|
||||
[node name="CSGBox3D29" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1162134484]
|
||||
transform = Transform3D(0.9394602, 0, 0.34265807, 0, 0.7440292, 0, -0.34265807, 0, 0.9394602, -0.0034128763, -0.00657787, 0.0080187)
|
||||
size = Vector3(0.01, 0.12962647, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D30" type="CSGBox3D" parent="CSGCombiner3D" unique_id=939036040]
|
||||
[node name="CSGBox3D30" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=939036040]
|
||||
transform = Transform3D(0.9394602, 0, 0.34265807, 0, 0.7440292, 0, -0.34265807, 0, 0.9394602, -0.0018274263, -0.0049475795, -0.028005121)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D31" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1952616270]
|
||||
[node name="CSGBox3D31" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1952616270]
|
||||
transform = Transform3D(0.9394602, 0, 0.34265807, 0, 0.7440292, 0, -0.34265807, 0, 0.9394602, -0.0051014535, -0.0077131614, 0.022625728)
|
||||
size = Vector3(0.010739746, 0.12657471, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D32" type="CSGBox3D" parent="CSGCombiner3D" unique_id=1868626634]
|
||||
[node name="CSGBox3D32" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=1868626634]
|
||||
transform = Transform3D(0.9394602, 0, 0.34265807, 0, 0.7440292, 0, -0.34265807, 0, 0.9394602, 0.042794522, -0.010889728, 0.0029820204)
|
||||
size = Vector3(0.01, 0.11803589, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D33" type="CSGBox3D" parent="CSGCombiner3D" unique_id=529418367]
|
||||
[node name="CSGBox3D33" type="CSGBox3D" parent="Model/CSGCombiner3D" unique_id=529418367]
|
||||
transform = Transform3D(0.8364357, 0, 0.54806507, 0, 0.74402934, 0, -0.54806507, 0, 0.8364357, 0.011213522, -0.0049475795, 0.015817564)
|
||||
size = Vector3(0.01, 0.1340088, 0.01)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="FoodItem" parent="." unique_id=63948206 instance=ExtResource("6_66ydo")]
|
||||
|
||||
[node name="FoodItem" parent="." index="3"]
|
||||
id = "chips"
|
||||
type = 1
|
||||
sell_value = 2
|
||||
|
||||
[node name="CombinableItem" parent="." unique_id=996936271 instance=ExtResource("7_qlknf")]
|
||||
|
||||
[node name="NetPickable" type="MultiplayerSynchronizer" parent="." unique_id=1263255707]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_cube")
|
||||
script = ExtResource("8_do54s")
|
||||
|
||||
[node name="DespawningItem" parent="." unique_id=303090111 instance=ExtResource("9_obvwg")]
|
||||
|
||||
+22
-57
@@ -1,136 +1,101 @@
|
||||
[gd_scene format=3 uid="uid://bpvp20hiagxxb"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c8l60rnugru40" path="res://addons/godot-xr-tools/objects/pickable.tscn" id="1_of0s8"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="2_cllfo"]
|
||||
[ext_resource type="Animation" uid="uid://db62hs5s4n2b3" path="res://addons/godot-xr-tools/hands/animations/left/Grip 4.res" id="3_qjifl"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="4_1hoyy"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="5_83pbl"]
|
||||
[ext_resource type="Animation" uid="uid://d1xnpyc08njjx" path="res://addons/godot-xr-tools/hands/animations/right/Grip 4.res" id="6_bwaw5"]
|
||||
[ext_resource type="PackedScene" uid="uid://bfj80jh13t6e5" path="res://prefabs/food_item.tscn" id="7_7a0yr"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="8_wbxrg"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5ukku8i0hilb" path="res://prefabs/despawning_item.tscn" id="9_jlkrg"]
|
||||
[ext_resource type="PackedScene" uid="uid://d8jo0402pgl6" path="res://abstract/food_item.tscn" id="1_food_item"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_of0s8"]
|
||||
size = Vector3(0.10456543, 0.1, 0.035327148)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_lc22d"]
|
||||
script = ExtResource("4_1hoyy")
|
||||
closed_pose = ExtResource("3_qjifl")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qyiot"]
|
||||
script = ExtResource("4_1hoyy")
|
||||
closed_pose = ExtResource("6_bwaw5")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_np_burger"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = false
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:quaternion")
|
||||
properties/1/spawn = false
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("NetPickable:net_held_by")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_of0s8"]
|
||||
albedo_color = Color(0.7546, 0.77, 0.30799997, 1)
|
||||
|
||||
[node name="ChoppedPotato" unique_id=1675596942 instance=ExtResource("1_of0s8")]
|
||||
second_hand_grab = 1
|
||||
[node name="ChoppedPotato" unique_id=1675596942 instance=ExtResource("1_food_item")]
|
||||
|
||||
[node name="CollisionShape3D" parent="." index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0.0022827126, 0.010339355, -0.0028051804)
|
||||
shape = SubResource("BoxShape3D_of0s8")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="." index="1" unique_id=1571481674 instance=ExtResource("2_cllfo")]
|
||||
[node name="GrabPointHandLeft" parent="." index="1"]
|
||||
transform = Transform3D(0.4877618, 0.85191125, -0.19062005, -0.8708042, 0.49020204, -0.0374375, 0.06154889, 0.1842533, 0.98094976, 0.028727118, 0.03771837, -0.06794037)
|
||||
hand_pose = SubResource("Resource_lc22d")
|
||||
|
||||
[node name="GrabPointHandRight" parent="." index="2" unique_id=514404634 instance=ExtResource("5_83pbl")]
|
||||
[node name="GrabPointHandRight" parent="." index="2"]
|
||||
transform = Transform3D(0.35819444, -0.933647, 0, 0.92118585, 0.35341373, -0.16283518, 0.1520306, 0.05832667, 0.98665327, -0.02374028, 0.05081141, -0.06576714)
|
||||
hand_pose = SubResource("Resource_qyiot")
|
||||
|
||||
[node name="FoodItem" parent="." index="3" unique_id=63948206 instance=ExtResource("7_7a0yr")]
|
||||
[node name="FoodItem" parent="." index="3"]
|
||||
id = "chopped_potato"
|
||||
type = 2
|
||||
sell_value = 0
|
||||
|
||||
[node name="NetPickable" type="MultiplayerSynchronizer" parent="." index="4" unique_id=1382968688]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_burger")
|
||||
script = ExtResource("8_wbxrg")
|
||||
[node name="CombinableItem" parent="." index="8"]
|
||||
enabled = false
|
||||
|
||||
[node name="DespawningItem" parent="." index="5" unique_id=303090111 instance=ExtResource("9_jlkrg")]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Model" index="0" unique_id=1632388374]
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="." index="6" unique_id=1632388374]
|
||||
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D" index="0" unique_id=333574743]
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="Model/CSGCombiner3D" index="0" unique_id=333574743]
|
||||
transform = Transform3D(0.9982952, 0.058366816, 0, 2.5512945e-09, -4.363687e-08, -1, -0.058366816, 0.9982952, -4.371139e-08, 0.017540446, 0.012680878, -0.007841777)
|
||||
size = Vector3(0.012, 0.0737854, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D10" type="CSGBox3D" parent="CSGCombiner3D" index="1" unique_id=1055117011]
|
||||
[node name="CSGBox3D10" type="CSGBox3D" parent="Model/CSGCombiner3D" index="1" unique_id=1055117011]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, -0.043418147, 0.013074134, 0.00018549338)
|
||||
size = Vector3(0.012, 0.048638918, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D11" type="CSGBox3D" parent="CSGCombiner3D" index="2" unique_id=12997588]
|
||||
[node name="CSGBox3D11" type="CSGBox3D" parent="Model/CSGCombiner3D" index="2" unique_id=12997588]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0.0347388, 0, -0.0042848364)
|
||||
size = Vector3(0.012, 0.11803589, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D16" type="CSGBox3D" parent="CSGCombiner3D" index="3" unique_id=520084094]
|
||||
[node name="CSGBox3D16" type="CSGBox3D" parent="Model/CSGCombiner3D" index="3" unique_id=520084094]
|
||||
transform = Transform3D(-0.9220182, 0, 0.38714683, 0.38714683, -3.2522554e-08, 0.9220182, 1.6922723e-08, 0.7440293, 4.030269e-08, -0.03251951, 0, -0.0066871783)
|
||||
size = Vector3(0.012, 0.1340088, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D18" type="CSGBox3D" parent="CSGCombiner3D" index="4" unique_id=1713154750]
|
||||
[node name="CSGBox3D18" type="CSGBox3D" parent="Model/CSGCombiner3D" index="4" unique_id=1713154750]
|
||||
transform = Transform3D(-0.83532625, 0.10253985, 0.5321998, 0.5373272, -3.183022e-08, 0.8433741, 0.11623128, 0.7369294, -0.07405276, 0.012299374, 0, -0.0027317838)
|
||||
size = Vector3(0.012, 0.14464112, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D19" type="CSGBox3D" parent="CSGCombiner3D" index="5" unique_id=1856457460]
|
||||
[node name="CSGBox3D19" type="CSGBox3D" parent="Model/CSGCombiner3D" index="5" unique_id=1856457460]
|
||||
transform = Transform3D(-0.9815485, 0, -0.19121267, -0.19121267, -3.2522546e-08, 0.9815485, -8.358171e-09, 0.74402916, 4.2904848e-08, 0.0047408585, 0.015360672, -0.0050932043)
|
||||
size = Vector3(0.012, 0.13829346, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D21" type="CSGBox3D" parent="CSGCombiner3D" index="6" unique_id=1085994272]
|
||||
[node name="CSGBox3D21" type="CSGBox3D" parent="Model/CSGCombiner3D" index="6" unique_id=1085994272]
|
||||
transform = Transform3D(-0.99966913, 0, 0.025721963, 0.025721963, -3.252255e-08, 0.99966913, 1.1243427e-09, 0.7440292, 4.3696925e-08, 0.0084346505, -1.2525464e-10, -0.0038216766)
|
||||
size = Vector3(0.012, 0.14171143, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D24" type="CSGBox3D" parent="CSGCombiner3D" index="7" unique_id=799603447]
|
||||
[node name="CSGBox3D24" type="CSGBox3D" parent="Model/CSGCombiner3D" index="7" unique_id=799603447]
|
||||
transform = Transform3D(-0.95734614, -0.16150172, -0.19071358, -0.19483496, -0.0018292161, 0.980833, -0.21337205, 0.7262875, -0.039937917, -0.015636567, 0.016941056, -0.0038651554)
|
||||
size = Vector3(0.012, 0.1340088, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D26" type="CSGBox3D" parent="CSGCombiner3D" index="8" unique_id=129671681]
|
||||
[node name="CSGBox3D26" type="CSGBox3D" parent="Model/CSGCombiner3D" index="8" unique_id=129671681]
|
||||
transform = Transform3D(0.9394602, 0, 0.34265804, 0.34265804, -3.252255e-08, -0.9394602, 1.497806e-08, 0.7440292, -4.106511e-08, 0.033136886, 0.017579898, -0.0066871676)
|
||||
size = Vector3(0.012, 0.1340088, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D27" type="CSGBox3D" parent="CSGCombiner3D" index="9" unique_id=17129382]
|
||||
[node name="CSGBox3D27" type="CSGBox3D" parent="Model/CSGCombiner3D" index="9" unique_id=17129382]
|
||||
transform = Transform3D(0.9816637, 0, -0.19062133, -0.19062132, -3.2522546e-08, -0.98166364, -8.332322e-09, 0.74402916, -4.2909882e-08, -0.019075055, -4.3606386e-05, -0.0027317842)
|
||||
size = Vector3(0.012, 0.14464112, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D28" type="CSGBox3D" parent="CSGCombiner3D" index="10" unique_id=1557637409]
|
||||
[node name="CSGBox3D28" type="CSGBox3D" parent="Model/CSGCombiner3D" index="10" unique_id=1557637409]
|
||||
transform = Transform3D(0.84304994, 0, 0.537835, 0.537835, -3.2522546e-08, -0.84304994, 2.3509514e-08, 0.74402916, -3.6850885e-08, 0.047794472, 0.016187795, -0.0034102863)
|
||||
size = Vector3(0.012, 0.11199341, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D30" type="CSGBox3D" parent="CSGCombiner3D" index="11" unique_id=1187654453]
|
||||
[node name="CSGBox3D30" type="CSGBox3D" parent="Model/CSGCombiner3D" index="11" unique_id=1187654453]
|
||||
transform = Transform3D(0.9394602, 0, 0.34265804, 0.34265804, -3.252255e-08, -0.9394602, 1.497806e-08, 0.7440292, -4.106511e-08, -0.005314119, 0, 0.009267362)
|
||||
size = Vector3(0.012, 0.1340088, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D32" type="CSGBox3D" parent="CSGCombiner3D" index="12" unique_id=733217969]
|
||||
[node name="CSGBox3D32" type="CSGBox3D" parent="Model/CSGCombiner3D" index="12" unique_id=733217969]
|
||||
transform = Transform3D(0.9394602, 0, 0.34265804, 0.34265804, -3.252255e-08, -0.9394602, 1.497806e-08, 0.7440292, -4.106511e-08, 0.050648127, 9.4238846e-11, -0.0005330723)
|
||||
size = Vector3(0.012, 0.1122406, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
[node name="CSGBox3D29" type="CSGBox3D" parent="CSGCombiner3D" index="13" unique_id=1376406225]
|
||||
[node name="CSGBox3D29" type="CSGBox3D" parent="Model/CSGCombiner3D" index="13" unique_id=1376406225]
|
||||
transform = Transform3D(0.9816637, 0, -0.19062133, -0.19062132, -3.2522546e-08, -0.98166364, -8.332322e-09, 0.74402916, -4.2909882e-08, -0.04667829, -4.360572e-05, -0.0065923333)
|
||||
size = Vector3(0.012, 0.10369263, 0.012)
|
||||
material = SubResource("StandardMaterial3D_of0s8")
|
||||
|
||||
@@ -1,15 +1,6 @@
|
||||
[gd_scene format=3 uid="uid://cfc4ho67u4r5e"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c8l60rnugru40" path="res://addons/godot-xr-tools/objects/pickable.tscn" id="1_ut7mg"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="3_pkevi"]
|
||||
[ext_resource type="Animation" uid="uid://db62hs5s4n2b3" path="res://addons/godot-xr-tools/hands/animations/left/Grip 4.res" id="4_dq7qw"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="5_ychvb"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="6_etdv2"]
|
||||
[ext_resource type="Animation" uid="uid://d1xnpyc08njjx" path="res://addons/godot-xr-tools/hands/animations/right/Grip 4.res" id="7_rl64h"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5ukku8i0hilb" path="res://prefabs/despawning_item.tscn" id="10_6p8pj"]
|
||||
[ext_resource type="PackedScene" uid="uid://3lr2dhy62rhk" path="res://prefabs/combinable_item.tscn" id="10_ut7mg"]
|
||||
[ext_resource type="PackedScene" uid="uid://bfj80jh13t6e5" path="res://prefabs/food_item.tscn" id="10_zz42p"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="20_netpk"]
|
||||
[ext_resource type="PackedScene" uid="uid://d8jo0402pgl6" path="res://abstract/food_item.tscn" id="1_food_item"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_fco8w"]
|
||||
height = 0.04777527
|
||||
@@ -18,56 +9,19 @@ radius = 0.08300781
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6l01i"]
|
||||
albedo_color = Color(0.29, 0.101500005, 0, 1)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_lc22d"]
|
||||
script = ExtResource("5_ychvb")
|
||||
closed_pose = ExtResource("4_dq7qw")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qyiot"]
|
||||
script = ExtResource("5_ychvb")
|
||||
closed_pose = ExtResource("7_rl64h")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_np_cookedburger"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = false
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:quaternion")
|
||||
properties/1/spawn = false
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("NetPickable:net_held_by")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
|
||||
[node name="CookedBurger" unique_id=1675596942 instance=ExtResource("1_ut7mg")]
|
||||
second_hand_grab = 1
|
||||
[node name="CookedBurger" unique_id=1675596942 instance=ExtResource("1_food_item")]
|
||||
|
||||
[node name="CollisionShape3D" parent="." index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0072289705, 0)
|
||||
shape = SubResource("CylinderShape3D_fco8w")
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="." index="1" unique_id=59319982]
|
||||
[node name="FoodItem" parent="." index="3"]
|
||||
id = "cooked_burger"
|
||||
type = 2
|
||||
sell_value = 1
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Model" index="0" unique_id=59319982]
|
||||
radius = 0.08300781
|
||||
height = 0.03
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_6l01i")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="." index="2" unique_id=1571481674 instance=ExtResource("3_pkevi")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.067650706, 0.04601878, -0.08606844)
|
||||
hand_pose = SubResource("Resource_lc22d")
|
||||
|
||||
[node name="GrabPointHandRight" parent="." index="3" unique_id=514404634 instance=ExtResource("6_etdv2")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.06531982, 0.042291984, -0.08604182)
|
||||
hand_pose = SubResource("Resource_qyiot")
|
||||
|
||||
[node name="FoodItem" parent="." index="4" unique_id=234567891 instance=ExtResource("10_zz42p")]
|
||||
id = "cooked_burger"
|
||||
type = 2
|
||||
|
||||
[node name="CombinableItem" parent="." index="5" unique_id=996936271 instance=ExtResource("10_ut7mg")]
|
||||
|
||||
[node name="NetPickable" type="MultiplayerSynchronizer" parent="." index="6" unique_id=925955029]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_cookedburger")
|
||||
script = ExtResource("20_netpk")
|
||||
|
||||
[node name="DespawningItem" parent="." index="7" unique_id=303090111 instance=ExtResource("10_6p8pj")]
|
||||
|
||||
+33
-61
@@ -1,41 +1,11 @@
|
||||
[gd_scene format=3 uid="uid://dgk88esxip5xi"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c8l60rnugru40" path="res://addons/godot-xr-tools/objects/pickable.tscn" id="1_apu43"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="2_ti0k8"]
|
||||
[ext_resource type="Animation" uid="uid://db62hs5s4n2b3" path="res://addons/godot-xr-tools/hands/animations/left/Grip 4.res" id="3_xyohi"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="4_4iajw"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="5_kni1i"]
|
||||
[ext_resource type="Animation" uid="uid://d1xnpyc08njjx" path="res://addons/godot-xr-tools/hands/animations/right/Grip 4.res" id="6_b3is5"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="8_2ao4o"]
|
||||
[ext_resource type="PackedScene" uid="uid://d8jo0402pgl6" path="res://abstract/food_item.tscn" id="1_food_item"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_fco8w"]
|
||||
height = 0.29805934
|
||||
radius = 0.025390625
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_vlqg6"]
|
||||
size = Vector3(0.01, 0.062841795, 0.18769531)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_lc22d"]
|
||||
script = ExtResource("4_4iajw")
|
||||
closed_pose = ExtResource("3_xyohi")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qyiot"]
|
||||
script = ExtResource("4_4iajw")
|
||||
closed_pose = ExtResource("6_b3is5")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_np_burger"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = false
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:quaternion")
|
||||
properties/1/spawn = false
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("NetPickable:net_held_by")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_s6exe"]
|
||||
interpolation_mode = 2
|
||||
offsets = PackedFloat32Array(0.0088495575, 0.76106197)
|
||||
@@ -57,67 +27,60 @@ albedo_color = Color(0.6, 0.6, 0.6, 1)
|
||||
metallic = 1.0
|
||||
metallic_specular = 1.0
|
||||
|
||||
[node name="Knife" unique_id=1675596942 groups=["chopping_tool"] instance=ExtResource("1_apu43")]
|
||||
second_hand_grab = 1
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_vlqg6"]
|
||||
size = Vector3(0.01, 0.062841795, 0.18769531)
|
||||
|
||||
[node name="Knife" unique_id=1675596942 groups=["chopping_tool"] instance=ExtResource("1_food_item")]
|
||||
|
||||
[node name="CollisionShape3D" parent="." index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 2.8164342e-09, -0.0644325)
|
||||
shape = SubResource("CylinderShape3D_fco8w")
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="." index="1" unique_id=1995926098 groups=["chopping_tool"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.05011083)
|
||||
collision_layer = 513
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D" index="0" unique_id=1593629505]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.018579103, -0.1395939)
|
||||
shape = SubResource("BoxShape3D_vlqg6")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="." index="2" unique_id=1571481674 instance=ExtResource("2_ti0k8")]
|
||||
[node name="GrabPointHandLeft" parent="." index="1" unique_id=1571481674]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.80581045, 0.5921736, 0, -0.5921736, 0.80581045, -0.0055686757, -0.027660534, -0.06972287)
|
||||
hand_pose = SubResource("Resource_lc22d")
|
||||
|
||||
[node name="GrabPointHandRight" parent="." index="3" unique_id=514404634 instance=ExtResource("5_kni1i")]
|
||||
[node name="GrabPointHandRight" parent="." index="2" unique_id=514404634]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.7906625, 0.6122523, 0, -0.6122523, 0.7906625, -0.00973678, -0.036154382, -0.07772979)
|
||||
hand_pose = SubResource("Resource_qyiot")
|
||||
|
||||
[node name="NetPickable" type="MultiplayerSynchronizer" parent="." index="4" unique_id=1382968688]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_burger")
|
||||
script = ExtResource("8_2ao4o")
|
||||
[node name="DespawningItem" parent="." index="5" unique_id=303090111]
|
||||
enabled = false
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="." index="5" unique_id=1632388374]
|
||||
[node name="CombinableItem" parent="." index="6" unique_id=996936271]
|
||||
enabled = false
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Model" parent_id_path=PackedInt32Array(1015960306) index="0" unique_id=1632388374]
|
||||
transform = Transform3D(0.45, 0, 0, 0, 0.45, 0, 0, 0, 0.45, 0, 0, 0)
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="CSGCombiner3D" index="0" unique_id=73312047]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Model/CSGCombiner3D" index="0" unique_id=73312047]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 1.9443882e-09, 0.044482417)
|
||||
radius = 0.05
|
||||
height = 0.28896484
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="CSGCombiner3D/CSGCylinder3D" index="0" unique_id=1092536616]
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="Model/CSGCombiner3D/CSGCylinder3D" index="0" unique_id=1092536616]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.3711392e-08, -1, 0, 1, -4.3711392e-08, -0.06291181, -0.003074348, 0.003173826)
|
||||
operation = 2
|
||||
size = Vector3(0.06698901, 0.08496094, 0.3070221)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="CSGCombiner3D/CSGCylinder3D" index="1" unique_id=611507380]
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="Model/CSGCombiner3D/CSGCylinder3D" index="1" unique_id=611507380]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.3711392e-08, -1, 0, 1, -4.3711392e-08, 0.057669085, -0.00014465302, 0.003173826)
|
||||
operation = 2
|
||||
size = Vector3(0.051974364, 0.08496094, 0.30897522)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="CSGCombiner3D/CSGCylinder3D" index="2" unique_id=1981876218]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Model/CSGCombiner3D/CSGCylinder3D" index="2" unique_id=1981876218]
|
||||
transform = Transform3D(-4.3711392e-08, 1, 0, 4.3711392e-08, 1.9106857e-15, -1, -1, -4.3711392e-08, -4.3711392e-08, 0.0014698628, 0.062123798, 0.00029686643)
|
||||
radius = 0.016
|
||||
height = 0.06318359
|
||||
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="CSGCombiner3D/CSGCylinder3D" index="3" unique_id=1905314362]
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="Model/CSGCombiner3D/CSGCylinder3D" index="3" unique_id=1905314362]
|
||||
transform = Transform3D(-4.3711392e-08, 1, 0, 4.3711392e-08, 1.9106857e-15, -1, -1, -4.3711392e-08, -4.3711392e-08, 0.0014698628, -0.049634382, 0.00029686154)
|
||||
radius = 0.016
|
||||
height = 0.06318359
|
||||
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="CSGCombiner3D/CSGCylinder3D" index="4" unique_id=905243368]
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="Model/CSGCombiner3D/CSGCylinder3D" index="4" unique_id=905243368]
|
||||
transform = Transform3D(-6.070399e-08, 1, 0, 1.3887457, 4.3711392e-08, 8.7422784e-08, 1.21408e-07, 3.8213714e-15, -1, 0.0017506231, -0.10254226, -0.07109782)
|
||||
operation = 2
|
||||
radius = 0.032226563
|
||||
@@ -125,7 +88,7 @@ height = 0.07854004
|
||||
sides = 32
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="CSGCombiner3D/CSGCylinder3D" index="5" unique_id=1873534320]
|
||||
[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="Model/CSGCombiner3D/CSGCylinder3D" index="5" unique_id=1873534320]
|
||||
transform = Transform3D(-1.0240791e-07, 1, 0, 2.34282, 4.3711392e-08, 8.7422784e-08, 2.0481582e-07, 3.8213714e-15, -1, 0.0017506231, 0.089636564, -0.07143875)
|
||||
operation = 2
|
||||
radius = 0.032226563
|
||||
@@ -133,7 +96,7 @@ height = 0.07854004
|
||||
sides = 32
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="CSGCombiner3D/CSGCylinder3D" index="6" unique_id=471254428]
|
||||
[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="Model/CSGCombiner3D/CSGCylinder3D" index="6" unique_id=471254428]
|
||||
transform = Transform3D(-1.0240791e-07, 1, 0, 2.34282, 4.3711392e-08, 8.7422784e-08, 2.0481582e-07, 3.8213714e-15, -1, 0.0017506231, -0.079547666, -0.07143876)
|
||||
operation = 2
|
||||
radius = 0.032226563
|
||||
@@ -141,18 +104,27 @@ height = 0.07854004
|
||||
sides = 32
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3DBlade" type="CSGBox3D" parent="CSGCombiner3D" index="1" unique_id=94519802]
|
||||
[node name="CSGBox3DBlade" type="CSGBox3D" parent="Model/CSGCombiner3D" index="1" unique_id=94519802]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.005445559, -0.18191797)
|
||||
size = Vector3(0.007, 0.08954346, 0.6364492)
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGTorus3D" type="CSGTorus3D" parent="CSGCombiner3D/CSGBox3DBlade" index="0" unique_id=555698965]
|
||||
[node name="CSGTorus3D" type="CSGTorus3D" parent="Model/CSGCombiner3D/CSGBox3DBlade" index="0" unique_id=555698965]
|
||||
transform = Transform3D(-4.3711392e-08, 1, 0, -1, -4.3711392e-08, 0, 0, 0, 0.90598416, 0, 0.25891897, -0.12508947)
|
||||
operation = 2
|
||||
outer_radius = 0.3
|
||||
sides = 64
|
||||
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="CSGCombiner3D/CSGBox3DBlade/CSGTorus3D" index="0" unique_id=720590378]
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="Model/CSGCombiner3D/CSGBox3DBlade/CSGTorus3D" index="0" unique_id=720590378]
|
||||
transform = Transform3D(-4.3710607e-08, -0.9973613, 0.0724587, 0.99998987, -4.3595673e-08, 3.1672265e-09, 0, 0.034851935, 0.47972566, 0.25730363, -0.003919763, 0.23939973)
|
||||
operation = 2
|
||||
size = Vector3(0.40247935, 0.2781372, 0.97288764)
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="." index="9" unique_id=1995926098 groups=["chopping_tool"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.05011083)
|
||||
collision_layer = 513
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D" index="0" unique_id=1593629505]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.018579103, -0.1395939)
|
||||
shape = SubResource("BoxShape3D_vlqg6")
|
||||
|
||||
+10
-45
@@ -1,78 +1,43 @@
|
||||
[gd_scene format=3 uid="uid://drwuhqb3pjtiy"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c8l60rnugru40" path="res://addons/godot-xr-tools/objects/pickable.tscn" id="1_wihyv"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="3_a8yvn"]
|
||||
[ext_resource type="Animation" uid="uid://db62hs5s4n2b3" path="res://addons/godot-xr-tools/hands/animations/left/Grip 4.res" id="4_d124x"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="5_7epdb"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="6_14hae"]
|
||||
[ext_resource type="Animation" uid="uid://d1xnpyc08njjx" path="res://addons/godot-xr-tools/hands/animations/right/Grip 4.res" id="7_hkms5"]
|
||||
[ext_resource type="PackedScene" uid="uid://bfj80jh13t6e5" path="res://prefabs/food_item.tscn" id="8_35g7i"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="9_x0uku"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5ukku8i0hilb" path="res://prefabs/despawning_item.tscn" id="10_fj22u"]
|
||||
[ext_resource type="PackedScene" uid="uid://d8jo0402pgl6" path="res://abstract/food_item.tscn" id="1_food_item"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_fco8w"]
|
||||
height = 0.16196387
|
||||
radius = 0.07080078
|
||||
|
||||
[sub_resource type="Resource" id="Resource_lc22d"]
|
||||
script = ExtResource("5_7epdb")
|
||||
closed_pose = ExtResource("4_d124x")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qyiot"]
|
||||
script = ExtResource("5_7epdb")
|
||||
closed_pose = ExtResource("7_hkms5")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_np_burger"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = false
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:quaternion")
|
||||
properties/1/spawn = false
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("NetPickable:net_held_by")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_d4wpw"]
|
||||
albedo_color = Color(0.48, 0.34336, 0.1872, 1)
|
||||
|
||||
[node name="Potato" unique_id=1675596942 instance=ExtResource("1_wihyv")]
|
||||
second_hand_grab = 1
|
||||
[node name="Potato" unique_id=1675596942 instance=ExtResource("1_food_item")]
|
||||
|
||||
[node name="CollisionShape3D" parent="." index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 1.2261836e-10, -0.0028051808)
|
||||
shape = SubResource("CylinderShape3D_fco8w")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="." index="1" unique_id=1571481674 instance=ExtResource("3_a8yvn")]
|
||||
[node name="GrabPointHandLeft" parent="." index="1"]
|
||||
transform = Transform3D(1, 0, 0, 0, -0.5343598, -0.84525716, 0, 0.84525716, -0.5343598, -0.03287975, 0.03671424, 0.10207943)
|
||||
hand_pose = SubResource("Resource_lc22d")
|
||||
|
||||
[node name="GrabPointHandRight" parent="." index="2" unique_id=514404634 instance=ExtResource("6_14hae")]
|
||||
[node name="GrabPointHandRight" parent="." index="2"]
|
||||
transform = Transform3D(1, 0, 0, 0, -0.7457213, -0.66625804, 0, 0.66625804, -0.7457213, 0.03408891, 0.014529038, 0.10517749)
|
||||
hand_pose = SubResource("Resource_qyiot")
|
||||
|
||||
[node name="FoodItem" parent="." index="3" unique_id=63948206 instance=ExtResource("8_35g7i")]
|
||||
[node name="FoodItem" parent="." index="3"]
|
||||
id = "potato"
|
||||
type = 2
|
||||
sell_value = 0
|
||||
|
||||
[node name="NetPickable" type="MultiplayerSynchronizer" parent="." index="4" unique_id=1382968688]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_burger")
|
||||
script = ExtResource("9_x0uku")
|
||||
[node name="CombinableItem" parent="." index="8"]
|
||||
enabled = false
|
||||
|
||||
[node name="DespawningItem" parent="." index="5" unique_id=303090111 instance=ExtResource("10_fj22u")]
|
||||
[node name="CSGCombiner3DPotato" type="CSGCombiner3D" parent="Model" index="0" unique_id=1632388374]
|
||||
|
||||
[node name="CSGCombiner3DPotato" type="CSGCombiner3D" parent="." index="6" unique_id=1632388374]
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="CSGCombiner3DPotato" index="0" unique_id=125051486]
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="Model/CSGCombiner3DPotato" index="0" unique_id=125051486]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.03307341)
|
||||
radius = 0.06
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="CSGCombiner3DPotato" index="1" unique_id=837168454]
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="Model/CSGCombiner3DPotato" index="1" unique_id=837168454]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.03243477)
|
||||
radius = 0.053
|
||||
radial_segments = 32
|
||||
|
||||
@@ -103,10 +103,14 @@ func _populate_world_if_owner() -> void:
|
||||
layout.queue_free()
|
||||
_remove_authored(authored)
|
||||
NetworkManager.log_line("Populating world: %d stations, %d items" % [stations.size(), items.size()])
|
||||
# One frame between spawns - MultiplayerSpawner corrupts replication when
|
||||
# several nodes register for sync in the same frame (godotengine/godot#96914).
|
||||
for d in stations:
|
||||
NetworkManager.spawn_item(d["scene"], d["xform"], d["name"], d["props"])
|
||||
await get_tree().process_frame
|
||||
for d in items:
|
||||
NetworkManager.spawn_item(d["scene"], d["xform"], d["name"], d["props"])
|
||||
await get_tree().process_frame
|
||||
NetworkManager.log_line("World populated")
|
||||
|
||||
|
||||
|
||||
+38
-4
@@ -24,6 +24,12 @@ var _original_freeze_mode: RigidBody3D.FreezeMode
|
||||
# branch of apply_held_state() clears while someone else is holding the item.
|
||||
var _original_enabled: bool
|
||||
|
||||
# Intent set by external game logic (e.g. a station enabling/disabling a tool),
|
||||
# independent of hold state. apply_held_state() is the sole writer of the
|
||||
# pickable's actual `enabled` property, so this is how other systems express
|
||||
# "should be enabled" without fighting that reconciliation every tick.
|
||||
var _tool_enabled: bool = true
|
||||
|
||||
# Whether the "our own hand still holds this" guard has already been logged for
|
||||
# the current grab. apply_held_state() runs every network tick, so without this
|
||||
# the guard message repeats for as long as you hold the item.
|
||||
@@ -35,6 +41,22 @@ func _ready() -> void:
|
||||
if not _pickable:
|
||||
SweetLogger.error("{0} must be a child of an XRToolsPickable", [name])
|
||||
return
|
||||
|
||||
# Configure Multiplayer Synchronizer
|
||||
# This overwrites any changes made in the inspector.
|
||||
replication_config = SceneReplicationConfig.new()
|
||||
var properties: Array[NodePath] = [".:position", ".:quaternion", ".:enabled", ".:visible"]
|
||||
for property_path in properties:
|
||||
replication_config.add_property(property_path)
|
||||
replication_config.property_set_replication_mode(property_path, SceneReplicationConfig.REPLICATION_MODE_ALWAYS)
|
||||
replication_config.property_set_spawn(property_path, false)
|
||||
# Unlike the properties above, this one is replicated at spawn too, so a
|
||||
# late joiner sees the current holder immediately.
|
||||
var held_by_path := NodePath("NetPickable:net_held_by")
|
||||
replication_config.add_property(held_by_path)
|
||||
replication_config.property_set_replication_mode(held_by_path, SceneReplicationConfig.REPLICATION_MODE_ALWAYS)
|
||||
replication_config.property_set_spawn(held_by_path, true)
|
||||
|
||||
_original_freeze_mode = _pickable.freeze_mode
|
||||
_original_enabled = _pickable.enabled
|
||||
_pickable.picked_up.connect(_on_picked_up)
|
||||
@@ -47,6 +69,17 @@ func _ready() -> void:
|
||||
apply_held_state.call_deferred()
|
||||
|
||||
|
||||
## Called by external game logic (e.g. Counter._enable_tool/_disable_tool) to
|
||||
## express whether this item should be usable right now, independent of hold
|
||||
## state. Reapplies immediately so the change takes effect without waiting for
|
||||
## the next net_held_by tick.
|
||||
func set_tool_enabled(value: bool) -> void:
|
||||
if _tool_enabled == value:
|
||||
return
|
||||
_tool_enabled = value
|
||||
apply_held_state()
|
||||
|
||||
|
||||
func _set_net_held_by(value: int) -> void:
|
||||
var old := net_held_by
|
||||
net_held_by = value
|
||||
@@ -95,10 +128,11 @@ func apply_held_state() -> void:
|
||||
# e.g. a plate still got marked dirty) while pick_up() bailed out on
|
||||
# the disabled item, leaving the zone holding an item with no grab
|
||||
# driver that then fell out of the station.
|
||||
if _pickable.enabled != _original_enabled:
|
||||
var want_enabled_authority := _original_enabled and _tool_enabled
|
||||
if _pickable.enabled != want_enabled_authority:
|
||||
if NetworkManager.is_online():
|
||||
SweetLogger.debug("{0}: reclaiming ownership, restoring enabled {1}->{2}", [_pickable.name, _pickable.enabled, _original_enabled])
|
||||
_pickable.enabled = _original_enabled
|
||||
SweetLogger.debug("{0}: reclaiming ownership, restoring enabled {1}->{2}", [_pickable.name, _pickable.enabled, want_enabled_authority])
|
||||
_pickable.enabled = want_enabled_authority
|
||||
return
|
||||
# A net_held_by/position sync update can race ahead of the
|
||||
# authority-handoff RPC that's about to confirm a grab we just made
|
||||
@@ -125,7 +159,7 @@ func apply_held_state() -> void:
|
||||
# physics-property writes per item per tick. The comparison also means we
|
||||
# still re-apply if something else perturbs the state (e.g. let_go()
|
||||
# restoring the collision mask after a force-drop).
|
||||
var want_enabled := (net_held_by == 0)
|
||||
var want_enabled := (net_held_by == 0) and _tool_enabled
|
||||
if _pickable.freeze \
|
||||
and _pickable.freeze_mode == RigidBody3D.FREEZE_MODE_KINEMATIC \
|
||||
and _pickable.collision_mask == 0 \
|
||||
|
||||
@@ -18,20 +18,27 @@ func _on_game_state_changed(new_state: GameManager.GameState) -> void:
|
||||
_set_stations_enabled(true)
|
||||
|
||||
|
||||
# Only Station-derived stations expose `enabled` (Table runs its own FSM).
|
||||
# Only single-snap_zone Station-derived stations use the generic `enabled`
|
||||
# toggle here. Table is Station-derived too now (SharedInventoryStation), but
|
||||
# it has multiple snap_zones and manages their enabling itself via its own
|
||||
# FSM (_set_snap_zones_enabled) - toggling only the base `snap_zone` here
|
||||
# would desync it from the rest of Table's zones, so it's excluded.
|
||||
func _set_stations_enabled(value: bool) -> void:
|
||||
for station in get_tree().get_nodes_in_group("station"):
|
||||
if station is Station:
|
||||
if station is Station and not station is Table:
|
||||
station.enabled = value
|
||||
|
||||
|
||||
# Despawn all food_items unless it's in a "persistent_inventory" snap_zone
|
||||
# Despawn all despawnable pickables unless it's in a "persistent_inventory"
|
||||
# snap_zone. Permanent fixtures (e.g. a station's knife) opt out entirely by
|
||||
# having no DespawningItem child, or a disabled one.
|
||||
func despawn_unheld_pickables():
|
||||
var root = get_tree().get_root()
|
||||
var pickables: Array[Node] = []
|
||||
_collect_pickables(root, pickables)
|
||||
for pickable in pickables:
|
||||
if not Helper.find_food_item(pickable):
|
||||
var despawning_item := pickable.get_node_or_null("DespawningItem") as DespawningItem
|
||||
if not despawning_item or not despawning_item.enabled:
|
||||
continue
|
||||
var held_by: Node = pickable.get_picked_up_by()
|
||||
if not held_by:
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
class_name CombinableItem
|
||||
extends Node
|
||||
|
||||
@export var enabled: bool = true
|
||||
|
||||
@onready var combine_area_3d: Area3D = $Area3d
|
||||
@onready var _pickable: XRToolsPickable = get_parent() as XRToolsPickable
|
||||
|
||||
@@ -21,6 +23,8 @@ func _ready() -> void:
|
||||
if not _food_item:
|
||||
SweetLogger.warning("{0} requires a FoodItem sibling", [_pickable.name])
|
||||
return
|
||||
if not enabled:
|
||||
return
|
||||
|
||||
# Detect items whether held (layer 17 "Held Objects") or loose
|
||||
# (layer 3 "Pickable Objects"). Don't advertise a layer of our own.
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
extends Node
|
||||
class_name DespawningItem
|
||||
|
||||
@export var enabled: bool = true
|
||||
|
||||
@export var time_to_despawn: float = 8
|
||||
|
||||
# The minimum speed required to reset despawn timer.
|
||||
@@ -20,9 +22,12 @@ func _ready() -> void:
|
||||
if not _rigid:
|
||||
SweetLogger.error("{0} must be a grandchild of a RigidBody3D", [name])
|
||||
return
|
||||
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if not enabled:
|
||||
return
|
||||
|
||||
# Despawning is a world decision, so only the owner of world logic runs the
|
||||
# clock. Every peer used to run its own copy: the countdown drifted between
|
||||
# them and the blink below toggled `visible` locally, so the same item was
|
||||
@@ -53,11 +58,7 @@ func _process(delta: float) -> void:
|
||||
_set_visible(int(_time_left * 5.0) % 2 == 0)
|
||||
|
||||
|
||||
# `visible` is not a replicated property, so a blink driven only here would make
|
||||
# the item flicker on the host and stay solid on clients. Until it is synced,
|
||||
# only warn when there is nobody else to disagree with.
|
||||
func _set_visible(value: bool) -> void:
|
||||
if NetworkManager.is_online():
|
||||
get_parent().visible = true
|
||||
if not NetworkManager.owns_world():
|
||||
return
|
||||
get_parent().visible = value
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
[ext_resource type="Sky" uid="uid://c1abtpwhdm2d5" path="res://textures/sky/NightSkyHDRI009_16K.tres" id="5_c3xgf"]
|
||||
[ext_resource type="Script" uid="uid://fyd2rjramhbb" path="res://prefabs/kitchen_instantiator.gd" id="6_pw2j5"]
|
||||
[ext_resource type="PackedScene" uid="uid://damrxtlt7uswf" path="res://content/station_layouts/small_line.tscn" id="7_0sjqq"]
|
||||
[ext_resource type="PackedScene" uid="uid://j7caslh27nor" path="res://stations/Hob_old.tscn" id="8_0sjqq"]
|
||||
[ext_resource type="PackedScene" uid="uid://dm70ynyuw1a5u" path="res://prefabs/day_controller.tscn" id="9_5wx0o"]
|
||||
[ext_resource type="PackedScene" uid="uid://bnwb7imcotkod" path="res://prefabs/build_mode_controller.tscn" id="10_464r1"]
|
||||
[ext_resource type="PackedScene" uid="uid://3i1xb74cfsh5" path="res://test/vr_spectator_camera.tscn" id="11_5wx0o"]
|
||||
[ext_resource type="PackedScene" uid="uid://dxe05wp60jg3l" path="res://scenes/queue_controller.tscn" id="11_de1dy"]
|
||||
[ext_resource type="Script" uid="uid://biu4qr3nr1eny" path="res://test/mp_test_driver.gd" id="99_mptst"]
|
||||
|
||||
@@ -31,6 +31,9 @@ sdfgi_enabled = true
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_arao0"]
|
||||
size = Vector3(15, 20, 0.1)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_464r1"]
|
||||
metadata/__load_path__ = "res://stations/Hob_old.tscn"
|
||||
|
||||
[node name="Main" type="Node3D" unique_id=1312265607 node_paths=PackedStringArray("items_spawner", "players_spawner")]
|
||||
script = ExtResource("1_kdan8")
|
||||
items_spawner = NodePath("ItemsSpawner")
|
||||
@@ -63,7 +66,7 @@ environment = SubResource("Environment_bvwq1")
|
||||
spawn_path = NodePath("../WorldContent")
|
||||
|
||||
[node name="PlayersSpawner" type="MultiplayerSpawner" parent="." unique_id=106645565]
|
||||
_spawnable_scenes = PackedStringArray("res://Player/net_player.tscn")
|
||||
_spawnable_scenes = PackedStringArray("uid://c58ns7csdahjy")
|
||||
spawn_path = NodePath("../Players")
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="." unique_id=4404969]
|
||||
@@ -91,7 +94,7 @@ script = ExtResource("99_mptst")
|
||||
transform = Transform3D(1, 0, -1.7484555e-07, 0, 1, 0, 1.7484555e-07, 0, 1, 0, 0, -1.2)
|
||||
script = ExtResource("6_pw2j5")
|
||||
kitchen_scene = ExtResource("7_0sjqq")
|
||||
hob_scene = ExtResource("8_0sjqq")
|
||||
hob_scene = SubResource("Resource_464r1")
|
||||
|
||||
[node name="DayController" parent="." unique_id=1418639156 instance=ExtResource("9_5wx0o")]
|
||||
|
||||
@@ -99,3 +102,5 @@ hob_scene = ExtResource("8_0sjqq")
|
||||
|
||||
[node name="QueueController" parent="." unique_id=326512876 instance=ExtResource("11_de1dy")]
|
||||
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 7.2000003)
|
||||
|
||||
[node name="VRSpectatorCamera" parent="." unique_id=310823561 instance=ExtResource("11_5wx0o")]
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
[gd_scene format=3 uid="uid://c6rift56ql3f8"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="Script" uid="uid://0y6wnjcsum6" path="res://stations/item_dispenser.gd" id="1_myl3s"]
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="PackedScene" uid="uid://c0lknik4noobs" path="res://items/BurgerBuns.tscn" id="2_1q74o"]
|
||||
[ext_resource type="PackedScene" uid="uid://mpapt5mkbuao" path="res://prefabs/slide_off_dome.tscn" id="4_rf1b2"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_xmbo2"]
|
||||
radius = 0.3
|
||||
[ext_resource type="AudioStream" uid="uid://dmyuqe5058sv3" path="res://sounds/220197__gameaudio__click-basic.wav" id="4_u2p81"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_24d3s"]
|
||||
height = 1.0
|
||||
@@ -26,49 +24,49 @@ collision_layer = 65536
|
||||
collision_mask = 65536
|
||||
snap_mode = 1
|
||||
|
||||
[node name="CollisionShape3D" parent="SnapZone" index="0"]
|
||||
shape = SubResource("SphereShape3D_xmbo2")
|
||||
|
||||
[node name="BurgerBunsDispenser" type="StaticBody3D" parent="." index="6" unique_id=1720683779 node_paths=PackedStringArray("snap_zone", "synchronizer") groups=["station"]]
|
||||
[node name="BurgerBunsDispenser" type="StaticBody3D" parent="." index="6" unique_id=1720683779 node_paths=PackedStringArray("notification_audio", "ambient_audio", "snap_zone", "synchronizer") groups=["station"]]
|
||||
script = ExtResource("1_myl3s")
|
||||
item_scene = ExtResource("2_1q74o")
|
||||
pickup_sound = ExtResource("4_u2p81")
|
||||
notification_audio = NodePath("../AudioStreamPlayer3DNotification")
|
||||
ambient_audio = NodePath("../AudioStreamPlayer3DAmbient")
|
||||
snap_zone = NodePath("../SnapZone")
|
||||
synchronizer = NodePath("../MultiplayerSynchronizer")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="BurgerBunsDispenser" unique_id=1470079357]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="BurgerBunsDispenser" index="0" unique_id=1470079357]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
shape = SubResource("CylinderShape3D_24d3s")
|
||||
|
||||
[node name="SlideOffDome" parent="BurgerBunsDispenser" unique_id=1427609426 instance=ExtResource("4_rf1b2")]
|
||||
[node name="SlideOffDome" parent="BurgerBunsDispenser" index="1" unique_id=1427609426 instance=ExtResource("4_rf1b2")]
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="BurgerBunsDispenser" unique_id=1746426494]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="BurgerBunsDispenser" index="2" unique_id=1746426494]
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D" unique_id=858311379]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D" index="0" unique_id=858311379]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
radius = 0.3
|
||||
height = 1.0
|
||||
sides = 32
|
||||
|
||||
[node name="CSGCombiner3DBuns" type="CSGCombiner3D" parent="BurgerBunsDispenser/CSGCombiner3D" unique_id=1459017790]
|
||||
[node name="CSGCombiner3DBuns" type="CSGCombiner3D" parent="BurgerBunsDispenser/CSGCombiner3D" index="1" unique_id=1459017790]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.16038476, 1.0341886, -0.09012994)
|
||||
autosmooth = true
|
||||
smoothing_angle = 138.9
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns" unique_id=1328221793]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns" index="0" unique_id=1328221793]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.004122257, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns" unique_id=686624728]
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns" index="1" unique_id=686624728]
|
||||
transform = Transform3D(0.82770383, -0.5611652, 0, 0.5611652, 0.82770383, 0, 0, 0, 1, -0.048392475, 0.029736161, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns/CSGCylinder3D3" unique_id=1113894081]
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns/CSGCylinder3D3" index="0" unique_id=1113894081]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.9604645e-08, 0.040259957, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
@@ -76,26 +74,26 @@ sides = 16
|
||||
cone = true
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCombiner3DBuns2" type="CSGCombiner3D" parent="BurgerBunsDispenser/CSGCombiner3D" unique_id=1636439623]
|
||||
[node name="CSGCombiner3DBuns2" type="CSGCombiner3D" parent="BurgerBunsDispenser/CSGCombiner3D" index="2" unique_id=1636439623]
|
||||
transform = Transform3D(0.42896286, 0, -0.90332216, 0, 1, 0, 0.90332216, 0, 0.42896286, 0.13564643, 1.0341886, 0.20497215)
|
||||
autosmooth = true
|
||||
smoothing_angle = 138.9
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns2" unique_id=190780737]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns2" index="0" unique_id=190780737]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.004122257, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns2" unique_id=557804311]
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns2" index="1" unique_id=557804311]
|
||||
transform = Transform3D(0.82770383, -0.5611652, 0, 0.5611652, 0.82770383, 0, 0, 0, 1, -0.048392475, 0.029736161, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns2/CSGCylinder3D3" unique_id=605379447]
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns2/CSGCylinder3D3" index="0" unique_id=605379447]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.9604645e-08, 0.040259957, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
@@ -103,26 +101,26 @@ sides = 16
|
||||
cone = true
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCombiner3DBuns3" type="CSGCombiner3D" parent="BurgerBunsDispenser/CSGCombiner3D" unique_id=1594575583]
|
||||
[node name="CSGCombiner3DBuns3" type="CSGCombiner3D" parent="BurgerBunsDispenser/CSGCombiner3D" index="3" unique_id=1594575583]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.17070979, 1.0341885, 0.07147646)
|
||||
autosmooth = true
|
||||
smoothing_angle = 138.9
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns3" unique_id=1686142490]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns3" index="0" unique_id=1686142490]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.004122257, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns3" unique_id=1773290691]
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns3" index="1" unique_id=1773290691]
|
||||
transform = Transform3D(0.82770383, -0.5611652, 0, 0.5611652, 0.82770383, 0, 0, 0, 1, -0.048392475, 0.029736161, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns3/CSGCylinder3D3" unique_id=801922493]
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns3/CSGCylinder3D3" index="0" unique_id=801922493]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.9604645e-08, 0.040259957, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
@@ -130,26 +128,26 @@ sides = 16
|
||||
cone = true
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCombiner3DBuns4" type="CSGCombiner3D" parent="BurgerBunsDispenser/CSGCombiner3D" unique_id=2055085730]
|
||||
[node name="CSGCombiner3DBuns4" type="CSGCombiner3D" parent="BurgerBunsDispenser/CSGCombiner3D" index="4" unique_id=2055085730]
|
||||
transform = Transform3D(0.95670986, 0, 0.29104328, 0, 1, 0, -0.29104328, 0, 0.95670986, -0.08665481, 1.0341886, -0.10344604)
|
||||
autosmooth = true
|
||||
smoothing_angle = 138.9
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns4" unique_id=547208858]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns4" index="0" unique_id=547208858]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.004122257, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns4" unique_id=185898007]
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns4" index="1" unique_id=185898007]
|
||||
transform = Transform3D(0.82770383, -0.5611652, 0, 0.5611652, 0.82770383, 0, 0, 0, 1, -0.048392475, 0.029736161, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns4/CSGCylinder3D3" unique_id=2117029178]
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns4/CSGCylinder3D3" index="0" unique_id=2117029178]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.9604645e-08, 0.040259957, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
@@ -157,26 +155,26 @@ sides = 16
|
||||
cone = true
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCombiner3DBuns5" type="CSGCombiner3D" parent="BurgerBunsDispenser/CSGCombiner3D" unique_id=546748728]
|
||||
[node name="CSGCombiner3DBuns5" type="CSGCombiner3D" parent="BurgerBunsDispenser/CSGCombiner3D" index="5" unique_id=546748728]
|
||||
transform = Transform3D(0.20608562, 0, -0.978534, 0, 1, 0, 0.978534, 0, 0.20608562, -0.047733016, 1.0341886, 0.19433105)
|
||||
autosmooth = true
|
||||
smoothing_angle = 138.9
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns5" unique_id=102374914]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns5" index="0" unique_id=102374914]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.004122257, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns5" unique_id=189923990]
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns5" index="1" unique_id=189923990]
|
||||
transform = Transform3D(0.82770383, -0.5611652, 0, 0.5611652, 0.82770383, 0, 0, 0, 1, -0.048392475, 0.029736161, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns5/CSGCylinder3D3" unique_id=1980594001]
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="BurgerBunsDispenser/CSGCombiner3D/CSGCombiner3DBuns5/CSGCylinder3D3" index="0" unique_id=1980594001]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.9604645e-08, 0.040259957, 0)
|
||||
radius = 0.085
|
||||
height = 0.04
|
||||
|
||||
+32
-32
@@ -1,20 +1,20 @@
|
||||
[gd_scene format=3 uid="uid://efaec6ymgabo"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="Script" uid="uid://cql13y8da4auf" path="res://stations/counter.gd" id="1_oapbh"]
|
||||
[ext_resource type="AudioStream" uid="uid://bqtk1adk8umbx" path="res://sounds/220197__gameaudio__click-basic.wav" id="2_0aadn"]
|
||||
[ext_resource type="AudioStream" uid="uid://daiv8ubwdbidf" path="res://sounds/220195__gameaudio__click-wooden-1.wav" id="2_lg82m"]
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="AudioStream" uid="uid://dmyuqe5058sv3" path="res://sounds/220197__gameaudio__click-basic.wav" id="2_0aadn"]
|
||||
[ext_resource type="AudioStream" uid="uid://dllgyc8jh83an" path="res://sounds/220195__gameaudio__click-wooden-1.wav" id="2_lg82m"]
|
||||
[ext_resource type="PackedScene" uid="uid://dgk88esxip5xi" path="res://items/knife.tscn" id="3_3gvdi"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_24d3s"]
|
||||
size = Vector3(0.48521727, 0.040039063, 0.41994628)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_3gvdi"]
|
||||
size = Vector3(0.6, 0.9960913, 0.6)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_vlqg6"]
|
||||
size = Vector3(0.3, 0.05, 0.3)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_1ntq7"]
|
||||
size = Vector3(0.6, 0.12802735, 0.6)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_24d3s"]
|
||||
albedo_color = Color(0.49, 0.3854667, 0.29400003, 1)
|
||||
|
||||
@@ -35,94 +35,94 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2838624, -0.18)
|
||||
[node name="SnapZone" parent="." index="5" unique_id=1315859105]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0647464, 0)
|
||||
collision_layer = 65536
|
||||
collision_mask = 65540
|
||||
stash_sound = ExtResource("2_0aadn")
|
||||
snap_mode = 1
|
||||
|
||||
[node name="CollisionShape3D" parent="SnapZone" index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.002, 0)
|
||||
shape = SubResource("BoxShape3D_1ntq7")
|
||||
|
||||
[node name="Counter" type="StaticBody3D" parent="." index="6" unique_id=1487893288 node_paths=PackedStringArray("audio", "knife", "snap_zone", "synchronizer", "progress_bar") groups=["station"]]
|
||||
[node name="Counter" type="StaticBody3D" parent="." index="6" unique_id=1487893288 node_paths=PackedStringArray("audio", "knife", "progress_bar", "notification_audio", "ambient_audio", "snap_zone", "synchronizer") groups=["station"]]
|
||||
script = ExtResource("1_oapbh")
|
||||
audio = NodePath("AudioStreamPlayer3D")
|
||||
chop_audio = ExtResource("2_lg82m")
|
||||
knife = NodePath("Knife")
|
||||
progress_bar = NodePath("../ProgressBar3D")
|
||||
pickup_sound = ExtResource("2_0aadn")
|
||||
drop_sound = ExtResource("2_0aadn")
|
||||
notification_audio = NodePath("../AudioStreamPlayer3DNotification")
|
||||
ambient_audio = NodePath("../AudioStreamPlayer3DAmbient")
|
||||
snap_zone = NodePath("../SnapZone")
|
||||
synchronizer = NodePath("../MultiplayerSynchronizer")
|
||||
progress_bar = NodePath("../ProgressBar3D")
|
||||
|
||||
[node name="CollisionShape3DCuttingBoard" type="CollisionShape3D" parent="Counter" unique_id=706340473]
|
||||
[node name="CollisionShape3DCuttingBoard" type="CollisionShape3D" parent="Counter" index="0" unique_id=706340473]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00088502467, 1.0178218, 0.0009101778)
|
||||
shape = SubResource("BoxShape3D_24d3s")
|
||||
|
||||
[node name="CollisionShape3DCounter" type="CollisionShape3D" parent="Counter" unique_id=895680269]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5038623, 0)
|
||||
shape = SubResource("BoxShape3D_24d3s")
|
||||
[node name="CollisionShape3DCounter" type="CollisionShape3D" parent="Counter" index="1" unique_id=895680269]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5070981, 0)
|
||||
shape = SubResource("BoxShape3D_3gvdi")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Counter" unique_id=1941838513]
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Counter" index="2" unique_id=1941838513]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5038623, 0)
|
||||
|
||||
[node name="GestureArea" type="Area3D" parent="Counter" unique_id=398687137]
|
||||
[node name="GestureArea" type="Area3D" parent="Counter" index="3" unique_id=398687137]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0438623, 0)
|
||||
collision_layer = 0
|
||||
collision_mask = 65536
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Counter/GestureArea" unique_id=1450988028]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Counter/GestureArea" index="0" unique_id=1450988028]
|
||||
shape = SubResource("BoxShape3D_vlqg6")
|
||||
|
||||
[node name="Knife" parent="Counter" unique_id=1675596942 instance=ExtResource("3_3gvdi")]
|
||||
[node name="Knife" parent="Counter" index="4" unique_id=1675596942 instance=ExtResource("3_3gvdi")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2838624, 0)
|
||||
gravity_scale = 0.0
|
||||
freeze = true
|
||||
release_mode = 1
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Counter" unique_id=451757283]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Counter" index="5" unique_id=451757283]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5038623, 0)
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="Counter/CSGCombiner3D" unique_id=305755330]
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="Counter/CSGCombiner3D" index="0" unique_id=305755330]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.046, -0.025)
|
||||
size = Vector3(0.6, 0.908, 0.55)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D7" type="CSGBox3D" parent="Counter/CSGCombiner3D" unique_id=1086568272]
|
||||
[node name="CSGBox3D7" type="CSGBox3D" parent="Counter/CSGCombiner3D" index="1" unique_id=1086568272]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.39999902, 0.22965088)
|
||||
operation = 2
|
||||
size = Vector3(0.6, 0.22992969, 0.14069825)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="Counter/CSGCombiner3D" unique_id=43663195]
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="Counter/CSGCombiner3D" index="2" unique_id=43663195]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
size = Vector3(0.6, 0.202, 0.6)
|
||||
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="Counter/CSGCombiner3D" unique_id=1210567516]
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="Counter/CSGCombiner3D" index="3" unique_id=1210567516]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5617909, 0.060281754)
|
||||
operation = 2
|
||||
size = Vector3(0.6, 0.12051563, 0.6402156)
|
||||
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="Counter/CSGCombiner3D" unique_id=1533996708]
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="Counter/CSGCombiner3D" index="4" unique_id=1533996708]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.15, 0.08, 0.26034504)
|
||||
size = Vector3(0.25, 0.6, 0.024)
|
||||
material = SubResource("StandardMaterial3D_pt8vn")
|
||||
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="Counter/CSGCombiner3D" unique_id=1983709234]
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="Counter/CSGCombiner3D" index="5" unique_id=1983709234]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.15, 0.08, 0.26034504)
|
||||
size = Vector3(0.25, 0.6, 0.024)
|
||||
material = SubResource("StandardMaterial3D_pt8vn")
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="Counter/CSGCombiner3D" unique_id=1785057925]
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="Counter/CSGCombiner3D" index="6" unique_id=1785057925]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.057649717, 0.12459713, 0.29140875)
|
||||
radius = 0.025492515
|
||||
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="Counter/CSGCombiner3D" unique_id=1224446005]
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="Counter/CSGCombiner3D" index="7" unique_id=1224446005]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.060837455, 0.12459713, 0.29140875)
|
||||
radius = 0.025492515
|
||||
|
||||
[node name="CSGBox3D6" type="CSGBox3D" parent="Counter/CSGCombiner3D" unique_id=187377667]
|
||||
[node name="CSGBox3D6" type="CSGBox3D" parent="Counter/CSGCombiner3D" index="8" unique_id=187377667]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.514, 0)
|
||||
size = Vector3(0.48251343, 0.037231445, 0.42160034)
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGBox3D6" type="CSGBox3D" parent="Counter/CSGCombiner3D/CSGBox3D6" unique_id=1146824846]
|
||||
[node name="CSGBox3D6" type="CSGBox3D" parent="Counter/CSGCombiner3D/CSGBox3D6" index="0" unique_id=1146824846]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.1899699, 0.01924485, -0.0039587095)
|
||||
operation = 2
|
||||
size = Vector3(0.037109375, 0.092285156, 0.26757813)
|
||||
|
||||
+6
-3
@@ -2,6 +2,7 @@
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_2p1q6"]
|
||||
[ext_resource type="Script" uid="uid://bsn8vhv5adxdo" path="res://stations/hob.gd" id="1_7jc4g"]
|
||||
[ext_resource type="AudioStream" uid="uid://dmyuqe5058sv3" path="res://sounds/220197__gameaudio__click-basic.wav" id="3_l0sax"]
|
||||
[ext_resource type="Material" uid="uid://d1djvskv4n4m3" path="res://textures/hob_off.tres" id="4_8qpxk"]
|
||||
[ext_resource type="Material" uid="uid://db7c7w4apwti7" path="res://textures/hob_on.tres" id="6_m7l4u"]
|
||||
|
||||
@@ -155,12 +156,14 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2, -0.18)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.048892, 0)
|
||||
snap_mode = 1
|
||||
|
||||
[node name="Hob" type="StaticBody3D" parent="." index="6" unique_id=732560156 node_paths=PackedStringArray("animation_player", "notification_audio", "ambient_audio", "progress_bar", "snap_zone", "synchronizer") groups=["station"]]
|
||||
[node name="Hob" type="StaticBody3D" parent="." index="6" unique_id=732560156 node_paths=PackedStringArray("animation_player", "progress_bar", "notification_audio", "ambient_audio", "snap_zone", "synchronizer") groups=["station"]]
|
||||
script = ExtResource("1_7jc4g")
|
||||
animation_player = NodePath("AnimationPlayer")
|
||||
notification_audio = NodePath("../AudioStreamPlayer3DPulse")
|
||||
ambient_audio = NodePath("../AudioStreamPlayer3DContinous")
|
||||
progress_bar = NodePath("../ProgressBar3D")
|
||||
pickup_sound = ExtResource("3_l0sax")
|
||||
drop_sound = ExtResource("3_l0sax")
|
||||
notification_audio = NodePath("../AudioStreamPlayer3DNotification")
|
||||
ambient_audio = NodePath("../AudioStreamPlayer3DAmbient")
|
||||
snap_zone = NodePath("../SnapZone")
|
||||
synchronizer = NodePath("../MultiplayerSynchronizer")
|
||||
|
||||
|
||||
+16
-9
@@ -18,7 +18,7 @@ func _ready() -> void:
|
||||
SweetLogger.warning("{0} missing chop_audio reference", [name])
|
||||
if not knife:
|
||||
SweetLogger.warning("{0} missing knife reference", [name])
|
||||
_hide_all_tools()
|
||||
_disable_all_tools()
|
||||
|
||||
|
||||
func _start_chopping(id: String, work: float) -> void:
|
||||
@@ -33,12 +33,20 @@ func _process(delta: float) -> void:
|
||||
super.process(delta)
|
||||
|
||||
|
||||
|
||||
func _hide_all_tools():
|
||||
knife.visible = false
|
||||
knife.enabled = false
|
||||
func _enable_tool(_item: XRToolsPickable):
|
||||
SweetLogger.debug("Enable tool {0} on {1}", [_item.name, name])
|
||||
_item.visible = true
|
||||
_item.get_node("NetPickable").set_tool_enabled(true)
|
||||
|
||||
|
||||
func _disable_tool(_item: XRToolsPickable):
|
||||
SweetLogger.debug("Disable tool {0} on {1}", [_item.name, name])
|
||||
_item.visible = false
|
||||
_item.get_node("NetPickable").set_tool_enabled(false)
|
||||
|
||||
func _disable_all_tools():
|
||||
SweetLogger.debug("Disable all tools on {0}", [name])
|
||||
_disable_tool(knife)
|
||||
|
||||
|
||||
func _on_gesture_area_body_entered(body: Node3D) -> void:
|
||||
@@ -84,20 +92,19 @@ func on_food_item_picked_up(food_item: FoodItem) -> void:
|
||||
SweetLogger.debug("Held a FoodItem that is not choppable, id: {0} result: {1}", [food_item.id, result])
|
||||
return
|
||||
|
||||
knife.visible = true
|
||||
knife.enabled = true
|
||||
_enable_tool(knife)
|
||||
_start_chopping(result, RecipeManager.get_chopping_work(food_item.id))
|
||||
|
||||
|
||||
# Called from Station base class
|
||||
func on_object_dropped(_item: Node3D) -> void:
|
||||
SweetLogger.debug("->[]")
|
||||
_hide_all_tools()
|
||||
_disable_all_tools()
|
||||
reset()
|
||||
|
||||
|
||||
# Called from Station base class
|
||||
func on_work_complete():
|
||||
SweetLogger.debug("->[]")
|
||||
_hide_all_tools()
|
||||
_disable_all_tools()
|
||||
convert_item()
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
[gd_scene format=3 uid="uid://bbg7dwsbxxh1t"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="Script" uid="uid://0y6wnjcsum6" path="res://stations/item_dispenser.gd" id="1_4m60m"]
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="PackedScene" uid="uid://e4i6o5oriecx" path="res://items/PickupCube.tscn" id="2_nn8tr"]
|
||||
[ext_resource type="AudioStream" uid="uid://dmyuqe5058sv3" path="res://sounds/220197__gameaudio__click-basic.wav" id="4_0wtc7"]
|
||||
[ext_resource type="PackedScene" uid="uid://mpapt5mkbuao" path="res://prefabs/slide_off_dome.tscn" id="4_nn8tr"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_xmbo2"]
|
||||
radius = 0.3
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_24d3s"]
|
||||
height = 1.0
|
||||
radius = 0.29541016
|
||||
@@ -30,52 +28,51 @@ collision_layer = 65536
|
||||
collision_mask = 65536
|
||||
snap_mode = 1
|
||||
|
||||
[node name="CollisionShape3D" parent="SnapZone" index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.15291119, 0)
|
||||
shape = SubResource("SphereShape3D_xmbo2")
|
||||
|
||||
[node name="CubeSideDispenser" type="StaticBody3D" parent="." index="6" unique_id=200950572 node_paths=PackedStringArray("snap_zone", "synchronizer") groups=["station"]]
|
||||
[node name="CubeSideDispenser" type="StaticBody3D" parent="." index="6" unique_id=200950572 node_paths=PackedStringArray("notification_audio", "ambient_audio", "snap_zone", "synchronizer") groups=["station"]]
|
||||
script = ExtResource("1_4m60m")
|
||||
item_scene = ExtResource("2_nn8tr")
|
||||
pickup_sound = ExtResource("4_0wtc7")
|
||||
notification_audio = NodePath("../AudioStreamPlayer3DNotification")
|
||||
ambient_audio = NodePath("../AudioStreamPlayer3DAmbient")
|
||||
snap_zone = NodePath("../SnapZone")
|
||||
synchronizer = NodePath("../MultiplayerSynchronizer")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="CubeSideDispenser" unique_id=1974757539]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="CubeSideDispenser" index="0" unique_id=1974757539]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
shape = SubResource("CylinderShape3D_24d3s")
|
||||
|
||||
[node name="SlideOffDome" parent="CubeSideDispenser" unique_id=1427609426 instance=ExtResource("4_nn8tr")]
|
||||
[node name="SlideOffDome" parent="CubeSideDispenser" index="1" unique_id=1427609426 instance=ExtResource("4_nn8tr")]
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="CubeSideDispenser" unique_id=1172420592]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="CubeSideDispenser" index="2" unique_id=1172420592]
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="CubeSideDispenser/CSGCombiner3D" unique_id=1073546772]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="CubeSideDispenser/CSGCombiner3D" index="0" unique_id=1073546772]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
radius = 0.3
|
||||
height = 1.0
|
||||
sides = 32
|
||||
|
||||
[node name="Cubes" type="Node3D" parent="CubeSideDispenser" unique_id=100532970]
|
||||
[node name="Cubes" type="Node3D" parent="CubeSideDispenser" index="3" unique_id=100532970]
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" unique_id=2040729886]
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" index="0" unique_id=2040729886]
|
||||
transform = Transform3D(0.9709369, 0, 0.23933554, 0, 1, 0, -0.23933554, 0, 0.9709369, -0.0038359165, 1.0421022, -0.1349423)
|
||||
mesh = SubResource("BoxMesh_irf4n")
|
||||
|
||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" unique_id=2119335322]
|
||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" index="1" unique_id=2119335322]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.1336323, 1.0421022, 0.049409628)
|
||||
mesh = SubResource("BoxMesh_irf4n")
|
||||
|
||||
[node name="MeshInstance3D3" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" unique_id=896999260]
|
||||
[node name="MeshInstance3D3" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" index="2" unique_id=896999260]
|
||||
transform = Transform3D(0.94914126, 0, -0.31485054, 0, 1, 0, 0.31485054, 0, 0.94914126, 0.021345377, 1.0421022, 0.13508391)
|
||||
mesh = SubResource("BoxMesh_irf4n")
|
||||
|
||||
[node name="MeshInstance3D4" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" unique_id=1055210121]
|
||||
[node name="MeshInstance3D4" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" index="3" unique_id=1055210121]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.14830339, 1.0421022, 0.054090023)
|
||||
mesh = SubResource("BoxMesh_irf4n")
|
||||
|
||||
[node name="MeshInstance3D5" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" unique_id=1800524097]
|
||||
[node name="MeshInstance3D5" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" index="4" unique_id=1800524097]
|
||||
transform = Transform3D(0.966823, 0, -0.2554472, 0, 1, 0, 0.2554472, 0, 0.966823, 0.12695658, 1.0421022, -0.07926583)
|
||||
mesh = SubResource("BoxMesh_irf4n")
|
||||
|
||||
[node name="MeshInstance3D6" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" unique_id=192094054]
|
||||
[node name="MeshInstance3D6" type="MeshInstance3D" parent="CubeSideDispenser/Cubes" index="5" unique_id=192094054]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.11111963, 1.0421022, -0.094003916)
|
||||
mesh = SubResource("BoxMesh_irf4n")
|
||||
|
||||
+10
-14
@@ -1,7 +1,8 @@
|
||||
[gd_scene format=3 uid="uid://cnjwtnhwh0i8q"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="Script" uid="uid://q7tpwmrbmu1m" path="res://stations/dirt_station.gd" id="1_hc1d4"]
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="AudioStream" uid="uid://dmyuqe5058sv3" path="res://sounds/220197__gameaudio__click-basic.wav" id="3_ucg2q"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_24d3s"]
|
||||
size = Vector3(0.5, 1, 0.5)
|
||||
@@ -13,9 +14,6 @@ albedo_color = Color(0.45262197, 0.26770625, 0.2601587, 1)
|
||||
material = SubResource("StandardMaterial3D_qn1ku")
|
||||
size = Vector3(0.5, 1, 0.5)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_mep2a"]
|
||||
size = Vector3(0.81640625, 0.5635376, 0.79351807)
|
||||
|
||||
[node name="DirtStation" unique_id=707500902 instance=ExtResource("1_station")]
|
||||
|
||||
[node name="StationMovement" parent="." index="0" unique_id=946873975 node_paths=PackedStringArray("station")]
|
||||
@@ -24,27 +22,25 @@ station = NodePath("../DirtStation")
|
||||
[node name="SnapZone" parent="." index="5" unique_id=1315859105]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0313971, 0)
|
||||
collision_layer = 65536
|
||||
collision_mask = 65540
|
||||
snap_mode = 1
|
||||
|
||||
[node name="CollisionShape3D" parent="SnapZone" index="0"]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0.008666992, -0.11009073, -0.009353638)
|
||||
shape = SubResource("BoxShape3D_mep2a")
|
||||
|
||||
[node name="DirtStation" type="StaticBody3D" parent="." index="6" unique_id=160842153 node_paths=PackedStringArray("snap_zone", "synchronizer") groups=["station"]]
|
||||
[node name="DirtStation" type="StaticBody3D" parent="." index="6" unique_id=160842153 node_paths=PackedStringArray("notification_audio", "ambient_audio", "snap_zone", "synchronizer") groups=["station"]]
|
||||
script = ExtResource("1_hc1d4")
|
||||
pickup_sound = ExtResource("3_ucg2q")
|
||||
drop_sound = ExtResource("3_ucg2q")
|
||||
notification_audio = NodePath("../AudioStreamPlayer3DNotification")
|
||||
ambient_audio = NodePath("../AudioStreamPlayer3DAmbient")
|
||||
snap_zone = NodePath("../SnapZone")
|
||||
synchronizer = NodePath("../MultiplayerSynchronizer")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="DirtStation" unique_id=1400366312]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="DirtStation" index="0" unique_id=1400366312]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_24d3s")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="DirtStation/CollisionShape3D" unique_id=55726639]
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="DirtStation/CollisionShape3D" index="0" unique_id=55726639]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.008318901, 0, -0.022509098)
|
||||
mesh = SubResource("BoxMesh_ay2w6")
|
||||
|
||||
[node name="Label3D" type="Label3D" parent="DirtStation/CollisionShape3D" unique_id=1251766743]
|
||||
[node name="Label3D" type="Label3D" parent="DirtStation/CollisionShape3D" index="1" unique_id=1251766743]
|
||||
transform = Transform3D(0.9999992, 0, 0, 0, 0.99999946, 0, 0, 0, 0.9999992, 0.002797456, 0.6309581, -0.2812457)
|
||||
text = "Dirt"
|
||||
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ func refresh_display() -> void:
|
||||
# Called from Station base class
|
||||
func on_food_item_picked_up(food_item: FoodItem) -> void:
|
||||
SweetLogger.debug("Object picked up: {0}", [food_item])
|
||||
|
||||
|
||||
if not food_item:
|
||||
SweetLogger.debug("Held object is not a FoodItem")
|
||||
return
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
[gd_scene format=3 uid="uid://ck5tuftqmyiue"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="Script" uid="uid://0y6wnjcsum6" path="res://stations/item_dispenser.gd" id="1_jm0ik"]
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="PackedScene" uid="uid://bp3v1jl8pctro" path="res://Containers/plate.tscn" id="2_tfo2i"]
|
||||
[ext_resource type="AudioStream" uid="uid://dmyuqe5058sv3" path="res://sounds/220197__gameaudio__click-basic.wav" id="4_jgjsq"]
|
||||
[ext_resource type="PackedScene" uid="uid://mpapt5mkbuao" path="res://prefabs/slide_off_dome.tscn" id="4_tfo2i"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_xmbo2"]
|
||||
radius = 0.3
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_24d3s"]
|
||||
height = 1.0
|
||||
radius = 0.3
|
||||
@@ -23,94 +21,94 @@ collision_layer = 65536
|
||||
collision_mask = 65536
|
||||
snap_mode = 1
|
||||
|
||||
[node name="CollisionShape3D" parent="SnapZone" index="0"]
|
||||
shape = SubResource("SphereShape3D_xmbo2")
|
||||
|
||||
[node name="PlateDispenser" type="StaticBody3D" parent="." index="6" unique_id=710538846 node_paths=PackedStringArray("snap_zone", "synchronizer") groups=["station"]]
|
||||
[node name="PlateDispenser" type="StaticBody3D" parent="." index="6" unique_id=710538846 node_paths=PackedStringArray("notification_audio", "ambient_audio", "snap_zone", "synchronizer") groups=["station"]]
|
||||
script = ExtResource("1_jm0ik")
|
||||
item_scene = ExtResource("2_tfo2i")
|
||||
pickup_sound = ExtResource("4_jgjsq")
|
||||
notification_audio = NodePath("../AudioStreamPlayer3DNotification")
|
||||
ambient_audio = NodePath("../AudioStreamPlayer3DAmbient")
|
||||
snap_zone = NodePath("../SnapZone")
|
||||
synchronizer = NodePath("../MultiplayerSynchronizer")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlateDispenser" unique_id=831688237]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlateDispenser" index="0" unique_id=831688237]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
shape = SubResource("CylinderShape3D_24d3s")
|
||||
|
||||
[node name="SlideOffDome" parent="PlateDispenser" unique_id=1427609426 instance=ExtResource("4_tfo2i")]
|
||||
[node name="SlideOffDome" parent="PlateDispenser" index="1" unique_id=1427609426 instance=ExtResource("4_tfo2i")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.061363697, 0)
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="PlateDispenser" unique_id=696108271]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="PlateDispenser" index="2" unique_id=696108271]
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/CSGCombiner3D" unique_id=1339763385]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/CSGCombiner3D" index="0" unique_id=1339763385]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
radius = 0.3
|
||||
height = 1.0
|
||||
sides = 32
|
||||
|
||||
[node name="Plates" type="Node3D" parent="PlateDispenser" unique_id=1364909922]
|
||||
[node name="Plates" type="Node3D" parent="PlateDispenser" index="3" unique_id=1364909922]
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="PlateDispenser/Plates" unique_id=2128650644]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="PlateDispenser/Plates" index="0" unique_id=2128650644]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0289642, 0)
|
||||
autosmooth = true
|
||||
smoothing_angle = 103.9
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D" unique_id=472067854]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D" index="0" unique_id=472067854]
|
||||
radius = 0.2
|
||||
height = 0.03
|
||||
sides = 16
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D/CSGCylinder3D" unique_id=7092994]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D/CSGCylinder3D" index="0" unique_id=7092994]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.010312311, 0)
|
||||
operation = 2
|
||||
radius = 0.15
|
||||
height = 0.03
|
||||
sides = 16
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D" unique_id=23957958]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D" index="1" unique_id=23957958]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.027119078, 0)
|
||||
radius = 0.15
|
||||
height = 0.02
|
||||
|
||||
[node name="CSGCombiner3D2" type="CSGCombiner3D" parent="PlateDispenser/Plates" unique_id=404631280]
|
||||
[node name="CSGCombiner3D2" type="CSGCombiner3D" parent="PlateDispenser/Plates" index="1" unique_id=404631280]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0762081, 0)
|
||||
autosmooth = true
|
||||
smoothing_angle = 103.9
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D2" unique_id=943162425]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D2" index="0" unique_id=943162425]
|
||||
radius = 0.2
|
||||
height = 0.03
|
||||
sides = 16
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D2/CSGCylinder3D" unique_id=218364524]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D2/CSGCylinder3D" index="0" unique_id=218364524]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.010312311, 0)
|
||||
operation = 2
|
||||
radius = 0.15
|
||||
height = 0.03
|
||||
sides = 16
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D2" unique_id=1548327331]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D2" index="1" unique_id=1548327331]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.027119078, 0)
|
||||
radius = 0.15
|
||||
height = 0.02
|
||||
|
||||
[node name="CSGCombiner3D3" type="CSGCombiner3D" parent="PlateDispenser/Plates" unique_id=1506211353]
|
||||
[node name="CSGCombiner3D3" type="CSGCombiner3D" parent="PlateDispenser/Plates" index="2" unique_id=1506211353]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1214186, 0)
|
||||
autosmooth = true
|
||||
smoothing_angle = 103.9
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D3" unique_id=739830577]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D3" index="0" unique_id=739830577]
|
||||
radius = 0.2
|
||||
height = 0.03
|
||||
sides = 16
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D3/CSGCylinder3D" unique_id=1882120753]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D3/CSGCylinder3D" index="0" unique_id=1882120753]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.010312311, 0)
|
||||
operation = 2
|
||||
radius = 0.15
|
||||
height = 0.03
|
||||
sides = 16
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D3" unique_id=1904629745]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="PlateDispenser/Plates/CSGCombiner3D3" index="1" unique_id=1904629745]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.027119078, 0)
|
||||
radius = 0.15
|
||||
height = 0.02
|
||||
|
||||
@@ -3,11 +3,9 @@
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="Script" uid="uid://0y6wnjcsum6" path="res://stations/item_dispenser.gd" id="2_30d2d"]
|
||||
[ext_resource type="PackedScene" uid="uid://drwuhqb3pjtiy" path="res://items/potato.tscn" id="3_mjqsn"]
|
||||
[ext_resource type="AudioStream" uid="uid://dmyuqe5058sv3" path="res://sounds/220197__gameaudio__click-basic.wav" id="4_8orw3"]
|
||||
[ext_resource type="PackedScene" uid="uid://mpapt5mkbuao" path="res://prefabs/slide_off_dome.tscn" id="5_ur331"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_xmbo2"]
|
||||
radius = 0.3
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_24d3s"]
|
||||
height = 1.0
|
||||
radius = 0.3
|
||||
@@ -26,100 +24,100 @@ collision_layer = 65536
|
||||
collision_mask = 65536
|
||||
snap_mode = 1
|
||||
|
||||
[node name="CollisionShape3D" parent="SnapZone" index="0"]
|
||||
shape = SubResource("SphereShape3D_xmbo2")
|
||||
|
||||
[node name="PotatoDispenser" type="StaticBody3D" parent="." index="6" unique_id=1720683779 node_paths=PackedStringArray("snap_zone", "synchronizer") groups=["station"]]
|
||||
[node name="PotatoDispenser" type="StaticBody3D" parent="." index="6" unique_id=1720683779 node_paths=PackedStringArray("notification_audio", "ambient_audio", "snap_zone", "synchronizer") groups=["station"]]
|
||||
script = ExtResource("2_30d2d")
|
||||
item_scene = ExtResource("3_mjqsn")
|
||||
pickup_sound = ExtResource("4_8orw3")
|
||||
notification_audio = NodePath("../AudioStreamPlayer3DNotification")
|
||||
ambient_audio = NodePath("../AudioStreamPlayer3DAmbient")
|
||||
snap_zone = NodePath("../SnapZone")
|
||||
synchronizer = NodePath("../MultiplayerSynchronizer")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PotatoDispenser" unique_id=1470079357]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PotatoDispenser" index="0" unique_id=1470079357]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
shape = SubResource("CylinderShape3D_24d3s")
|
||||
|
||||
[node name="SlideOffDome" parent="PotatoDispenser" unique_id=1427609426 instance=ExtResource("5_ur331")]
|
||||
[node name="SlideOffDome" parent="PotatoDispenser" index="1" unique_id=1427609426 instance=ExtResource("5_ur331")]
|
||||
collision_layer = 4
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="PotatoDispenser" unique_id=1746426494]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="PotatoDispenser" index="2" unique_id=1746426494]
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PotatoDispenser/CSGCombiner3D" unique_id=858311379]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="PotatoDispenser/CSGCombiner3D" index="0" unique_id=858311379]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
radius = 0.3
|
||||
height = 1.0
|
||||
sides = 32
|
||||
|
||||
[node name="CSGCombiner3DPotato" type="CSGCombiner3D" parent="PotatoDispenser/CSGCombiner3D" unique_id=462017195]
|
||||
[node name="CSGCombiner3DPotato" type="CSGCombiner3D" parent="PotatoDispenser/CSGCombiner3D" index="1" unique_id=462017195]
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato" unique_id=359972032]
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato" index="0" unique_id=359972032]
|
||||
transform = Transform3D(0.7382242, 0, -0.6745554, 0, 1, 0, 0.6745554, 0, 0.7382242, -0.15066577, 1.0408545, 0.076017424)
|
||||
radius = 0.06
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato/CSGSphere3D" unique_id=1185082311]
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato/CSGSphere3D" index="0" unique_id=1185082311]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.06550818)
|
||||
radius = 0.053
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato" unique_id=1791611208]
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato" index="1" unique_id=1791611208]
|
||||
transform = Transform3D(0.9110552, 0.37138447, -0.17903017, -0.38194957, 0.92377764, -0.02737245, 0.15521842, 0.09331828, 0.98346263, 0.07202275, 1.0408545, 0.17340909)
|
||||
radius = 0.06
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato/CSGSphere3D2" unique_id=421732580]
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato/CSGSphere3D2" index="0" unique_id=421732580]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.06550818)
|
||||
radius = 0.053
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D3" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato" unique_id=1846822725]
|
||||
[node name="CSGSphere3D3" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato" index="2" unique_id=1846822725]
|
||||
transform = Transform3D(0.915982, 0, 0.4012194, 0, 1, 0, -0.4012194, 0, 0.915982, -0.023129582, 1.0408545, -0.17174377)
|
||||
radius = 0.06
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato/CSGSphere3D3" unique_id=186002472]
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato/CSGSphere3D3" index="0" unique_id=186002472]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.06550818)
|
||||
radius = 0.053
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D4" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato" unique_id=1463825677]
|
||||
[node name="CSGSphere3D4" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato" index="3" unique_id=1463825677]
|
||||
transform = Transform3D(-0.6086207, 0, 0.79346126, 0, 1, 0, -0.79346126, 0, -0.6086207, -0.06466554, 1.0408545, 0.15114635)
|
||||
radius = 0.06
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato/CSGSphere3D4" unique_id=1513828324]
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato/CSGSphere3D4" index="0" unique_id=1513828324]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.06550818)
|
||||
radius = 0.053
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D5" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato" unique_id=1192971071]
|
||||
[node name="CSGSphere3D5" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato" index="4" unique_id=1192971071]
|
||||
transform = Transform3D(-0.9572301, 0, -0.2893278, 0, 1, 0, 0.2893278, 0, -0.9572301, -0.13095556, 1.0408545, -0.10415963)
|
||||
radius = 0.06
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato/CSGSphere3D5" unique_id=216752249]
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGCombiner3DPotato/CSGSphere3D5" index="0" unique_id=216752249]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.06550818)
|
||||
radius = 0.053
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D" unique_id=502335906]
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D" index="2" unique_id=502335906]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.15826963, 1.0408545, -0.03307341)
|
||||
radius = 0.06
|
||||
radial_segments = 32
|
||||
material = SubResource("StandardMaterial3D_d4wpw")
|
||||
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGSphere3D" unique_id=1283597847]
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="PotatoDispenser/CSGCombiner3D/CSGSphere3D" index="0" unique_id=1283597847]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.06550818)
|
||||
radius = 0.053
|
||||
radial_segments = 32
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
[gd_scene format=3 uid="uid://cwnwo4i28upap"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="Script" uid="uid://0y6wnjcsum6" path="res://stations/item_dispenser.gd" id="1_gkb3v"]
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="PackedScene" uid="uid://dpot5qie20vf6" path="res://items/burger.tscn" id="2_mep2a"]
|
||||
[ext_resource type="Texture2D" uid="uid://cexxfyw03hr81" path="res://textures/1.png" id="4_1f5le"]
|
||||
[ext_resource type="Texture2D" uid="uid://7jt8macx4f5m" path="res://textures/1.png" id="4_1f5le"]
|
||||
[ext_resource type="AudioStream" uid="uid://dmyuqe5058sv3" path="res://sounds/220197__gameaudio__click-basic.wav" id="4_8ou8n"]
|
||||
[ext_resource type="PackedScene" uid="uid://mpapt5mkbuao" path="res://prefabs/slide_off_dome.tscn" id="5_mep2a"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_xmbo2"]
|
||||
radius = 0.3
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_24d3s"]
|
||||
height = 1.0
|
||||
radius = 0.3
|
||||
@@ -27,79 +25,79 @@ collision_layer = 65536
|
||||
collision_mask = 65536
|
||||
snap_mode = 1
|
||||
|
||||
[node name="CollisionShape3D" parent="SnapZone" index="0"]
|
||||
shape = SubResource("SphereShape3D_xmbo2")
|
||||
|
||||
[node name="RawBurgerDispenser" type="StaticBody3D" parent="." index="6" unique_id=235630131 node_paths=PackedStringArray("snap_zone", "synchronizer") groups=["station"]]
|
||||
[node name="RawBurgerDispenser" type="StaticBody3D" parent="." index="6" unique_id=235630131 node_paths=PackedStringArray("notification_audio", "ambient_audio", "snap_zone", "synchronizer") groups=["station"]]
|
||||
script = ExtResource("1_gkb3v")
|
||||
item_scene = ExtResource("2_mep2a")
|
||||
pickup_sound = ExtResource("4_8ou8n")
|
||||
notification_audio = NodePath("../AudioStreamPlayer3DNotification")
|
||||
ambient_audio = NodePath("../AudioStreamPlayer3DAmbient")
|
||||
snap_zone = NodePath("../SnapZone")
|
||||
synchronizer = NodePath("../MultiplayerSynchronizer")
|
||||
|
||||
[node name="SlideOffDome" parent="RawBurgerDispenser" unique_id=1427609426 instance=ExtResource("5_mep2a")]
|
||||
[node name="SlideOffDome" parent="RawBurgerDispenser" index="0" unique_id=1427609426 instance=ExtResource("5_mep2a")]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="RawBurgerDispenser" unique_id=378049928]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="RawBurgerDispenser" index="1" unique_id=378049928]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
shape = SubResource("CylinderShape3D_24d3s")
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="RawBurgerDispenser" unique_id=1275577257]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="RawBurgerDispenser" index="2" unique_id=1275577257]
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" unique_id=1973748218]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" index="0" unique_id=1973748218]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
radius = 0.3
|
||||
height = 1.0
|
||||
sides = 32
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" unique_id=590219609]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" index="1" unique_id=590219609]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.9532462, 0.30219492, 0, -0.30219492, 0.9532462, -0.1276815, 1.0521446, -0.052202225)
|
||||
radius = 0.08300781
|
||||
height = 0.028435059
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_di04w")
|
||||
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" unique_id=177377476]
|
||||
[node name="CSGCylinder3D3" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" index="2" unique_id=177377476]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.9694763, 0.245185, 0, -0.245185, 0.9694763, 0.08106685, 1.0391599, -0.119440794)
|
||||
radius = 0.08300781
|
||||
height = 0.03
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_di04w")
|
||||
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" unique_id=622291452]
|
||||
[node name="CSGCylinder3D4" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" index="3" unique_id=622291452]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.19005477, 1.0198405, 0.049397707)
|
||||
radius = 0.08300781
|
||||
height = 0.03
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_di04w")
|
||||
|
||||
[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" unique_id=703594207]
|
||||
[node name="CSGCylinder3D5" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" index="4" unique_id=703594207]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.026051283, 1.0175319, 0.0042250156)
|
||||
radius = 0.08300781
|
||||
height = 0.03
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_di04w")
|
||||
|
||||
[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" unique_id=955808722]
|
||||
[node name="CSGCylinder3D6" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" index="5" unique_id=955808722]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.05739355, 1.0197641, 0.13219571)
|
||||
radius = 0.08300781
|
||||
height = 0.03
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_di04w")
|
||||
|
||||
[node name="CSGCylinder3D7" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" unique_id=1066788957]
|
||||
[node name="CSGCylinder3D7" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" index="6" unique_id=1066788957]
|
||||
transform = Transform3D(0.9111114, 0.40515354, 0.075673, -0.41123694, 0.8813372, 0.2326565, 0.027568169, -0.24309555, 0.9696106, 0.14799988, 1.0345665, 0.11710405)
|
||||
radius = 0.08300781
|
||||
height = 0.03
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_di04w")
|
||||
|
||||
[node name="CSGCylinder3D8" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" unique_id=553053058]
|
||||
[node name="CSGCylinder3D8" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" index="7" unique_id=553053058]
|
||||
transform = Transform3D(0.9541017, 0.29948288, 0, -0.29948288, 0.9541017, 0, 0, 0, 1, 0.041060925, 1.0337045, 0.18304396)
|
||||
radius = 0.08300781
|
||||
height = 0.03
|
||||
sides = 16
|
||||
material = SubResource("StandardMaterial3D_di04w")
|
||||
|
||||
[node name="CSGCylinder3D9" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" unique_id=980376661]
|
||||
[node name="CSGCylinder3D9" type="CSGCylinder3D" parent="RawBurgerDispenser/CSGCombiner3D" index="8" unique_id=980376661]
|
||||
transform = Transform3D(0.8510151, 0.22759955, 0.47325662, -0.16729629, 0.97174567, -0.16649997, -0.49778044, 0.06251989, 0.8650468, 0.2036674, 1.0335208, -0.024382353)
|
||||
radius = 0.08300781
|
||||
height = 0.03
|
||||
|
||||
+27
-30
File diff suppressed because one or more lines are too long
+66
-39
@@ -1,5 +1,5 @@
|
||||
class_name Table
|
||||
extends StaticBody3D
|
||||
extends SharedInventoryStation
|
||||
|
||||
@export var thinking_duration: float = 3.0
|
||||
@export var ordering_duration: float = 50.0
|
||||
@@ -32,22 +32,22 @@ enum TableState {
|
||||
EATING
|
||||
}
|
||||
|
||||
## State is server-authoritative and synced (see table.tscn's Sync node);
|
||||
## state transitions only ever run where NetworkManager.owns_world() is true
|
||||
## (the whole station's _process is gated off elsewhere for non-owners, see
|
||||
## NetworkManager._gate_station). The setters below just refresh the display,
|
||||
## so both the server (via _set_state) and clients (via incoming sync) show
|
||||
## the same text. Use _set_state(), never assign _state directly.
|
||||
@export var _state: TableState = TableState.EMPTY
|
||||
@export var _state_time: float = 0.0
|
||||
@export var _state_duration: float = 0.0 # set in _set_state_time
|
||||
|
||||
var _state: TableState = TableState.EMPTY
|
||||
var _state_time: float = 0.0
|
||||
var _state_duration: float = 0.0
|
||||
var _original_orders: Array[String] = []
|
||||
@export var _unsatisfied_orders: Array[String] = []
|
||||
var _unsatisfied_orders: Array[String] = []
|
||||
var _players_count: int = 0
|
||||
var _is_leader: bool = true # Only the group leader orchestrates the state and shows its own visuals; see _on_group_changed().
|
||||
|
||||
|
||||
func place_order() -> void:
|
||||
SweetLogger.debug("->[]")
|
||||
if not NetworkManager.owns_world():
|
||||
server_place_order.rpc_id(1)
|
||||
SweetLogger.debug(" []-> rpc")
|
||||
return
|
||||
var new_orders: Array[String] = _unsatisfied_orders.duplicate()
|
||||
# for _i in range(0, randi_range(1, 2)):
|
||||
# new_orders.append(GameManager.get_random_meal())
|
||||
@@ -56,9 +56,12 @@ func place_order() -> void:
|
||||
new_orders.append(GameManager.get_random_meal())
|
||||
_unsatisfied_orders = new_orders
|
||||
_original_orders = _unsatisfied_orders.duplicate()
|
||||
_set_state(TableState.WAITING_PRIMARY)
|
||||
SweetLogger.info("Placed order, orders: {0}", [_unsatisfied_orders])
|
||||
|
||||
@rpc("any_peer", "call_remote", "reliable")
|
||||
func server_place_order() -> void:
|
||||
SweetLogger.debug("->[]")
|
||||
if NetworkManager.owns_world():
|
||||
place_order()
|
||||
|
||||
@@ -71,8 +74,36 @@ func absorb_items():
|
||||
continue
|
||||
|
||||
_absorb_item_if_correct(held_object)
|
||||
|
||||
|
||||
|
||||
|
||||
# Flattens items held across all of this table's snap zones
|
||||
func get_exposed_food_items() -> Array[FoodItem]:
|
||||
var items: Array[FoodItem] = []
|
||||
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)
|
||||
if plate:
|
||||
items.append_array(plate.container.contained_items)
|
||||
continue
|
||||
var food_item: FoodItem = Helper.find_food_item(held_object)
|
||||
if food_item:
|
||||
items.append(food_item)
|
||||
return items
|
||||
|
||||
|
||||
# Only the group leader orchestrates the FSM and shows its visuals
|
||||
func _on_group_changed() -> void:
|
||||
_is_leader = is_group_leader()
|
||||
if label_3d:
|
||||
label_3d.visible = _is_leader
|
||||
if label_3d_time:
|
||||
label_3d_time.visible = _is_leader
|
||||
if progress_bar:
|
||||
progress_bar.set_bar_visible(_is_leader and progress_bar.is_bar_visible())
|
||||
|
||||
|
||||
func satisfyAllOrders() -> void:
|
||||
SweetLogger.debug("->[]")
|
||||
_unsatisfied_orders.clear()
|
||||
@@ -109,7 +140,18 @@ func try_consume_customer() -> bool:
|
||||
return false
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
super._enter_tree()
|
||||
var properties: Array[NodePath] = [".:_state_duration", ".:_state", ".:_state_time", ".:_unsatisfied_orders", "Customers:visible"]
|
||||
for property_path in properties:
|
||||
sync_config.add_property(property_path)
|
||||
sync_config.property_set_spawn(property_path, false)
|
||||
sync_config.property_set_replication_mode(property_path, SceneReplicationConfig.REPLICATION_MODE_ON_CHANGE)
|
||||
SweetLogger.info("DEBUG sync_config properties: {0} | root_path: {1} | authority: {2} | peer: {3}", [sync_config.get_properties(), synchronizer.root_path, get_multiplayer_authority(), multiplayer.get_unique_id()]) # temp diagnostic
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
super.ready()
|
||||
if not label_3d:
|
||||
SweetLogger.warning("{0} missing label_3d reference", [name])
|
||||
if not label_3d_time:
|
||||
@@ -137,13 +179,6 @@ func _ready() -> void:
|
||||
for snap_zone_node in snap_zones:
|
||||
snap_zone_node.has_picked_up.connect(_on_object_picked_up)
|
||||
snap_zone_node.has_dropped.connect(_on_object_dropped)
|
||||
# Never on a client: the state machine is server-authoritative and _state is
|
||||
# synced down. NetworkManager._gate_station() already turned processing off,
|
||||
# but a spawned station is gated BEFORE its _ready() runs, so an unconditional
|
||||
# set_process(true) here would quietly re-arm the FSM on every client — and
|
||||
# _state_end(EATING) re-enables the snap zones, which then fight the server
|
||||
# for items sitting on the table.
|
||||
set_process(NetworkManager.owns_world())
|
||||
_set_state(TableState.EMPTY)
|
||||
|
||||
|
||||
@@ -173,6 +208,8 @@ func _on_object_dropped(_item) -> void:
|
||||
func _on_player_enter(_body):
|
||||
_players_count += 1
|
||||
SweetLogger.debug("Player enter, players_count: {0}", [_players_count])
|
||||
if _is_leader and _state == TableState.ORDERING:
|
||||
place_order()
|
||||
|
||||
|
||||
func _on_player_exit(_body):
|
||||
@@ -180,18 +217,6 @@ func _on_player_exit(_body):
|
||||
SweetLogger.debug("Player exit, players_count: {0}", [_players_count])
|
||||
|
||||
|
||||
func _place_order_if_player():
|
||||
if _state != TableState.ORDERING:
|
||||
return
|
||||
if _players_count > 0:
|
||||
place_order()
|
||||
_set_state(TableState.WAITING_PRIMARY)
|
||||
|
||||
|
||||
# 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:
|
||||
SweetLogger.debug("Item is null")
|
||||
@@ -271,9 +296,9 @@ func _collect_money_from_food():
|
||||
func _set_snap_zones_enabled(value: bool) -> void:
|
||||
# Enabling is the world owner's call only — a client's zones stay gated no
|
||||
# matter what state its copy of the FSM thinks it is in.
|
||||
var enabled := value and NetworkManager.owns_world()
|
||||
var is_enabled := value and NetworkManager.owns_world()
|
||||
for zone in snap_zones:
|
||||
zone.enabled = enabled
|
||||
zone.enabled = is_enabled
|
||||
|
||||
|
||||
## Server-only state transition: sets the new state's timer and assigns
|
||||
@@ -302,8 +327,8 @@ func _set_state(newState: TableState) -> void:
|
||||
_state_time = primary_duration
|
||||
_state_duration = primary_duration
|
||||
_state = newState
|
||||
# Absorm meals that were already in the table when the state starts
|
||||
for zone in snap_zones:
|
||||
# Absorm meals that were already in the table when the state starts (We missed the pickup event)
|
||||
for zone in snap_zones:
|
||||
_absorb_item_if_correct(zone.picked_up_object)
|
||||
TableState.WAITING_FRIEND:
|
||||
_state_time = friend_duration
|
||||
@@ -383,12 +408,14 @@ func _refresh_display() -> void:
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
super.process(delta)
|
||||
#SweetLogger.debug("State {0} time: {1} duration: {2} is_leader: {3}", [TableState.keys()[_state], _state_time, _state_duration, _is_leader])
|
||||
_refresh_display()
|
||||
_place_order_if_player()
|
||||
#SweetLogger.error("State {0} time: {1} duration: {2}", [TableState.keys()[_state], _state_time, _state_duration])
|
||||
if not _is_leader:
|
||||
return # Follower: the group leader orchestrates the FSM, we just mirror its synced state.
|
||||
|
||||
if not NetworkManager.owns_world():
|
||||
SweetLogger.debug("Not server, skipping state update")
|
||||
# SweetLogger.debug("Not server, skipping state update")
|
||||
return
|
||||
|
||||
if GameManager.game_state == GameManager.GameState.GAME_OVER:
|
||||
|
||||
+76
-62
@@ -1,37 +1,14 @@
|
||||
[gd_scene format=3 uid="uid://caf0xanmxbshy"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://caeikc7e3igkd" path="res://stations/table.gd" id="1_2vcpj"]
|
||||
[ext_resource type="PackedScene" uid="uid://cvucwxibtol5f" path="res://stations/StationMovement.tscn" id="1_5mi7y"]
|
||||
[ext_resource type="Script" uid="uid://cquqe4f1m1sw6" path="res://addons/godot-xr-tools/objects/snap_zone.gd" id="1_8j1nt"]
|
||||
[ext_resource type="PackedScene" uid="uid://cbs8jiqe8rcmn" path="res://abstract/station.tscn" id="1_station"]
|
||||
[ext_resource type="AudioStream" uid="uid://ck72h06t8hyyk" path="res://sounds/money.mp3" id="2_jslhm"]
|
||||
[ext_resource type="AudioStream" uid="uid://dllgyc8jh83an" path="res://sounds/220195__gameaudio__click-wooden-1.wav" id="3_0s6ir"]
|
||||
[ext_resource type="PackedScene" uid="uid://bxbocxdaayvwx" path="res://UI/progress_bar.tscn" id="3_kjf1i"]
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_np_table"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = false
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:rotation")
|
||||
properties/1/spawn = false
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath(".:visible")
|
||||
properties/2/spawn = false
|
||||
properties/2/replication_mode = 1
|
||||
properties/3/path = NodePath(".:_state_duration")
|
||||
properties/3/spawn = false
|
||||
properties/3/replication_mode = 1
|
||||
properties/4/path = NodePath(".:_state")
|
||||
properties/4/spawn = false
|
||||
properties/4/replication_mode = 1
|
||||
properties/5/path = NodePath(".:_state_time")
|
||||
properties/5/spawn = false
|
||||
properties/5/replication_mode = 1
|
||||
properties/6/path = NodePath(".:_unsatisfied_orders")
|
||||
properties/6/spawn = false
|
||||
properties/6/replication_mode = 1
|
||||
properties/7/path = NodePath("Customers:visible")
|
||||
properties/7/spawn = false
|
||||
properties/7/replication_mode = 1
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_probe"]
|
||||
size = Vector3(0.2, 0.3, 0.2)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_24d3s"]
|
||||
size = Vector3(0.7983472, 0.060000002, 0.59873295)
|
||||
@@ -45,28 +22,65 @@ albedo_color = Color(0.31, 0.21576, 0.1333, 1)
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_vlqg6"]
|
||||
size = Vector3(2.1, 0.5, 2.1)
|
||||
|
||||
[node name="Table" type="Node3D" unique_id=987495548]
|
||||
[node name="Table" unique_id=987495548 instance=ExtResource("1_station")]
|
||||
|
||||
[node name="StationMovement" parent="." unique_id=946873975 node_paths=PackedStringArray("station") instance=ExtResource("1_5mi7y")]
|
||||
[node name="StationMovement" parent="." index="0" unique_id=946873975 node_paths=PackedStringArray("station")]
|
||||
station = NodePath("../Table")
|
||||
|
||||
[node name="MultiplayerSyncronizer" type="MultiplayerSynchronizer" parent="." unique_id=2000411505]
|
||||
root_path = NodePath("../Table")
|
||||
replication_config = SubResource("SceneReplicationConfig_np_table")
|
||||
[node name="ProgressBar3D" parent="." index="4" unique_id=654673176]
|
||||
visible = false
|
||||
|
||||
[node name="Table" type="StaticBody3D" parent="." unique_id=1863572470 groups=["station", "table"]]
|
||||
[node name="SnapZone" parent="." index="5" unique_id=1315859105]
|
||||
enabled = false
|
||||
|
||||
[node name="Table" type="StaticBody3D" parent="." index="6" unique_id=1863572470 node_paths=PackedStringArray("notification_audio", "ambient_audio", "snap_zone", "synchronizer") groups=["station", "table"]]
|
||||
script = ExtResource("1_2vcpj")
|
||||
money_sound = ExtResource("2_jslhm")
|
||||
probe_paths = Array[NodePath]([NodePath("ProbeForward"), NodePath("ProbeRight"), NodePath("ProbeBack"), NodePath("ProbeLeft")])
|
||||
pickup_sound = ExtResource("3_0s6ir")
|
||||
drop_sound = ExtResource("3_0s6ir")
|
||||
notification_audio = NodePath("../AudioStreamPlayer3DNotification")
|
||||
ambient_audio = NodePath("../AudioStreamPlayer3DAmbient")
|
||||
snap_zone = NodePath("XRToolsSnapZone")
|
||||
synchronizer = NodePath("../MultiplayerSynchronizer")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Table" unique_id=228053941]
|
||||
[node name="ProbeForward" type="Area3D" parent="Table" index="0" unique_id=-1294555795]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, -0.45)
|
||||
collision_layer = 512
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Table/ProbeForward" index="0" unique_id=-1294555794]
|
||||
shape = SubResource("BoxShape3D_probe")
|
||||
|
||||
[node name="ProbeRight" type="Area3D" parent="Table" index="1" unique_id=-1294555793]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.45, 0.5, 0)
|
||||
collision_layer = 512
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Table/ProbeRight" index="0" unique_id=-1294555792]
|
||||
shape = SubResource("BoxShape3D_probe")
|
||||
|
||||
[node name="ProbeBack" type="Area3D" parent="Table" index="2" unique_id=-1294555791]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0.45)
|
||||
collision_layer = 512
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Table/ProbeBack" index="0" unique_id=-1294555790]
|
||||
shape = SubResource("BoxShape3D_probe")
|
||||
|
||||
[node name="ProbeLeft" type="Area3D" parent="Table" index="3" unique_id=-1294555789]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.45, 0.5, 0)
|
||||
collision_layer = 512
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Table/ProbeLeft" index="0" unique_id=-1294555788]
|
||||
shape = SubResource("BoxShape3D_probe")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Table" index="4" unique_id=228053941]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.50155246, 0)
|
||||
shape = SubResource("BoxShape3D_24d3s")
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="Table" unique_id=276384063]
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="Table" index="5" unique_id=276384063]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.094791204, 0.9715525, 0.0012244582)
|
||||
shape = SubResource("BoxShape3D_24d3s")
|
||||
|
||||
[node name="XRToolsSnapZone" type="Area3D" parent="Table" unique_id=1947858647 groups=["station_zone"]]
|
||||
[node name="XRToolsSnapZone" type="Area3D" parent="Table" index="6" unique_id=1947858647 groups=["station_zone"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0285525, 0)
|
||||
collision_layer = 65536
|
||||
collision_mask = 65540
|
||||
@@ -75,90 +89,90 @@ stash_sound = ExtResource("3_0s6ir")
|
||||
snap_mode = 1
|
||||
metadata/_custom_type_script = "uid://cquqe4f1m1sw6"
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="Table/XRToolsSnapZone" unique_id=1176887393]
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="Table/XRToolsSnapZone" index="0" unique_id=1176887393]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, -0.000975132, 0)
|
||||
shape = SubResource("SphereShape3D_dlkho")
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Table/XRToolsSnapZone" unique_id=2135860710]
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Table/XRToolsSnapZone" index="1" unique_id=2135860710]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.013531357, -0.015141487, 0.012176305)
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Table" unique_id=2085635675]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Table" index="7" unique_id=2085635675]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.50155246, 0)
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="Table/CSGCombiner3D" unique_id=411048765]
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="Table/CSGCombiner3D" index="0" unique_id=411048765]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.46137518, 0)
|
||||
size = Vector3(0.6, 0.077, 0.6)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="Table/CSGCombiner3D" unique_id=2093582402]
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="Table/CSGCombiner3D" index="1" unique_id=2093582402]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.02685462, 0)
|
||||
size = Vector3(0.1, 0.9258911, 0.1)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="Table/CSGCombiner3D" unique_id=345709075]
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="Table/CSGCombiner3D" index="2" unique_id=345709075]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.41408914, 0)
|
||||
size = Vector3(0.1, 0.15142211, 0.5341797)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="Table/CSGCombiner3D" unique_id=550923256]
|
||||
[node name="CSGBox3D5" type="CSGBox3D" parent="Table/CSGCombiner3D" index="3" unique_id=550923256]
|
||||
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 0, -0.41408914, 0)
|
||||
size = Vector3(0.1, 0.15142211, 0.5341797)
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
|
||||
[node name="Customers" type="Node3D" parent="Table" unique_id=2147179512]
|
||||
[node name="Customers" type="Node3D" parent="Table" index="8" unique_id=2147179512]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.50155246, 0)
|
||||
|
||||
[node name="Customer" type="Node3D" parent="Table/Customers" unique_id=1265943831]
|
||||
[node name="Customer" type="Node3D" parent="Table/Customers" index="0" unique_id=1265943831]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.016780734, -0.08218986, 0)
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Table/Customers/Customer" unique_id=1211819222]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Table/Customers/Customer" index="0" unique_id=1211819222]
|
||||
transform = Transform3D(1.095, 0, 0, 0, 1.095, 0, 0, 0, 1.095, 0.08442788, -0.19989291, 0)
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="Table/Customers/Customer/CSGCombiner3D" unique_id=2104132980]
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="Table/Customers/Customer/CSGCombiner3D" index="0" unique_id=2104132980]
|
||||
transform = Transform3D(0.9999998, 0, 0, 0, 0.9999998, 0, 0, 0, 0.9999998, -0.7149929, 1.2762557, 0)
|
||||
radius = 0.17520222
|
||||
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="Table/Customers/Customer/CSGCombiner3D" unique_id=808477724]
|
||||
[node name="CSGSphere3D2" type="CSGSphere3D" parent="Table/Customers/Customer/CSGCombiner3D" index="1" unique_id=808477724]
|
||||
transform = Transform3D(0.9999998, 0, 0, 0, 1.7476468, 0, 0, 0, 0.9999998, -0.7366721, 0.8531885, 0)
|
||||
radius = 0.17520222
|
||||
|
||||
[node name="Seats" type="Node3D" parent="Table" unique_id=1101423789]
|
||||
[node name="Seats" type="Node3D" parent="Table" index="9" unique_id=1101423789]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.50155246, 0)
|
||||
|
||||
[node name="Seat" type="Node3D" parent="Table/Seats" unique_id=1951252898]
|
||||
[node name="Seat" type="Node3D" parent="Table/Seats" index="0" unique_id=1951252898]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.9079602, -0.37259835, 0)
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Table/Seats/Seat" unique_id=384912485]
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Table/Seats/Seat" index="0" unique_id=384912485]
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Table/Seats/Seat/CSGCombiner3D" unique_id=170426769]
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Table/Seats/Seat/CSGCombiner3D" index="0" unique_id=170426769]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.18637085, 0.51674986, 0)
|
||||
radius = 0.25634766
|
||||
height = 0.051940918
|
||||
sides = 16
|
||||
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Table/Seats/Seat/CSGCombiner3D" unique_id=1294605073]
|
||||
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="Table/Seats/Seat/CSGCombiner3D" index="1" unique_id=1294605073]
|
||||
transform = Transform3D(0.24355066, 0.98373884, 0, -1.3339849, 0.1796049, 0, 0, 0, 0.8365013, -0.05247748, 0.8547088, 0)
|
||||
radius = 0.25634766
|
||||
height = 0.051940918
|
||||
sides = 16
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="Table/Seats/Seat/CSGCombiner3D" unique_id=1761839440]
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="Table/Seats/Seat/CSGCombiner3D" index="2" unique_id=1761839440]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.030369163, 0.18746406, 0.1341562)
|
||||
size = Vector3(0.05, 0.6713196, 0.05)
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="Table/Seats/Seat/CSGCombiner3D" unique_id=1395371703]
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="Table/Seats/Seat/CSGCombiner3D" index="3" unique_id=1395371703]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.030369163, 0.18746406, -0.15065354)
|
||||
size = Vector3(0.05, 0.6713196, 0.05)
|
||||
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="Table/Seats/Seat/CSGCombiner3D" unique_id=96608061]
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="Table/Seats/Seat/CSGCombiner3D" index="4" unique_id=96608061]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.33084005, 0.18746406, 0.1341562)
|
||||
size = Vector3(0.05, 0.6713196, 0.05)
|
||||
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="Table/Seats/Seat/CSGCombiner3D" unique_id=1684738537]
|
||||
[node name="CSGBox3D4" type="CSGBox3D" parent="Table/Seats/Seat/CSGCombiner3D" index="5" unique_id=1684738537]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.33084005, 0.18746406, -0.15065354)
|
||||
size = Vector3(0.05, 0.6713196, 0.05)
|
||||
|
||||
[node name="Label3D" type="Label3D" parent="Table" unique_id=662960977]
|
||||
[node name="Label3D" type="Label3D" parent="Table" index="10" unique_id=662960977]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8263302, 0)
|
||||
pixel_size = 0.003
|
||||
billboard = 2
|
||||
@@ -166,26 +180,26 @@ text = "table state"
|
||||
vertical_alignment = 0
|
||||
line_spacing = -15.0
|
||||
|
||||
[node name="Label3DTime" type="Label3D" parent="Table" unique_id=1534849507]
|
||||
[node name="Label3DTime" type="Label3D" parent="Table" index="11" unique_id=1534849507]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.0147986, 0)
|
||||
visible = false
|
||||
pixel_size = 0.003
|
||||
billboard = 2
|
||||
text = "20.1s"
|
||||
|
||||
[node name="ProgressBar3D" parent="Table" unique_id=654673176 instance=ExtResource("3_kjf1i")]
|
||||
[node name="ProgressBar3D" parent="Table" index="12" unique_id=600000001 instance=ExtResource("3_kjf1i")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8692299, 0)
|
||||
y_billboard = true
|
||||
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Table" unique_id=724610642]
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Table" index="13" unique_id=724610642]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.7950532, 0)
|
||||
|
||||
[node name="PlayerDetectArea3D" type="Area3D" parent="Table" unique_id=913445150]
|
||||
[node name="PlayerDetectArea3D" type="Area3D" parent="Table" index="14" unique_id=913445150]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.50155246, 0)
|
||||
collision_layer = 0
|
||||
collision_mask = 524288
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Table/PlayerDetectArea3D" unique_id=1538221021]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Table/PlayerDetectArea3D" index="0" unique_id=1538221021]
|
||||
shape = SubResource("BoxShape3D_vlqg6")
|
||||
|
||||
[connection signal="body_entered" from="Table/PlayerDetectArea3D" to="Table" method="_on_player_enter"]
|
||||
|
||||
+4
-4
@@ -4,8 +4,8 @@
|
||||
[ext_resource type="PackedScene" uid="uid://u7rpukx5ebqo" path="res://UI/shop_station_panel.tscn" id="1_pogqh"]
|
||||
[ext_resource type="PackedScene" uid="uid://efaec6ymgabo" path="res://stations/Counter.tscn" id="2_35otv"]
|
||||
[ext_resource type="Texture2D" uid="uid://dhja7i8tgb3ao" path="res://textures/shop/counter.png" id="3_74fni"]
|
||||
[ext_resource type="PackedScene" uid="uid://j7caslh27nor" path="res://stations/Hob_old.tscn" id="4_l3qkl"]
|
||||
[ext_resource type="Texture2D" uid="uid://br4ytiocwouqh" path="res://textures/shop/hob.png" id="5_2k6ie"]
|
||||
[ext_resource type="PackedScene" uid="uid://b052o1fgwq5bw" path="res://stations/Hob.tscn" id="5_6lkkh"]
|
||||
[ext_resource type="PackedScene" uid="uid://dvrk268s7gkxh" path="res://stations/sink.tscn" id="6_rktus"]
|
||||
[ext_resource type="Texture2D" uid="uid://gi6bksvs8ybx" path="res://textures/shop/sink.png" id="7_4titf"]
|
||||
[ext_resource type="PackedScene" uid="uid://caf0xanmxbshy" path="res://stations/table.tscn" id="9_84wnh"]
|
||||
@@ -59,10 +59,9 @@ offset_left = 20.0
|
||||
offset_top = 80.0
|
||||
offset_right = -20.0
|
||||
offset_bottom = -20.0
|
||||
current_tab = 1
|
||||
current_tab = 0
|
||||
|
||||
[node name="Stations" type="GridContainer" parent="TabContainer" unique_id=189446761]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
columns = 6
|
||||
metadata/_tab_index = 0
|
||||
@@ -76,7 +75,7 @@ cost = 30
|
||||
|
||||
[node name="Panel2" parent="TabContainer/Stations" unique_id=467593590 instance=ExtResource("1_pogqh")]
|
||||
layout_mode = 2
|
||||
station_scene = ExtResource("4_l3qkl")
|
||||
station_scene = ExtResource("5_6lkkh")
|
||||
icon_texture = ExtResource("5_2k6ie")
|
||||
station_name = "Hob"
|
||||
cost = 60
|
||||
@@ -103,6 +102,7 @@ station_name = "Plates"
|
||||
cost = 80
|
||||
|
||||
[node name="Food" type="GridContainer" parent="TabContainer" unique_id=422899445]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
columns = 6
|
||||
metadata/_tab_index = 1
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
[gd_scene format=3 uid="uid://d8jo0402pgl6"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c8l60rnugru40" path="res://addons/godot-xr-tools/objects/pickable.tscn" id="1_cvkx3"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="3_q03o5"]
|
||||
[ext_resource type="Animation" uid="uid://db62hs5s4n2b3" path="res://addons/godot-xr-tools/hands/animations/left/Grip 4.res" id="4_6r7kg"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="5_l1fi6"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="6_iejgm"]
|
||||
[ext_resource type="Animation" uid="uid://d1xnpyc08njjx" path="res://addons/godot-xr-tools/hands/animations/right/Grip 4.res" id="7_hei0k"]
|
||||
[ext_resource type="PackedScene" uid="uid://bfj80jh13t6e5" path="res://prefabs/food_item.tscn" id="8_tkk28"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="9_8m8gg"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5ukku8i0hilb" path="res://prefabs/despawning_item.tscn" id="10_vkoit"]
|
||||
[ext_resource type="PackedScene" uid="uid://3lr2dhy62rhk" path="res://prefabs/combinable_item.tscn" id="11_combinable"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_fco8w"]
|
||||
height = 0.054896355
|
||||
radius = 0.05517578
|
||||
|
||||
[sub_resource type="Resource" id="Resource_lc22d"]
|
||||
script = ExtResource("5_l1fi6")
|
||||
closed_pose = ExtResource("4_6r7kg")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qyiot"]
|
||||
script = ExtResource("5_l1fi6")
|
||||
closed_pose = ExtResource("7_hei0k")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_np_burger"]
|
||||
properties/0/path = NodePath(".:position")
|
||||
properties/0/spawn = false
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath(".:quaternion")
|
||||
properties/1/spawn = false
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("NetPickable:net_held_by")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
properties/3/path = NodePath(".:enabled")
|
||||
properties/3/spawn = false
|
||||
properties/3/replication_mode = 1
|
||||
|
||||
[node name="FoodItem" unique_id=1675596942 instance=ExtResource("1_cvkx3")]
|
||||
second_hand_grab = 1
|
||||
|
||||
[node name="CollisionShape3D" parent="." index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.028505921, 0)
|
||||
shape = SubResource("CylinderShape3D_fco8w")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="." index="1" unique_id=1571481674 instance=ExtResource("3_q03o5")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.067650706, 0.04601878, -0.08606844)
|
||||
hand_pose = SubResource("Resource_lc22d")
|
||||
|
||||
[node name="GrabPointHandRight" parent="." index="2" unique_id=514404634 instance=ExtResource("6_iejgm")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.06531982, 0.042291984, -0.08604182)
|
||||
hand_pose = SubResource("Resource_qyiot")
|
||||
|
||||
[node name="NetPickable" type="MultiplayerSynchronizer" parent="." index="3" unique_id=1382968688]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_burger")
|
||||
script = ExtResource("9_8m8gg")
|
||||
|
||||
[node name="FoodItem" parent="." index="4" unique_id=63948206 instance=ExtResource("8_tkk28")]
|
||||
id = "item_id"
|
||||
sell_value = 0
|
||||
|
||||
[node name="DespawningItem" parent="." index="5" unique_id=303090111 instance=ExtResource("10_vkoit")]
|
||||
|
||||
[node name="CombinableItem" parent="." index="6" unique_id=996936271 instance=ExtResource("11_combinable")]
|
||||
|
||||
[node name="SoundManager" type="Node3D" parent="." index="7" unique_id=118155212]
|
||||
|
||||
[node name="Model" type="Node3D" parent="." index="8" unique_id=1015960306]
|
||||
@@ -0,0 +1,124 @@
|
||||
class_name SharedInventoryStation
|
||||
extends Station
|
||||
|
||||
### Abstract 'class', should never be instantiated ###
|
||||
# Backbone for stations that need to know about neighboring stations of the
|
||||
# same kind (tables, belts).
|
||||
|
||||
## Path to one Area3D probe per direction this station should watch for a
|
||||
## same-kind neighbor. Wired explicitly per concrete scene (e.g. a belt
|
||||
## wires one path, a table wires four).
|
||||
@export var probe_paths: Array[NodePath] = []
|
||||
|
||||
## Resolved from probe_paths in ready().
|
||||
var probes: Array[Area3D] = []
|
||||
|
||||
## Area3D probe -> the SharedInventoryStation neighbor detected through it
|
||||
## (or null if that direction is currently unoccupied).
|
||||
var neighbors: Dictionary = {}
|
||||
|
||||
|
||||
# The child station has to call super._enter_tree() for this to be called
|
||||
func _enter_tree() -> void:
|
||||
super._enter_tree()
|
||||
var properties: Array[NodePath] = [".:position", ".:rotation", ".:visible"]
|
||||
for property_path in properties:
|
||||
sync_config.add_property(property_path)
|
||||
sync_config.property_set_spawn(property_path, false)
|
||||
sync_config.property_set_replication_mode(property_path, SceneReplicationConfig.REPLICATION_MODE_ON_CHANGE)
|
||||
|
||||
|
||||
# The child station has to call super.ready() for this to be called
|
||||
func ready() -> void:
|
||||
super.ready()
|
||||
# Find probes
|
||||
for path in probe_paths:
|
||||
var probe := get_node_or_null(path) as Area3D
|
||||
if probe:
|
||||
probes.append(probe)
|
||||
else:
|
||||
SweetLogger.warning("{0} could not resolve neighbor probe at path {1}", [name, path])
|
||||
if probes.is_empty():
|
||||
SweetLogger.warning("{0} has no neighbor probes wired", [name])
|
||||
for probe in probes:
|
||||
neighbors[probe] = null
|
||||
probe.body_entered.connect(_on_probe_body_entered.bind(probe))
|
||||
probe.body_exited.connect(_on_probe_body_exited.bind(probe))
|
||||
# Init leader state before any probe signal has a chance to fire
|
||||
_broadcast_group_changed.call_deferred()
|
||||
|
||||
|
||||
## Cycle-safe search of the neighbor graph (handles circular belt/table loops)
|
||||
func get_connected_group() -> Array[SharedInventoryStation]:
|
||||
var visited: Dictionary = {get_instance_id(): true}
|
||||
var queue: Array[SharedInventoryStation] = [self]
|
||||
var group: Array[SharedInventoryStation] = []
|
||||
while not queue.is_empty():
|
||||
var current: SharedInventoryStation = queue.pop_front()
|
||||
group.append(current)
|
||||
for neighbor in current.neighbors.values():
|
||||
if neighbor and not visited.has(neighbor.get_instance_id()):
|
||||
visited[neighbor.get_instance_id()] = true
|
||||
queue.append(neighbor)
|
||||
return group
|
||||
|
||||
|
||||
## Deterministic leader: smallest grid position, computed the same on every peer
|
||||
func is_group_leader() -> bool:
|
||||
var leader: SharedInventoryStation = self
|
||||
for member in get_connected_group():
|
||||
if _grid_sort_key(member) < _grid_sort_key(leader):
|
||||
leader = member
|
||||
return leader == self
|
||||
|
||||
|
||||
static func _grid_sort_key(station: SharedInventoryStation) -> Vector2i:
|
||||
var pos := station.global_position
|
||||
return Vector2i(roundi(pos.x / Helper.SNAP_GRID_SIZE), roundi(pos.z / Helper.SNAP_GRID_SIZE))
|
||||
|
||||
|
||||
## Food items this station holds, exposed for neighbors to read; override for multi-zone stations
|
||||
func get_exposed_food_items() -> Array[FoodItem]:
|
||||
var items: Array[FoodItem] = []
|
||||
if snap_zone and snap_zone.picked_up_object:
|
||||
var food_item := Helper.find_food_item(snap_zone.picked_up_object)
|
||||
if food_item:
|
||||
items.append(food_item)
|
||||
return items
|
||||
|
||||
|
||||
## Every food item held anywhere in this station's connected group
|
||||
func get_group_food_items() -> Array[FoodItem]:
|
||||
var items: Array[FoodItem] = []
|
||||
for member in get_connected_group():
|
||||
items.append_array(member.get_exposed_food_items())
|
||||
return items
|
||||
|
||||
|
||||
func _on_probe_body_entered(body: Node3D, probe: Area3D) -> void:
|
||||
var station := body as SharedInventoryStation
|
||||
if not station or station == self:
|
||||
return
|
||||
neighbors[probe] = station
|
||||
_broadcast_group_changed()
|
||||
|
||||
|
||||
func _on_probe_body_exited(body: Node3D, probe: Area3D) -> void:
|
||||
var former: SharedInventoryStation = neighbors.get(probe)
|
||||
if not former or body != former:
|
||||
return
|
||||
neighbors[probe] = null
|
||||
# former is no longer reachable from self, so it needs telling separately
|
||||
former._broadcast_group_changed()
|
||||
_broadcast_group_changed()
|
||||
|
||||
|
||||
## Notifies every member of this station's current connected group (not just the two that changed)
|
||||
func _broadcast_group_changed() -> void:
|
||||
for member in get_connected_group():
|
||||
member._on_group_changed()
|
||||
|
||||
|
||||
## Virtual hook: override to react to this station's group membership/leadership changing
|
||||
func _on_group_changed() -> void:
|
||||
pass
|
||||
@@ -0,0 +1 @@
|
||||
uid://bciln4f4tjwgy
|
||||
+24
-12
@@ -10,6 +10,8 @@ extends Node3D
|
||||
@export var drop_sound: AudioStream
|
||||
|
||||
## Node references. These are all required snd should be set in the inspector
|
||||
@export var notification_audio: AudioStreamPlayer3D # Short sounds like pickup or complete
|
||||
@export var ambient_audio: AudioStreamPlayer3D # Releating sounds like a cooking noise
|
||||
@export var snap_zone: XRToolsSnapZone
|
||||
@export var synchronizer: MultiplayerSynchronizer
|
||||
|
||||
@@ -23,25 +25,34 @@ var enabled: bool: # When disabled the station only updated display and sounds.
|
||||
snap_zone.set_process(p_enabled)
|
||||
|
||||
|
||||
# Godot requires replication_config to be fully built before _ready. So in _enter_tree
|
||||
# The child station has to call super._enter_tree() for this to be called.
|
||||
func _enter_tree() -> void:
|
||||
# Always a fresh config - abstract/station.tscn's config sub-resource is shared
|
||||
# in memory across every station scene that instances it, so reusing it here
|
||||
# would pile every station type's properties onto the same shared object.
|
||||
synchronizer.root_path = get_path()
|
||||
synchronizer.replication_config = SceneReplicationConfig.new()
|
||||
sync_config = synchronizer.replication_config
|
||||
|
||||
|
||||
# The child station has to call super.ready() for this to be called
|
||||
func ready() -> void:
|
||||
SweetLogger.debug("Station {0} ready", [name])
|
||||
if not notification_audio:
|
||||
SweetLogger.warning("{0} missing notification_audio reference", [name])
|
||||
if not ambient_audio:
|
||||
SweetLogger.warning("{0} missing ambient_audio reference", [name])
|
||||
if not snap_zone:
|
||||
SweetLogger.warning("{0} missing snap_zone reference", [name])
|
||||
if not synchronizer:
|
||||
SweetLogger.warning("{0} missing synchronizer reference", [name])
|
||||
# Disable if we're not the server.
|
||||
# Disable if we're not the server.
|
||||
if not NetworkManager.owns_world():
|
||||
enabled = false
|
||||
|
||||
snap_zone.has_picked_up.connect(_on_object_picked_up_handler)
|
||||
snap_zone.has_dropped.connect(_on_object_dropped_handler)
|
||||
|
||||
# Configure Multiplayer Syncronizer
|
||||
# This overwrites any changes made in the inspector.
|
||||
synchronizer.root_path = get_path()
|
||||
synchronizer.replication_config = SceneReplicationConfig.new()
|
||||
sync_config = synchronizer.replication_config
|
||||
|
||||
# The child station has to call super.process(delta) for this to be called
|
||||
func process(_delta: float) -> void:
|
||||
@@ -65,6 +76,7 @@ func _on_object_dropped_handler(item: Node3D) -> void:
|
||||
|
||||
func _apply_object_picked_up(item: Node3D) -> void:
|
||||
SweetLogger.debug("Pickup: {0}", [item.name])
|
||||
Helper.play_sound(notification_audio, pickup_sound)
|
||||
on_object_picked_up(item)
|
||||
var food_item = Helper.find_food_item(item)
|
||||
if food_item:
|
||||
@@ -72,6 +84,7 @@ func _apply_object_picked_up(item: Node3D) -> void:
|
||||
|
||||
|
||||
func _apply_object_dropped(item: Node3D) -> void:
|
||||
Helper.play_sound(notification_audio, drop_sound, 0.8)
|
||||
SweetLogger.debug("Drop: {0}", [item.name])
|
||||
on_object_dropped(item)
|
||||
var food_item = Helper.find_food_item(item)
|
||||
@@ -99,17 +112,16 @@ func _clients_on_object_dropped_handler(item_path: NodePath):
|
||||
## Virutal methods
|
||||
# The child station implements these if it cares about them.
|
||||
func on_object_picked_up(_item: Node3D) -> void:
|
||||
SweetLogger.debug("Not implemented in {0}", [name])
|
||||
pass
|
||||
|
||||
func on_object_dropped(_item: Node3D) -> void:
|
||||
SweetLogger.debug("Not implemented in {0}", [name])
|
||||
pass
|
||||
|
||||
func on_food_item_picked_up(_food_item: FoodItem) -> void:
|
||||
SweetLogger.debug("Not implemented in {0}", [name])
|
||||
pass
|
||||
|
||||
func on_food_item_dropped(_food_item: FoodItem) -> void:
|
||||
SweetLogger.debug("Not implemented in {0}", [name])
|
||||
|
||||
pass
|
||||
|
||||
func refresh_display() -> void:
|
||||
pass
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="." unique_id=1536666704]
|
||||
replication_config = SubResource("SceneReplicationConfig_0o2ds")
|
||||
|
||||
[node name="AudioStreamPlayer3DPulse" type="AudioStreamPlayer3D" parent="." unique_id=1976975302]
|
||||
[node name="AudioStreamPlayer3DNotification" type="AudioStreamPlayer3D" parent="." unique_id=1976975302]
|
||||
|
||||
[node name="AudioStreamPlayer3DContinous" type="AudioStreamPlayer3D" parent="." unique_id=925832848]
|
||||
[node name="AudioStreamPlayer3DAmbient" type="AudioStreamPlayer3D" parent="." unique_id=925832848]
|
||||
|
||||
[node name="ProgressBar3D" parent="." unique_id=654673176 instance=ExtResource("2_be8yi")]
|
||||
|
||||
|
||||
+11
-16
@@ -11,8 +11,6 @@ extends Station
|
||||
@export var complete_sound: AudioStream
|
||||
|
||||
## Node references. These are all required snd should be set in the inspector
|
||||
@export var notification_audio: AudioStreamPlayer3D # Short sounds like pickup or complete
|
||||
@export var ambient_audio: AudioStreamPlayer3D # Releating sounds like a cooking noise
|
||||
@export var progress_bar: ProgressBar3D
|
||||
|
||||
|
||||
@@ -21,25 +19,22 @@ var current_work: float # How far a FoodItem conversion is toward completion
|
||||
var max_work: float # How much work has to be acheived to trigger conversion
|
||||
var result_id: String # Station active if not empty. What FoodItem id the conversion turns the current FoodItem into.
|
||||
|
||||
# The child station has to call super.ready() for this to be called
|
||||
func ready() -> void:
|
||||
super.ready()
|
||||
if not notification_audio:
|
||||
SweetLogger.warning("{0} missing notification_audio reference", [name])
|
||||
if not ambient_audio:
|
||||
SweetLogger.warning("{0} missing ambient_audio reference", [name])
|
||||
if not progress_bar:
|
||||
SweetLogger.warning("{0} missing progress_bar reference", [name])
|
||||
|
||||
# Configure Multiplayer Syncronizer
|
||||
# Base Station creates the config, here we append to it:
|
||||
var properties: Array[NodePath] = [ ".:current_work", ".:max_work", ".:result_id"]
|
||||
# The child station has to call super._enter_tree() for this to be called
|
||||
func _enter_tree() -> void:
|
||||
super._enter_tree()
|
||||
var properties: Array[NodePath] = [".:current_work", ".:max_work", ".:result_id"]
|
||||
for property_path in properties:
|
||||
sync_config.add_property(property_path)
|
||||
sync_config.property_set_spawn(property_path, false)
|
||||
sync_config.property_set_replication_mode(property_path, SceneReplicationConfig.REPLICATION_MODE_ON_CHANGE)
|
||||
|
||||
|
||||
|
||||
# The child station has to call super.ready() for this to be called
|
||||
func ready() -> void:
|
||||
super.ready()
|
||||
if not progress_bar:
|
||||
SweetLogger.warning("{0} missing progress_bar reference", [name])
|
||||
|
||||
|
||||
# The child station has to call super.process(delta) for this to be called
|
||||
func process(delta: float) -> void:
|
||||
|
||||
@@ -98,15 +98,15 @@ const TIMESTAMP_BG_COLOR = "#1e3a5f"
|
||||
#===================================================================================#
|
||||
## Column widths for alignment (in characters)
|
||||
const PEER_ID_COLUMN_WIDTH = 6
|
||||
const LOG_TYPE_COLUMN_WIDTH = 13
|
||||
const LOG_TYPE_COLUMN_WIDTH = 10
|
||||
## Default mm:ss:ms; with SHOW_TIMESTAMP_HOURS, hh:mm:ss:ms
|
||||
const TIMESTAMP_COLUMN_WIDTH_MMSSMS = 9
|
||||
const TIMESTAMP_COLUMN_WIDTH_HHMMSSMS = 12
|
||||
const SCRIPT_FUNCTION_COLUMN_WIDTH = 50
|
||||
const SCRIPT_FUNCTION_COLUMN_WIDTH = 46
|
||||
|
||||
const TRUNCATE_PEER_NAME = 6
|
||||
const TRUNCATE_SCRIPT_NAME = 20
|
||||
const TRUNCATE_FUNCTION_NAME = 30
|
||||
const TRUNCATE_FUNCTION_NAME = 26
|
||||
#===================================================================================#
|
||||
|
||||
# CONFIGURATION
|
||||
@@ -223,13 +223,13 @@ func _print_rich_log(peer_id_str: String, log_type: String, message: String, scr
|
||||
|
||||
# Use peer ID directly without "Peer" prefix
|
||||
var peer_label = peer_id_str
|
||||
var log_type_label = str(frame_count) + " - " + log_type.to_upper()
|
||||
var log_type_label = str(frame_count) + "-" + log_type.to_upper()
|
||||
|
||||
# Pad peer ID column for alignment
|
||||
var peer_padded = _truncate_text(_pad_text(peer_label, PEER_ID_COLUMN_WIDTH), TRUNCATE_PEER_NAME)
|
||||
|
||||
# Format peer ID with its background color
|
||||
var peer_formatted = _format_rich_text(peer_padded, peer_color.bg_color, peer_color.text_color)
|
||||
var peer_formatted = _format_rich_text(" " + peer_padded, peer_color.bg_color, peer_color.text_color)
|
||||
|
||||
# Format log type with its background color
|
||||
var log_type_padded = _pad_text(log_type_label, LOG_TYPE_COLUMN_WIDTH)
|
||||
|
||||
@@ -37,3 +37,5 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.8000001, 0, 0)
|
||||
|
||||
[node name="PotatoDispenser" parent="." unique_id=522124817 instance=ExtResource("9_ok0xr")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.8000001, 0, 0.6)
|
||||
|
||||
[editable path="Table"]
|
||||
|
||||
@@ -1,3 +1,25 @@
|
||||
### Full game systems (hardest part)
|
||||
- Star day modifiers
|
||||
- research unlock
|
||||
- Mess and cleaning (How it works in VR?)
|
||||
- Automation basic logistics (SharedInventories)
|
||||
- Player charaters and customization (Hat Selection and mirror)
|
||||
- Sound effects and music
|
||||
- Animated customers (Pathfinding)
|
||||
- Acheivements (Statisticsmanager)
|
||||
- Level generation
|
||||
- Proper 3D models (Git gud @ blender)
|
||||
**[Undecided]**
|
||||
- Automation logic, wireing
|
||||
- Decorations
|
||||
- Win condition / across games reward / progression
|
||||
- Fire
|
||||
- Arms (Inverse Kinematics)
|
||||
**[Scopecreep]**
|
||||
- Freshness
|
||||
- Fullbody tracking (Height calibration)
|
||||
|
||||
|
||||
### Station inheritence suggestion
|
||||
Station
|
||||
WorkStation (performs work on a food item to convert it)
|
||||
|
||||
@@ -1,68 +1,115 @@
|
||||
# RecipeManager
|
||||
# Recipes
|
||||
|
||||
## Overview
|
||||
## FoodItem
|
||||
|
||||
`RecipeManager` is a static Godot class that centralizes recipe data for food item combinations and allows runtime lookup of result scenes.
|
||||
Every ingredient, meal, and side in the game is a `FoodItem` node (`prefabs/food_item.gd`), a sibling component on the pickable item's scene. It's just three exported fields:
|
||||
|
||||
The manager loads a single YAML file at startup: `res://recipes.yaml`, using the installed `addons/yaml` addon.
|
||||
- `id: String` — the recipe key this item is looked up by in `recipes.yaml` (e.g. `"raw_burger"`).
|
||||
- `type: Type` — `MEAL`, `SIDE`, `INGREDIENT`, or `NONE`. Used for things like which plate slot an item lands in.
|
||||
- `sell_value: int` — money paid out when the item is sold/consumed.
|
||||
|
||||
## Responsibilities
|
||||
`id` is the link between a spawned scene and its entry in `recipes.yaml` — every process below keys off it.
|
||||
|
||||
- Load recipe definitions from `recipes.yaml`.
|
||||
- Provide symmetric lookups for two-item combining recipes so `A + B` and `B + A` map to the same result.
|
||||
- Resolve item IDs to their corresponding scene resources.
|
||||
- Print all loaded combining recipes when the application starts.
|
||||
## `recipes.yaml`
|
||||
|
||||
## Data structure in `recipes.yaml`
|
||||
|
||||
The recipe YAML file contains two top-level sections:
|
||||
|
||||
- `items`: maps item IDs to their scene path and optional metadata.
|
||||
- `combining`: maps result item IDs to one or more recipe pairs.
|
||||
|
||||
Example structure:
|
||||
`RecipeManager` loads a single file, `res://recipes.yaml`, with one top-level section per process plus an `items` section mapping each `id` to its scene:
|
||||
|
||||
```yaml
|
||||
items:
|
||||
hamburger:
|
||||
scene: res://Items/hamburger.tscn
|
||||
type: meal
|
||||
burger_buns:
|
||||
scene: res://Items/BurgerBuns.tscn
|
||||
type: ingredient
|
||||
raw_burger:
|
||||
scene: res://items/burger.tscn
|
||||
cooked_burger:
|
||||
scene: res://items/cooked_burger.tscn
|
||||
|
||||
combining:
|
||||
combining: # instant, two items -> one
|
||||
hamburger:
|
||||
- [cooked_burger, burger_buns]
|
||||
- [charcoal, charcoal]
|
||||
charcoal:
|
||||
- [cube, cube]
|
||||
|
||||
cooking: # timed, one item -> one (a station's work meter)
|
||||
cooked_burger:
|
||||
ingredient: raw_burger
|
||||
time: 4
|
||||
|
||||
chopping: # timed, one item -> one
|
||||
chopped_potato:
|
||||
ingredient: potato
|
||||
work: 30
|
||||
|
||||
rolling: # parsed, no station consumes it yet
|
||||
pie_base:
|
||||
ingredient: dough
|
||||
work: 80
|
||||
|
||||
augmenting: # parsed, no station consumes it yet
|
||||
cooked_burger:
|
||||
has_tomato: sliced_tomato
|
||||
```
|
||||
|
||||
### `items`
|
||||
`cooking` entries may also be a list, so multiple ingredients can produce the same result (see `charcoal` in the real file, which can be made by overcooking three different things).
|
||||
|
||||
Each entry under `items` uses the item ID as the key.
|
||||
The manager reads the `scene` field for each item and uses it to resolve the packed scene for recipe results.
|
||||
## RecipeManager
|
||||
|
||||
### `combining`
|
||||
`RecipeManager` (`global/RecipeManager.gd`) is a static class — no instance needed. On first use it lazily parses `recipes.yaml` (via the `YAML` addon) into five internal maps (`_combining_map`, `_cooking_map`, `_chopping_map`, `_rolling_map`, `_augmenting_map`) plus `_scene_paths`, and never re-parses after (`_loaded` guard).
|
||||
|
||||
Each entry under `combining` represents a result item ID, and its value is a list of recipe pairs.
|
||||
Each recipe pair is a two-item array of ingredient IDs.
|
||||
This allows a single result item to have multiple valid recipes.
|
||||
It doesn't hand out those raw maps. Instead it exposes narrow getters that the rest of the game calls:
|
||||
|
||||
The manager normalizes each ingredient pair using a sorted key string internally, so lookups are symmetric.
|
||||
| Function | Returns |
|
||||
|---|---|
|
||||
| `get_combination_result(a, b)` | `PackedScene` for combining two ids (order-independent) |
|
||||
| `get_cooking_result(ingredient)` | result id, or `""` if not cookable |
|
||||
| `get_cooking_time(ingredient)` | seconds of work needed |
|
||||
| `get_chopping_result(ingredient)` | result id, or `""` if not choppable |
|
||||
| `get_chopping_work(ingredient)` | work needed |
|
||||
| `get_item_scene(id)` | `PackedScene` for any item id |
|
||||
| `print_all_recipes()` | debug dump of every loaded recipe, called once from `main.gd` at startup |
|
||||
|
||||
## Runtime behavior
|
||||
`rolling` and `augmenting` are parsed and included in `print_all_recipes()`, but currently have no matching getters or station — they're not wired into a conversion process yet.
|
||||
|
||||
- `FoodItem.id` is used when combining items to look up the recipe result.
|
||||
- `RecipeManager.get_combination(first_id, second_id)` computes a canonical key for the pair and returns the resulting item's scene.
|
||||
- On startup, `main.gd` calls `RecipeManager.print_all_recipes()`, which logs each combining recipe in the form:
|
||||
## Conversion processes
|
||||
|
||||
`ingredient_a + ingredient_b -> result_id`
|
||||
Two different mechanisms turn one `FoodItem` into another today:
|
||||
|
||||
## Notes
|
||||
**Combining** — instant, no station involved. `CombinableItem` (`prefabs/combinable_item.gd`) sits on every pickable item; while the item is snapped into a zone, its trigger area watches for another `FoodItem` entering. On contact it asks `RecipeManager.get_combination_result(a, b)` — if a recipe exists, it despawns both ingredients and spawns the result in their place.
|
||||
|
||||
- `RecipeManager` prefers the installed YAML addon to parse `recipes.yaml` when it is available.
|
||||
- If the addon is unavailable in the current runtime, the manager falls back to a lightweight built-in parser for the simple `items`/`combining` file format.
|
||||
- Scene paths now live in the YAML data instead of being hardcoded in the manager.
|
||||
- Because `RecipeManager` is static, it can be used from any script without creating an instance.
|
||||
**Cooking / chopping** — timed, driven by `WorkStation`'s shared work meter (`current_work` / `max_work` / `result_id`, see [Stations.md](Stations.md)). When a `Hob` or `Counter` picks up a `FoodItem`, it asks `RecipeManager` whether that ingredient has a recipe for its process (`get_cooking_result`/`get_chopping_result`) and, if so, how much work it needs (`get_cooking_time`/`get_chopping_work`), then starts accumulating work — a `Hob` ticks it every frame, a `Counter` adds it per knife swipe. Once `current_work` reaches `max_work`, `WorkStation.convert_item()` calls `RecipeManager.get_item_scene(result_id)`, despawns the original item, and spawns the result in the same snap zone.
|
||||
|
||||
Separately, `ItemContainer` (`Containers/container.gd`) calls `get_item_scene(id)` too, but only to instantiate the correct visual mesh for each id in a plate's synced contents list — that's a display lookup, not a conversion.
|
||||
|
||||
## Diagram
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
YAML["recipes.yaml"] -->|"YAML.load_file()"| RM["RecipeManager<br/>(global/RecipeManager.gd)"]
|
||||
RM --> Maps["_combining_map / _cooking_map / _chopping_map / _scene_paths<br/>(_rolling_map / _augmenting_map parsed, not yet consumed)"]
|
||||
|
||||
subgraph Instant["Instant conversion"]
|
||||
direction TB
|
||||
CI["CombinableItem<br/>(prefabs/combinable_item.gd)"]
|
||||
end
|
||||
|
||||
subgraph Timed["Timed conversion"]
|
||||
direction TB
|
||||
Hob["Hob<br/>(stations/hob.gd)"]
|
||||
Counter["Counter<br/>(stations/counter.gd)"]
|
||||
WS["WorkStation.convert_item()<br/>(abstract/work_station.gd)"]
|
||||
Hob -.->|"result_id, max_work"| WS
|
||||
Counter -.->|"result_id, max_work"| WS
|
||||
end
|
||||
|
||||
subgraph Display["Display only, not a conversion"]
|
||||
direction TB
|
||||
Container["ItemContainer<br/>(Containers/container.gd)"]
|
||||
end
|
||||
|
||||
CI -->|"get_combination_result(a, b)"| RM
|
||||
Hob -->|"get_cooking_result / get_cooking_time"| RM
|
||||
Counter -->|"get_chopping_result / get_chopping_work"| RM
|
||||
WS -->|"get_item_scene(result_id)"| RM
|
||||
Container -->|"get_item_scene(id)"| RM
|
||||
|
||||
Spawn(("NetworkManager.spawn_item"))
|
||||
CI ==>|"instantiates result"| Spawn
|
||||
WS ==>|"instantiates result"| Spawn
|
||||
```
|
||||
|
||||
Solid arrows are calls into `RecipeManager`; dotted arrows are `Hob`/`Counter` handing their recipe off to `WorkStation`'s shared work meter; thick arrows are the actual item conversion. `CombinableItem` and `WorkStation` are grouped in adjacent lanes so both paths to `NetworkManager.spawn_item` stay short; `ItemContainer` sits in its own lane since it never spawns anything.
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
# Stations
|
||||
|
||||
## Overview
|
||||
|
||||
A "station" is any interactable kitchen fixture a player works at: `Counter`, `Hob`, `Sink`, `Table`, `DirtStation`, and the item dispensers. They share networking, sound, and snap-zone plumbing through a common script base, and share their node layout through a common base scene.
|
||||
|
||||
Two independent inheritance mechanisms combine to build a concrete station, e.g. `Table`:
|
||||
|
||||
- **Scene inheritance** — `table.tscn` is a Godot "inherited scene" of `abstract/station.tscn`, so it gets the same child nodes (snap zone, synchronizer, audio players, progress bar) for free.
|
||||
- **Script inheritance** — `table.gd` (attached as a script override on that inherited scene) extends `SharedInventoryStation`, which extends `Station`.
|
||||
|
||||
These two axes are independent: which base scene a `.tscn` inherits from is unrelated to which class its attached script extends.
|
||||
|
||||
## Scene inheritance
|
||||
|
||||
`abstract/station.tscn` is the base scene every station scene inherits from:
|
||||
|
||||
```
|
||||
Station (Node3D)
|
||||
├─ StationMovement (drag-to-move handle, res://stations/StationMovement.tscn)
|
||||
├─ MultiplayerSynchronizer
|
||||
├─ AudioStreamPlayer3DNotification
|
||||
├─ AudioStreamPlayer3DAmbient
|
||||
├─ ProgressBar3D
|
||||
└─ SnapZone
|
||||
```
|
||||
|
||||
Each concrete station scene inherits this scene and overrides the root node's `script` property to attach its own class:
|
||||
|
||||
| Scene | Script attached |
|
||||
|---|---|
|
||||
| `Counter.tscn` | `stations/counter.gd` (`Counter`) |
|
||||
| `Hob.tscn` | `stations/hob.gd` (`Hob`) |
|
||||
| `sink.tscn` | `stations/sink.gd` (`Sink`) |
|
||||
| `table.tscn` | `stations/table.gd` (`Table`) |
|
||||
| `dirt_station.tscn` | `stations/dirt_station.gd` (`DirtStation`) |
|
||||
| `BurgerBunsDispenser.tscn`, `cube_side_dispense.tscn`, `plate_dispenser.tscn`, `potato_dispenser.tscn`, `raw_burger_dispenser.tscn` | `stations/item_dispenser.gd` (`ItemDispenser`) |
|
||||
|
||||
`StationMovement` (`stations/station_movement.gd`) is a sibling node composed into the base scene, not a station subclass — it's what lets players pick the whole station up and move it in build mode.
|
||||
|
||||
## Script (class) inheritance
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
direction TB
|
||||
Node3D <|-- Station
|
||||
Station <|-- WorkStation
|
||||
Station <|-- SharedInventoryStation
|
||||
Station <|-- DirtStation
|
||||
Station <|-- ItemDispenser
|
||||
WorkStation <|-- Hob
|
||||
WorkStation <|-- Sink
|
||||
WorkStation <|-- Counter
|
||||
SharedInventoryStation <|-- Table
|
||||
|
||||
class Station {
|
||||
<<abstract>>
|
||||
+snap_zone : XRToolsSnapZone
|
||||
+synchronizer : MultiplayerSynchronizer
|
||||
+enabled : bool
|
||||
+on_object_picked_up(item)
|
||||
+on_object_dropped(item)
|
||||
+refresh_display()
|
||||
}
|
||||
class WorkStation {
|
||||
<<abstract>>
|
||||
+current_work : float
|
||||
+max_work : float
|
||||
+result_id : String
|
||||
+add_work(work)
|
||||
+convert_item()
|
||||
}
|
||||
class SharedInventoryStation {
|
||||
<<abstract>>
|
||||
+probes : Area3D[]
|
||||
+neighbors : Dictionary
|
||||
+get_connected_group()
|
||||
+is_group_leader()
|
||||
}
|
||||
class Hob {
|
||||
+cook_speed : float
|
||||
}
|
||||
class Sink {
|
||||
+wash_speed : float
|
||||
}
|
||||
class Counter {
|
||||
+chop_work_steps : float
|
||||
}
|
||||
class DirtStation
|
||||
class ItemDispenser {
|
||||
+item_scene : PackedScene
|
||||
}
|
||||
class Table {
|
||||
+_state : TableState
|
||||
+place_order()
|
||||
}
|
||||
```
|
||||
|
||||
| Class | File | Role |
|
||||
|---|---|---|
|
||||
| `Station` | `abstract/station.gd` | Base for every station. Owns the snap zone, sets up the `MultiplayerSynchronizer`'s replication config, propagates pickup/drop events to clients over RPC, and exposes virtual hooks (`on_object_picked_up`, `on_object_dropped`, `on_food_item_picked_up`, `on_food_item_dropped`, `refresh_display`). |
|
||||
| `WorkStation` | `abstract/work_station.gd` | Base for stations that convert a held `FoodItem` over time via a synced work meter (`current_work`/`max_work`/`result_id`). `add_work()` routes through the server via RPC, and `convert_item()` swaps the held item for the recipe result on completion. |
|
||||
| `Hob` | `stations/hob.gd` | Cooks food using `RecipeManager` cooking recipes; plays a cook animation while active. |
|
||||
| `Sink` | `stations/sink.gd` | Washes a dirty `PlateController` over time; drives water/bubble effect nodes. |
|
||||
| `Counter` | `stations/counter.gd` | Chops food when a knife gesture area detects a fast-enough swipe. |
|
||||
| `SharedInventoryStation` | `abstract/shared_inventory_station.gd` | Base for stations that need to know about same-kind neighbors. Resolves `probe_paths` into neighbor `Area3D`s, builds a connected-group graph (cycle-safe, for belt/table loops), and computes a deterministic group leader. |
|
||||
| `Table` | `stations/table.gd` | The only concrete `SharedInventoryStation`. Runs the customer-order finite state machine (`EMPTY → THINKING → ORDERING → WAITING_PRIMARY → WAITING_FRIEND → EATING`); the connected group's leader orchestrates state, followers mirror it. |
|
||||
| `DirtStation` | `stations/dirt_station.gd` | Marks a dropped plate as dirty. Extends `Station` directly (no work meter). |
|
||||
| `ItemDispenser` | `stations/item_dispenser.gd` | Server keeps a fresh instance of `item_scene` spawned into its snap zone whenever it's empty. Extends `Station` directly. |
|
||||
|
||||
## Networking pattern
|
||||
|
||||
Every station follows the same client/server split, established in `Station`:
|
||||
|
||||
- The server (`NetworkManager.owns_world()`) is authoritative for state changes.
|
||||
- A client calls a public method (e.g. `add_work`, `place_order`); if it isn't the server, that method forwards the call via `*_id.rpc_id(1)` and returns.
|
||||
- The server applies the change locally, then RPCs the result back out to clients (e.g. `_clients_on_object_picked_up_handler`, `_everyone_on_work_complete`).
|
||||
- Frequently-changing fields (`current_work`, `result_id`, table `_state`, etc.) are also registered on `sync_config` in `_enter_tree()` for straight property replication.
|
||||
|
||||
## Notes
|
||||
|
||||
- `stations/station.gd` (`extends "res://stations/hob.gd"`, no `class_name`) is not attached to any scene and isn't part of this hierarchy — it looks like leftover scaffolding.
|
||||
@@ -53,3 +53,17 @@ static func get_node_from_path(from: Node, node_path: NodePath) -> Node3D:
|
||||
SweetLogger.warning("Could not resolve node from node_path: {0}, are the trees in sync?", [node_path])
|
||||
return null
|
||||
return item
|
||||
|
||||
|
||||
|
||||
static func play_sound(player: AudioStreamPlayer3D, stream: AudioStream, pitch_scale: float = 1):
|
||||
if not player:
|
||||
SweetLogger.warning("AudioStreamPlayer3D is null, can not play sound")
|
||||
return
|
||||
if not stream:
|
||||
SweetLogger.warning("AudioStream is null, can not play sound")
|
||||
return
|
||||
player.pitch_scale = pitch_scale
|
||||
player.stream = stream
|
||||
player.play()
|
||||
SweetLogger.debug("Play sound: {0} with pitch_scale: {1} on {2}", [stream.resource_path, pitch_scale, player.get_parent().name])
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
class_name VrSpectatorCamera
|
||||
extends Node
|
||||
|
||||
# Debug tool: on a non-VR client, follows a connected VR client's head so you can spectate it.
|
||||
|
||||
@export var players_path: NodePath = ^"../Players"
|
||||
|
||||
@onready var _players: Node = get_node_or_null(players_path)
|
||||
var _camera: Camera3D
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var xr_interface := XRServer.find_interface("OpenXR")
|
||||
if xr_interface and xr_interface.is_initialized():
|
||||
SweetLogger.warning("{0} disabled - this instance is the VR client", [name])
|
||||
return
|
||||
if not _players:
|
||||
SweetLogger.warning("{0} could not resolve players_path {1}", [name, players_path])
|
||||
return
|
||||
_camera = Camera3D.new()
|
||||
add_child(_camera)
|
||||
_camera.make_current()
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if not _camera:
|
||||
return
|
||||
var head := _find_remote_head()
|
||||
if head:
|
||||
_camera.global_transform = head.global_transform
|
||||
|
||||
|
||||
# First connected player that isn't this local peer
|
||||
func _find_remote_head() -> Node3D:
|
||||
var my_id := multiplayer.get_unique_id()
|
||||
for player in _players.get_children():
|
||||
if player.name == str(my_id):
|
||||
continue
|
||||
return player.get_node_or_null("Head")
|
||||
return null
|
||||
@@ -0,0 +1 @@
|
||||
uid://c4y0yigqv7355
|
||||
@@ -0,0 +1,6 @@
|
||||
[gd_scene format=3 uid="uid://3i1xb74cfsh5"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c4y0yigqv7355" path="res://test/vr_spectator_camera.gd" id="1_6xorv"]
|
||||
|
||||
[node name="VRSpectatorCamera" type="Node" unique_id=310823561]
|
||||
script = ExtResource("1_6xorv")
|
||||
Reference in New Issue
Block a user