Object parenting; Ship module prototype; Use 64 bit

This commit is contained in:
Aslan 2026-01-24 23:05:19 -05:00
parent 3f97e18615
commit 8335714acc
30 changed files with 436 additions and 62 deletions

41
scripts/VesselNode.cs Normal file
View file

@ -0,0 +1,41 @@
using System.Collections.Generic;
using Godot;
public partial class VesselNode : RigidBody3D
{
public Vessel VesselData = new();
public List<VesselModuleNode> Modules = [];
public override void _Ready()
{
VesselModuleNode moduleBridge = InstantiateModule("test_module_bridge");
VesselModuleNode moduleCombined = InstantiateModule("test_module_combined");
VesselModuleNode moduleEngine1 = InstantiateModule("test_module_engine");
VesselModuleNode moduleEngine2 = InstantiateModule("test_module_engine");
CallDeferred(nameof(AttachModule), moduleBridge, moduleCombined, "TestModuleBridge_AnchorBack", "TestModuleCombined_AnchorFront");
CallDeferred(nameof(AttachModule), moduleBridge, moduleEngine1, "TestModuleBridge_AnchorLeft", "TestModuleEngine_AnchorRight");
CallDeferred(nameof(AttachModule), moduleBridge, moduleEngine2, "TestModuleBridge_AnchorRight", "TestModuleEngine_AnchorLeft");
}
private VesselModuleNode InstantiateModule(string moduleName)
{
PackedScene modulePrefab = ResourceLoader.Load<PackedScene>($"res://prefabs/modules/{moduleName}.tscn");
VesselModuleNode moduleInstance = modulePrefab.Instantiate<VesselModuleNode>();
CallDeferred("add_child", moduleInstance);
VesselData.Modules.Add(moduleInstance.ModuleData);
Modules.Add(moduleInstance);
return moduleInstance;
}
private void AttachModule(VesselModuleNode attachToModule, VesselModuleNode newModule, string existingAnchorName, string newAnchorName)
{
Node3D existingAnchor = attachToModule.GetAnchor(existingAnchorName);
Node3D newAnchor = newModule.GetAnchor(newAnchorName);
newModule.GlobalTransform = existingAnchor.GlobalTransform * newAnchor.Transform.AffineInverse();
}
}