/// <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; }
internal static void Postfix(float currentFrameTime, float frameTimeDelta, BrainScheduler.BrainGroup __instance) { DebugMetrics.LogBrainBalance(__instance.GetType().Name, frameTimeDelta, currentFrameTime, __instance.probeCount, __instance.probeSize); }