private void UpdateValues() { if (EditorLogic.fetch != null) { numCrew = 0; maxCrew = 0; int numOccupiedParts = 0; int numOccupiableParts = 0; double foodValue = 0; double waterValue = 0; double oxygenValue = 0; double electricityValue = 0; double wasteValue = 0; double wasteWaterValue = 0; double carbonDioxideValue = 0; for (int i = 0; i < EditorLogic.fetch.ship.parts.Count; i++) { if (EditorLogic.fetch.ship.parts[i].CrewCapacity > 0) { ++numOccupiableParts; maxCrew += EditorLogic.fetch.ship.parts[i].CrewCapacity; } for (int j = 0; j < EditorLogic.fetch.ship.parts[i].Resources.Count; j++) { if (EditorLogic.fetch.ship.parts[i].Resources[j].info.id == globalSettings.FoodId) { foodValue += EditorLogic.fetch.ship.parts[i].Resources[j].amount; } else if (EditorLogic.fetch.ship.parts[i].Resources[j].info.id == globalSettings.WaterId) { waterValue += EditorLogic.fetch.ship.parts[i].Resources[j].amount; } else if (EditorLogic.fetch.ship.parts[i].Resources[j].info.id == globalSettings.OxygenId) { oxygenValue += EditorLogic.fetch.ship.parts[i].Resources[j].amount; } else if (EditorLogic.fetch.ship.parts[i].Resources[j].info.id == globalSettings.ElectricityId) { electricityValue += EditorLogic.fetch.ship.parts[i].Resources[j].amount; } else if (EditorLogic.fetch.ship.parts[i].Resources[j].info.id == globalSettings.WasteId) { wasteValue += EditorLogic.fetch.ship.parts[i].Resources[j].maxAmount; } else if (EditorLogic.fetch.ship.parts[i].Resources[j].info.id == globalSettings.WasteWaterId) { wasteWaterValue += EditorLogic.fetch.ship.parts[i].Resources[j].maxAmount; } else if (EditorLogic.fetch.ship.parts[i].Resources[j].info.id == globalSettings.CO2Id) { carbonDioxideValue += EditorLogic.fetch.ship.parts[i].Resources[j].maxAmount; } } } CrewAssignmentDialog dialog = CrewAssignmentDialog.Instance; if (dialog != null) { VesselCrewManifest manifest = dialog.GetManifest(); if (manifest != null) { List <PartCrewManifest> manifests = manifest.GetCrewableParts(); for (int i = 0; i < manifests.Count; i++) { var partCrew = manifests[i].GetPartCrew(); int partCrewCount = 0; for (int j = 0; j < partCrew.Length; ++j) { if (partCrew[j] != null) { ++partCrewCount; } } if (partCrewCount > 0) { ++numOccupiedParts; numCrew += partCrewCount; } } } } food = foodValue.ToString("#,##0.00"); water = waterValue.ToString("#,##0.00"); oxygen = oxygenValue.ToString("#,##0.00"); electricity = electricityValue.ToString("#,##0.00"); maxWaste = wasteValue.ToString("#,##0.00"); maxWasteWater = wasteWaterValue.ToString("#,##0.00"); maxCarbonDioxide = carbonDioxideValue.ToString("#,##0.00"); if (numCrew > 0) { foodDuration = Utilities.FormatTime(foodValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().FoodConsumptionRate / numCrew); waterDuration = Utilities.FormatTime(waterValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().WaterConsumptionRate / numCrew); oxygenDuration = Utilities.FormatTime(oxygenValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().OxygenConsumptionRate / numCrew); electricityDuration = Utilities.FormatTime(electricityValue / CalculateElectricityConsumptionRate(numCrew, numOccupiedParts)); wasteRoom = Utilities.FormatTime(wasteValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().WasteProductionRate / numCrew); wasteWaterRoom = Utilities.FormatTime(wasteWaterValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().WasteWaterProductionRate / numCrew); carbonDioxideRoom = Utilities.FormatTime(carbonDioxideValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().CO2ProductionRate / numCrew); } else { foodDuration = "-"; waterDuration = "-"; oxygenDuration = "-"; electricityDuration = "-"; wasteRoom = "-"; wasteWaterRoom = "-"; carbonDioxideRoom = "-"; } if (maxCrew > 0) { foodDurationMaxCrew = Utilities.FormatTime(foodValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().FoodConsumptionRate / maxCrew); waterDurationMaxCrew = Utilities.FormatTime(waterValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().WaterConsumptionRate / maxCrew); oxygenDurationMaxCrew = Utilities.FormatTime(oxygenValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().OxygenConsumptionRate / maxCrew); electricityDurationMaxCrew = Utilities.FormatTime(electricityValue / CalculateElectricityConsumptionRate(maxCrew, numOccupiableParts)); wasteRoomMaxCrew = Utilities.FormatTime(wasteValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().WasteProductionRate / maxCrew); wasteWaterRoomMaxCrew = Utilities.FormatTime(wasteWaterValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().WasteWaterProductionRate / maxCrew); carbonDioxideRoomMaxCrew = Utilities.FormatTime(carbonDioxideValue / HighLogic.CurrentGame.Parameters.CustomParams <TAC_SettingsParms_Sec2>().CO2ProductionRate / maxCrew); } else { foodDurationMaxCrew = "-"; waterDurationMaxCrew = "-"; oxygenDurationMaxCrew = "-"; electricityDurationMaxCrew = "-"; wasteRoomMaxCrew = "-"; wasteWaterRoomMaxCrew = "-"; carbonDioxideRoomMaxCrew = "-"; } } }
private void UpdateValues() { if (EditorLogic.fetch != null) { numCrew = 0; maxCrew = 0; int numOccupiedParts = 0; int numOccupiableParts = 0; double foodValue = 0; double waterValue = 0; double oxygenValue = 0; double electricityValue = 0; double wasteValue = 0; double wasteWaterValue = 0; double carbonDioxideValue = 0; foreach (Part part in EditorLogic.fetch.ship.parts) { if (part.CrewCapacity > 0) { ++numOccupiableParts; maxCrew += part.CrewCapacity; } foreach (PartResource partResource in part.Resources) { if (partResource.info.id == globalSettings.FoodId) { foodValue += partResource.amount; } else if (partResource.info.id == globalSettings.WaterId) { waterValue += partResource.amount; } else if (partResource.info.id == globalSettings.OxygenId) { oxygenValue += partResource.amount; } else if (partResource.info.id == globalSettings.ElectricityId) { electricityValue += partResource.amount; } else if (partResource.info.id == globalSettings.WasteId) { wasteValue += partResource.maxAmount; } else if (partResource.info.id == globalSettings.WasteWaterId) { wasteWaterValue += partResource.maxAmount; } else if (partResource.info.id == globalSettings.CO2Id) { carbonDioxideValue += partResource.maxAmount; } } } CrewAssignmentDialog dialog = CrewAssignmentDialog.Instance; if (dialog != null) { VesselCrewManifest manifest = dialog.GetManifest(); if (manifest != null) { foreach (PartCrewManifest pcm in manifest) { int partCrewCount = pcm.GetPartCrew().Count(c => c != null); if (partCrewCount > 0) { ++numOccupiedParts; numCrew += partCrewCount; } } } } food = foodValue.ToString("#,##0.00"); water = waterValue.ToString("#,##0.00"); oxygen = oxygenValue.ToString("#,##0.00"); electricity = electricityValue.ToString("#,##0.00"); maxWaste = wasteValue.ToString("#,##0.00"); maxWasteWater = wasteWaterValue.ToString("#,##0.00"); maxCarbonDioxide = carbonDioxideValue.ToString("#,##0.00"); if (numCrew > 0) { foodDuration = Utilities.FormatTime(foodValue / globalSettings.FoodConsumptionRate / numCrew); waterDuration = Utilities.FormatTime(waterValue / globalSettings.WaterConsumptionRate / numCrew); oxygenDuration = Utilities.FormatTime(oxygenValue / globalSettings.OxygenConsumptionRate / numCrew); electricityDuration = Utilities.FormatTime(electricityValue / CalculateElectricityConsumptionRate(numCrew, numOccupiedParts)); wasteRoom = Utilities.FormatTime(wasteValue / globalSettings.WasteProductionRate / numCrew); wasteWaterRoom = Utilities.FormatTime(wasteWaterValue / globalSettings.WasteWaterProductionRate / numCrew); carbonDioxideRoom = Utilities.FormatTime(carbonDioxideValue / globalSettings.CO2ProductionRate / numCrew); } else { foodDuration = "-"; waterDuration = "-"; oxygenDuration = "-"; electricityDuration = "-"; wasteRoom = "-"; wasteWaterRoom = "-"; carbonDioxideRoom = "-"; } if (maxCrew > 0) { foodDurationMaxCrew = Utilities.FormatTime(foodValue / globalSettings.FoodConsumptionRate / maxCrew); waterDurationMaxCrew = Utilities.FormatTime(waterValue / globalSettings.WaterConsumptionRate / maxCrew); oxygenDurationMaxCrew = Utilities.FormatTime(oxygenValue / globalSettings.OxygenConsumptionRate / maxCrew); electricityDurationMaxCrew = Utilities.FormatTime(electricityValue / CalculateElectricityConsumptionRate(maxCrew, numOccupiableParts)); wasteRoomMaxCrew = Utilities.FormatTime(wasteValue / globalSettings.WasteProductionRate / maxCrew); wasteWaterRoomMaxCrew = Utilities.FormatTime(wasteWaterValue / globalSettings.WasteWaterProductionRate / maxCrew); carbonDioxideRoomMaxCrew = Utilities.FormatTime(carbonDioxideValue / globalSettings.CO2ProductionRate / maxCrew); } else { foodDurationMaxCrew = "-"; waterDurationMaxCrew = "-"; oxygenDurationMaxCrew = "-"; electricityDurationMaxCrew = "-"; wasteRoomMaxCrew = "-"; wasteWaterRoomMaxCrew = "-"; carbonDioxideRoomMaxCrew = "-"; } } }