Esempio n. 1
0
        public override void Draw()
        {
            var image = ChromeProvider.GetImage(Image + "-button", GetImage());
            var rect  = new Rectangle(RenderBounds.X, RenderBounds.Y, (int)image.size.X, (int)image.size.Y);

            if (rect.Contains(Viewport.LastMousePos))
            {
                rect = rect.InflateBy(3, 3, 3, 3);
                var pos = new int2(rect.Left, rect.Top);
                var m   = pos + new int2(rect.Width, rect.Height);
                var br  = pos + new int2(rect.Width, rect.Height + 20);

                var u = Game.Renderer.Fonts["Regular"].Measure(GetLongDesc().Replace("\\n", "\n"));

                br.X -= u.X;
                br.Y += u.Y;
                br   += new int2(-15, 25);

                var border = WidgetUtils.GetBorderSizes("dialog4");

                WidgetUtils.DrawPanelPartial("dialog4", rect
                                             .InflateBy(0, 0, 0, border[1]),
                                             PanelSides.Top | PanelSides.Left | PanelSides.Right | PanelSides.Center);

                WidgetUtils.DrawPanelPartial("dialog4", new Rectangle(br.X, m.Y, pos.X - br.X, br.Y - m.Y)
                                             .InflateBy(0, 0, border[3], 0),
                                             PanelSides.Top | PanelSides.Left | PanelSides.Bottom | PanelSides.Center);

                WidgetUtils.DrawPanelPartial("dialog4", new Rectangle(pos.X, m.Y, m.X - pos.X, br.Y - m.Y)
                                             .InflateBy(border[2], border[0], 0, 0),
                                             PanelSides.Right | PanelSides.Bottom | PanelSides.Center);

                pos.X = br.X + 8;
                pos.Y = m.Y + 8;
                Game.Renderer.Fonts["Bold"].DrawText(GetDescription(), pos, Color.White);

                pos += new int2(0, 20);
                Game.Renderer.Fonts["Regular"].DrawText(GetLongDesc().Replace("\\n", "\n"), pos, Color.White);
            }

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(image, new int2(RenderBounds.X, RenderBounds.Y));
        }
Esempio n. 2
0
        public override void Draw()
        {
            buttons.Clear();

            if (world.LocalPlayer == null)
            {
                return;
            }

            var manager   = world.LocalPlayer.PlayerActor.Trait <SupportPowerManager>();
            var powers    = manager.Powers.Where(p => !p.Value.Disabled);
            var numPowers = powers.Count();

            if (numPowers == 0)
            {
                return;
            }

            var rectBounds = RenderBounds;

            WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-top"), new float2(rectBounds.X, rectBounds.Y));
            for (var i = 1; i < numPowers; i++)
            {
                WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-middle"), new float2(rectBounds.X, rectBounds.Y + i * 51));
            }
            WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-bottom"), new float2(rectBounds.X, rectBounds.Y + numPowers * 51));

            // Hack Hack Hack
            rectBounds.Width  = 69;
            rectBounds.Height = 10 + numPowers * 51 + 21;

            var y = rectBounds.Y + 10;

            foreach (var kv in powers)
            {
                var sp    = kv.Value;
                var image = spsprites[sp.Info.Image];

                var drawPos = new float2(rectBounds.X + 5, y);
                var rect    = new Rectangle(rectBounds.X + 5, y, 64, 48);

                if (rect.Contains(Viewport.LastMousePos))
                {
                    var pos = drawPos.ToInt2();
                    var tl  = new int2(pos.X - 3, pos.Y - 3);
                    var m   = new int2(pos.X + 64 + 3, pos.Y + 48 + 3);
                    var br  = tl + new int2(64 + 3 + 20, 40);

                    if (sp.TotalTime > 0)
                    {
                        br += new int2(0, 20);
                    }

                    if (sp.Info.LongDesc != null)
                    {
                        br += Game.Renderer.Fonts["Regular"].Measure(sp.Info.LongDesc.Replace("\\n", "\n"));
                    }
                    else
                    {
                        br += new int2(300, 0);
                    }

                    var border = WidgetUtils.GetBorderSizes("dialog4");

                    WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(tl.X, tl.Y, m.X + border[3], m.Y),
                                                 PanelSides.Left | PanelSides.Top | PanelSides.Bottom | PanelSides.Center);
                    WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(m.X - border[2], tl.Y, br.X, m.Y + border[1]),
                                                 PanelSides.Top | PanelSides.Right | PanelSides.Center);
                    WidgetUtils.DrawPanelPartial("dialog4", Rectangle.FromLTRB(m.X, m.Y - border[1], br.X, br.Y),
                                                 PanelSides.Left | PanelSides.Right | PanelSides.Bottom | PanelSides.Center);

                    pos += new int2(77, 5);
                    Game.Renderer.Fonts["Bold"].DrawText(sp.Info.Description, pos, Color.White);

                    if (sp.TotalTime > 0)
                    {
                        pos += new int2(0, 20);
                        Game.Renderer.Fonts["Bold"].DrawText(WidgetUtils.FormatTime(sp.RemainingTime).ToString(), pos, Color.White);
                        Game.Renderer.Fonts["Bold"].DrawText("/ {0}".F(WidgetUtils.FormatTime(sp.TotalTime)), pos + new int2(45, 0), Color.White);
                    }

                    if (sp.Info.LongDesc != null)
                    {
                        pos += new int2(0, 20);
                        Game.Renderer.Fonts["Regular"].DrawText(sp.Info.LongDesc.Replace("\\n", "\n"), pos, Color.White);
                    }
                }

                WidgetUtils.DrawSHP(image, drawPos, worldRenderer);

                clock.PlayFetchIndex("idle",
                                     () => sp.TotalTime == 0 ? clock.CurrentSequence.Length - 1 : (sp.TotalTime - sp.RemainingTime)
                                     * (clock.CurrentSequence.Length - 1) / sp.TotalTime);
                clock.Tick();

                WidgetUtils.DrawSHP(clock.Image, drawPos, worldRenderer);

                var overlay = sp.Ready ? ReadyText : sp.Active ? null : HoldText;
                var font    = Game.Renderer.Fonts["TinyBold"];
                if (overlay != null)
                {
                    var size       = font.Measure(overlay);
                    var overlayPos = drawPos + new float2(32, 16);
                    font.DrawTextWithContrast(overlay, overlayPos - new float2(size.X / 2, 0), Color.White, Color.Black, 1);
                }

                buttons.Add(Pair.New(rect, HandleSupportPower(kv.Key, manager)));

                y += 51;
            }
        }
Esempio n. 3
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);
            }
        }