示例#1
0
        public override void DrawOuter()
        {
            if (!IsVisible())
            {
                return;
            }

            var rb = RenderBounds;

            var scrollbarHeight = rb.Height - 2 * ScrollbarWidth;

            var thumbHeight = ContentHeight == 0 ? 0 : Math.Max(MinimumThumbSize, (int)(scrollbarHeight * Math.Min(rb.Height * 1f / ContentHeight, 1f)));
            var thumbOrigin = rb.Y + ScrollbarWidth + (int)((scrollbarHeight - thumbHeight) * (-1f * currentListOffset / (ContentHeight - rb.Height)));

            if (thumbHeight == scrollbarHeight)
            {
                thumbHeight = 0;
            }

            backgroundRect = new Rectangle(rb.X, rb.Y, rb.Width - ScrollbarWidth + 1, rb.Height);
            upButtonRect   = new Rectangle(rb.Right - ScrollbarWidth, rb.Y, ScrollbarWidth, ScrollbarWidth);
            downButtonRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Bottom - ScrollbarWidth, ScrollbarWidth, ScrollbarWidth);
            scrollbarRect  = new Rectangle(rb.Right - ScrollbarWidth, rb.Y + ScrollbarWidth - 1, ScrollbarWidth, scrollbarHeight + 2);
            thumbRect      = new Rectangle(rb.Right - ScrollbarWidth, thumbOrigin, ScrollbarWidth, thumbHeight);

            WidgetUtils.DrawPanel(Background, backgroundRect);
            WidgetUtils.DrawPanel(Background, scrollbarRect);
            ButtonWidget.DrawBackground(Button, upButtonRect, upDisabled, upPressed, false, false);
            ButtonWidget.DrawBackground(Button, downButtonRect, downDisabled, downPressed, false, false);

            if (thumbHeight > 0)
            {
                ButtonWidget.DrawBackground(Button, thumbRect, false, false, false);
            }

            var upOffset   = !upPressed || upDisabled ? 4 : 4 + ButtonDepth;
            var downOffset = !downPressed || downDisabled ? 4 : 4 + ButtonDepth;

            WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", upPressed || upDisabled ? "up_pressed" : "up_arrow"),
                                 new Vector2(upButtonRect.Left + upOffset, upButtonRect.Top + upOffset));
            WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", downPressed || downDisabled ? "down_pressed" : "down_arrow"),
                                 new Vector2(downButtonRect.Left + downOffset, downButtonRect.Top + downOffset));

            var drawBounds = backgroundRect.InflateBy(-BorderWidth, -BorderWidth, -BorderWidth, -BorderWidth);

            WarGame.Renderer.EnableScissor(drawBounds);

            drawBounds.Offset((-ChildOrigin).ToPoint());
            foreach (var child in Children)
            {
                if (child.Bounds.IntersectsWith(drawBounds))
                {
                    child.DrawOuter();
                }
            }

            WarGame.Renderer.DisableScissor();
        }
示例#2
0
        public static void DrawBackground(string baseName, Rectangle rect, bool disabled, bool pressed, bool hover = false, bool highlighted = false)
        {
            var variant = highlighted ? "-highlighted" : "";
            var state   = disabled ? "-disabled" :
                          pressed ? "-pressed" :
                          hover ? "-hover" : "";

            WidgetUtils.DrawPanel(baseName + variant + state, rect);
        }
示例#3
0
        public override void Draw()
        {
            var state = IsSelected() ? BaseName + "-selected" :
                        false ? BaseName + "-hover" :
                        null;

            if (state != null)
            {
                WidgetUtils.DrawPanel(state, RenderBounds);
            }
        }
