public static void CalculateWorkplaceCount(PloppableRICODefinition.Building ricoData, IWorkplaceLevelCalculator ai, Randomizer r, int width, int length, out int level0, out int level1, out int level2, out int level3)
        {
            SetWorkplaceLevels(out level0, out level1, out level2, out level3, 0, 0, 0, 0);
            PloppableRICODefinition.Building rc = ricoData;

            if (rc == null)
            {
                WorkplaceAIHelper.SetWorkplaceLevels(out level0, out level1, out level2, out level3, 10, 20, 30, 40);
            }
            else
            // reality mod is running and the xml file says ignore-reality="false"
            if (rc.useReality)
            {
                ai.CalculateBaseLevels(r, width, length, out level0, out level1, out level2, out level3);
            }
            else
            {
                if (rc.workplaceCount > 0)
                {
                    ai.CalculateLevels(r, width, length, out level0, out level1, out level2, out level3);
                }
                if (rc.workplaceDetailsEnabled)
                {
                    // this adds to the results of the usual workplaces calculation
                    WorkplaceAIHelper.SetWorkplaceLevels(out level0, out level1, out level2, out level3, rc.uneducated + level0, rc.educated + level1, rc.wellEducated + level2, rc.highEducated + level3);
                }
                // Comment that out and uncomment the following to ignore "workplaces"
                // and just use the details setting
                // WorkplaceAIHelper.SetWorkplaceLevels(out level0, out level1, out level2, out level3, m_ricoData);
            }
        }
Example #2
0
 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 };
     }
 }
Example #3
0
 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 };
     }
 }
Example #4
0
        /// <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 };
            }
        }