public override void CalculateWorkplaceCount(ItemClass.Level level, ColossalFramework.Math.Randomizer r, int width, int length, out int level0, out int level1, out int level2, out int level3) { // See IndustrialAI.cs if (workplaceCount != null) { WorkplaceAIHelper.SetWorkplaceLevels(out level0, out level1, out level2, out level3, workplaceCount); } else { WorkplaceAIHelper.CalculateWorkplaceCount(level, m_ricoData, this, r, width, length, out level0, out level1, out level2, out level3); workplaceCount = new int[] { level0, level1, level2, level3 }; } }
public override void CalculateWorkplaceCount(Randomizer r, int width, int length, out int level0, out int level1, out int level2, out int level3) { // For some reason CalculateWorkplaceCount gets called every two seconds or so for every rico building currently plopped. // It's the bottleneck of the mod. // So we cache the calculation results, which might save a few cpu cycles. if (workplaceCount != null) { WorkplaceAIHelper.SetWorkplaceLevels(out level0, out level1, out level2, out level3, workplaceCount); } else { WorkplaceAIHelper.CalculateWorkplaceCount(m_ricoData, this, r, width, length, out level0, out level1, out level2, out level3); workplaceCount = new int[] { level0, level1, level2, level3 }; } }
/// <summary> /// Calculates the workplaces for this building according to RICO settings. /// </summary> /// <param name="level">Building level</param> /// <param name="r">Randomizer</param> /// <param name="width">Building plot width (in cells)</param> /// <param name="length">Building plot length (in cells)</param> /// <param name="level0">The number of uneducated jobs</param> /// <param name="level1">The number of educated jobs</param> /// <param name="level2">The number of well-educated jobs</param> /// <param name="level3">The number of highly-educated jobs</param> public override void CalculateWorkplaceCount(ItemClass.Level level, Randomizer r, int width, int length, out int level0, out int level1, out int level2, out int level3) { // CalculateWorkplaceCount is called by the game every couple of seconds. Why? Who knows? // This makes it a potential performance bottleneck; thus, we cache results to save some CPU cycles. // Results are cached in workplaceCount. // Check to see if there's a cached value, and if so, use it. if (workplaceCount != null) { WorkplaceAIHelper.SetWorkplaceLevels(out level0, out level1, out level2, out level3, workplaceCount); } else { // If nothing is cached, then perform initial calculation. WorkplaceAIHelper.CalculateWorkplaceCount(level, m_ricoData, this, r, width, length, out level0, out level1, out level2, out level3); // Cache result. workplaceCount = new int[] { level0, level1, level2, level3 }; } }
/// <summary> /// Calculates the workplaces for this building according to RICO settings. /// </summary> /// <param name="level">Building level</param> /// <param name="r">Randomizer</param> /// <param name="width">Building plot width (in cells)</param> /// <param name="length">Building plot length (in cells)</param> /// <param name="level0">The number of uneducated jobs</param> /// <param name="level1">The number of educated jobs</param> /// <param name="level2">The number of well-educated jobs</param> /// <param name="level3">The number of highly-educated jobs</param> public override void CalculateWorkplaceCount(ItemClass.Level level, Randomizer r, int width, int length, out int level0, out int level1, out int level2, out int level3) => WorkplaceAIHelper.CalculateWorkplaceCount(level, m_ricoData, this, r, width, length, out level0, out level1, out level2, out level3);