示例#4
0
        public override void Draw()
        {
            var iconSize   = new float2(64, 48);
            var iconOffset = 0.5f * iconSize;

            overlayFont = Game.Renderer.Fonts["TinyBold"];
            holdOffset  = iconOffset - overlayFont.Measure(HoldText) / 2;
            readyOffset = iconOffset - overlayFont.Measure(ReadyText) / 2;
            timeOffset  = iconOffset - overlayFont.Measure(WidgetUtils.FormatTime(0)) / 2;

            // Background
            foreach (var rect in icons.Keys)
            {
                WidgetUtils.DrawPanel("panel-black", rect.InflateBy(1, 1, 1, 1));
            }

            // Icons
            foreach (var p in icons.Values)
            {
                WidgetUtils.DrawSHPCentered(p.Sprite, p.Pos + iconOffset, worldRenderer);

                // Charge progress
                clock.PlayFetchIndex("idle",
                                     () => (p.Power.TotalTime - p.Power.RemainingTime)
                                     * (clock.CurrentSequence.Length - 1) / p.Power.TotalTime);
                clock.Tick();
                WidgetUtils.DrawSHPCentered(clock.Image, p.Pos + iconOffset, worldRenderer);
            }

            // Overlay
            foreach (var p in icons.Values)
            {
                if (p.Power.Ready)
                {
                    overlayFont.DrawTextWithContrast(ReadyText,
                                                     p.Pos + readyOffset,
                                                     Color.White, Color.Black, 1);
                }
                else if (!p.Power.Active)
                {
                    overlayFont.DrawTextWithContrast(HoldText,
                                                     p.Pos + holdOffset,
                                                     Color.White, Color.Black, 1);
                }
                else
                {
                    overlayFont.DrawTextWithContrast(WidgetUtils.FormatTime(p.Power.RemainingTime),
                                                     p.Pos + timeOffset,
                                                     Color.White, Color.Black, 1);
                }
            }
        }
示例#5
0
        public override void Draw()
        {
            // Background
            foreach (var rect in Icons.Keys)
            {
                WidgetUtils.DrawPanel("panel-black", rect.InflateBy(1, 1, 1, 1));
            }

            // Icons
            foreach (var p in Icons.Values)
            {
                WidgetUtils.DrawSHP(p.Sprite, p.Pos, worldRenderer);

                // Charge progress
                clock.PlayFetchIndex("idle",
                                     () => (p.Power.TotalTime - p.Power.RemainingTime)
                                     * (clock.CurrentSequence.Length - 1) / p.Power.TotalTime);
                clock.Tick();
                WidgetUtils.DrawSHP(clock.Image, p.Pos, worldRenderer);
            }

            // Overlay
            foreach (var p in Icons.Values)
            {
                if (p.Power.Ready)
                {
                    overlayFont.DrawTextWithContrast("Ready",
                                                     p.Pos + readyOffset,
                                                     Color.White, Color.Black, 1);
                }
                else if (!p.Power.Active)
                {
                    overlayFont.DrawTextWithContrast("On Hold",
                                                     p.Pos + holdOffset,
                                                     Color.White, Color.Black, 1);
                }
                else
                {
                    overlayFont.DrawTextWithContrast(WidgetUtils.FormatTime(p.Power.RemainingTime),
                                                     p.Pos + timeOffset,
                                                     Color.White, Color.Black, 1);
                }
            }
        }
        public override void Draw()
        {
            var rb = RenderBounds;

            leftButtonRect  = new Rectangle(rb.X, rb.Y, ArrowWidth, rb.Height);
            rightButtonRect = new Rectangle(rb.Right - ArrowWidth, rb.Y, ArrowWidth, rb.Height);

            var leftDisabled  = ListOffset >= 0;
            var leftHover     = Ui.MouseOverWidget == this && leftButtonRect.Contains(Viewport.LastMousePos);
            var rightDisabled = ListOffset <= Bounds.Width - rightButtonRect.Width - leftButtonRect.Width - ContentWidth;
            var rightHover    = Ui.MouseOverWidget == this && rightButtonRect.Contains(Viewport.LastMousePos);

            WidgetUtils.DrawPanel("panel-black", rb);
            ButtonWidget.DrawBackground("button", leftButtonRect, leftDisabled, leftPressed, leftHover, false);
            ButtonWidget.DrawBackground("button", rightButtonRect, rightDisabled, rightPressed, rightHover, false);

            WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", leftPressed || leftDisabled ? "left_pressed" : "left_arrow"),
                                 new float2(leftButtonRect.Left + 2, leftButtonRect.Top + 2));
            WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", rightPressed || rightDisabled ? "right_pressed" : "right_arrow"),
                                 new float2(rightButtonRect.Left + 2, rightButtonRect.Top + 2));

            // Draw tab buttons
            Game.Renderer.EnableScissor(leftButtonRect.Right, rb.Y + 1, rightButtonRect.Left - leftButtonRect.Right - 1, rb.Height);
            var        origin = new int2(leftButtonRect.Right - 1 + (int)ListOffset, leftButtonRect.Y);
            SpriteFont font   = Game.Renderer.Fonts["TinyBold"];

            ContentWidth = 0;

            foreach (var tab in Groups[queueGroup].Tabs)
            {
                var rect     = new Rectangle(origin.X + ContentWidth, origin.Y, TabWidth, rb.Height);
                var hover    = !leftHover && !rightHover && Ui.MouseOverWidget == this && rect.Contains(Viewport.LastMousePos);
                var baseName = tab.Queue == CurrentQueue ? "button-toggled" : "button";
                ButtonWidget.DrawBackground(baseName, rect, false, false, hover, false);
                ContentWidth += TabWidth - 1;

                int2 textSize = font.Measure(tab.Name);
                int2 position = new int2(rect.X + (rect.Width - textSize.X) / 2, rect.Y + (rect.Height - textSize.Y) / 2);
                font.DrawTextWithContrast(tab.Name, position, tab.Queue.CurrentDone ? Color.Gold : Color.White, Color.Black, 1);
            }

            Game.Renderer.DisableScissor();
        }
