/// <summary>
        /// Applied after OnPrefabInit runs.
        /// </summary>
        internal static void Postfix()
        {
            AsyncBrainGroupUpdater.CreateInstance();
#if DEBUG
            PUtil.LogDebug("Created AsyncBrainGroupUpdater");
#endif
        }
        /// <summary>
        /// Updates a brain group.
        /// </summary>
        /// <param name="inst">The updater for asynchronous brains like Duplicants.</param>
        /// <param name="asyncProbe">Whether to run path probes asynchronously.</param>
        /// <param name="brainGroup">The brain group to update.</param>
        private static void UpdateBrainGroup(AsyncBrainGroupUpdater inst, bool asyncProbe,
                                             BrainScheduler.BrainGroup brainGroup)
        {
            var brains = brainGroup.brains;

            if (asyncProbe)
            {
                brainGroup.AsyncPathProbe();
            }
            int n = brains.Count;

            if (n > 0)
            {
                int index = brainGroup.nextUpdateBrain % n;
                for (int i = brainGroup.InitialProbeCount(); i > 0; i--)
                {
                    var brain = brains[index];
                    if (brain.IsRunning())
                    {
                        // Add minion and rover brains to the brain scheduler
                        if (brain is MinionBrain mb)
                        {
                            inst.AddBrain(mb);
                        }
                        else if (brain is CreatureBrain cb && cb.species == GameTags.Robots.
                                 Models.ScoutRover)
                        {
                            inst.AddBrain(cb);
                        }
                        else
                        {
                            brain.UpdateBrain();
                        }
                    }
                    index = (index + 1) % n;
                }
                brainGroup.nextUpdateBrain = index;
            }
Exemple #3
0
 /// <summary>
 /// Destroys and cleans up the singleton instance.
 /// </summary>
 internal static void DestroyInstance()
 {
     Instance?.Dispose();
     Instance = null;
 }
Exemple #4
0
 internal UpdateOffsetTablesWork(AsyncBrainGroupUpdater updater)
 {
     byId         = updater.byId;
     this.updater = updater;
 }
Exemple #5
0
 /// <summary>
 /// Creates the singleton instance.
 /// </summary>
 internal static void CreateInstance()
 {
     Instance?.Dispose();
     Instance = new AsyncBrainGroupUpdater();
 }
Exemple #6
0
 internal FinishFetchesWork(AsyncBrainGroupUpdater updater)
 {
     this.updater = updater;
 }
Exemple #7
0
 internal CompilePickupsWork(AsyncBrainGroupUpdater updater)
 {
     fetches      = new List <Fetch>(64);
     pickups      = new List <Pickup>(128);
     this.updater = updater;
 }