예제 #1
0
        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);
        }
예제 #3
0
        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;
            }
        }