Example #1
0
        public override void Draw()
        {
            if (!initialised)
            {
                Init();
            }

            if (!IsVisible())
            {
                return;
            }

            var rb     = RenderBounds;
            var offset = int2.Zero;

            var svc = world.Players.Select(p => p.PlayerActor.TraitOrDefault <StrategicVictoryConditions>()).FirstOrDefault();

            var totalWidth = svc.Total * 32;
            var curX       = -totalWidth / 2;

            foreach (var a in svc.AllPoints)
            {
                WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "critical_unowned"), offset + new float2(rb.Left + curX, rb.Top));

                if (world.LocalPlayer != null && a.Owner.RelationshipWith(world.LocalPlayer) == PlayerRelationship.Ally)
                {
                    WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "player_owned"), offset + new float2(rb.Left + curX, rb.Top));
                }
                else if (!a.Owner.NonCombatant)
                {
                    WidgetUtils.DrawRGBA(ChromeProvider.GetImage("strategic", "enemy_owned"), offset + new float2(rb.Left + curX, rb.Top));
                }

                curX += 32;
            }

            offset += new int2(0, 32);

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

            if (pendingWinner == null)
            {
                return;
            }
            var winnerSvc = pendingWinner.PlayerActor.Trait <StrategicVictoryConditions>();

            var isVictory = pendingWinner.RelationshipWith(world.LocalPlayer) == PlayerRelationship.Ally;
            var tc        = $"Strategic {(isVictory ? "victory" : "defeat")} in {WidgetUtils.FormatTime(winnerSvc.TicksLeft, world.Timestep)}";

            var font = Game.Renderer.Fonts["Bold"];

            var size = font.Measure(tc);

            font.DrawTextWithContrast(tc, offset + new float2(rb.Left - size.X / 2 + 1, rb.Top + 1), Color.White, Color.Black, 1);
            offset += new int2(0, size.Y + 1);
        }
Example #2
0
        static RunStatus Run()
        {
            if (Settings.Graphics.MaxFramerate < 1)
            {
                Settings.Graphics.MaxFramerate = new GraphicSettings().MaxFramerate;
                Settings.Graphics.CapFramerate = false;
            }

            try
            {
                Loop();
            }
            finally
            {
                // Ensure that the active replay is properly saved
                if (OrderManager != null)
                {
                    OrderManager.Dispose();
                }
            }

            if (worldRenderer != null)
            {
                worldRenderer.Dispose();
            }
            ModData.Dispose();
            ChromeProvider.Deinitialize();

            Sound.Dispose();
            Renderer.Dispose();

            OnQuit();

            return(state);
        }
