Welded ship wip physics architecture redesign

This commit is contained in:
2025-11-17 19:43:11 +01:00
parent aafb939cbf
commit 25d9d55044
8 changed files with 462 additions and 215 deletions

View File

@ -9,426 +9,558 @@ properties/0/path = NodePath(".:position")
properties/0/spawn = true
properties/0/replication_mode = 1
[node name="3dTestShip" type="RigidBody3D"]
[node name="3dTestShip" type="RigidBody3D" unique_id=246037729]
script = ExtResource("1_ktv2t")
physics_mode = 1
base_mass = 10000.0
metadata/_custom_type_script = "uid://6co67nfy8ngb"
[node name="Hullplate7" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate7" parent="." unique_id=1182121679 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, -1, 0)
physics_mode = 2
[node name="Hullplate8" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate8" parent="." unique_id=294855274 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, -1, -1)
physics_mode = 2
[node name="Hullplate9" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate9" parent="." unique_id=130054924 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, -1, 1)
physics_mode = 2
[node name="Hullplate4" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate4" parent="." unique_id=2133064539 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, 1, 0)
physics_mode = 2
[node name="Hullplate5" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate5" parent="." unique_id=1436331513 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, 1, -1)
physics_mode = 2
[node name="Hullplate6" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate6" parent="." unique_id=1249365999 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, 1, 1)
physics_mode = 2
[node name="Hullplate11" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate11" parent="." unique_id=1656979163 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, 0, -4)
physics_mode = 2
[node name="Hullplate13" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate13" parent="." unique_id=1426276711 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, -1, -3)
physics_mode = 2
[node name="Hullplate14" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate14" parent="." unique_id=1212526811 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, -1, -4)
physics_mode = 2
[node name="Hullplate15" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate15" parent="." unique_id=403515873 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, -1, -2)
physics_mode = 2
[node name="Hullplate16" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate16" parent="." unique_id=145935239 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, 1, -3)
physics_mode = 2
[node name="Hullplate17" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate17" parent="." unique_id=1662804653 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, 1, -4)
physics_mode = 2
[node name="Hullplate18" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate18" parent="." unique_id=741829932 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, 1, -2)
physics_mode = 2
[node name="Hullplate21" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate21" parent="." unique_id=31417961 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, 0, 4)
physics_mode = 2
[node name="Hullplate22" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate22" parent="." unique_id=1845702661 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, -1, 3)
physics_mode = 2
[node name="Hullplate23" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate23" parent="." unique_id=1747432968 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, -1, 2)
physics_mode = 2
[node name="Hullplate24" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate24" parent="." unique_id=1486518216 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, -1, 4)
physics_mode = 2
[node name="Hullplate25" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate25" parent="." unique_id=1880158566 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, 1, 3)
physics_mode = 2
[node name="Hullplate26" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate26" parent="." unique_id=1506445603 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, 1, 2)
physics_mode = 2
[node name="Hullplate27" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate27" parent="." unique_id=1749302489 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2, 1, 4)
physics_mode = 2
[node name="Hullplate31" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, -0.99999905, -0.0091564655)
[node name="Hullplate31" parent="." unique_id=1965678834 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, -1, -4)
physics_mode = 2
[node name="Hullplate32" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, -0.99999905, -1.0091565)
[node name="Hullplate32" parent="." unique_id=515940324 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, -1, -3)
physics_mode = 2
[node name="Hullplate33" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, -0.99999905, 0.99084353)
[node name="Hullplate33" parent="." unique_id=313389603 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, -1, -2)
physics_mode = 2
[node name="Hullplate34" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, 1.000001, -0.0091564655)
[node name="Hullplate34" parent="." unique_id=363616195 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, 1, 0)
physics_mode = 2
[node name="Hullplate35" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, 1.000001, -1.0091565)
[node name="Hullplate35" parent="." unique_id=568985619 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, 1, -1)
physics_mode = 2
[node name="Hullplate36" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, 1.000001, 0.99084353)
[node name="Hullplate36" parent="." unique_id=193191417 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, 1, 1)
physics_mode = 2
[node name="Hullplate38" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, 9.536743e-07, -4.009156)
[node name="Hullplate38" parent="." unique_id=1152815429 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, 0, -4)
physics_mode = 2
[node name="Hullplate40" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, -0.99999905, -3.0091565)
[node name="Hullplate40" parent="." unique_id=1303768723 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, -1, -1)
physics_mode = 2
[node name="Hullplate41" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, -0.99999905, -4.009156)
[node name="Hullplate41" parent="." unique_id=1489680526 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, -1, 0)
physics_mode = 2
[node name="Hullplate42" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, -0.99999905, -2.0091565)
[node name="Hullplate42" parent="." unique_id=1454642421 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, -1, 1)
physics_mode = 2
[node name="Hullplate43" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, 1.000001, -3.0091565)
[node name="Hullplate43" parent="." unique_id=1322280114 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, 1, -3)
physics_mode = 2
[node name="Hullplate44" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, 1.000001, -4.009156)
[node name="Hullplate44" parent="." unique_id=1380061102 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, 1, -4)
physics_mode = 2
[node name="Hullplate45" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, 1.000001, -2.0091565)
[node name="Hullplate45" parent="." unique_id=1740305308 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, 1, -2)
physics_mode = 2
[node name="Hullplate48" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate48" parent="." unique_id=587023569 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, 0, 4)
physics_mode = 2
[node name="Hullplate49" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, -0.99999905, 2.9908435)
[node name="Hullplate49" parent="." unique_id=1103858035 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, -1, 3)
physics_mode = 2
[node name="Hullplate50" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, -0.99999905, 1.9908435)
[node name="Hullplate50" parent="." unique_id=916625356 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, -1, 2)
physics_mode = 2
[node name="Hullplate51" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate51" parent="." unique_id=2115734988 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, -1, 4)
physics_mode = 2
[node name="Hullplate52" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, 1.000001, 2.9908435)
[node name="Hullplate52" parent="." unique_id=1715698306 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, 1, 3)
physics_mode = 2
[node name="Hullplate53" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.0009866, 1.000001, 1.9908435)
[node name="Hullplate53" parent="." unique_id=369018899 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, 1, 2)
physics_mode = 2
[node name="Hullplate54" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate54" parent="." unique_id=1618415296 instance=ExtResource("2_shb7f")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2, 1, 4)
physics_mode = 2
[node name="Hullplate57" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate57" parent="." unique_id=1148292814 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, 0, 1, 0, -0.014328662, 0, 0.99989736, -1.5, 0, 4.5)
physics_mode = 2
[node name="Hullplate58" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.50098634, -0.99999905, 4.4908433)
[node name="Hullplate58" parent="." unique_id=1183219370 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.50098634, -1, 4.4908433)
physics_mode = 2
[node name="Hullplate59" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.49901366, -0.99999905, 4.4908433)
[node name="Hullplate59" parent="." unique_id=95522376 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.49901366, -1, 4.4908433)
physics_mode = 2
[node name="Hullplate60" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate60" parent="." unique_id=960534764 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, 0, 1, 0, -0.014328662, 0, 0.99989736, -1.5, -1, 4.5)
physics_mode = 2
[node name="Hullplate61" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate61" parent="." unique_id=1862079328 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.50098634, 1.000001, 4.4908433)
physics_mode = 2
[node name="Hullplate62" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate62" parent="." unique_id=876185578 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.49901366, 1.000001, 4.4908433)
physics_mode = 2
[node name="Hullplate64" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate64" parent="." unique_id=622302151 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4990137, 9.536743e-07, 4.4908433)
physics_mode = 2
[node name="Hullplate65" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4990137, -0.99999905, 4.4908433)
[node name="Hullplate65" parent="." unique_id=2027647666 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4990137, -1, 4.4908433)
physics_mode = 2
[node name="Hullplate66" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate66" parent="." unique_id=335333911 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4990137, 1.000001, 4.4908433)
physics_mode = 2
[node name="Hullplate63" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate63" parent="." unique_id=779321466 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, 0, 1, 0, -0.014328662, 0, 0.99989736, -1.5, 1, 4.5)
physics_mode = 2
[node name="Hullplate69" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate69" parent="." unique_id=391423682 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, 0, 1, 0, -0.014328662, 0, 0.99989736, -1.5009866, 9.536743e-07, -4.5091567)
physics_mode = 2
[node name="Hullplate70" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.50098634, -0.99999905, -4.5091567)
[node name="Hullplate70" parent="." unique_id=1436426809 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.50098634, -1, -4.5091567)
physics_mode = 2
[node name="Hullplate71" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.49901366, -0.99999905, -4.5091567)
[node name="Hullplate71" parent="." unique_id=1045660804 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.49901366, -1, -4.5091567)
physics_mode = 2
[node name="Hullplate72" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, 0, 1, 0, -0.014328662, 0, 0.99989736, -1.5009866, -0.99999905, -4.5091567)
[node name="Hullplate72" parent="." unique_id=1696784058 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, 0, 1, 0, -0.014328662, 0, 0.99989736, -1.5009866, -1, -4.5091567)
physics_mode = 2
[node name="Hullplate73" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate73" parent="." unique_id=1709873058 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.50098634, 1.000001, -4.5091567)
physics_mode = 2
[node name="Hullplate74" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate74" parent="." unique_id=1071906843 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.49901366, 1.000001, -4.5091567)
physics_mode = 2
[node name="Hullplate75" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate75" parent="." unique_id=413542580 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4990137, 9.536743e-07, -4.5091567)
physics_mode = 2
[node name="Hullplate76" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4990137, -0.99999905, -4.5091567)
[node name="Hullplate76" parent="." unique_id=448578032 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4990137, -1, -4.5091567)
physics_mode = 2
[node name="Hullplate77" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate77" parent="." unique_id=1162322851 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4990137, 1.000001, -4.5091567)
physics_mode = 2
[node name="Hullplate78" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate78" parent="." unique_id=790206161 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, 0, 1, 0, -0.014328662, 0, 0.99989736, -1.5009866, 1.000001, -4.5091567)
physics_mode = 2
[node name="Hullplate79" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate79" parent="." unique_id=1019136641 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, 1.5000012, -3.009157)
physics_mode = 2
[node name="Hullplate80" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate80" parent="." unique_id=152922175 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, 1.5000012, -3.009157)
physics_mode = 2
[node name="Hullplate81" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate81" parent="." unique_id=771888008 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, 1.5000012, -3.009157)
physics_mode = 2
[node name="Hullplate82" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate82" parent="." unique_id=816092557 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, 1.5000012, -2.009157)
physics_mode = 2
[node name="Hullplate83" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate83" parent="." unique_id=1871920861 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, 1.5000012, -2.009157)
physics_mode = 2
[node name="Hullplate84" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate84" parent="." unique_id=103727539 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, 1.5000012, -2.009157)
physics_mode = 2
[node name="Hullplate85" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate85" parent="." unique_id=1457444620 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, 1.5000012, -4.009157)
physics_mode = 2
[node name="Hullplate86" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate86" parent="." unique_id=1402217859 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, 1.5000012, -4.009157)
physics_mode = 2
[node name="Hullplate87" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate87" parent="." unique_id=293240152 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, 1.5000012, -3.009157)
physics_mode = 2
[node name="Hullplate88" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate88" parent="." unique_id=158231735 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, 1.5000012, -2.009157)
physics_mode = 2
[node name="Hullplate89" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate89" parent="." unique_id=2017317978 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, 1.5000012, -4.009157)
physics_mode = 2
[node name="Hullplate90" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate90" parent="." unique_id=1810711362 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, 1.5000012, -4.009157)
physics_mode = 2
[node name="Hullplate91" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate91" parent="." unique_id=648502427 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, 1.5000012, -0.009156942)
physics_mode = 2
[node name="Hullplate92" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate92" parent="." unique_id=1280848561 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, 1.5000012, -0.009156942)
physics_mode = 2
[node name="Hullplate93" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate93" parent="." unique_id=1000182357 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, 1.5000012, -0.009156942)
physics_mode = 2
[node name="Hullplate94" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate94" parent="." unique_id=663755561 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, 1.5000012, 0.99084306)
physics_mode = 2
[node name="Hullplate95" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate95" parent="." unique_id=977211031 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, 1.5000012, 0.99084306)
physics_mode = 2
[node name="Hullplate96" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate96" parent="." unique_id=1017704164 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, 1.5000012, 0.99084306)
physics_mode = 2
[node name="Hullplate97" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate97" parent="." unique_id=2095269489 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, 1.5000012, -1.0091572)
physics_mode = 2
[node name="Hullplate98" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate98" parent="." unique_id=615154295 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, 1.5000012, -1.0091572)
physics_mode = 2
[node name="Hullplate99" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate99" parent="." unique_id=1435686924 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, 1.5000012, -0.009156942)
physics_mode = 2
[node name="Hullplate100" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate100" parent="." unique_id=361501534 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, 1.5000012, 0.99084306)
physics_mode = 2
[node name="Hullplate101" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate101" parent="." unique_id=776176100 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, 1.5000012, -1.0091572)
physics_mode = 2
[node name="Hullplate102" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate102" parent="." unique_id=1146417492 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, 1.5000012, -1.0091572)
physics_mode = 2
[node name="Hullplate103" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate103" parent="." unique_id=1413321748 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, 1.5000012, 2.990843)
physics_mode = 2
[node name="Hullplate104" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate104" parent="." unique_id=1044980803 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, 1.5000012, 2.990843)
physics_mode = 2
[node name="Hullplate105" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate105" parent="." unique_id=1804409489 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, 1.5000012, 2.990843)
physics_mode = 2
[node name="Hullplate106" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, 1.5000012, 3.990843)
[node name="Hullplate106" parent="." unique_id=1076107521 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.5, 1.5, 4)
physics_mode = 2
[node name="Hullplate107" parent="." instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, 1.5000012, 3.990843)
[node name="Hullplate107" parent="." unique_id=1190510681 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.5, 1.5, 4)
physics_mode = 2
[node name="Hullplate108" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate108" parent="." unique_id=855909591 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, 1.5000012, 3.990843)
physics_mode = 2
[node name="Hullplate109" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate109" parent="." unique_id=946006990 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, 1.5000012, 1.9908428)
physics_mode = 2
[node name="Hullplate110" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate110" parent="." unique_id=1957722835 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, 1.5000012, 1.9908428)
physics_mode = 2
[node name="Hullplate111" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate111" parent="." unique_id=1708941560 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, 1.5000012, 2.990843)
physics_mode = 2
[node name="Hullplate112" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate112" parent="." unique_id=598393913 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, 1.5000012, 3.990843)
physics_mode = 2
[node name="Hullplate113" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate113" parent="." unique_id=629535431 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, 1.5000012, 1.9908428)
physics_mode = 2
[node name="Hullplate114" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate114" parent="." unique_id=1483594858 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, 1.5000012, 1.9908428)
physics_mode = 2
[node name="Hullplate115" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate115" parent="." unique_id=1186769437 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, -1.4999988, -3.009157)
physics_mode = 2
[node name="Hullplate116" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate116" parent="." unique_id=752889015 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, -1.4999988, -3.009157)
physics_mode = 2
[node name="Hullplate117" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate117" parent="." unique_id=175698677 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, -1.4999988, -3.009157)
physics_mode = 2
[node name="Hullplate118" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate118" parent="." unique_id=670641245 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, -1.4999988, -2.009157)
physics_mode = 2
[node name="Hullplate119" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate119" parent="." unique_id=988678524 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, -1.4999988, -2.009157)
physics_mode = 2
[node name="Hullplate120" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate120" parent="." unique_id=896262764 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, -1.4999988, -2.009157)
physics_mode = 2
[node name="Hullplate121" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate121" parent="." unique_id=1336630931 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, -1.4999988, -4.009157)
physics_mode = 2
[node name="Hullplate122" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate122" parent="." unique_id=101919359 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, -1.4999988, -4.009157)
physics_mode = 2
[node name="Hullplate123" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate123" parent="." unique_id=1356736016 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, -1.4999988, -3.009157)
physics_mode = 2
[node name="Hullplate124" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate124" parent="." unique_id=742815341 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, -1.4999988, -2.009157)
physics_mode = 2
[node name="Hullplate125" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate125" parent="." unique_id=1651537246 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, -1.4999988, -4.009157)
physics_mode = 2
[node name="Hullplate126" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate126" parent="." unique_id=1253078352 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, -1.4999988, -4.009157)
physics_mode = 2
[node name="Hullplate127" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate127" parent="." unique_id=519787812 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, -1.4999988, -0.009156942)
physics_mode = 2
[node name="Hullplate128" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate128" parent="." unique_id=629828036 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, -1.4999988, -0.009156942)
physics_mode = 2
[node name="Hullplate129" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate129" parent="." unique_id=2010663580 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, -1.4999988, -0.009156942)
physics_mode = 2
[node name="Hullplate130" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate130" parent="." unique_id=1705163002 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, -1.4999988, 0.99084306)
physics_mode = 2
[node name="Hullplate131" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate131" parent="." unique_id=1635599014 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, -1.4999988, 0.99084306)
physics_mode = 2
[node name="Hullplate132" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate132" parent="." unique_id=789401102 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, -1.4999988, 0.99084306)
physics_mode = 2
[node name="Hullplate133" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate133" parent="." unique_id=1671040057 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, -1.4999988, -1.0091572)
physics_mode = 2
[node name="Hullplate134" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate134" parent="." unique_id=2118015321 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, -1.4999988, -1.0091572)
physics_mode = 2
[node name="Hullplate135" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate135" parent="." unique_id=1970124357 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, -1.4999988, -0.009156942)
physics_mode = 2
[node name="Hullplate136" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate136" parent="." unique_id=2129372302 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, -1.4999988, 0.99084306)
physics_mode = 2
[node name="Hullplate137" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate137" parent="." unique_id=543355427 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, -1.4999988, -1.0091572)
physics_mode = 2
[node name="Hullplate138" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate138" parent="." unique_id=1885736043 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, -1.4999988, -1.0091572)
physics_mode = 2
[node name="Hullplate139" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate139" parent="." unique_id=654209436 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, -1.4999988, 2.990843)
physics_mode = 2
[node name="Hullplate140" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate140" parent="." unique_id=1938132143 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, -1.4999988, 2.990843)
physics_mode = 2
[node name="Hullplate141" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate141" parent="." unique_id=486424951 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, -1.4999988, 2.990843)
physics_mode = 2
[node name="Hullplate142" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate142" parent="." unique_id=910140496 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, -1.4999988, 3.990843)
physics_mode = 2
[node name="Hullplate143" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate143" parent="." unique_id=515293159 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, -1.4999988, 3.990843)
physics_mode = 2
[node name="Hullplate144" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate144" parent="." unique_id=890871001 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, -1.4999988, 3.990843)
physics_mode = 2
[node name="Hullplate145" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate145" parent="." unique_id=1626468827 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, -0.50098634, -1.4999988, 1.9908428)
physics_mode = 2
[node name="Hullplate146" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate146" parent="." unique_id=578516444 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0.49901366, -1.4999988, 1.9908428)
physics_mode = 2
[node name="Hullplate147" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate147" parent="." unique_id=402255852 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, -1.4999988, 2.990843)
physics_mode = 2
[node name="Hullplate148" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate148" parent="." unique_id=1631434711 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, -1.4999988, 3.990843)
physics_mode = 2
[node name="Hullplate149" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate149" parent="." unique_id=726702930 instance=ExtResource("2_shb7f")]
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 1.4990137, -1.4999988, 1.9908428)
physics_mode = 2
[node name="Hullplate150" parent="." instance=ExtResource("2_shb7f")]
[node name="Hullplate150" parent="." unique_id=1001521061 instance=ExtResource("2_shb7f")]
transform = Transform3D(0.99989736, 0, 0.014328662, -0.014328662, -4.371139e-08, 0.99989736, 6.263257e-10, -1, -4.37069e-08, -1.5009866, -1.4999988, 1.9908428)
physics_mode = 2
[node name="Spawner" parent="." instance=ExtResource("3_ism2t")]
[node name="Spawner" parent="." unique_id=6714366 instance=ExtResource("3_ism2t")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2)
[node name="OmniLight3D" type="OmniLight3D" parent="."]
[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=1071155008]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4, 1, -3)
[node name="OmniLight3D2" type="OmniLight3D" parent="."]
[node name="OmniLight3D2" type="OmniLight3D" parent="." unique_id=151820223]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.6, 1, -3)
[node name="OmniLight3D3" type="OmniLight3D" parent="."]
[node name="OmniLight3D3" type="OmniLight3D" parent="." unique_id=390575041]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.6, 1, 4)
[node name="OmniLight3D4" type="OmniLight3D" parent="."]
[node name="OmniLight3D4" type="OmniLight3D" parent="." unique_id=1659652061]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.4, 1, 4)
[node name="Camera3D" type="Camera3D" parent="."]
[node name="Camera3D" type="Camera3D" parent="." unique_id=1905582997]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 3)
current = true
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="." unique_id=2096937457]
replication_config = SubResource("SceneReplicationConfig_ism2t")

View File

@ -1,12 +1,11 @@
class_name Module
extends OrbitalBody3D
class_name Module extends OrbitalBody3D
@export var ship_name: String = "Unnamed Ship" # Only relevant for the root module
@export var hull_integrity: float = 100.0 # This could also be a calculated property later
const COMPONENT_GRID_SIZE = 64.0
# --- NEW: Helper functions to get children by type ---
# --- Helper functions to get children by type ---
func get_structural_pieces() -> Array[StructuralPiece]:
var pieces: Array[StructuralPiece]
for child in get_children():
@ -21,6 +20,11 @@ func get_components() -> Array[Component]:
components.append(child)
return components
func set_initial_velocity(velocity: Vector3):
linear_velocity = velocity
for piece in get_structural_pieces():
piece.linear_velocity = velocity
# --- UPDATED: Logic now uses the helper function ---
func get_attachment_points() -> Array:
var points = []

View File

@ -1,17 +1,57 @@
[gd_scene load_steps=4 format=3 uid="uid://bsyufiv0m1018"]
[gd_scene load_steps=5 format=3 uid="uid://bsyufiv0m1018"]
[ext_resource type="Script" uid="uid://cxnbunw3k7s5j" path="res://scenes/ship/builder/pieces/structural_piece.gd" id="1_ecow4"]
[sub_resource type="BoxShape3D" id="BoxShape3D_ecow4"]
size = Vector3(1, 1, 0.02)
[sub_resource type="BoxMesh" id="BoxMesh_ecow4"]
size = Vector3(1, 1, 0.02)
[node name="Hullplate" type="CollisionShape3D"]
shape = SubResource("BoxShape3D_ecow4")
[sub_resource type="BoxShape3D" id="BoxShape3D_ecow4"]
size = Vector3(1, 1, 0.02)
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ecow4"]
radius = 0.1
height = 0.9
[node name="StructuralPiece" type="RigidBody3D"]
script = ExtResource("1_ecow4")
base_mass = 50.0
metadata/_custom_type_script = "uid://cxnbunw3k7s5j"
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("BoxMesh_ecow4")
skeleton = NodePath("")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("BoxShape3D_ecow4")
[node name="AttachmentPoint" type="Area3D" parent="."]
transform = Transform3D(-4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0, 1, 0, 0.5, 0)
collision_layer = 16384
collision_mask = 16384
[node name="CollisionShape3D" type="CollisionShape3D" parent="AttachmentPoint"]
shape = SubResource("CapsuleShape3D_ecow4")
[node name="AttachmentPoint2" type="Area3D" parent="."]
transform = Transform3D(-4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0, 1, 0, -0.5, 0)
collision_layer = 16384
collision_mask = 16384
[node name="CollisionShape3D" type="CollisionShape3D" parent="AttachmentPoint2"]
shape = SubResource("CapsuleShape3D_ecow4")
[node name="AttachmentPoint3" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0, 0)
collision_layer = 16384
collision_mask = 16384
[node name="CollisionShape3D" type="CollisionShape3D" parent="AttachmentPoint3"]
shape = SubResource("CapsuleShape3D_ecow4")
[node name="AttachmentPoint4" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 0)
collision_layer = 16384
collision_mask = 16384
[node name="CollisionShape3D" type="CollisionShape3D" parent="AttachmentPoint4"]
shape = SubResource("CapsuleShape3D_ecow4")

View File

@ -1,2 +1,5 @@
@abstract
class_name ShipPiece extends CollisionShape3D
class_name ShipPiece extends OrbitalBody3D
func _init() -> void:
physics_mode = OrbitalBody3D.PhysicsMode.COMPOSITE

View File

@ -1 +1,99 @@
class_name StructuralPiece extends ShipPiece
# Track who we are welded to so we don't double-weld
var connected_neighbors: Array[StructuralPiece] = []
var attachment_areas: Array[Area3D] = []
func _init():
base_mass = 50.0
physics_mode = PhysicsMode.INDEPENDENT
auto_proxy_gravity = true
func _ready():
super._ready()
sleeping = false
can_sleep = false
# 1. Find all our attachment point areas
for child in get_children():
if child is Area3D and child.name.begins_with("AttachmentPoint"):
attachment_areas.append(child)
# Ensure they are monitoring
child.monitoring = true
child.monitorable = true
# 2. Attempt to weld to anything we are already touching (for spawning in)
# We wait one frame to let physics settle positions
_initial_weld_scan()
func _initial_weld_scan():
# Wait for the node to settle in the scene tree
await get_tree().physics_frame
# Wait one more tick for the Physics Server to calculate overlaps
await get_tree().physics_frame
_scan_and_weld_neighbors()
# --- PUBLIC API ---
# Call this after placing a piece during runtime construction
func try_weld():
_scan_and_weld_neighbors()
# --- INTERNAL LOGIC ---
func _scan_and_weld_neighbors():
for my_area in attachment_areas:
# Check what other attachment points this area is touching
for other_area in my_area.get_overlapping_areas():
var other_piece = other_area.get_parent()
# Validate the target
if other_piece is StructuralPiece and other_piece != self:
if not other_piece in connected_neighbors:
_create_weld_to(other_piece)
func _create_weld_to(neighbor: StructuralPiece):
print("Welding %s to %s" % [self.name, neighbor.name])
# 1. Create the Joint
var joint = Generic6DOFJoint3D.new()
# 2. Configure as a rigid lock
_lock_joint_axis(joint)
# 3. Add to scene (Joints should generally be peers or children of the system root)
# Adding it to 'self' is fine; if 'self' dies, the joint breaks, which is correct.
add_child(joint)
# 4. Position joint at the midpoint (visual/physics anchor)
# (Optional, but good for stability)
joint.global_position = (self.global_position + neighbor.global_position) / 2.0
# 5. Connect Bodies
joint.node_a = self.get_path()
joint.node_b = neighbor.get_path()
# 6. Record connection on BOTH sides
connected_neighbors.append(neighbor)
neighbor.connected_neighbors.append(self)
func _lock_joint_axis(joint: Generic6DOFJoint3D):
for axis in [Generic6DOFJoint3D.PARAM_LINEAR_LOWER_LIMIT, Generic6DOFJoint3D.PARAM_LINEAR_UPPER_LIMIT]:
joint.set_param_x(axis, 0.0)
joint.set_param_y(axis, 0.0)
joint.set_param_z(axis, 0.0)
for axis in [Generic6DOFJoint3D.PARAM_ANGULAR_LOWER_LIMIT, Generic6DOFJoint3D.PARAM_ANGULAR_UPPER_LIMIT]:
joint.set_param_x(axis, 0.0)
joint.set_param_y(axis, 0.0)
joint.set_param_z(axis, 0.0)
# Handle destruction/detachment
func _exit_tree():
# super._exit_tree()
# Clean up references in neighbors so they don't hold onto dead objects
for neighbor in connected_neighbors:
if is_instance_valid(neighbor):
neighbor.connected_neighbors.erase(self)

View File

@ -35,14 +35,15 @@ var accumulated_torque: Vector3 = Vector3.ZERO
func _ready():
freeze_mode = FreezeMode.FREEZE_MODE_KINEMATIC
if physics_mode == PhysicsMode.ANCHORED:
freeze = true
pass
recalculate_physical_properties()
set_physics_process(not Engine.is_editor_hint())
if physics_mode == PhysicsMode.ANCHORED:
_update_gravity_proxy()
linear_velocity = gravity_proxy_parent.linear_velocity if is_instance_valid(gravity_proxy_parent) else Vector3.ZERO
print(name, " initialized as ANCHORED with gravity proxy: ", gravity_proxy_parent)
func _notification(what):
# Automatically update gravity proxy when the scene hierarchy changes
if what == NOTIFICATION_PARENTED:
@ -73,38 +74,6 @@ func _update_gravity_proxy():
print(name, " detached from gravity proxy (Independent Mode).")
# --- PUBLIC FORCE APPLICATION METHODS ---
# REFACTOR: All arguments are now Vector3
func apply_force_recursive(force: Vector3, pos: Vector3 = self.global_position):
# This is the force routing logic.
match physics_mode:
PhysicsMode.INDEPENDENT:
_add_forces(force, pos)
PhysicsMode.COMPOSITE:
_add_forces(force, pos)
PhysicsMode.ANCHORED:
# If we are not the root, we must route the force to the next OrbitalBody3D parent.
var p = get_parent()
while p:
if p is OrbitalBody3D:
# Recursively call the parent's apply_force_recursive method.
p.apply_force_recursive(force, pos)
return # Stop at the first OrbitalBody3D parent
p = p.get_parent()
push_error("Anchored OrbitalBody3D has become dislodged and is now Composite.")
physics_mode = PhysicsMode.COMPOSITE
apply_force_recursive(force, position)
func _add_forces(force: Vector3, pos: Vector3 = Vector3.ZERO):
# If we are the root, accumulate the force and calculate torque on the total body.
accumulated_force += force
# 'r' is the vector from the center of mass (global_position) to the point of force application (position).
var r = pos - global_position
# REFACTOR: Use 3D cross product (r x F) for torque instead of 2D (r.x*F.y - r.y*F.x)
var torque = r.cross(force)
accumulated_torque += torque
func _update_mass_and_inertia():
mass = base_mass

View File

@ -69,8 +69,9 @@ func _try_spawn_waiting_player():
spawn_point.add_child(pawn)
# Traverse up to find the physics body (Ship/Module) we just spawned inside
# Traverse up to find the physics body (Ship/Module) we just spawned inside
var parent_body = _get_orbital_body_ancestor(spawn_point)
if parent_body:
# Match the ship's speed so we don't slam into the wall
pawn.linear_velocity = parent_body.linear_velocity

View File

@ -93,12 +93,12 @@ func _spawn_player_ship(star_system: StarSystem, star: OrbitalBody3D, planet_sys
var l4_position = star.global_position + star_to_planet_vec.rotated(Vector3.UP, PI / 3.0)
var l4_velocity = planet_system.linear_velocity.rotated(Vector3.UP, PI / 3.0)
var ship_instance = GameManager.config.default_ship_scene.instantiate()
var ship_instance: Module = GameManager.config.default_ship_scene.instantiate()
GameManager.register_ship(ship_instance)
ship_instance.name = "PlayerShip"
star_system.add_child(ship_instance)
ship_instance.global_position = l4_position
ship_instance.linear_velocity = l4_velocity
ship_instance.set_initial_velocity(l4_velocity)
# REFACTOR: Use look_at to orient the ship in 3D
# We point it "prograde" (in the direction of its velocity)