/// <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; }
/// <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); } } }
/// <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; }