Example #3
0
        public override void Draw()
        {
            var disabled = IsDisabled();
            var font     = Game.Renderer.Fonts[Font];
            var rect     = RenderBounds;
            var check    = new Rectangle(rect.Location, new Size(Bounds.Height, Bounds.Height));
            var state    = disabled ? "checkbox-disabled" :
                           Depressed && HasPressedState ? "checkbox-pressed" :
                           Widget.MouseOverWidget == this ? "checkbox-hover" :
                           "checkbox";

            WidgetUtils.DrawPanel(state, check);

            var textSize = font.Measure(Text);

            font.DrawText(Text,
                          new float2(rect.Left + rect.Height * 1.5f, RenderOrigin.Y - BaseLine + (Bounds.Height - textSize.Y) / 2), Color.White);

            if (IsChecked() || (Depressed && HasPressedState && !disabled))
            {
                var checkType = GetCheckType();
                if (HasPressedState && (Depressed || disabled))
                {
                    checkType += "-disabled";
                }

                var offset = new float2(rect.Left + CheckOffset, rect.Top + CheckOffset);
                WidgetUtils.DrawRGBA(ChromeProvider.GetImage("checkbox-bits", checkType), offset);
            }
        }
        public override void Draw()
        {
            var preview = Preview();

            if (preview == null)
            {
                return;
            }

            // Stash a copy of the minimap to ensure consistency
            // (it may be modified by another thread)
            minimap = preview.Minimap;
            if (minimap == null)
            {
                return;
            }

            // Update map rect
            PreviewScale = Math.Min(RenderBounds.Width / minimap.size.X, RenderBounds.Height / minimap.size.Y);
            var w = (int)(PreviewScale * minimap.size.X);
            var h = (int)(PreviewScale * minimap.size.Y);
            var x = RenderBounds.X + (RenderBounds.Width - w) / 2;
            var y = RenderBounds.Y + (RenderBounds.Height - h) / 2;

            MapRect = new Rectangle(x, y, w, h);

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(minimap, new float2(MapRect.Location), new float2(MapRect.Size));

            TooltipSpawnIndex = -1;
            if (ShowSpawnPoints)
            {
                var colors = SpawnOccupants().ToDictionary(c => c.Key, c => c.Value.Color.RGB);

                var spawnPoints = preview.SpawnPoints;
                foreach (var p in spawnPoints)
                {
                    var owned  = colors.ContainsKey(p);
                    var pos    = ConvertToPreview(p);
                    var sprite = ChromeProvider.GetImage("lobby-bits", owned ? "spawn-claimed" : "spawn-unclaimed");
                    var offset = new int2(sprite.bounds.Width, sprite.bounds.Height) / 2;

                    if (owned)
                    {
                        WidgetUtils.FillEllipseWithColor(new Rectangle(pos.X - offset.X + 1, pos.Y - offset.Y + 1, sprite.bounds.Width - 2, sprite.bounds.Height - 2), colors[p]);
                    }

                    Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos - offset);
                    var fonts  = Game.Renderer.Fonts[ChromeMetrics.Get <string>("SpawnFont")];
                    var number = Convert.ToChar('A' + spawnPoints.IndexOf(p)).ToString();
                    offset    = fonts.Measure(number) / 2;
                    offset.Y += 1;                     // Does not center well vertically for some reason
                    fonts.DrawTextWithContrast(number, pos - offset, ChromeMetrics.Get <Color>("SpawnColor"), ChromeMetrics.Get <Color>("SpawnContrastColor"), 1);

                    if (((pos - Viewport.LastMousePos).ToFloat2() * offset.ToFloat2()).LengthSquared < 1)
                    {
                        TooltipSpawnIndex = spawnPoints.IndexOf(p) + 1;
                    }
                }
            }
        }
Example #5
0
        public static int[] GetBorderSizes(string collection)
        {
            var images = new[] { "border-t", "border-b", "border-l", "border-r" };
            var ss     = images.Select(i => ChromeProvider.GetImage(collection, i)).ToList();

            return(new[] { (int)ss[0].Size.Y, (int)ss[1].Size.Y, (int)ss[2].Size.X, (int)ss[3].Size.X });
        }
Example #6
0
        public override void Draw()
        {
            float scaleBy = 100;
            var   max     = Math.Max(pr.OreCapacity, pr.Ore);

            while (max >= scaleBy)
            {
                scaleBy *= 2;
            }

            // Current capacity
            var capacityFrac = pr.OreCapacity / scaleBy;

            lastCapacityFrac = capacityFrac = float2.Lerp(lastCapacityFrac.GetValueOrDefault(capacityFrac), capacityFrac, .3f);

            var color = GetBarColor();

            var b    = RenderBounds;
            var rect = new RectangleF(b.X, float2.Lerp(b.Bottom, b.Top, capacityFrac),
                                      (float)b.Width, capacityFrac * b.Height);

            Game.Renderer.LineRenderer.FillRect(rect, color);

            var indicator = ChromeProvider.GetImage("sidebar-bits", "right-indicator");

            var storedFrac = pr.Ore / scaleBy;

            lastStoredFrac = storedFrac = float2.Lerp(lastStoredFrac.GetValueOrDefault(storedFrac), storedFrac, .3f);

            float2 pos = new float2(b.X, float2.Lerp(b.Bottom, b.Top, storedFrac) - indicator.size.Y / 2);

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, pos);
        }
        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 * ListOffset / (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);

            var upHover    = Ui.MouseOverWidget == this && upButtonRect.Contains(Viewport.LastMousePos);
            var upDisabled = thumbHeight == 0 || ListOffset >= 0;

            var downHover    = Ui.MouseOverWidget == this && downButtonRect.Contains(Viewport.LastMousePos);
            var downDisabled = thumbHeight == 0 || ListOffset <= Bounds.Height - ContentHeight;

            var thumbHover = Ui.MouseOverWidget == this && thumbRect.Contains(Viewport.LastMousePos);

            WidgetUtils.DrawPanel(Background, backgroundRect);
            WidgetUtils.DrawPanel("scrollpanel-bg", scrollbarRect);
            ButtonWidget.DrawBackground("button", upButtonRect, upDisabled, UpPressed, upHover, false);
            ButtonWidget.DrawBackground("button", downButtonRect, downDisabled, DownPressed, downHover, false);

            if (thumbHeight > 0)
            {
                ButtonWidget.DrawBackground("scrollthumb", thumbRect, false, HasMouseFocus && thumbHover, thumbHover, 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 float2(upButtonRect.Left + upOffset, upButtonRect.Top + upOffset));
            WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", DownPressed || downDisabled ? "down_pressed" : "down_arrow"),
                                 new float2(downButtonRect.Left + downOffset, downButtonRect.Top + downOffset));

            Game.Renderer.EnableScissor(backgroundRect.InflateBy(-1, -1, -1, -1));

            foreach (var child in Children)
            {
                child.DrawOuter();
            }

            Game.Renderer.DisableScissor();
        }
