internal static int FindFirstIndex(uint partId, string partModuleName, bool prodPartslst) { //Find the first available Index for PartModule and Part (cater for multiple modules of the same name on the same part, eg: Resource int returnvalue = 1; if (prodPartslst) //Checking the EC Producing Parts List { bool notFound = true; do { string keyValue = CreatePartKey(partId, partModuleName); PwrPartList partFnd; if (VesselProdPartsList.TryGetValue(keyValue, out partFnd)) { //First the first available index. returnvalue++; } else { notFound = false; } } while (notFound); } else //Checking the EC Consuming Parts List { bool notFound = true; do { string keyValue = CreatePartKey(partId, partModuleName); PwrPartList partFnd; if (VesselConsPartsList.TryGetValue(keyValue, out partFnd)) { //First the first available index. returnvalue++; } else { notFound = false; } } while (notFound); } return(returnvalue); }
/// <summary> /// Add or Amend part in the VesselProdPartsList or VesselConsPartsList /// </summary> /// <param name="pkey">the CraftID</param> /// <param name="prtName">the part Name</param> /// <param name="prtModuleName">the partmodule Module Name</param> /// <param name="prtSubsystem">True if it is an AmpYear Subsystem, otherwise False</param> /// <param name="prtActive">True if part is Active, otherwise False</param> /// <param name="prtPowerF">The Amount of EC being drawn (float)</param> /// <param name="prodPrt">True if it is producing Power, otherwise False</param> /// <param name="partSolar">True if the part is Solar dependant, otherwise False</param> /// <param name="partref">Reference to the Part. May also be null for vessel wide things</param> internal static void AddPart(uint pkey, string prtName, string prtTitle, string prtModuleName, bool prtSubsystem, bool prtActive, double prtPowerF, bool prodPrt, bool partSolar, Part partref) { string keyValue = CreatePartKey(pkey, prtModuleName); if (prodPrt) // Producer part list { if (VesselProdPartsList.TryGetValue(keyValue, out partFnd)) //Try to get entry with index = 1 for key. If found, find the next available index { partFnd.PrtActive = prtActive; partFnd.PrtName = prtName; partFnd.PrtTitle = prtTitle; partFnd.PrtSubsystem = prtSubsystem; if (!AYController.Emergencypowerdownactivated && !AYController.Emergencypowerdownreset && !AYController.EmgcyShutOverrideStarted) { //VesselProdPartsList[keyValue].PrtPreEmergShutDnStateActive = prtActive; partFnd.PrtPreEmergShutDnStateActive = prtActive; } if (AYController.ShowDarkSideWindow && partSolar) { partFnd.PrtEditorInclude = false; } if (prtModuleName != "ModuleResourceConverter" || partFnd.PrtPowerF == 0.0) { if (partFnd.PrtEditorInclude && prtActive) { AYController.Instance.TotalPowerProduced += prtPowerF; } partFnd.PrtPowerF += (float)prtPowerF; partFnd.PrtPower = partFnd.PrtPowerF.ToString("####0.###"); } partFnd.PrtSolarDependant = partSolar; tmpESPDfltValue = AYController.Instance.AYsettings.PartModuleEmergShutDnDflt.FirstOrDefault(a => a.Key.Name == prtModuleName); if (tmpESPDfltValue.Key != null) { partFnd.ValidprtEmergShutDn = tmpESPDfltValue.Value.EmergShutDnDflt; } else { partFnd.ValidprtEmergShutDn = false; } } else { PwrPartList newProdPart = new PwrPartList(prtName, prtTitle, prtModuleName, prtSubsystem, "", (float)prtPowerF, prtActive, partSolar, partref); if (AYController.ShowDarkSideWindow && partSolar) { newProdPart.PrtEditorInclude = false; newProdPart.PrtUserEditorInclude = true; } else { newProdPart.PrtEditorInclude = true; newProdPart.PrtUserEditorInclude = true; } if (newProdPart.PrtEditorInclude && prtActive) { AYController.Instance.TotalPowerProduced += prtPowerF; } newProdPart.PrtPower = newProdPart.PrtPowerF.ToString("####0.###"); newProdPart.PrtSolarDependant = partSolar; tmpESPDfltValue = AYController.Instance.AYsettings.PartModuleEmergShutDnDflt.FirstOrDefault(a => a.Key.Name == prtModuleName); if (tmpESPDfltValue.Key != null) { newProdPart.ValidprtEmergShutDn = tmpESPDfltValue.Value.EmergShutDnDflt; newProdPart.PrtEmergShutDnPriority = tmpESPDfltValue.Value.EmergShutPriority; } else { newProdPart.ValidprtEmergShutDn = false; newProdPart.PrtEmergShutDnPriority = ESPPriority.MEDIUM; } VesselProdPartsList.Add(keyValue, newProdPart); } } else // consumer part list { if (VesselConsPartsList.TryGetValue(keyValue, out partFnd)) { partFnd.PrtActive = prtActive; partFnd.PrtName = prtName; partFnd.PrtTitle = prtTitle; partFnd.PrtSubsystem = prtSubsystem; if (!AYController.Emergencypowerdownactivated && !AYController.Emergencypowerdownreset && !AYController.EmgcyShutOverrideStarted) { partFnd.PrtPreEmergShutDnStateActive = prtActive; } if (prtModuleName != "ModuleResourceConverter" || partFnd.PrtPowerF == 0.0) { if (partFnd.PrtEditorInclude && prtActive) { AYController.Instance.TotalPowerDrain += prtPowerF; } partFnd.PrtPowerF += (float)prtPowerF; partFnd.PrtPower = partFnd.PrtPowerF.ToString("####0.###"); } partFnd.PrtSolarDependant = partSolar; tmpESPDfltValue = AYController.Instance.AYsettings.PartModuleEmergShutDnDflt.FirstOrDefault(a => a.Key.Name == prtModuleName); if (tmpESPDfltValue.Key != null) { partFnd.ValidprtEmergShutDn = tmpESPDfltValue.Value.EmergShutDnDflt; } else { partFnd.ValidprtEmergShutDn = false; } } else { PwrPartList newConsPart = new PwrPartList(prtName, prtTitle, prtModuleName, prtSubsystem, "", (float)prtPowerF, prtActive, partSolar, partref); if (prtActive) { AYController.Instance.TotalPowerDrain += prtPowerF; } newConsPart.PrtPowerF = (float)prtPowerF; newConsPart.PrtPower = newConsPart.PrtPowerF.ToString("####0.###"); newConsPart.PrtSolarDependant = partSolar; tmpESPDfltValue = AYController.Instance.AYsettings.PartModuleEmergShutDnDflt.FirstOrDefault(a => a.Key.Name == prtModuleName); if (tmpESPDfltValue.Key != null) { newConsPart.ValidprtEmergShutDn = tmpESPDfltValue.Value.EmergShutDnDflt; newConsPart.PrtEmergShutDnPriority = tmpESPDfltValue.Value.EmergShutPriority; } else { newConsPart.ValidprtEmergShutDn = false; newConsPart.PrtEmergShutDnPriority = ESPPriority.MEDIUM; } VesselConsPartsList.Add(keyValue, newConsPart); } } if (AYController.Instance.PartsToDelete.Contains(keyValue)) { AYController.Instance.PartsToDelete.Remove(keyValue); } }