示例#7
0
        void DrawProductionTooltip(World world, string unit, Hotkey hotkey, int2 pos)
        {
            pos.Y += 15;

            var pl = world.LocalPlayer;
            var p  = pos.ToFloat2() - new float2(297, -3);

            var info         = world.Map.Rules.Actors[unit];
            var tooltip      = info.Traits.Get <TooltipInfo>();
            var buildable    = info.Traits.Get <BuildableInfo>();
            var cost         = info.Traits.Get <ValuedInfo>().Cost;
            var canBuildThis = CurrentQueue.CanBuild(info);

            var longDescSize = Game.Renderer.Fonts["Regular"].Measure(tooltip.Description.Replace("\\n", "\n")).Y;

            if (!canBuildThis)
            {
                longDescSize += 8;
            }

            WidgetUtils.DrawPanel("dialog4", new Rectangle(Game.Renderer.Resolution.Width - 300, pos.Y, 300, longDescSize + 65));

            Game.Renderer.Fonts["Bold"].DrawText(
                tooltip.Name + (hotkey.IsValid() ? " ({0})".F(hotkey.DisplayString()) : ""),
                p.ToInt2() + new int2(5, 5), Color.White);

            var resources = pl.PlayerActor.Trait <PlayerResources>();
            var power     = pl.PlayerActor.Trait <PowerManager>();

            DrawRightAligned("${0}".F(cost), pos + new int2(-5, 5),
                             (resources.DisplayCash + resources.DisplayResources >= cost ? Color.White : Color.Red));

            var lowpower = power.PowerState != PowerState.Normal;
            var time     = CurrentQueue.GetBuildTime(info.Name)
                           * ((lowpower) ? CurrentQueue.Info.LowPowerSlowdown : 1);

            DrawRightAligned(WidgetUtils.FormatTime(time), pos + new int2(-5, 35), lowpower ? Color.Red : Color.White);

            var pi = info.Traits.GetOrDefault <PowerInfo>();

            if (pi != null)
            {
                DrawRightAligned("{1}{0}".F(pi.Amount, pi.Amount > 0 ? "+" : ""), pos + new int2(-5, 20),
                                 ((power.PowerProvided - power.PowerDrained) >= -pi.Amount || pi.Amount > 0) ? Color.White : Color.Red);
            }

            p += new int2(5, 35);
            if (!canBuildThis)
            {
                var prereqs = buildable.Prerequisites.Select(s => Description(world.Map.Rules, s)).Where(s => !s.StartsWith("~"));
                if (prereqs.Any())
                {
                    Game.Renderer.Fonts["Regular"].DrawText(RequiresText.F(prereqs.JoinWith(", ")), p.ToInt2(), Color.White);

                    p += new int2(0, 8);
                }
            }

            p += new int2(0, 15);
            Game.Renderer.Fonts["Regular"].DrawText(tooltip.Description.Replace("\\n", "\n"),
                                                    p.ToInt2(), Color.White);
        }