Example #8
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Down)
            {
                var hk = Hotkey.FromKeyInput(e);

                if (hk == Game.Settings.Keys.DevReloadChromeKey)
                {
                    ChromeProvider.Initialize(Game.ModData.Manifest.Chrome);
                    return(true);
                }

                if (hk == Game.Settings.Keys.HideUserInterfaceKey)
                {
                    foreach (var child in this.Children)
                    {
                        child.Visible ^= true;
                    }

                    return(true);
                }

                if (hk == Game.Settings.Keys.TakeScreenshotKey)
                {
                    if (e.Event == KeyInputEvent.Down)
                    {
                        Game.TakeScreenshot = true;
                    }

                    return(true);
                }
            }

            return(base.HandleKeyPress(e));
        }
Example #9
0
        public override void Draw()
        {
            var scaleBy  = 100.0f;
            var provided = GetProvided();
            var used     = GetUsed();
            var max      = Math.Max(provided, used);

            while (max >= scaleBy)
            {
                scaleBy *= 2;
            }

            var providedFrac = providedLerp.Update(provided / scaleBy);
            var usedFrac     = usedLerp.Update(used / scaleBy);

            var color = GetBarColor();

            var b    = RenderBounds;
            var rect = new RectangleF(b.X, float2.Lerp(b.Bottom, b.Top, providedFrac),
                                      b.Width, providedFrac * b.Height);

            Game.Renderer.LineRenderer.FillRect(rect, color);

            var indicator = ChromeProvider.GetImage("sidebar-bits",
                                                    RightIndicator ? "right-indicator" : "left-indicator");

            var indicatorX = RightIndicator ? (b.Right - indicator.size.X) : b.Left;

            var pos = new float2(indicatorX, float2.Lerp(b.Bottom, b.Top, usedFrac) - indicator.size.Y / 2);

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, pos);
        }
Example #10
0
        public static void DrawPanelPartial(string collection, Rectangle bounds, PanelSides ps)
        {
            var images = new[] { "border-t", "border-b", "border-l", "border-r", "corner-tl", "corner-tr", "corner-bl", "corner-br", "background" };
            var ss     = images.Select(i => ChromeProvider.GetImage(collection, i)).ToArray();

            DrawPanelPartial(ss, bounds, ps);
        }
Example #11
0
        public void InitializeFonts(ModData modData)
        {
            if (Fonts != null)
            {
                foreach (var font in Fonts.Values)
                {
                    font.Dispose();
                }
            }
            using (new PerfTimer("SpriteFonts"))
            {
                fontSheetBuilder?.Dispose();
                fontSheetBuilder = new SheetBuilder(SheetType.BGRA, 512);
                Fonts            = modData.Manifest.Get <Fonts>().FontList.ToDictionary(x => x.Key,
                                                                                        x => new SpriteFont(x.Value.Font, modData.DefaultFileSystem.Open(x.Value.Font).ReadAllBytes(),
                                                                                                            x.Value.Size, x.Value.Ascender, Window.EffectiveWindowScale, fontSheetBuilder)).AsReadOnly();
            }

            Window.OnWindowScaleChanged += (oldNative, oldEffective, newNative, newEffective) =>
            {
                Game.RunAfterTick(() =>
                {
                    ChromeProvider.SetDPIScale(newEffective);

                    foreach (var f in Fonts)
                    {
                        f.Value.SetScale(newEffective);
                    }
                });
            };
        }
