private static void PrepareWorkLists() { if (Interlocked.Increment(ref workingOnMapPreTick) == 0) { List <Map> maps = Find.Maps; for (int i = 0; i < maps.Count; i++) { maps[i].MapPreTick(); } prepEventWaitStarts[Interlocked.Increment(ref currentPrepsDone)].Set(); //WindManager } if (Interlocked.Increment(ref workingOnTickListNormal) == 0) { TickManager_Patch.tickListNormal(currentInstance).Tick(); prepEventWaitStarts[Interlocked.Increment(ref currentPrepsDone)].Set(); //TickNormal } if (Interlocked.Increment(ref workingOnTickListRare) == 0) { TickManager_Patch.tickListRare(currentInstance).Tick(); prepEventWaitStarts[Interlocked.Increment(ref currentPrepsDone)].Set(); //TickRare } if (Interlocked.Increment(ref workingOnTickListLong) == 0) { TickManager_Patch.tickListLong(currentInstance).Tick(); prepEventWaitStarts[Interlocked.Increment(ref currentPrepsDone)].Set(); //TickLong } if (Interlocked.Increment(ref workingOnWorldTick) == 0) { try { World world = Find.World; world.worldPawns.WorldPawnsTick(); world.factionManager.FactionManagerTick(); world.worldObjects.WorldObjectsHolderTick(); world.debugDrawer.WorldDebugDrawerTick(); world.pathGrid.WorldPathGridTick(); WorldComponentUtility.WorldComponentTick(world); } catch (Exception ex3) { Log.Error(ex3.ToString()); } prepEventWaitStarts[Interlocked.Increment(ref currentPrepsDone)].Set(); //WorldPawns prepEventWaitStarts[Interlocked.Increment(ref currentPrepsDone)].Set(); //Factions prepEventWaitStarts[Interlocked.Increment(ref currentPrepsDone)].Set(); //WorldObjects prepEventWaitStarts[Interlocked.Increment(ref currentPrepsDone)].Set(); //WorldComponents } if (Interlocked.Increment(ref workingOnMapPostTick) == 0) { List <Map> maps = Find.Maps; for (int j = 0; j < maps.Count; j++) { maps[j].MapPostTick(); } prepEventWaitStarts[Interlocked.Increment(ref currentPrepsDone)].Set(); //WildPlantSpawner prepEventWaitStarts[Interlocked.Increment(ref currentPrepsDone)].Set(); //SteadyEnvironment prepEventWaitStarts[Interlocked.Increment(ref currentPrepsDone)].Set(); //PassingShipManagerTick } }
public static bool AlertsReadoutUpdate(AlertsReadout __instance) { if (runonce && RimThreadedMod.Settings.showModConflictsAlert) { RimThreadedMod.getPotentialModConflicts_2(); //Not sure where to put this, making it run on the main menu without black screen will have been perfect. runonce = false; } if (Mathf.Max(Find.TickManager.TicksGame, Find.TutorialState.endTick) < 600) { return(false); } if (Find.Storyteller.def != null && Find.Storyteller.def.disableAlerts) { activeAlerts(__instance).Clear(); return(false); } if (TickManager_Patch.curTimeSpeed(Find.TickManager) == TimeSpeed.Ultrafast && RimThreadedMod.Settings.disablesomealerts) { //this will disable alert checks on ultrafast speed for an added speed boost return(false); } curAlertIndex(__instance)++; if (curAlertIndex(__instance) >= 24) { curAlertIndex(__instance) = 0; } for (int i = curAlertIndex(__instance); i < AllAlerts(__instance).Count; i += 24) { //CheckAddOrRemoveAlert2(__instance, AllAlerts(__instance)[i]); actionCheckAddOrRemoveAlert(__instance, AllAlerts(__instance)[i], false); } if (Time.frameCount % 20 == 0) { List <Quest> questsListForReading = Find.QuestManager.QuestsListForReading; for (int j = 0; j < questsListForReading.Count; j++) { List <QuestPart> partsListForReading = questsListForReading[j].PartsListForReading; for (int k = 0; k < partsListForReading.Count; k++) { QuestPartActivable questPartActivable = partsListForReading[k] as QuestPartActivable; if (questPartActivable == null) { continue; } Alert cachedAlert = questPartActivable.CachedAlert; if (cachedAlert != null) { bool flag = questsListForReading[j].State != QuestState.Ongoing || questPartActivable.State != QuestPartState.Enabled; bool alertDirty = questPartActivable.AlertDirty; //CheckAddOrRemoveAlert(__instance, cachedAlert, flag || alertDirty); actionCheckAddOrRemoveAlert(__instance, cachedAlert, flag || alertDirty); if (alertDirty) { questPartActivable.ClearCachedAlert(); } } } } } for (int num = activeAlerts(__instance).Count - 1; num >= 0; num--) { Alert alert = activeAlerts(__instance)[num]; try { activeAlerts(__instance)[num].AlertActiveUpdate(); } catch (Exception ex) { Log.ErrorOnce("Exception updating alert " + alert.ToString() + ": " + ex.ToString(), 743575); activeAlerts(__instance).RemoveAt(num); } } if (mouseoverAlertIndex(__instance) >= 0 && mouseoverAlertIndex(__instance) < activeAlerts(__instance).Count) { IEnumerable <GlobalTargetInfo> allCulprits = activeAlerts(__instance)[mouseoverAlertIndex(__instance)].GetReport().AllCulprits; if (allCulprits != null) { foreach (GlobalTargetInfo item in allCulprits) { TargetHighlighter.Highlight(item); } } } mouseoverAlertIndex(__instance) = -1; return(false); }