public void CalculateLevels(Randomizer r, int width, int length, out int level0, out int level1, out int level2, out int level3) { ItemClass itemClass = this.m_info.m_class; ItemClass.SubService subService = itemClass.m_subService; int[] workplaceDistribution = { 0, 0, 0, 0, 0 }; if (m_ricoData.workplaceDistribution != null) { workplaceDistribution = m_ricoData.workplaceDistribution; } else if (itemClass.m_level == ItemClass.Level.Level1) { workplaceDistribution = new int[] { 100, 0, 40, 50, 10 } } ; else if (itemClass.m_level == ItemClass.Level.Level2) { workplaceDistribution = new int[] { 100, 0, 20, 50, 30 } } ; else { workplaceDistribution = new int[] { 100, 0, 0, 40, 60 } }; WorkplaceAIHelper.distributeWorkplaceLevels(r, workplaceDistribution, m_workplaceCount, out level0, out level1, out level2, out level3); }
/// <summary> /// Updates workplace breakdowns to ratios applicable to current settings. /// </summary> private void UpdateWorkplaceBreakdowns() { int[] allocation = new int[4]; int totalJobs; // Ignore event if disabled flag is set. if (disableEvents) { return; } // If we catch an exception while parsing the manual textfield, it's probably because it's not ready yet (initial asset selection). // Simply return without doing anything. try { totalJobs = int.Parse(manual.text); } catch { return; } if (totalJobs > 0) { // Get current service and sub-service. GetService(out string serviceString, out string subServiceString); // Allocate out total workplaces ('manual'). int[] distribution = Util.WorkplaceDistributionOf(serviceString, subServiceString, "Level" + (level.selectedIndex + 1)); allocation = WorkplaceAIHelper.distributeWorkplaceLevels(int.Parse(manual.text), distribution, new int[] { 0, 0, 0, 0 }); // Check and adjust for any rounding errors, assigning 'leftover' jobs to the lowest education level. allocation[0] += (int.Parse(manual.text) - allocation[0] - allocation[1] - allocation[2] - allocation[3]); } // Disable event handling while we update textfields. disableEvents = true; // Update workplace textfields. uneducated.text = allocation[0].ToString(); educated.text = allocation[1].ToString(); welleducated.text = allocation[2].ToString(); highlyeducated.text = allocation[3].ToString(); // Resume event handling. disableEvents = false; }
/// <summary> /// Reads current settings from UI elements, and saves them to XML. /// </summary> internal void SaveRICO() { // Set service and subservice. GetService(out string serviceString, out string subServiceString); currentSelection.service = serviceString; currentSelection.subService = subServiceString; // Set level. currentSelection.level = level.selectedIndex + 1; // Get home/total worker count, with default of zero. int manualCount = 0; int.TryParse(manual.text, out manualCount); currentSelection.homeCount = manualCount; // Get workplace breakdown. int[] a = new int[4] { 0, 0, 0, 0 }; int.TryParse(uneducated.text, out a[0]); int.TryParse(educated.text, out a[1]); int.TryParse(welleducated.text, out a[2]); int.TryParse(highlyeducated.text, out a[3]); // If no breakdown has been provided, then we try the total jobs instead. // Yeah, it's a bit clunky to add the elements individually like this, but saves bringing in System.Linq for just this one case. if (a[0] + a[1] + a[2] + a[3] == 0) { // No workplace breakdown provided (all fields zero); use total workplaces ('manual', previously parsed as manualCount) and allocate. int[] d = Util.WorkplaceDistributionOf(currentSelection.service, currentSelection.subService, "Level" + currentSelection.level); a = WorkplaceAIHelper.distributeWorkplaceLevels(manualCount, d, new int[] { 0, 0, 0, 0 }); // Check and adjust for any rounding errors, assigning 'leftover' jobs to the lowest education level. a[0] += (manualCount - a[0] - a[1] - a[2] - a[3]); } currentSelection.workplaces = a; currentSelection.constructionCost = int.Parse(construction.text); // Construction cost should be at least 10 to maintain compatibility with other mods (Real Time, Real Construction). if (currentSelection.constructionCost < 10) { currentSelection.constructionCost = 10; // If we've overridden the value (set it to 10), write that back to the construction cost text field so the user knows. construction.text = currentSelection.constructionCost.ToString(); } // UI categories from menu. switch (uiCategory.selectedIndex) { case 0: currentSelection.uiCategory = "reslow"; break; case 1: currentSelection.uiCategory = "reshigh"; break; case 2: currentSelection.uiCategory = "comlow"; break; case 3: currentSelection.uiCategory = "comhigh"; break; case 4: currentSelection.uiCategory = "office"; break; case 5: currentSelection.uiCategory = "industrial"; break; case 6: currentSelection.uiCategory = "farming"; break; case 7: currentSelection.uiCategory = "forest"; break; case 8: currentSelection.uiCategory = "oil"; break; case 9: currentSelection.uiCategory = "ore"; break; case 10: currentSelection.uiCategory = "leisure"; break; case 11: currentSelection.uiCategory = "tourist"; break; case 12: currentSelection.uiCategory = "organic"; break; case 13: currentSelection.uiCategory = "hightech"; break; case 14: currentSelection.uiCategory = "selfsufficient"; break; default: currentSelection.uiCategory = "none"; break; } // Remaining items. currentSelection.ricoEnabled = ricoEnabled.isChecked; currentSelection.growable = growable.isChecked; currentSelection.RealityIgnored = !realityIgnored.isChecked; currentSelection.pollutionEnabled = pollutionEnabled.isChecked; }
public void CalculateLevels(Randomizer r, int width, int length, out int level0, out int level1, out int level2, out int level3) { ItemClass itemClass = this.m_info.m_class; ItemClass.SubService subService = itemClass.m_subService; int[] workplaceDistribution = { 100, 0, 0, 0, 0 }; if (m_ricoData.workplaceDistribution != null) { workplaceDistribution = m_ricoData.workplaceDistribution; } else { switch (subService) { case ItemClass.SubService.CommercialLow: if (itemClass.m_level == ItemClass.Level.Level1) { workplaceDistribution = new int[] { 100, 100, 0, 0, 0 } } ; else if (itemClass.m_level == ItemClass.Level.Level2) { workplaceDistribution = new int[] { 100, 20, 60, 20, 0 } } ; else { workplaceDistribution = new int[] { 100, 5, 15, 30, 50 } }; break; case ItemClass.SubService.CommercialHigh: if (itemClass.m_level == ItemClass.Level.Level1) { workplaceDistribution = new int[] { 100, 0, 40, 50, 10 } } ; else if (itemClass.m_level == ItemClass.Level.Level2) { workplaceDistribution = new int[] { 100, 0, 20, 50, 30 } } ; else { workplaceDistribution = new int[] { 100, 0, 0, 40, 60 } }; break; case ItemClass.SubService.CommercialTourist: workplaceDistribution = new int[] { 100, 20, 20, 30, 30 }; break; case ItemClass.SubService.CommercialLeisure: workplaceDistribution = new int[] { 100, 30, 30, 20, 20 }; break; } } WorkplaceAIHelper.distributeWorkplaceLevels(r, workplaceDistribution, m_workplaceCount, out level0, out level1, out level2, out level3); }
public void SaveRICO() { //Reads current settings from UI elements, and saves them to the XMLData. if (service.selectedIndex == 0) { currentSelection.service = "none"; } else if (service.selectedIndex == 1) { currentSelection.service = "residential"; if (subService.selectedIndex == 0) { currentSelection.subService = "high"; } else if (subService.selectedIndex == 1) { currentSelection.subService = "low"; } // else if (subService.selectedIndex == 2) currentSelection.subService = "high eco"; //else if (subService.selectedIndex == 3) currentSelection.subService = "low eco"; } else if (service.selectedIndex == 2) { currentSelection.service = "industrial"; if (subService.selectedIndex == 0) { currentSelection.subService = "generic"; } else if (subService.selectedIndex == 1) { currentSelection.subService = "forest"; } else if (subService.selectedIndex == 2) { currentSelection.subService = "oil"; } else if (subService.selectedIndex == 3) { currentSelection.subService = "ore"; } else if (subService.selectedIndex == 4) { currentSelection.subService = "farming"; } } else if (service.selectedIndex == 3) { currentSelection.service = "office"; if (subService.selectedIndex == 0) { currentSelection.subService = "none"; } //else if (subService.selectedIndex == 1) currentSelection.subService = "high tech"; } else if (service.selectedIndex == 4) { currentSelection.service = "commercial"; if (subService.selectedIndex == 0) { currentSelection.subService = "high"; } else if (subService.selectedIndex == 1) { currentSelection.subService = "low"; } else if (subService.selectedIndex == 2) { currentSelection.subService = "tourist"; } else if (subService.selectedIndex == 3) { currentSelection.subService = "leisure"; } //else if (subService.selectedIndex == 4) currentSelection.subService = "eco"; } else if (service.selectedIndex == 5) { currentSelection.service = "extractor"; if (subService.selectedIndex == 0) { currentSelection.subService = "forest"; } else if (subService.selectedIndex == 1) { currentSelection.subService = "oil"; } else if (subService.selectedIndex == 2) { currentSelection.subService = "ore"; } else if (subService.selectedIndex == 3) { currentSelection.subService = "farming"; } } else if (service.selectedIndex == 6) { currentSelection.service = "dummy"; currentSelection.subService = "none"; } var d = Util.WorkplaceDistributionOf(currentSelection.service, currentSelection.subService, "Level" + currentSelection.level); var a = WorkplaceAIHelper.distributeWorkplaceLevels(int.Parse(manual.text), d, new int[] { 0, 0, 0, 0 }); currentSelection.workplaces = a; currentSelection.constructionCost = int.Parse(construction.text); currentSelection.homeCount = int.Parse(manual.text); if (uiCategory.selectedIndex == 0) { currentSelection.uiCategory = "reslow"; } else if (uiCategory.selectedIndex == 1) { currentSelection.uiCategory = "reshigh"; } else if (uiCategory.selectedIndex == 2) { currentSelection.uiCategory = "comlow"; } else if (uiCategory.selectedIndex == 3) { currentSelection.uiCategory = "comhigh"; } else if (uiCategory.selectedIndex == 4) { currentSelection.uiCategory = "office"; } else if (uiCategory.selectedIndex == 5) { currentSelection.uiCategory = "industrial"; } else if (uiCategory.selectedIndex == 6) { currentSelection.uiCategory = "farming"; } else if (uiCategory.selectedIndex == 7) { currentSelection.uiCategory = "oil"; } else if (uiCategory.selectedIndex == 8) { currentSelection.uiCategory = "forest"; } else if (uiCategory.selectedIndex == 9) { currentSelection.uiCategory = "ore"; } else if (uiCategory.selectedIndex == 10) { currentSelection.uiCategory = "tourist"; } else if (uiCategory.selectedIndex == 11) { currentSelection.uiCategory = "leisure"; } else if (uiCategory.selectedIndex == 12) { currentSelection.uiCategory = "none"; } currentSelection.level = level.selectedIndex + 1; currentSelection.ricoEnabled = ricoEnabled.isChecked; currentSelection.popbalanceEnabled = !popBalanceEnabled.isChecked; }