Example #12
0
        /// <summary>Possibly handle keyboard input (if this widget has keyboard focus)</summary>
        /// <returns><c>true</c>, if keyboard input was handled, <c>false</c> if the input should bubble to the parent widget</returns>
        /// <param name="e">Key input data</param>
        public static bool HandleKeyPress(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Down)
            {
                var hk = Hotkey.FromKeyInput(e);

                if (hk == Game.Settings.Keys.DevReloadChromeKey)
                {
                    ChromeProvider.Initialize(Game.ModData);
                    return(true);
                }

                if (hk == Game.Settings.Keys.HideUserInterfaceKey)
                {
                    Root.Visible ^= true;
                    return(true);
                }

                if (hk == Game.Settings.Keys.TakeScreenshotKey)
                {
                    Game.TakeScreenshot = true;
                    return(true);
                }
            }

            if (KeyboardFocusWidget != null)
            {
                return(KeyboardFocusWidget.HandleKeyPressOuter(e));
            }

            return(Root.HandleKeyPressOuter(e));
        }
        public override void Draw()
        {
            if (!IsVisible())
            {
                return;
            }

            Value = GetValue();

            var tr          = ThumbRect;
            var rb          = RenderBounds;
            var trackWidth  = rb.Width - rb.Height;
            var trackOrigin = rb.X + rb.Height / 2;
            var trackRect   = new Rectangle(trackOrigin - 1, rb.Y + (rb.Height - TrackHeight) / 2, trackWidth + 2, TrackHeight);

            // Tickmarks
            var tick = ChromeProvider.GetImage("slider", "tick");

            for (var i = 0; i < Ticks; i++)
            {
                var tickPos = new float2(
                    trackOrigin + (i * (trackRect.Width - (int)tick.Size.X) / (Ticks - 1)) - tick.Size.X / 2,
                    trackRect.Bottom);

                WidgetUtils.DrawRGBA(tick, tickPos);
            }

            // Track
            WidgetUtils.DrawPanel(Track, trackRect);

            // Thumb
            var thumbHover = Ui.MouseOverWidget == this && tr.Contains(Viewport.LastMousePos);

            ButtonWidget.DrawBackground(Thumb, tr, IsDisabled(), isMoving, thumbHover, false);
        }
Example #14
0
        public override void Draw()
        {
            if (world.LocalPlayer == null)
            {
                return;
            }
            if (world.LocalPlayer.WinState != WinState.Undefined)
            {
                return;
            }

            var digitCollection  = "digits-" + world.LocalPlayer.Country.Race;
            var chromeCollection = "chrome-" + world.LocalPlayer.Country.Race;

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(
                ChromeProvider.GetImage(chromeCollection, "moneybin"),
                new float2(Bounds.Left, 0));

            // Cash
            var cashDigits = (playerResources.DisplayCash + playerResources.DisplayResources).ToString();
            var x          = Bounds.Right - 65;

            foreach (var d in cashDigits.Reverse())
            {
                Game.Renderer.RgbaSpriteRenderer.DrawSprite(
                    ChromeProvider.GetImage(digitCollection, (d - '0').ToString()),
                    new float2(x, 6));
                x -= 14;
            }
        }
Example #15
0
 public static CachedTransform <(bool Disabled, bool Pressed, bool Hover, bool Focused), Sprite> GetCachedStatefulImage(string collection, string baseName)
 {
     return(new CachedTransform <(bool, bool, bool, bool), Sprite>(
                ((bool Disabled, bool Pressed, bool Hover, bool Focused)args) =>
     {
         var imageName = GetStatefulImageName(baseName, args.Disabled, args.Pressed, args.Hover, args.Focused);
         return ChromeProvider.GetImage(collection, imageName) ?? ChromeProvider.GetImage(collection, baseName);
     }));
Example #16
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();
        }
