Compare commits
6 Commits
b169b5d05e
...
b24a3f99ee
| Author | SHA1 | Date | |
|---|---|---|---|
| b24a3f99ee | |||
| 71c338da3c | |||
| ad9753c65d | |||
| 1117d90da6 | |||
| 10bb7cd5bf | |||
| 2e670129a5 |
@@ -0,0 +1,38 @@
|
||||
extends Node
|
||||
class_name BuildModeController
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
Signals.game_state_changed.connect(_on_game_state_changed)
|
||||
|
||||
|
||||
func _on_game_state_changed(new_state: GameManager.GameState) -> void:
|
||||
print("BuildModeController: game_state_changed to %s" % new_state)
|
||||
if new_state == GameManager.GameState.BUILDING:
|
||||
despawn_unheld_pickables()
|
||||
|
||||
|
||||
# Despawn all food_items unless it's in a "persistent_inventory" snap_zone
|
||||
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):
|
||||
continue
|
||||
var held_by: Node = pickable.get_picked_up_by()
|
||||
if not held_by:
|
||||
NetworkManager.despawn_item(pickable)
|
||||
continue
|
||||
if not held_by.is_in_group("persistent_inventory"):
|
||||
held_by.get_parent().print_tree_pretty()
|
||||
print("BuildModeController despawn_unheld_pickables held_by: %s, pickable: %s " % [held_by, pickable])
|
||||
NetworkManager.despawn_item(pickable)
|
||||
|
||||
|
||||
func _collect_pickables(node: Node, out_array: Array) -> void:
|
||||
if node is XRToolsPickable:
|
||||
out_array.append(node)
|
||||
for child in node.get_children():
|
||||
if child is Node:
|
||||
_collect_pickables(child, out_array)
|
||||
@@ -0,0 +1 @@
|
||||
uid://bsdpd18i1i17s
|
||||
@@ -16,9 +16,3 @@ func _ready() -> void:
|
||||
# Later we will do procedural generation here.
|
||||
# For now we just load a scene.
|
||||
NetworkManager.call_deferred("spawn_item", kitchen_scene.resource_path, transform)
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("satisfy_table_orders"):
|
||||
var trans: Transform3D = transform
|
||||
trans.origin += Vector3(-1.2, 0, 0)
|
||||
NetworkManager.call_deferred("spawn_item", hob_scene.resource_path, trans)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
[ext_resource type="PackedScene" uid="uid://efaec6ymgabo" path="res://stations/Counter.tscn" id="7_jnxsa"]
|
||||
[ext_resource type="PackedScene" uid="uid://drwuhqb3pjtiy" path="res://items/potato.tscn" id="8_1qeqw"]
|
||||
[ext_resource type="PackedScene" uid="uid://dlw5geheupgpt" path="res://stations/hatch.tscn" id="8_atgwk"]
|
||||
[ext_resource type="Script" uid="uid://bsdpd18i1i17s" path="res://prefabs/build_mode_controller.gd" id="9_atgwk"]
|
||||
|
||||
[sub_resource type="Environment" id="Environment_bvwq1"]
|
||||
background_mode = 2
|
||||
@@ -99,3 +100,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.2, 0, 0)
|
||||
|
||||
[node name="Hatch2" parent="." unique_id=1755144529 instance=ExtResource("8_atgwk")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.6, 0, 0)
|
||||
|
||||
[node name="BuildModeController" type="Node" parent="." unique_id=1876729190]
|
||||
script = ExtResource("9_atgwk")
|
||||
|
||||
+7
-78
@@ -1,50 +1,12 @@
|
||||
[gd_scene format=3 uid="uid://j7caslh27nor"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bsn8vhv5adxdo" path="res://stations/hob.gd" id="1_7jc4g"]
|
||||
[ext_resource type="PackedScene" uid="uid://cvucwxibtol5f" path="res://stations/StationMovement.tscn" id="1_pydjp"]
|
||||
[ext_resource type="Script" uid="uid://cquqe4f1m1sw6" path="res://addons/godot-xr-tools/objects/snap_zone.gd" id="2_er1dp"]
|
||||
[ext_resource type="AudioStream" uid="uid://bqtk1adk8umbx" path="res://sounds/220197__gameaudio__click-basic.wav" id="3_6oyg1"]
|
||||
[ext_resource type="PackedScene" uid="uid://bxbocxdaayvwx" path="res://UI/progress_bar.tscn" id="3_7uuqv"]
|
||||
[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"]
|
||||
[ext_resource type="Script" uid="uid://bu0g23cfrqy0m" path="res://stations/station_movement.gd" id="7_akjp4"]
|
||||
[ext_resource type="Script" uid="uid://bfrlpbsqg5lqr" path="res://addons/godot-xr-tools/objects/pickable.gd" id="7_d4kl5"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="8_w3ous"]
|
||||
[ext_resource type="Animation" uid="uid://db62hs5s4n2b3" path="res://addons/godot-xr-tools/hands/animations/left/Grip 4.res" id="9_rdqhn"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="10_hyphg"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="11_sexl6"]
|
||||
[ext_resource type="Animation" uid="uid://d1xnpyc08njjx" path="res://addons/godot-xr-tools/hands/animations/right/Grip 4.res" id="12_0t4ed"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="15_trny8"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_m1xbq"]
|
||||
size = Vector3(0.1, 0.1, 0.1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_24d3s"]
|
||||
albedo_color = Color(0.1764706, 1, 1, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_vlqg6"]
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
size = Vector3(0.1, 0.1, 0.1)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_lc22d"]
|
||||
script = ExtResource("10_hyphg")
|
||||
closed_pose = ExtResource("9_rdqhn")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qyiot"]
|
||||
script = ExtResource("10_hyphg")
|
||||
closed_pose = ExtResource("12_0t4ed")
|
||||
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
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_kdxnr"]
|
||||
size = Vector3(0.6, 1, 0.6)
|
||||
@@ -206,36 +168,8 @@ _data = {
|
||||
|
||||
[node name="Hob" type="Node3D" unique_id=172418174 groups=["station"]]
|
||||
|
||||
[node name="MoveHandle" type="RigidBody3D" parent="." unique_id=1675596942 groups=["platalbe_item"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.08, 0)
|
||||
collision_layer = 4
|
||||
collision_mask = 196615
|
||||
axis_lock_linear_y = true
|
||||
axis_lock_angular_x = true
|
||||
axis_lock_angular_z = true
|
||||
mass = 0.004
|
||||
gravity_scale = 0.5
|
||||
linear_damp = 100.0
|
||||
script = ExtResource("7_d4kl5")
|
||||
release_mode = 1
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="MoveHandle" unique_id=1023455695]
|
||||
shape = SubResource("BoxShape3D_m1xbq")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="MoveHandle" unique_id=1223689787]
|
||||
mesh = SubResource("BoxMesh_vlqg6")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="MoveHandle" unique_id=1571481674 instance=ExtResource("8_w3ous")]
|
||||
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="MoveHandle" unique_id=514404634 instance=ExtResource("11_sexl6")]
|
||||
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="MoveHandle" unique_id=1858332513]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_cube")
|
||||
script = ExtResource("15_trny8")
|
||||
[node name="StationMovement" parent="." unique_id=946873975 node_paths=PackedStringArray("station") instance=ExtResource("1_pydjp")]
|
||||
station = NodePath("../Hob")
|
||||
|
||||
[node name="Hob" type="StaticBody3D" parent="." unique_id=1332123047]
|
||||
script = ExtResource("1_7jc4g")
|
||||
@@ -259,10 +193,13 @@ shape = SubResource("BoxShape3D_7uuqv")
|
||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Hob/XRToolsSnapZone" unique_id=1991627595]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.022546828, -0.5270121, 0.36528283)
|
||||
|
||||
[node name="ProgressBar3D" parent="Hob" unique_id=654673176 instance=ExtResource("3_7uuqv")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.74736404, -0.09216304)
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Hob" unique_id=70901698]
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="Hob/CSGCombiner3D" unique_id=1111505172]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.00894776)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00071543455, 3.7252903e-09, -0.008516133)
|
||||
size = Vector3(0.6, 1, 0.5821045)
|
||||
|
||||
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Hob/CSGCombiner3D/CSGBox3D" unique_id=1338463939]
|
||||
@@ -344,9 +281,6 @@ size = Vector3(0.55, 0.096, 0.14)
|
||||
root_path = NodePath("../..")
|
||||
replication_config = SubResource("SceneReplicationConfig_np_hob")
|
||||
|
||||
[node name="ProgressBar3D" parent="Hob" unique_id=654673176 instance=ExtResource("3_7uuqv")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.74736404, -0.09216304)
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="Hob" unique_id=1525460719]
|
||||
root_node = NodePath("../..")
|
||||
libraries/ = SubResource("AnimationLibrary_ac5f3")
|
||||
@@ -356,8 +290,3 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5053487, 0)
|
||||
light_color = Color(1, 0.13725491, 0, 1)
|
||||
light_energy = 0.0
|
||||
omni_range = 0.5
|
||||
|
||||
[node name="Movement" type="Node" parent="Hob" unique_id=1004484356 node_paths=PackedStringArray("move_handle", "station")]
|
||||
script = ExtResource("7_akjp4")
|
||||
move_handle = NodePath("../../MoveHandle")
|
||||
station = NodePath("..")
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
[gd_scene format=3 uid="uid://cvucwxibtol5f"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bu0g23cfrqy0m" path="res://stations/station_movement.gd" id="1_ldy6a"]
|
||||
[ext_resource type="Script" uid="uid://bfrlpbsqg5lqr" path="res://addons/godot-xr-tools/objects/pickable.gd" id="2_tbkb3"]
|
||||
[ext_resource type="PackedScene" uid="uid://c25yxb0vt53vc" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn" id="3_36r14"]
|
||||
[ext_resource type="Animation" uid="uid://db62hs5s4n2b3" path="res://addons/godot-xr-tools/hands/animations/left/Grip 4.res" id="4_dy2gh"]
|
||||
[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="5_2muex"]
|
||||
[ext_resource type="PackedScene" uid="uid://ctw7nbntd5pcj" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn" id="6_372qd"]
|
||||
[ext_resource type="Animation" uid="uid://d1xnpyc08njjx" path="res://addons/godot-xr-tools/hands/animations/right/Grip 4.res" id="7_uxgrt"]
|
||||
[ext_resource type="Script" uid="uid://bwd0pe2udb5xo" path="res://Net/net_pickable.gd" id="8_7mccn"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_m1xbq"]
|
||||
size = Vector3(0.1, 0.1, 0.1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_24d3s"]
|
||||
albedo_color = Color(0.1764706, 1, 1, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_vlqg6"]
|
||||
material = SubResource("StandardMaterial3D_24d3s")
|
||||
size = Vector3(0.1, 0.1, 0.1)
|
||||
|
||||
[sub_resource type="Resource" id="Resource_lc22d"]
|
||||
script = ExtResource("5_2muex")
|
||||
closed_pose = ExtResource("4_dy2gh")
|
||||
metadata/_custom_type_script = "uid://dvobm6vcfnqe8"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qyiot"]
|
||||
script = ExtResource("5_2muex")
|
||||
closed_pose = ExtResource("7_uxgrt")
|
||||
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
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_vlqg6"]
|
||||
size = Vector3(0.5, 1, 0.5)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vlqg6"]
|
||||
transparency = 1
|
||||
albedo_color = Color(1, 0.78999996, 0.39999998, 0.4627451)
|
||||
|
||||
[node name="StationMovement" type="Node3D" unique_id=946873975 node_paths=PackedStringArray("move_handle", "move_ghost")]
|
||||
script = ExtResource("1_ldy6a")
|
||||
move_handle = NodePath("MoveHandle")
|
||||
move_ghost = NodePath("MoveGhost")
|
||||
|
||||
[node name="MoveHandle" type="RigidBody3D" parent="." unique_id=954108203 groups=["platalbe_item"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.08, 0)
|
||||
collision_layer = 4
|
||||
collision_mask = 196615
|
||||
axis_lock_linear_y = true
|
||||
axis_lock_angular_x = true
|
||||
axis_lock_angular_z = true
|
||||
mass = 0.004
|
||||
gravity_scale = 0.5
|
||||
linear_damp = 100.0
|
||||
script = ExtResource("2_tbkb3")
|
||||
release_mode = 1
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="MoveHandle" unique_id=1692047616]
|
||||
shape = SubResource("BoxShape3D_m1xbq")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="MoveHandle" unique_id=1134464542]
|
||||
mesh = SubResource("BoxMesh_vlqg6")
|
||||
|
||||
[node name="GrabPointHandLeft" parent="MoveHandle" unique_id=358095191 instance=ExtResource("3_36r14")]
|
||||
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="MoveHandle" unique_id=694601824 instance=ExtResource("6_372qd")]
|
||||
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="MoveHandle" unique_id=404907673]
|
||||
replication_config = SubResource("SceneReplicationConfig_np_cube")
|
||||
script = ExtResource("8_7mccn")
|
||||
|
||||
[node name="MoveGhost" type="Area3D" parent="." unique_id=1305344236]
|
||||
visible = false
|
||||
collision_layer = 0
|
||||
collision_mask = 524295
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="MoveGhost" unique_id=2074041383]
|
||||
shape = SubResource("BoxShape3D_vlqg6")
|
||||
|
||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="MoveGhost" unique_id=283929246]
|
||||
collision_layer = 0
|
||||
collision_mask = 524291
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="MoveGhost/CSGCombiner3D" unique_id=1786907045]
|
||||
size = Vector3(0.6, 1, 0.6)
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="MoveGhost/CSGCombiner3D" unique_id=684823657]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5642835, 0)
|
||||
size = Vector3(0.03, 0.03, 0.3)
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGBox3D2" type="CSGBox3D" parent="MoveGhost/CSGCombiner3D/CSGBox3D2" unique_id=286640707]
|
||||
transform = Transform3D(0.70451534, 0, -0.7096888, 0, 1, 0, 0.7096888, 0, 0.70451534, -0.046803005, 0, -0.096979)
|
||||
size = Vector3(0.03, 0.03, 0.12021485)
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="MoveGhost/CSGCombiner3D/CSGBox3D2" unique_id=1791902851]
|
||||
transform = Transform3D(0.7073421, 0, 0.7068714, 0, 1, 0, -0.7068714, 0, 0.7073421, 0.04550519, 0, -0.096264325)
|
||||
size = Vector3(0.03, 0.03, 0.12021485)
|
||||
material = SubResource("StandardMaterial3D_vlqg6")
|
||||
+1
-1
@@ -18,7 +18,7 @@ albedo_color = Color(0.38, 0.35162666, 0.3268, 1)
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_vlqg6"]
|
||||
size = Vector3(0.6, 0.34027833, 0.6)
|
||||
|
||||
[node name="Hatch" type="StaticBody3D" unique_id=1341321603]
|
||||
[node name="Hatch" type="StaticBody3D" unique_id=1341321603 groups=["persistent_inventory"]]
|
||||
|
||||
[node name="XRToolsSnapZone" type="Area3D" parent="." unique_id=2093161322 groups=["station"]]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2495586, 0)
|
||||
|
||||
+116
-11
@@ -3,43 +3,148 @@ extends Node
|
||||
@export var snap_grid_size: float = 0.6
|
||||
|
||||
@export var move_handle: XRToolsPickable
|
||||
@export var move_ghost: Area3D
|
||||
@export var station: StaticBody3D
|
||||
|
||||
var move_handle_rigid: RigidBody3D
|
||||
var original_collision_layer
|
||||
var original_y_pos: float
|
||||
var original_collision_layer: int = 0
|
||||
var original_y_pos: float = 0.0
|
||||
var original_station_transform: Transform3D = Transform3D.IDENTITY
|
||||
var moving: bool = false
|
||||
var ghost_materials: Array[StandardMaterial3D] = []
|
||||
|
||||
# TODO: Reject placing station in occupied spot.
|
||||
# TODO: Make ghost version of station that is displayed instead of model.
|
||||
# TODO: public toggle to disable handle in build mode.
|
||||
# TODO: If game exits build mode, drop the handle before disabling it.
|
||||
const GHOST_COLOR_VALID: Color = Color(0, 1, 0, 0.35)
|
||||
const GHOST_COLOR_INVALID: Color = Color(1, 0, 0, 0.35)
|
||||
|
||||
|
||||
func set_move_handle_enabled(enabled: bool) -> void:
|
||||
move_handle.visible = enabled
|
||||
move_handle.enabled = enabled
|
||||
if enabled:
|
||||
move_handle.drop()
|
||||
|
||||
|
||||
func _on_game_state_changed(new_state: GameManager.GameState) -> void:
|
||||
set_move_handle_enabled(new_state == GameManager.GameState.BUILDING)
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if not station:
|
||||
push_error("StationMovement is missing referece to station")
|
||||
if not move_handle:
|
||||
push_error("StationMovement is missing reference to move_handle")
|
||||
if not move_ghost:
|
||||
push_error("StationMovement is missing reference to move_ghost")
|
||||
|
||||
move_handle_rigid = move_handle as RigidBody3D
|
||||
original_collision_layer = station.collision_layer
|
||||
original_y_pos = move_handle.transform.origin.y
|
||||
original_station_transform = station.global_transform
|
||||
move_handle.picked_up.connect(_handle_pickup)
|
||||
move_handle.dropped.connect(_handle_drop)
|
||||
|
||||
move_ghost.monitoring = true
|
||||
move_ghost.visible = false
|
||||
_cache_ghost_materials()
|
||||
_set_ghost_color(GHOST_COLOR_VALID)
|
||||
set_move_handle_enabled(false)
|
||||
Signals.game_state_changed.connect(_on_game_state_changed)
|
||||
|
||||
func _handle_pickup(_by):
|
||||
|
||||
func _cache_ghost_materials() -> void:
|
||||
var combiner = move_ghost.get_node_or_null("CSGCombiner3D")
|
||||
if not combiner:
|
||||
return
|
||||
_collect_ghost_materials(combiner)
|
||||
|
||||
|
||||
func _collect_ghost_materials(node: Node) -> void:
|
||||
if node is CSGCombiner3D:
|
||||
# Combiner nodes do not expose a material property to modify.
|
||||
for child in node.get_children():
|
||||
_collect_ghost_materials(child)
|
||||
return
|
||||
|
||||
if node is CSGShape3D:
|
||||
var material = node.material
|
||||
if material and material is StandardMaterial3D:
|
||||
var instance = material.duplicate() as StandardMaterial3D
|
||||
instance.transparency = material.transparency
|
||||
instance.albedo_color = material.albedo_color
|
||||
node.material = instance
|
||||
ghost_materials.append(instance)
|
||||
|
||||
for child in node.get_children():
|
||||
_collect_ghost_materials(child)
|
||||
|
||||
|
||||
func _set_ghost_color(color: Color) -> void:
|
||||
for material in ghost_materials:
|
||||
material.albedo_color = color
|
||||
|
||||
|
||||
func _handle_pickup(_by: Node) -> void:
|
||||
print("StationMovement handle pickup")
|
||||
if move_handle.get_picked_up_by() is XRToolsSnapZone:
|
||||
print("StationMovement handle pickup by snap zone, dropping and resetting position")
|
||||
move_handle.drop()
|
||||
move_handle.global_position = station.global_position + Vector3(0, original_y_pos, 0)
|
||||
move_handle.rotation = station.rotation
|
||||
return
|
||||
|
||||
moving = true
|
||||
move_ghost.visible = true
|
||||
station.visible = false
|
||||
station.collision_layer = 0
|
||||
original_station_transform = station.global_transform
|
||||
move_ghost.global_transform = original_station_transform
|
||||
|
||||
|
||||
func _handle_drop(_by):
|
||||
func _handle_drop(_by: Node) -> void:
|
||||
print("StationMovement handle drop")
|
||||
moving = false
|
||||
move_ghost.visible = false
|
||||
station.visible = true
|
||||
station.collision_layer = original_collision_layer
|
||||
if _is_move_position_valid():
|
||||
station.global_transform = move_ghost.global_transform
|
||||
else:
|
||||
station.global_transform = original_station_transform
|
||||
move_handle.global_position = station.global_position + Vector3(0, original_y_pos, 0)
|
||||
move_handle.rotation = station.rotation
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
station.global_position.x = snappedf(move_handle.global_position.x, snap_grid_size)
|
||||
station.global_position.z = snappedf(move_handle.global_position.z, snap_grid_size)
|
||||
station.global_rotation_degrees.y = snappedf(move_handle.global_rotation_degrees.y, 90)
|
||||
if not moving:
|
||||
return
|
||||
|
||||
var target_transform: Transform3D = move_handle.global_transform
|
||||
target_transform.origin.x = snappedf(target_transform.origin.x, snap_grid_size)
|
||||
target_transform.origin.z = snappedf(target_transform.origin.z, snap_grid_size)
|
||||
target_transform.origin.y = original_station_transform.origin.y
|
||||
var target_yaw: float = snappedf(move_handle.global_rotation_degrees.y, 90)
|
||||
target_transform.basis = Basis(Vector3.UP, deg_to_rad(target_yaw))
|
||||
|
||||
move_ghost.global_transform = target_transform
|
||||
if _is_move_position_valid():
|
||||
_set_ghost_color(GHOST_COLOR_VALID)
|
||||
else:
|
||||
_set_ghost_color(GHOST_COLOR_INVALID)
|
||||
|
||||
|
||||
func _is_move_position_valid() -> bool:
|
||||
for body in move_ghost.get_overlapping_bodies():
|
||||
print("Overlapping body: ", body)
|
||||
if body == move_handle:
|
||||
continue
|
||||
if body == station:
|
||||
continue
|
||||
return false
|
||||
|
||||
for area in move_ghost.get_overlapping_areas():
|
||||
print("Overlapping area: ", area)
|
||||
if area == move_ghost:
|
||||
continue
|
||||
return false
|
||||
|
||||
return true
|
||||
|
||||
@@ -7,9 +7,15 @@ static var sides_in_play: Array[String]
|
||||
|
||||
enum GameState {
|
||||
RUNNING,
|
||||
GAME_OVER
|
||||
GAME_OVER,
|
||||
BUILDING
|
||||
}
|
||||
static var game_state: GameState = GameState.RUNNING
|
||||
static var game_state: GameState = GameState.RUNNING: set = _set_game_state
|
||||
|
||||
|
||||
static func _set_game_state(value: GameState):
|
||||
game_state = value
|
||||
Signals.game_state_changed.emit(value)
|
||||
|
||||
|
||||
static func _restart():
|
||||
@@ -40,6 +46,3 @@ static func game_over():
|
||||
print("Game Over")
|
||||
game_state = GameState.GAME_OVER
|
||||
Signals.game_over.emit()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2,3 +2,4 @@ extends Node
|
||||
|
||||
signal game_over
|
||||
signal restart_game
|
||||
signal game_state_changed(new_state: GameManager.GameState)
|
||||
@@ -5,6 +5,10 @@ func _unhandled_input(event: InputEvent) -> void:
|
||||
get_tree().quit()
|
||||
if event.is_action_pressed("satisfy_table_orders"):
|
||||
satisfy_table_orders()
|
||||
if event.is_action_pressed("set_building_mode"):
|
||||
set_buidling_mode()
|
||||
if event.is_action_pressed("set_running_mode"):
|
||||
set_running_mode()
|
||||
|
||||
|
||||
# Finds any node of class/type Table and calls satisfyAllOrders()
|
||||
@@ -17,4 +21,11 @@ func satisfy_table_orders() -> void:
|
||||
node.satisfyAllOrders()
|
||||
|
||||
|
||||
func set_buidling_mode():
|
||||
print("Global key event: Setting building mode")
|
||||
GameManager.game_state = GameManager.GameState.BUILDING
|
||||
|
||||
|
||||
func set_running_mode():
|
||||
print("Global key event: Setting running mode")
|
||||
GameManager.game_state = GameManager.GameState.RUNNING
|
||||
|
||||
@@ -48,6 +48,7 @@ platalbe_item="Meals, sides, augments for meals"
|
||||
station="Hobs, Counters ..."
|
||||
table="all nodes with table script"
|
||||
chopping_tool="A pickable body that chops"
|
||||
persistent_inventory="A station that keeps it's held items in build mode"
|
||||
|
||||
[input]
|
||||
|
||||
@@ -61,6 +62,16 @@ satisfy_table_orders={
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
set_building_mode={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":46,"key_label":0,"unicode":46,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
set_running_mode={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":44,"key_label":0,"unicode":44,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[layer_names]
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://be8o8m6xpp3kc
|
||||
Reference in New Issue
Block a user