public static DockingNodeList FindDockingNodes(IShipconstruct ship, Metric ship_metric) { var nodes = new DockingNodeList(); var bounds = ship_metric.bounds; var bottom_center = bounds.center - new Vector3(0, bounds.extents.y, 0); foreach (var p in ship.Parts) { foreach (var n in p.attachNodes) { if (n.attachedPart != null) { continue; } var orientation = p.partTransform.TransformDirection(n.orientation).normalized; if (Vector3.Dot(Vector3.down, orientation) > GLB.MaxDockingCos) { var delta = p.partTransform.TransformPoint(n.position) - bottom_center; if (delta.y < GLB.MaxDockingDist) { nodes.Add(new ConstructDockingNode { Name = string.Format("{0} {1:X} ({2})", p.Title(), p.craftID, n.id), PartId = p.craftID, NodeId = n.id, DockingOffset = delta }); } } } } return(nodes); }
public static DockingNodeList FindDockingNodes(IShipconstruct ship, Metric ship_metric) { var nodes = new DockingNodeList(); var bounds = ship_metric.bounds; var bottom_center = bounds.center - new Vector3(0, bounds.extents.y, 0); foreach (var p in ship.Parts) { var variants = p.Modules.GetModule <ModulePartVariants>(); var attachNodes = p.attachNodes; if (variants != null) { attachNodes = variants.SelectedVariant.AttachNodes; } foreach (var n in attachNodes) { if (n.attachedPart != null) { continue; } var orientation = p.partTransform.TransformDirection(n.orientation).normalized; if (Vector3.Dot(Vector3.down, orientation) > GLB.MaxDockingCos) { var delta = p.partTransform.TransformPoint(n.position) - bottom_center; if (delta.y < GLB.MaxDockingDist) { nodes.Add(new ConstructDockingNode { Name = $"{p.Title()} {p.craftID:X} ({n.id})", PartId = p.craftID, NodeId = n.id, DockingOffset = delta }); } } } } return(nodes); }