示例#8
0
        public override void Draw()
        {
            overlayFont  = Game.Renderer.Fonts["TinyBold"];
            timeOffset   = new float2(32, 24) - overlayFont.Measure(WidgetUtils.FormatTime(0)) / 2;
            queuedOffset = new float2(4, 2);
            holdOffset   = new float2(32, 24) - overlayFont.Measure(HoldText) / 2;
            readyOffset  = new float2(32, 24) - overlayFont.Measure(ReadyText) / 2;

            if (CurrentQueue == null)
            {
                return;
            }

            var buildableItems = CurrentQueue.BuildableItems().OrderBy(a => a.Traits.Get <BuildableInfo>().BuildPaletteOrder);

            // Background
            foreach (var rect in icons.Keys)
            {
                WidgetUtils.DrawPanel("panel-black", rect.InflateBy(1, 1, 1, 1));
            }

            // Icons
            foreach (var icon in icons.Values)
            {
                WidgetUtils.DrawSHP(icon.Sprite, icon.Pos, worldRenderer);

                // Build progress
                if (icon.Queued.Count > 0)
                {
                    var first = icon.Queued[0];
                    clock.PlayFetchIndex("idle",
                                         () => (first.TotalTime - first.RemainingTime)
                                         * (clock.CurrentSequence.Length - 1) / first.TotalTime);
                    clock.Tick();
                    WidgetUtils.DrawSHP(clock.Image, icon.Pos, worldRenderer);
                }
                else if (!buildableItems.Any(a => a.Name == icon.Name))
                {
                    WidgetUtils.DrawSHP(cantBuild.Image, icon.Pos, worldRenderer);
                }
            }

            // Overlays
            foreach (var icon in icons.Values)
            {
                var total = icon.Queued.Count;
                if (total > 0)
                {
                    var first   = icon.Queued[0];
                    var waiting = first != CurrentQueue.CurrentItem() && !first.Done;
                    if (first.Done)
                    {
                        overlayFont.DrawTextWithContrast(ReadyText,
                                                         icon.Pos + readyOffset,
                                                         Color.White, Color.Black, 1);
                    }
                    else if (first.Paused)
                    {
                        overlayFont.DrawTextWithContrast(HoldText,
                                                         icon.Pos + holdOffset,
                                                         Color.White, Color.Black, 1);
                    }
                    else if (!waiting)
                    {
                        overlayFont.DrawTextWithContrast(WidgetUtils.FormatTime(first.RemainingTimeActual),
                                                         icon.Pos + timeOffset,
                                                         Color.White, Color.Black, 1);
                    }

                    if (total > 1 || waiting)
                    {
                        overlayFont.DrawTextWithContrast(total.ToString(),
                                                         icon.Pos + queuedOffset,
                                                         Color.White, Color.Black, 1);
                    }
                }
            }
        }
