Пример #1
0
        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);
        }
Пример #2
0
        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);
        }