Example #17
0
        void IUtilityCommand.Run(Utility utility, string[] args)
        {
            // HACK: The engine code assumes that Game.modData is set.
            var modData = Game.ModData = utility.ModData;

            ChromeProvider.Initialize(modData);

            var image = args[1];
            var zoom  = args[2];

            var regions = new List <string>();

            foreach (var c in ChromeProvider.Collections)
            {
                if (c.Value.Image != image)
                {
                    continue;
                }

                var pr = c.Value.PanelRegion;
                if (pr != null && pr.Length == 8)
                {
                    var sides = new[]
                    {
                        Pair.New(PanelSides.Top | PanelSides.Left, new Rectangle(pr[0], pr[1], pr[2], pr[3])),
                        Pair.New(PanelSides.Top, new Rectangle(pr[0] + pr[2], pr[1], pr[4], pr[3])),
                        Pair.New(PanelSides.Top | PanelSides.Right, new Rectangle(pr[0] + pr[2] + pr[4], pr[1], pr[6], pr[3])),
                        Pair.New(PanelSides.Left, new Rectangle(pr[0], pr[1] + pr[3], pr[2], pr[5])),
                        Pair.New(PanelSides.Center, new Rectangle(pr[0] + pr[2], pr[1] + pr[3], pr[4], pr[5])),
                        Pair.New(PanelSides.Right, new Rectangle(pr[0] + pr[2] + pr[4], pr[1] + pr[3], pr[6], pr[5])),
                        Pair.New(PanelSides.Bottom | PanelSides.Left, new Rectangle(pr[0], pr[1] + pr[3] + pr[5], pr[2], pr[7])),
                        Pair.New(PanelSides.Bottom, new Rectangle(pr[0] + pr[2], pr[1] + pr[3] + pr[5], pr[4], pr[7])),
                        Pair.New(PanelSides.Bottom | PanelSides.Right, new Rectangle(pr[0] + pr[2] + pr[4], pr[1] + pr[3] + pr[5], pr[6], pr[7]))
                    };

                    foreach (var s in sides)
                    {
                        var r = s.Second;
                        if (c.Value.PanelSides.HasSide(s.First))
                        {
                            regions.Add("[\"{0}.<{1}>\",{2},{3},{4},{5}]".F(c.Key, s.First, r.X, r.Y, r.Width, r.Height));
                        }
                    }
                }

                foreach (var kv in c.Value.Regions)
                {
                    var r = kv.Value;
                    regions.Add("[\"{0}\",{1},{2},{3},{4}]".F(c.Key + "." + kv.Key, r.X, r.Y, r.Width, r.Height));
                }
            }

            var output     = HtmlTemplate.JoinWith("\n").F(zoom, Convert.ToBase64String(modData.ModFiles.Open(image).ReadAllBytes()), "[" + regions.JoinWith(",") + "]");
            var outputPath = Path.ChangeExtension(image, ".html");

            File.WriteAllLines(outputPath, new[] { output });
            Console.WriteLine("Saved {0}", outputPath);
        }
Example #18
0
        public static void DrawPanel(string collection, Rectangle bounds)
        {
            var sprites = ChromeProvider.GetPanelImages(collection);

            if (sprites != null)
            {
                DrawPanel(bounds, sprites);
            }
        }