示例#9
0
        public override void Draw()
        {
            if (Viewport.TicksSinceLastMove < TooltipDelay || world == null)
            {
                return;
            }

            var cell = Game.viewport.ViewToWorld(Viewport.LastMousePos);

            if (!world.Map.IsInMap(cell))
            {
                return;
            }

            if (world.ShroudObscures(cell))
            {
                var utext = "Unexplored Terrain";
                var usz   = Game.Renderer.Fonts["Bold"].Measure(utext) + new int2(20, 24);

                WidgetUtils.DrawPanel("dialog4", Rectangle.FromLTRB(
                                          Viewport.LastMousePos.X + 20, Viewport.LastMousePos.Y + 20,
                                          Viewport.LastMousePos.X + usz.X + 20, Viewport.LastMousePos.Y + usz.Y + 20));

                Game.Renderer.Fonts["Bold"].DrawText(utext,
                                                     new float2(Viewport.LastMousePos.X + 30, Viewport.LastMousePos.Y + 30), Color.White);

                return;
            }

            var actor = world.FindUnitsAtMouse(Viewport.LastMousePos).FirstOrDefault();

            if (actor == null)
            {
                return;
            }

            var itt = actor.TraitsImplementing <IToolTip>().FirstOrDefault();

            if (itt == null)
            {
                return;
            }

            var owner      = itt.Owner();
            var nameText   = itt.Name();
            var ownerText  = !owner.NonCombatant ? owner.PlayerName : "";
            var stanceText = (world.LocalPlayer != null && owner != actor.World.LocalPlayer &&
                              !owner.NonCombatant) ? " ({0})".F(itt.Stance()) : "";

            var nameSize   = Game.Renderer.Fonts["Bold"].Measure(nameText);
            var ownerSize  = Game.Renderer.Fonts["Regular"].Measure(ownerText);
            var stanceSize = Game.Renderer.Fonts["Regular"].Measure(stanceText);
            var panelSize  = new int2(Math.Max(nameSize.X, ownerSize.X + stanceSize.X + 35) + 20, nameSize.Y + 24);

            if (ownerText != "")
            {
                panelSize.Y += ownerSize.Y + 2;
            }

            WidgetUtils.DrawPanel("dialog4", Rectangle.FromLTRB(
                                      Viewport.LastMousePos.X + 20, Viewport.LastMousePos.Y + 20,
                                      Viewport.LastMousePos.X + panelSize.X + 20, Viewport.LastMousePos.Y + panelSize.Y + 20));

            Game.Renderer.Fonts["Bold"].DrawText(nameText,
                                                 new float2(Viewport.LastMousePos.X + 30, Viewport.LastMousePos.Y + 30), Color.White);

            if (ownerText != "")
            {
                Game.Renderer.Fonts["Regular"].DrawText(ownerText,
                                                        new float2(Viewport.LastMousePos.X + 65, Viewport.LastMousePos.Y + 50), actor.Owner.Color.RGB);

                Game.Renderer.Fonts["Regular"].DrawText(stanceText,
                                                        new float2(Viewport.LastMousePos.X + 65 + ownerSize.X, Viewport.LastMousePos.Y + 50), Color.White);

                WidgetUtils.DrawRGBA(
                    ChromeProvider.GetImage("flags", actor.Owner.Country.Race),
                    new float2(Viewport.LastMousePos.X + 30, Viewport.LastMousePos.Y + 50));
            }
        }
示例#10
0
        public override void Draw()
        {
            if (world.LocalPlayer == null)
            {
                return;
            }
            if (world.LocalPlayer.WinState != WinState.Undefined)
            {
                return;
            }

            var radarBin = Ui.Root.Get <RadarBinWidget>(RadarBin);

            powerCollection = "power-" + world.LocalPlayer.Country.Race;

            // Nothing to draw
            if (power.PowerProvided == 0 && power.PowerDrained == 0)
            {
                return;
            }

            // Draw bar horizontally
            var barStart = powerOrigin + radarBin.RadarOrigin;
            var barEnd   = barStart + new float2(powerSize.Width, 0);

            float powerScaleBy = 100;
            var   maxPower     = Math.Max(power.PowerProvided, power.PowerDrained);

            while (maxPower >= powerScaleBy)
            {
                powerScaleBy *= 2;
            }

            // Current power supply
            var powerLevelTemp = barStart.X + (barEnd.X - barStart.X) * (power.PowerProvided / powerScaleBy);

            lastPowerProvidedPos = float2.Lerp(lastPowerProvidedPos.GetValueOrDefault(powerLevelTemp), powerLevelTemp, PowerBarLerpFactor);
            var powerLevel = new float2(lastPowerProvidedPos.Value, barStart.Y);

            var color = GetPowerColor(power);

            var colorDark = Exts.ColorLerp(0.25f, color, Color.Black);

            for (int i = 0; i < powerSize.Height; i++)
            {
                color = (i - 1 < powerSize.Height / 2) ? color : colorDark;
                var leftOffset  = new float2(0, i);
                var rightOffset = new float2(0, i);
                // Indent corners
                if ((i == 0 || i == powerSize.Height - 1) && powerLevel.X - barStart.X > 1)
                {
                    leftOffset.X  += 1;
                    rightOffset.X -= 1;
                }
                Game.Renderer.LineRenderer.DrawLine(barStart + leftOffset, powerLevel + rightOffset, color, color);
            }

            // Power usage indicator
            var indicator        = ChromeProvider.GetImage(powerCollection, "power-indicator");
            var powerDrainedTemp = barStart.X + (barEnd.X - barStart.X) * (power.PowerDrained / powerScaleBy);

            lastPowerDrainedPos = float2.Lerp(lastPowerDrainedPos.GetValueOrDefault(powerDrainedTemp), powerDrainedTemp, PowerBarLerpFactor);
            var powerDrainLevel = new float2(lastPowerDrainedPos.Value - indicator.size.X / 2, barStart.Y - 1);

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, powerDrainLevel);

            // Render the tooltip
            var rect = new Rectangle((int)barStart.X, (int)barStart.Y, powerSize.Width, powerSize.Height);

            if (rect.InflateBy(0, 5, 0, 5).Contains(Viewport.LastMousePos))
            {
                var pos = new int2(rect.Left + 5, rect.Top + 5);

                var border = WidgetUtils.GetBorderSizes("dialog4");
                WidgetUtils.DrawPanel("dialog4", rect.InflateBy(0, 0, 0, 50 + border[1]));

                Game.Renderer.Fonts["Bold"].DrawText("Power", pos, Color.White);
                pos += new int2(0, 20);
                Game.Renderer.Fonts["Regular"].DrawText("Provided: {0}\nDrained: {1}".F(power.PowerProvided, power.PowerDrained), pos, Color.White);
            }
        }
