41 lines
1.7 KiB
C#
41 lines
1.7 KiB
C#
using System.Collections.Generic;
|
|
using Godot;
|
|
|
|
public partial class VesselNode : RigidBody3D
|
|
{
|
|
public Vessel VesselData;
|
|
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();
|
|
}
|
|
}
|