Example #19
0
        public override void Draw()
        {
            var tabs = Groups[queueGroup].Tabs.Where(t => t.Queue.BuildableItems().Any());

            if (!tabs.Any())
            {
                return;
            }

            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(Background, rb);
            ButtonWidget.DrawBackground(Button, leftButtonRect, leftDisabled, leftPressed, leftHover, false);
            ButtonWidget.DrawBackground(Button, rightButtonRect, rightDisabled, rightPressed, rightHover, false);

            var leftArrowImageName = WidgetUtils.GetStatefulImageName(DecorationScrollLeft, leftDisabled, leftPressed, leftHover);
            var leftArrowImage     = ChromeProvider.GetImage(Decorations, leftArrowImageName) ?? ChromeProvider.GetImage(Decorations, DecorationScrollLeft);

            WidgetUtils.DrawRGBA(leftArrowImage,
                                 new float2(leftButtonRect.Left + 2, leftButtonRect.Top + 2));

            var rightArrowImageName = WidgetUtils.GetStatefulImageName(DecorationScrollRight, rightDisabled, rightPressed, rightHover);
            var rightArrowImage     = ChromeProvider.GetImage(Decorations, rightArrowImageName) ?? ChromeProvider.GetImage(Decorations, DecorationScrollRight);

            WidgetUtils.DrawRGBA(rightArrowImage,
                                 new float2(rightButtonRect.Left + 2, rightButtonRect.Top + 2));

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

            contentWidth = 0;

            foreach (var tab in 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 highlighted = tab.Queue == CurrentQueue;
                ButtonWidget.DrawBackground(Button, rect, false, false, hover, highlighted);
                contentWidth += TabWidth - 1;

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

            Game.Renderer.DisableScissor();
        }
Example #20
0
 public MapPreviewWidget()
 {
     spawnClaimed       = ChromeProvider.GetImage("lobby-bits", "spawn-claimed");
     spawnUnclaimed     = ChromeProvider.GetImage("lobby-bits", "spawn-unclaimed");
     spawnFont          = WarGame.Renderer.Fonts[ChromeMetrics.Get <string>("SpawnFont")];
     spawnColor         = ChromeMetrics.Get <Color>("SpawnColor");
     spawnContrastColor = ChromeMetrics.Get <Color>("SpawnContrastColor");
     spawnLabelOffset   = ChromeMetrics.Get <Int2>("SpawnLabelOffset");
 }
Example #21
0
        public override void Draw()
        {
            var name       = GetImageName();
            var collection = GetImageCollection();

            WidgetUtils.DrawRGBA(
                ChromeProvider.GetImage(collection, name),
                RenderOrigin);
        }
Example #22
0
        void BindButtonIcon(ButtonWidget button)
        {
            var icon = button.Get <ImageWidget>("ICON");

            var hasDisabled = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-disabled") != null;
            var hasActive   = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active") != null;

            icon.GetImageName = () => hasActive && button.IsHighlighted() ? icon.ImageName + "-active" : hasDisabled && button.IsDisabled() ? icon.ImageName + "-disabled" : icon.ImageName;
        }
Example #23
0
        public override void Draw()
        {
            var map = Map();

            if (map == null)
            {
                return;
            }

            if (lastMap != map)
            {
                lastMap = map;

                // Update image data
                var preview = PreviewCache[map];
                if (mapChooserSheet == null || mapChooserSheet.Size.Width != preview.Width || mapChooserSheet.Size.Height != preview.Height)
                {
                    mapChooserSheet = new Sheet(new Size(preview.Width, preview.Height));
                }

                mapChooserSheet.Texture.SetData(preview);
                mapChooserSprite = new Sprite(mapChooserSheet, new Rectangle(0, 0, map.Bounds.Width, map.Bounds.Height), TextureChannel.Alpha);
            }

            // Update map rect
            PreviewScale = Math.Min(RenderBounds.Width * 1.0f / map.Bounds.Width, RenderBounds.Height * 1.0f / map.Bounds.Height);
            var size = Math.Max(map.Bounds.Width, map.Bounds.Height);
            var dw   = (int)(PreviewScale * (size - map.Bounds.Width)) / 2;
            var dh   = (int)(PreviewScale * (size - map.Bounds.Height)) / 2;

            MapRect = new Rectangle(RenderBounds.X + dw, RenderBounds.Y + dh, (int)(map.Bounds.Width * PreviewScale), (int)(map.Bounds.Height * PreviewScale));

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(mapChooserSprite,
                                                        new float2(MapRect.Location),
                                                        new float2(MapRect.Size));

            if (ShowSpawnPoints)
            {
                var colors = SpawnColors();

                foreach (var p in map.GetSpawnPoints())
                {
                    var owned  = colors.ContainsKey(p);
                    var pos    = ConvertToPreview(p);
                    var sprite = ChromeProvider.GetImage("spawnpoints", owned ? "owned" : "unowned");
                    var offset = new int2(-sprite.bounds.Width / 2, -sprite.bounds.Height / 2);

                    if (owned)
                    {
                        WidgetUtils.FillRectWithColor(new Rectangle(pos.X + offset.X + 2, pos.Y + offset.Y + 2, 12, 12), colors[p]);
                    }

                    Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos + offset);
                }
            }
        }
