private void LoadUpgradesPrices() { log("Loading new upgrades prices"); foreach (UpgradeableFacility facility in GameObject.FindObjectsOfType <UpgradeableFacility>()) { SpaceCenterFacility facilityType; try { facilityType = (SpaceCenterFacility)Enum.Parse(typeof(SpaceCenterFacility), facility.name); } catch (ArgumentException) { // Mods can add new Facilities that are not in the stock enum list. continue; } float[] prices = getFacilityUpgradePrices(facilityType); int levels = getFacilityLevels(facilityType); int[] levelsVisual = getFacilityLevelsVisual(facilityType); if (prices == null) { log("No upgrades prices set for " + facilityType + ". Skipping"); continue; } if (levels != prices.Length) { log("Wrong numbers of upgrade price for " + facility + " expecting " + levels + " and have " + prices.Length + ". Check your configs"); continue; } UpgradeableObject.UpgradeLevel[] upgradeLevels = facility.UpgradeLevels; for (int i = 0; i < upgradeLevels.Length; i++) { UpgradeableObject.UpgradeLevel oldLevel = upgradeLevels[i]; if (oldLevel.Spawned) { oldLevel.Despawn(); } } UpgradeableObject.UpgradeLevel[] newUpgradeLevels = new UpgradeableObject.UpgradeLevel[levels]; for (int i = 0; i < levels; i++) { int originalLevel = Math.Min(i, upgradeLevels.Length - 1); UpgradeableObject.UpgradeLevel level = new UpgradeableObject.UpgradeLevel(); var sourceLvl = upgradeLevels[originalLevel]; level.Setup(facility); level.levelCost = prices[i]; level.levelText = sourceLvl.levelText; level.levelStats = sourceLvl.levelStats; level.facilityPrefab = sourceLvl.facilityPrefab; level.facilityInstance = null; // Only redo the visual on the first load. Doing it on the next loads would mess up the order. if (!varLoaded) { if (levelsVisual.Length == levels) { //log(facility.name + " Copying level " + (levelsVisual[i] - 1) + " for level " + (i + 1)); level.facilityPrefab = upgradeLevels[levelsVisual[i] - 1].facilityPrefab; } else { log("Wrong levelsVisual length " + levelsVisual.Length + " for " + facility.name + " expected " + levels); } } newUpgradeLevels[i] = level; } facility.UpgradeLevels = newUpgradeLevels; // Use the current save state to (re)init the facility if (ScenarioUpgradeableFacilities.protoUpgradeables.TryGetValue(facility.id, out ScenarioUpgradeableFacilities.ProtoUpgradeable protoUpgradeable)) { facility.Load(protoUpgradeable.configNode); } else { facility.SetupLevels(); facility.setLevel(facility.FacilityLevel); } } if (!varLoaded) { log("New upgrades prices are Loaded"); } varLoaded = true; }
// With the help of NoMoreGrind code by nlight private void LoadUpgradesPrices(GameScenes data) { log("Loading new upgrades prices"); foreach (UpgradeableFacility facility in GameObject.FindObjectsOfType <UpgradeableFacility>()) { SpaceCenterFacility facilityType = (SpaceCenterFacility)Enum.Parse(typeof(SpaceCenterFacility), facility.name); float[] prices = getFacilityUpgradePrices(facilityType); int levels = getFacilityLevels(facilityType); int[] levelsVisual = getFacilityLevelsVisual(facilityType); if (prices == null) { log("No upgrades prices set for " + facilityType + ". Skipping"); continue; } if (levels != prices.Length) { log("Wrong numbers of upgrade price for " + facility + " expecting " + levels + " and have " + prices.Length + ". Check your configs"); continue; } UpgradeableObject.UpgradeLevel[] upgradeLevels = facility.UpgradeLevels; if (facility.UpgradeLevels[facility.FacilityLevel].Spawned) { facility.UpgradeLevels[facility.FacilityLevel].Despawn(); } UpgradeableObject.UpgradeLevel[] newUpgradeLevels = new UpgradeableObject.UpgradeLevel[levels]; for (int i = 0; i < levels; i++) { int originalLevel = Math.Min(i, upgradeLevels.Length - 1); UpgradeableObject.UpgradeLevel level = new UpgradeableObject.UpgradeLevel(); var sourceLvl = upgradeLevels[originalLevel]; level.Setup(facility); level.levelCost = prices[i]; level.levelText = sourceLvl.levelText; level.levelStats = sourceLvl.levelStats; level.facilityPrefab = sourceLvl.facilityPrefab; level.facilityInstance = null; if (levelsVisual.Length == levels) { //log(facility.name + " Copying level " + (levelsVisual[i] - 1) + " for level " + (i + 1)); level.facilityPrefab = upgradeLevels[levelsVisual[i] - 1].facilityPrefab; } else { log("Wrong levelsVisual length " + levelsVisual.Length + " for " + facility.name + " expected " + levels); } newUpgradeLevels[i] = level; } facility.UpgradeLevels = newUpgradeLevels; facility.SetupLevels(); facility.setLevel(facility.FacilityLevel); } GameEvents.onLevelWasLoaded.Remove(LoadUpgradesPrices); //log("New upgrades prices are Loaded"); }