示例#11
0
        public override void DisplayInner(Renderer r, Sheet s, int density)
        {
            if (s != lastSheet || density != lastDensity)
            {
                lastSheet   = s;
                lastDensity = density;

                border = new[]
                {
                    CreateSprite(s, density, new Rectangle(129, 129, 32, 32)),
                    CreateSprite(s, density, new Rectangle(161, 129, 62, 32)),
                    CreateSprite(s, density, new Rectangle(223, 129, 32, 32)),
                    CreateSprite(s, density, new Rectangle(129, 161, 32, 62)),
                    null,
                    CreateSprite(s, density, new Rectangle(223, 161, 32, 62)),
                    CreateSprite(s, density, new Rectangle(129, 223, 32, 32)),
                    CreateSprite(s, density, new Rectangle(161, 223, 62, 32)),
                    CreateSprite(s, density, new Rectangle(223, 223, 32, 32))
                };

                nodLogo = CreateSprite(s, density, new Rectangle(0, 256, 256, 256));
                gdiLogo = CreateSprite(s, density, new Rectangle(256, 256, 256, 256));
                evaLogo = CreateSprite(s, density, new Rectangle(769, 320, 128, 64));

                brightBlock = CreateSprite(s, density, new Rectangle(777, 385, 16, 35));
                dimBlock    = CreateSprite(s, density, new Rectangle(794, 385, 16, 35));
            }

            if (r.Resolution != lastResolution)
            {
                lastResolution = r.Resolution;

                bounds = new Rectangle(0, 0, lastResolution.Width, lastResolution.Height);
                nodPos = new float2(bounds.Width / 2 - 384, bounds.Height / 2 - 128);
                gdiPos = new float2(bounds.Width / 2 + 128, bounds.Height / 2 - 128);
                evaPos = new float2(bounds.Width - 43 - 128, 43);
            }

            var barY = bounds.Height - 78;

            loadTick = ++loadTick % 8;

            r.RgbaSpriteRenderer.DrawSprite(gdiLogo, gdiPos);
            r.RgbaSpriteRenderer.DrawSprite(nodLogo, nodPos);
            r.RgbaSpriteRenderer.DrawSprite(evaLogo, evaPos);

            WidgetUtils.DrawPanel(bounds, border);

            if (r.Fonts != null)
            {
                var loadingFont = r.Fonts["BigBold"];
                var loadingText = Info["Text"];
                var loadingPos  = new float2((bounds.Width - loadingFont.Measure(loadingText).X) / 2, barY);
                loadingFont.DrawText(loadingText, loadingPos, Color.Gray);

                var versionFont = r.Fonts["Regular"];
                var versionSize = versionFont.Measure(versionText);
                var versionPos  = new float2(bounds.Width - 107 - versionSize.X / 2, 115 - versionSize.Y / 2);
                versionFont.DrawTextWithContrast(versionText, versionPos, Color.White, Color.Black, 2);
            }

            for (var i = 0; i <= 8; i++)
            {
                var block = loadTick == i ? brightBlock : dimBlock;
                r.RgbaSpriteRenderer.DrawSprite(block,
                                                new float2(bounds.Width / 2 - 114 - i * 32, barY));
                r.RgbaSpriteRenderer.DrawSprite(block,
                                                new float2(bounds.Width / 2 + 114 + i * 32 - 16, barY));
            }
        }