Example #24
0
        public override void Draw()
        {
            Game.Renderer.RgbaSpriteRenderer.DrawSprite(mixerSprite, RenderOrigin, new float2(RenderBounds.Size));

            var sprite = ChromeProvider.GetImage("lobby-bits", "colorpicker");
            var pos    = RenderOrigin + PxFromValue() - new int2((int)sprite.Size.X, (int)sprite.Size.Y) / 2;

            WidgetUtils.FillEllipseWithColor(new Rectangle(pos.X + 1, pos.Y + 1, (int)sprite.Size.X - 2, (int)sprite.Size.Y - 2), Color);
            Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos);
        }
Example #25
0
        public void InitializeLoaders()
        {
            // all this manipulation of static crap here is nasty and breaks
            // horribly when you use ModData in unexpected ways.
            ChromeMetrics.Initialize(Manifest.ChromeMetrics);
            ChromeProvider.Initialize(Manifest.Chrome);
            VoxelLoader = new VoxelLoader();

            CursorProvider = new CursorProvider(this);
        }
Example #26
0
 public void InitializeLoaders()
 {
     // all this manipulation of static crap here is nasty and breaks
     // horribly when you use ModData in unexpected ways.
     ChromeMetrics.Initialize(Manifest.ChromeMetrics);
     ChromeProvider.Initialize(Manifest.Chrome);
     SheetBuilder = new SheetBuilder(SheetType.Indexed);
     SpriteLoader = new SpriteLoader(new string[] { ".shp" }, SheetBuilder);
     VoxelLoader  = new VoxelLoader();
     CursorProvider.Initialize(Manifest.Cursors);
 }
Example #27
0
        public MapPreviewWidget()
        {
            tooltipContainer = Exts.Lazy(() => Ui.Root.Get <TooltipContainerWidget>(TooltipContainer));

            spawnClaimed       = ChromeProvider.GetImage("lobby-bits", "spawn-claimed");
            spawnUnclaimed     = ChromeProvider.GetImage("lobby-bits", "spawn-unclaimed");
            spawnFont          = Game.Renderer.Fonts[ChromeMetrics.Get <string>("SpawnFont")];
            spawnColor         = ChromeMetrics.Get <Color>("SpawnColor");
            spawnContrastColor = ChromeMetrics.Get <Color>("SpawnContrastColor");
            spawnLabelOffset   = ChromeMetrics.Get <int2>("SpawnLabelOffset");
        }
Example #28
0
        public void InitializeLoaders(IReadOnlyFileSystem fileSystem)
        {
            // all this manipulation of static crap here is nasty and breaks
            // horribly when you use ModData in unexpected ways.
            ChromeMetrics.Initialize(this);
            ChromeProvider.Initialize(this);

            Game.Sound.Initialize(SoundLoaders, fileSystem);

            CursorProvider = new CursorProvider(this);
        }
Example #29
0
        static int DetermineSelectedSpawnPoint(MapPreviewWidget mapPreview, MapPreview preview, MouseInput mi)
        {
            var spawnSize     = ChromeProvider.GetImage("lobby-bits", "spawn-unclaimed").Size.XY;
            var selectedSpawn = preview.SpawnPoints
                                .Select((sp, i) => (SpawnLocation: mapPreview.ConvertToPreview(sp, preview.GridType), Index: i))
                                .Where(a => ((a.SpawnLocation - mi.Location).ToFloat2() / spawnSize * 2).LengthSquared <= 1)
                                .Select(a => a.Index + 1)
                                .FirstOrDefault();

            return(selectedSpawn);
        }
Example #30
0
 public static void DrawPanelPartial(string collection, Rectangle bounds, PanelSides ps)
 {
     DrawPanelPartial(bounds, ps,
                      ChromeProvider.GetImage(collection, "border-t"),
                      ChromeProvider.GetImage(collection, "border-b"),
                      ChromeProvider.GetImage(collection, "border-l"),
                      ChromeProvider.GetImage(collection, "border-r"),
                      ChromeProvider.GetImage(collection, "corner-tl"),
                      ChromeProvider.GetImage(collection, "corner-tr"),
                      ChromeProvider.GetImage(collection, "corner-bl"),
                      ChromeProvider.GetImage(collection, "corner-br"),
                      ChromeProvider.GetImage(collection, "background"));
 }
Example #31
0
		private void OnClientConnected(ChromeProvider provider, ChromeProviderClientEventArgs args) {
			Application.Current.Dispatcher.BeginInvoke(
				new Action(() => this.Clients.Add(args.ClientChanged)));
		}