Beispiel #1
0
        /// <summary>
        /// Create an InventoryPart from an origin ProtoPartSnapshot, extracting the name, dry cost, and relevant MODULEs
        /// </summary>
        /// <param name="originPartSnapshot">The <see cref="ProtoPartSnapshot"/> to use as the basis of the <see cref="InventoryPart"/>.</param>
        public InventoryPart(ProtoPartSnapshot originPartSnapshot)
        {
            _name = originPartSnapshot.partInfo.name;
            if (ScrapYard.Instance.Settings.PartBlacklist.Contains(Name))
            {
                DoNotStore = true;
            }
            float fuelCost;

            ShipConstruction.GetPartCosts(originPartSnapshot, originPartSnapshot.partInfo, out _dryCost, out fuelCost);

            //Save modules
            if (originPartSnapshot.modules != null)
            {
                foreach (ProtoPartModuleSnapshot module in originPartSnapshot.modules)
                {
                    string name      = module.moduleName;
                    bool   isTracker = name.Equals("ModuleSYPartTracker");
                    if (isTracker || moduleNameMatchesAnything(name)) //only save if there is a potential match
                    {
                        ConfigNode saved = module.moduleValues;
                        _allModules.Add(saved);
                        if (isTracker)
                        {
                            TrackerModule = new TrackerModuleWrapper(saved);
                        }
                    }
                }
            }

            ID = originPartSnapshot.persistentId;
        }
Beispiel #2
0
        /// <summary>
        /// Create an InventoryPart from an origin ConfigNode, extracting the name, dry cost, and relevant MODULEs
        /// </summary>
        /// <param name="originPartConfigNode">The <see cref="ConfigNode"/> to use as the basis of the <see cref="InventoryPart"/>.</param>
        public InventoryPart(ConfigNode originPartConfigNode)
        {
            //if the ConfigNode given is already an InventoryPart, just load it instead
            if (originPartConfigNode.name == typeof(InventoryPart).FullName)
            {
                State = originPartConfigNode;
            }
            else
            {
                _name = ConfigNodeUtils.PartNameFromNode(originPartConfigNode);
                if (ScrapYard.Instance.Settings.PartBlacklist.Contains(Name))
                {
                    DoNotStore = true;
                }
                AvailablePart availablePartForNode = ConfigNodeUtils.AvailablePartFromNode(originPartConfigNode);
                if (availablePartForNode != null)
                {
                    float dryMass, fuelMass, fuelCost;
                    ShipConstruction.GetPartCostsAndMass(originPartConfigNode, availablePartForNode, out _dryCost, out fuelCost, out dryMass, out fuelMass);
                }

                if (originPartConfigNode.HasNode("MODULE"))
                {
                    foreach (ConfigNode module in originPartConfigNode.GetNodes("MODULE"))
                    {
                        string name      = module.GetValue("name");
                        bool   isTracker = name.Equals("ModuleSYPartTracker");
                        _allModules.Add(module);
                        if (isTracker)
                        {
                            TrackerModule = new TrackerModuleWrapper(module);
                        }
                    }
                }

                uint id = 0;
                if (originPartConfigNode.TryGetValue("persistentId", ref id))
                {
                    ID = id;
                }
                else
                {
                    Logging.Log($"Could not find a persistent ID for part {_name}", Logging.LogType.ERROR);
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// Create an InventoryPart from an origin Part, extracting the name, dry cost, and relevant MODULEs
        /// </summary>
        /// <param name="originPart">The <see cref="Part"/> used as the basis of the <see cref="InventoryPart"/>.</param>
        public InventoryPart(Part originPart)
        {
            _name = originPart.partInfo.name;
            if (ScrapYard.Instance.Settings.PartBlacklist.Contains(Name))
            {
                DoNotStore = true;
            }
            _dryCost = originPart.GetModuleCosts(originPart.partInfo.cost) + originPart.partInfo.cost;
            foreach (PartResource resource in originPart.Resources)
            {
                _dryCost -= (float)(resource.maxAmount * PartResourceLibrary.Instance.GetDefinition(resource.resourceName).unitCost);
            }

            //Save modules
            if (originPart.Modules != null)
            {
                _cachedModules = new List <PartModule>();
                foreach (PartModule module in originPart.Modules)
                {
                    string name      = module.moduleName;
                    bool   isTracker = name.Equals("ModuleSYPartTracker");
                    if (isTracker)
                    {
                        ConfigNode saved = new ConfigNode("MODULE");
                        module.Save(saved);
                        _allModules.Add(saved);
                        if (isTracker)
                        {
                            TrackerModule = new TrackerModuleWrapper(saved);
                        }
                    }
                    _cachedModules.Add(module);
                }
            }

            ID = originPart.persistentId;
        }