示例#12
0
        public override void Draw()
        {
            var iconSize   = new float2(64, 48);
            var iconOffset = 0.5f * iconSize;

            overlayFont  = Game.Renderer.Fonts["TinyBold"];
            timeOffset   = iconOffset - overlayFont.Measure(WidgetUtils.FormatTime(0)) / 2;
            queuedOffset = new float2(4, 2);
            holdOffset   = iconOffset - overlayFont.Measure(HoldText) / 2;
            readyOffset  = iconOffset - overlayFont.Measure(ReadyText) / 2;

            if (CurrentQueue == null)
            {
                return;
            }

            var buildableItems = CurrentQueue.BuildableItems();

            // Background
            foreach (var rect in icons.Keys)
            {
                WidgetUtils.DrawPanel("panel-black", rect.InflateBy(1, 1, 1, 1));
            }

            // Icons
            foreach (var icon in icons.Values)
            {
                WidgetUtils.DrawSHPCentered(icon.Sprite, icon.Pos + iconOffset, worldRenderer);

                // Build progress
                if (icon.Queued.Count > 0)
                {
                    var first = icon.Queued[0];
                    clock.PlayFetchIndex("idle",
                                         () => (first.TotalTime - first.RemainingTime)
                                         * (clock.CurrentSequence.Length - 1) / first.TotalTime);
                    clock.Tick();
                    WidgetUtils.DrawSHPCentered(clock.Image, icon.Pos + iconOffset, worldRenderer);
                }
                else if (!buildableItems.Any(a => a.Name == icon.Name))
                {
                    WidgetUtils.DrawSHPCentered(cantBuild.Image, icon.Pos + iconOffset, worldRenderer);
                }
            }

            // Overlays
            foreach (var icon in icons.Values)
            {
                var total = icon.Queued.Count;
                if (total > 0)
                {
                    var first   = icon.Queued[0];
                    var waiting = first != CurrentQueue.CurrentItem() && !first.Done;
                    if (first.Done)
                    {
                        if (ReadyTextStyle == ReadyTextStyleOptions.Solid || orderManager.LocalFrameNumber / 9 % 2 == 0)
                        {
                            overlayFont.DrawTextWithContrast(ReadyText,
                                                             icon.Pos + readyOffset,
                                                             Color.White, Color.Black, 1);
                        }
                        else if (ReadyTextStyle == ReadyTextStyleOptions.AlternatingColor)
                        {
                            overlayFont.DrawTextWithContrast(ReadyText,
                                                             icon.Pos + readyOffset,
                                                             ReadyTextAltColor, Color.Black, 1);
                        }
                    }
                    else if (first.Paused)
                    {
                        overlayFont.DrawTextWithContrast(HoldText,
                                                         icon.Pos + holdOffset,
                                                         Color.White, Color.Black, 1);
                    }
                    else if (!waiting)
                    {
                        overlayFont.DrawTextWithContrast(WidgetUtils.FormatTime(first.RemainingTimeActual),
                                                         icon.Pos + timeOffset,
                                                         Color.White, Color.Black, 1);
                    }

                    if (total > 1 || waiting)
                    {
                        overlayFont.DrawTextWithContrast(total.ToString(),
                                                         icon.Pos + queuedOffset,
                                                         Color.White, Color.Black, 1);
                    }
                }
            }
        }
示例#13
0
 public override void Draw()
 {
     WidgetUtils.DrawPanel(Background, RenderBounds);
 }