static void Prefix(MainButtonWorker __instance, Rect rect, ref Rect?__state)
        {
            if (Multiplayer.Client == null)
            {
                return;
            }
            if (__instance.def != MainButtonDefOf.World)
            {
                return;
            }
            if (__instance.Disabled)
            {
                return;
            }
            if (Find.CurrentMap == null)
            {
                return;
            }
            if (!Multiplayer.WorldComp.asyncTime)
            {
                return;
            }

            Rect button = new Rect(rect.xMax - TimeControls.TimeButSize.x - 5f, rect.y + (rect.height - TimeControls.TimeButSize.y) / 2f, TimeControls.TimeButSize.x, TimeControls.TimeButSize.y);

            __state = button;

            if (Event.current.type == EventType.MouseDown || Event.current.type == EventType.MouseUp)
            {
                TimeControl.TimeControlButton(__state.Value, Multiplayer.WorldComp, 0.5f);
            }
        }
        static void Postfix(MainButtonWorker __instance, Rect?__state)
        {
            if (__state == null)
            {
                return;
            }

            if (Event.current.type == EventType.Repaint)
            {
                TimeControl.TimeControlButton(__state.Value, Multiplayer.WorldComp, 0.5f);
            }
        }
        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 (entry.map == null || curGroup == entry.group)
                {
                    continue;
                }

                float alpha = 1.0f;
                if (entry.map != Find.CurrentMap || WorldRendererUtility.WorldRenderedNow)
                {
                    alpha = 0.75f;
                }

                Rect rect      = bar.drawer.GroupFrameRect(entry.group);
                Rect button    = new Rect(rect.x - TimeControls.TimeButSize.x / 2f, rect.yMax - TimeControls.TimeButSize.y / 2f, TimeControls.TimeButSize.x, TimeControls.TimeButSize.y);
                var  asyncTime = entry.map.AsyncTime();

                if (Multiplayer.WorldComp.asyncTime)
                {
                    TimeControl.TimeControlButton(button, asyncTime, alpha);
                }
                else if (asyncTime.TickRateMultiplier(TimeSpeed.Normal) == 0f) // Blocking pause
                {
                    Widgets.DrawRectFast(button, new Color(1f, 0.5f, 0.5f, 0.4f * alpha));
                    Widgets.ButtonImage(button, TexButton.SpeedButtonTextures[0]);
                }

                curGroup = entry.group;
            }
        }
        static void Postfix(ITickable __state, Rect timerRect)
        {
            if (__state == null)
            {
                return;
            }

            Rect  rect        = new Rect(timerRect.x, timerRect.y, TimeControls.TimeButSize.x, TimeControls.TimeButSize.y);
            float normalSpeed = __state.ActualRateMultiplier(TimeSpeed.Normal);
            float fastSpeed   = __state.ActualRateMultiplier(TimeSpeed.Fast);

            if (normalSpeed == 0f) // Completely paused
            {
                Widgets.DrawLineHorizontal(rect.x + rect.width, rect.y + rect.height / 2f, rect.width * 3f);
            }
            else if (normalSpeed == fastSpeed)  // Slowed down
            {
                Widgets.DrawLineHorizontal(rect.x + rect.width * 2f, rect.y + rect.height / 2f, rect.width * 2f);
            }

            TimeSpeed newSpeed = Find.TickManager.CurTimeSpeed;

            Find.TickManager.CurTimeSpeed = savedSpeed;

            if (prevSpeed == newSpeed)
            {
                return;
            }

            if (Multiplayer.IsReplay)
            {
                TickPatch.replayTimeSpeed = newSpeed;
            }

            // Prevent multiple players changing the speed too quickly
            if (keyPressed && Time.realtimeSinceStartup - MultiplayerWorldComp.lastSpeedChange < 0.4f)
            {
                return;
            }

            TimeControl.SendTimeChange(__state, newSpeed);
        }
Esempio n. 5
0
        static void Postfix(ITickable __state)
        {
            if (__state == null)
            {
                return;
            }

            TimeSpeed newSpeed = Find.TickManager.CurTimeSpeed;

            Find.TickManager.CurTimeSpeed = savedSpeed;

            if (prevSpeed == newSpeed)
            {
                return;
            }

            if (Multiplayer.IsReplay)
            {
                TickPatch.replayTimeSpeed = newSpeed;
            }

            TimeControl.SendTimeChange(__state, newSpeed);
        }
Esempio n. 6
0
        static void DrawButtons()
        {
            if (Multiplayer.Client == null)
            {
                return;
            }

            ColonistBar bar = Find.ColonistBar;

            if (bar.Entries.Count == 0 || bar.Entries.Last().group == 0)
            {
                return;
            }

            int curGroup = -1;

            foreach (var entry in bar.Entries)
            {
                if (entry.map == null || curGroup == entry.group)
                {
                    continue;
                }

                float alpha = 1.0f;
                if (entry.map != Find.CurrentMap || WorldRendererUtility.WorldRenderedNow)
                {
                    alpha = 0.75f;
                }

                Rect rect = bar.drawer.GroupFrameRect(entry.group);

                Rect button = new Rect(rect.x - TimeControls.TimeButSize.x / 2f, rect.yMax - TimeControls.TimeButSize.y / 2f, TimeControls.TimeButSize.x, TimeControls.TimeButSize.y);
                TimeControl.TimeControlButton(button, entry.map.AsyncTime(), alpha);

                curGroup = entry.group;
            }
        }