Пример #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 VesselKit(
            PartModule host,
            ShipConstruct ship,
            bool assembled = true,
            bool simulate  = false
            )
            : this()
        {
            Host = host;
            Name = Localizer.Format(ship.shipName);
            ship.Parts.ForEach(p => p.UpdateMass());
            if (!simulate)
            {
                strip_resources(ship, assembled);
                Blueprint = ship.SaveShip();
            }
            var create_resources = count_kit_resources(ship, assembled);

            ShipMetric   = new Metric((IShipconstruct)ship, true, true);
            DockingNodes = FindDockingNodes(ship, ShipMetric);
            var final_assembly_work = 0f;

            ship.Parts.ForEach(p =>
            {
                var kit              = new PartKit(p, assembled);
                final_assembly_work += p.mass * GLB.FinalizationWorkPerMass * 3600;
                Jobs.Add(kit);
            });
            create_resources.ForEach(r =>
            {
                var assembled_resource = r.Value.type == KitResourceInfo.ResourceType.CONSTRUCTED;
                Jobs.Add(new PartKit(r.Value.name,
                                     r.Value.mass,
                                     r.Value.cost,
                                     assembled_resource ? 0 : 1,
                                     0,
                                     assembled_resource));
            });
            Jobs.Add(new PartKit("Final Assembly", 0, 0, 0, final_assembly_work, true));
            if (assembled)
            {
                SetStageComplete(DIYKit.ASSEMBLY, true);
            }
            HasLaunchClamps = ship.HasLaunchClamp();
            CurrentIndex    = 0;
        }
Пример #3
0
 public VesselKit(PartModule host, ShipConstruct ship, bool assembled = true, bool simulate = false)
     : this()
 {
     Host = host;
     Name = Localizer.Format(ship.shipName);
     if (!simulate)
     {
         strip_resources(ship, assembled);
         Blueprint = ship.SaveShip();
     }
     count_kit_resources(ship);
     ShipMetric   = new Metric(ship, true, true);
     DockingNodes = FindDockingNodes(ship, ShipMetric);
     Jobs.AddRange(ship.Parts.ConvertAll(p => new PartKit(p, assembled)));
     SetStageComplete(DIYKit.ASSEMBLY, assembled);
     HasLaunchClamps = ship.HasLaunchClamp();
     CurrentIndex    = 0;
 }
Пример #4
0
        public VesselKit(PartModule host, ShipConstruct ship, bool assembled = true, bool simulate = false)
            : this()
        {
            Host = host;
            Name = Localizer.Format(ship.shipName);
            if (!simulate)
            {
                strip_resources(ship, assembled);
                Blueprint = ship.SaveShip();
            }
            var create_resources = count_kit_resources(ship, assembled);

            ShipMetric   = new Metric(ship, true, true);
            DockingNodes = FindDockingNodes(ship, ShipMetric);
            Jobs.AddRange(ship.Parts.ConvertAll(p => new PartKit(p, assembled)));
            create_resources.ForEach(r =>
                                     Jobs.Add(new PartKit(r.Value.name, r.Value.mass, r.Value.cost,
                                                          r.Value.type == KitResourceInfo.ResourceType.CONSTRUCTED)));
            SetStageComplete(DIYKit.ASSEMBLY, assembled);
            HasLaunchClamps = ship.HasLaunchClamp();
            CurrentIndex    = 0;
        }
Пример #5
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);
        }