/// <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; }
/// <summary> /// Destroys and cleans up the singleton instance. /// </summary> internal static void DestroyInstance() { Instance?.Dispose(); Instance = null; }
internal UpdateOffsetTablesWork(AsyncBrainGroupUpdater updater) { byId = updater.byId; this.updater = updater; }
/// <summary> /// Creates the singleton instance. /// </summary> internal static void CreateInstance() { Instance?.Dispose(); Instance = new AsyncBrainGroupUpdater(); }
internal FinishFetchesWork(AsyncBrainGroupUpdater updater) { this.updater = updater; }
internal CompilePickupsWork(AsyncBrainGroupUpdater updater) { fetches = new List <Fetch>(64); pickups = new List <Pickup>(128); this.updater = updater; }