From a606a2f93f007dca70c91b42ff5cf6539bc0dd0b Mon Sep 17 00:00:00 2001 From: JonShard Date: Thu, 30 Jul 2026 17:37:08 +0200 Subject: [PATCH] Station movement handle snaps back in place --- Stations/Hob.tscn | 23 ++++++++++--------- Stations/station_movement.gd | 43 +++++++++++++++++++++++++----------- 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/Stations/Hob.tscn b/Stations/Hob.tscn index 254acd1..fbe4953 100644 --- a/Stations/Hob.tscn +++ b/Stations/Hob.tscn @@ -206,36 +206,34 @@ _data = { [node name="Hob" type="Node3D" unique_id=172418174 groups=["station"]] -[node name="Movement" type="Node3D" parent="." unique_id=1818087979] +[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) -script = ExtResource("7_akjp4") - -[node name="MoveHandle" type="RigidBody3D" parent="Movement" unique_id=1675596942 groups=["platalbe_item"]] 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.0 +gravity_scale = 0.5 linear_damp = 100.0 script = ExtResource("7_d4kl5") +release_mode = 1 -[node name="CollisionShape3D" type="CollisionShape3D" parent="Movement/MoveHandle" unique_id=1023455695] +[node name="CollisionShape3D" type="CollisionShape3D" parent="MoveHandle" unique_id=1023455695] shape = SubResource("BoxShape3D_m1xbq") -[node name="MeshInstance3D" type="MeshInstance3D" parent="Movement/MoveHandle" unique_id=1223689787] +[node name="MeshInstance3D" type="MeshInstance3D" parent="MoveHandle" unique_id=1223689787] mesh = SubResource("BoxMesh_vlqg6") -[node name="GrabPointHandLeft" parent="Movement/MoveHandle" unique_id=1571481674 instance=ExtResource("8_w3ous")] +[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="Movement/MoveHandle" unique_id=514404634 instance=ExtResource("11_sexl6")] +[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="Movement/MoveHandle" unique_id=1858332513] +[node name="NetPickable" type="MultiplayerSynchronizer" parent="MoveHandle" unique_id=1858332513] replication_config = SubResource("SceneReplicationConfig_np_cube") script = ExtResource("15_trny8") @@ -358,3 +356,8 @@ 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("..") diff --git a/Stations/station_movement.gd b/Stations/station_movement.gd index acef884..144dc35 100644 --- a/Stations/station_movement.gd +++ b/Stations/station_movement.gd @@ -1,27 +1,44 @@ -extends Node3D +extends Node @export var snap_grid_size: float = 0.6 -@onready var move_handle: XRToolsPickable = $MoveHandle -@onready var move_handle_rigid: RigidBody3D = $MoveHandle -@onready var station: StaticBody3D = $"../Hob" +@export var move_handle: XRToolsPickable +@export var station: StaticBody3D +var move_handle_rigid: RigidBody3D var original_collision_layer +var original_y_pos: float + +# 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. + func _ready() -> void: + if not station: + push_error("StationMovement is missing referece to station") + + move_handle_rigid = move_handle as RigidBody3D original_collision_layer = station.collision_layer + original_y_pos = move_handle.transform.origin.y + move_handle.picked_up.connect(_handle_pickup) + move_handle.dropped.connect(_handle_drop) + + +func _handle_pickup(_by): + print("StationMovement handle pickup") + station.collision_layer = 0 + + +func _handle_drop(_by): + print("StationMovement handle drop") + station.collision_layer = original_collision_layer + move_handle.global_position = station.global_position + Vector3(0, original_y_pos, 0) + move_handle.rotation = station.rotation func _process(_delta: float) -> void: - if move_handle.is_picked_up(): - station.collision_layer = 0 - else: - station.collision_layer = original_collision_layer - # move_handle.transform.origin = Vector3.ZERO - - move_handle_rigid.linear_velocity = Vector3.ZERO - move_handle_rigid.angular_velocity = Vector3.ZERO - 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)