public static float ActualRateMultiplier(this ITickable tickable, TimeSpeed speed) { if (Multiplayer.WorldComp.asyncTime) { return(tickable.TickRateMultiplier(speed)); } return(Find.Maps.Select(m => (ITickable)m.AsyncTime()).Concat(Multiplayer.WorldComp).Select(t => t.TickRateMultiplier(speed)).Min()); }
static bool Prefix(ref float __result, ITickable tickable, TimeSpeed speed) { if (MultiplayerWorldComp.asyncTime) { __result = tickable.TickRateMultiplier(speed) / RefcellRespeedConfig.currentTimeMultiplier; return(false); } __result = Find.Maps.Select(m => (ITickable)m.AsyncTime()).Concat(Multiplayer.Client.Multiplayer.WorldComp).Select(t => t.TickRateMultiplier(speed)).Min() / RefcellRespeedConfig.currentTimeMultiplier; return(false); }
static void DrawButtons() { if (Multiplayer.Client == null) { return; } ColonistBar bar = Find.ColonistBar; if (bar.Entries.Count == 0) { return; } int curGroup = -1; foreach (var entry in bar.Entries) { if (curGroup == entry.group) { continue; } ITickable entryTickable = entry.map?.AsyncTime(); if (entryTickable == null) { entryTickable = Multiplayer.WorldComp; } Rect groupBar = bar.drawer.GroupFrameRect(entry.group); float drawXPos = groupBar.x; Color bgColor = (entryTickable.ActualRateMultiplier(TimeSpeed.Normal) == 0f) ? pauseBgColor : normalBgColor; if (Multiplayer.GameComp.asyncTime) { Rect button = new Rect(drawXPos, groupBar.yMax, btnWidth, btnHeight); if (entry.map != null) { TimeControl.TimeControlButton(button, bgColor, entryTickable); drawXPos += TimeControls.TimeButSize.x; } else if (entryTickable.ActualRateMultiplier(TimeSpeed.Normal) == 0f) { TimeControl.TimeIndicateBlockingPause(button, bgColor); drawXPos += TimeControls.TimeButSize.x; } } else if (entryTickable.TickRateMultiplier(TimeSpeed.Normal) == 0f) { Rect button = new Rect(drawXPos, groupBar.yMax, btnWidth, btnHeight); TimeControl.TimeIndicateBlockingPause(button, bgColor); drawXPos += TimeControls.TimeButSize.x; } List <FloatMenuOption> options = GetBlockingWindowOptions(entry, entryTickable); if (!options.NullOrEmpty()) { DrawWindowShortcuts(new Rect(drawXPos, groupBar.yMax, 70, btnHeight), bgColor, options); } curGroup = entry.group; } }