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");
        }
Esempio n. 2
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);
        }
Esempio n. 3
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));

            // Overlay spawnpoints
            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);
            }
        }
Esempio n. 4
0
        public override void Draw()
        {
            var tabs = Groups[queueGroup].Tabs.Where(t => t.Queue.BuildableItems().Any());

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

            var rb = RenderBounds;

            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);

            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();
        }
Esempio n. 5
0
		public override void Draw()
		{
			base.Draw();
			var stateOffset = Depressed ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);

			var image = ChromeProvider.GetImage("scrollbar", IsDisabled() ? "down_pressed" : "down_arrow");
			var rb = RenderBounds;

			WidgetUtils.DrawRGBA(image, stateOffset + new float2(rb.Right - (int)((rb.Height + image.Size.X) / 2), rb.Top + (int)((rb.Height - image.Size.Y) / 2)));

			var separator = ChromeProvider.GetImage(SeparatorCollection, SeparatorImage);
			WidgetUtils.DrawRGBA(separator, stateOffset + new float2(-3, 0) + new float2(rb.Right - rb.Height + 4, rb.Top + (rb.Height - separator.Size.Y) / 2));
		}
Esempio n. 6
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;
            var hasActiveHover = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active-hover") != null;
            var hasHover       = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-hover") != null;

            icon.GetImageName = () => hasActive && button.IsHighlighted() ?
                                (hasActiveHover && Ui.MouseOverWidget == button ? icon.ImageName + "-active-hover" : icon.ImageName + "-active") :
                                hasDisabled && button.IsDisabled() ? icon.ImageName + "-disabled" :
                                hasHover && Ui.MouseOverWidget == button ? icon.ImageName + "-hover" : icon.ImageName;
        }
Esempio n. 7
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"));
 }
Esempio n. 8
0
        public override void Draw()
        {
            var name       = GetImageName();
            var collection = GetImageCollection();

            var sprite = ChromeProvider.GetImage(collection, name);

            if (sprite == null)
            {
                throw new ArgumentException("Sprite {0}/{1} was not found.".F(collection, name));
            }

            WidgetUtils.DrawRGBA(sprite, RenderOrigin);
        }
Esempio n. 9
0
        public override void Draw()
        {
            base.Draw();
            var stateOffset = Depressed ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);

            var image = ChromeProvider.GetImage("scrollbar", IsDisabled() ? "down_pressed" : "down_arrow");
            var rb    = RenderBounds;

            WidgetUtils.DrawRGBA(image, stateOffset + new float2(rb.Right - rb.Height + 4, rb.Top + (rb.Height - image.Bounds.Height) / 2));

            var separator = ChromeProvider.GetImage("dropdown", "separator");

            WidgetUtils.DrawRGBA(separator, new float2(-3, 0) + new float2(rb.Right - rb.Height + 4, rb.Top + (rb.Height - separator.Bounds.Height) / 2));
        }
Esempio n. 10
0
        public override void Draw()
        {
            if (!Groups[queueGroup].Tabs.Any(t => t.Queue.BuildableItems().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("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(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 Groups[queueGroup].Tabs.Where(t => t.Queue.BuildableItems().Any()))
            {
                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-highlighted" : "button";
                ButtonWidget.DrawBackground(baseName, rect, false, false, hover, false);
                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.CurrentDone ? Color.Gold : Color.White, Color.Black, 1);
            }

            Game.Renderer.DisableScissor();
        }
Esempio n. 11
0
        public override void Draw()
        {
            base.Draw();
            var stateOffset = Depressed ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);

            var image         = ChromeProvider.GetImage("scrollbar", IsDisabled() ? "down_pressed" : "down_arrow");
            var rb            = RenderBounds;
            var color         = GetColor();
            var colorDisabled = GetColorDisabled();

            WidgetUtils.DrawRGBA(image, stateOffset + new float2(rb.Right - rb.Height + 4, rb.Top + (rb.Height - image.Bounds.Height) / 2));

            WidgetUtils.FillRectWithColor(new Rectangle(stateOffset.X + rb.Right - rb.Height,
                                                        stateOffset.Y + rb.Top + 3, 1, rb.Height - 6),
                                          IsDisabled() ? colorDisabled : color);
        }
Esempio n. 12
0
        public override void Draw()
        {
            var disabled      = IsDisabled();
            var highlighted   = IsHighlighted();
            var font          = Game.Renderer.Fonts[Font];
            var color         = GetColor();
            var colordisabled = GetColorDisabled();
            var bgDark        = GetContrastColorDark();
            var bgLight       = GetContrastColorLight();
            var rect          = RenderBounds;
            var text          = GetText();
            var textSize      = font.Measure(text);
            var check         = new Rectangle(rect.Location, new Size(Bounds.Height, Bounds.Height));
            var state         = disabled ? "checkbox-disabled" :
                                highlighted ? "checkbox-highlighted" :
                                Depressed && HasPressedState ? "checkbox-pressed" :
                                Ui.MouseOverWidget == this ? "checkbox-hover" :
                                "checkbox";

            WidgetUtils.DrawPanel(state, check);

            var topOffset = font.TopOffset;
            var position  = new float2(rect.Left + rect.Height * 1.5f, RenderOrigin.Y + (Bounds.Height - textSize.Y - topOffset) / 2);

            if (Contrast)
            {
                font.DrawTextWithContrast(text, position,
                                          disabled ? colordisabled : color, bgDark, bgLight, 2);
            }
            else
            {
                font.DrawText(text, position,
                              disabled ? colordisabled : color);
            }

            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);
            }
        }
Esempio n. 13
0
        public override void Draw()
        {
            if (!IsVisible())
            {
                return;
            }

            var ro = RenderOrigin;
            var rb = RenderBounds;

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(hueSprite, ro, new float2(rb.Size));

            var sprite = ChromeProvider.GetImage("lobby-bits", "huepicker");
            var pos    = RenderOrigin + new int2(PxFromValue(Value).Clamp(0, rb.Width - 1) - sprite.Bounds.Width / 2, (rb.Height - sprite.Bounds.Height) / 2);

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos);
        }
Esempio n. 14
0
        public override void Draw()
        {
            float powerScaleBy = 100;
            var   maxPower     = Math.Max(pm.PowerProvided, pm.PowerDrained);

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

            // Current power supply
            var providedFrac = pm.PowerProvided / powerScaleBy;

            lastProvidedFrac = providedFrac = float2.Lerp(lastProvidedFrac.GetValueOrDefault(providedFrac), providedFrac, .3f);

            var color = Color.LimeGreen;

            if (pm.PowerState == PowerState.Low)
            {
                color = Color.Orange;
            }
            if (pm.PowerState == PowerState.Critical)
            {
                color = Color.Red;
            }

            var b    = RenderBounds;
            var rect = new RectangleF(b.X,
                                      b.Y + (1 - providedFrac) * b.Height,
                                      (float)b.Width,
                                      providedFrac * b.Height);

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

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

            var drainedFrac = pm.PowerDrained / powerScaleBy;

            lastDrainedFrac = drainedFrac = float2.Lerp(lastDrainedFrac.GetValueOrDefault(drainedFrac), drainedFrac, .3f);

            float2 pos = new float2(b.X + b.Width - indicator.size.X,
                                    b.Y + (1 - drainedFrac) * b.Height - indicator.size.Y / 2);

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, pos);
        }
Esempio n. 15
0
        public override void Draw()
        {
            var rb         = RenderBounds;
            var percentage = GetPercentage();

            WidgetUtils.DrawPanel(Background, rb);

            var minBarWidth = (int)(ChromeProvider.GetImage(Bar, "border-l").Size.X + ChromeProvider.GetImage(Bar, "border-r").Size.X);
            var maxBarWidth = rb.Width - BarMargin.Width * 2;
            var barWidth    = wasIndeterminate ? maxBarWidth / 4 : percentage * maxBarWidth / 100;

            barWidth = Math.Max(barWidth, minBarWidth);

            var barOffset = wasIndeterminate ? (int)(0.75 * offset * maxBarWidth) : 0;
            var barRect   = new Rectangle(rb.X + BarMargin.Width + barOffset, rb.Y + BarMargin.Height, barWidth, rb.Height - 2 * BarMargin.Height);

            WidgetUtils.DrawPanel(Bar, barRect);
        }
        void BindStanceButton(ButtonWidget button, UnitStance stance)
        {
            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;
            var hasActiveHover = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active-hover") != null;
            var hasHover       = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-hover") != null;

            icon.GetImageName = () => hasActive && button.IsHighlighted() ?
                                (hasActiveHover && Ui.MouseOverWidget == button ? icon.ImageName + "-active-hover" : icon.ImageName + "-active") :
                                hasDisabled && button.IsDisabled() ? icon.ImageName + "-disabled" :
                                hasHover && Ui.MouseOverWidget == button ? icon.ImageName + "-hover" : icon.ImageName;

            button.IsDisabled    = () => { UpdateStateIfNecessary(); return(!actorStances.Any()); };
            button.IsHighlighted = () => actorStances.Any(
                at => !at.Trait.IsTraitDisabled && at.Trait.PredictedStance == stance);
            button.OnClick = () => SetSelectionStance(stance);
        }
Esempio n. 17
0
        public override void Initialize(WidgetArgs args)
        {
            base.Initialize(args);

            var hueSheet = new Sheet(SheetType.BGRA, new Size(256, 1));

            hueSprite = new Sprite(hueSheet, new Rectangle(0, 0, 256, 1), TextureChannel.RGBA);

            var hueData = new uint[1, 256];

            for (var x = 0; x < 256; x++)
            {
                hueData[0, x] = (uint)Color.FromAhsv(x / 255f, 1, 1).ToArgb();
            }

            hueSheet.GetTexture().SetData(hueData);

            pickerSprite = ChromeProvider.GetImage("lobby-bits", "huepicker");
        }
Esempio n. 18
0
        protected MapPreviewWidget(MapPreviewWidget other)
            : base(other)
        {
            Preview = other.Preview;

            IgnoreMouseInput = other.IgnoreMouseInput;
            ShowSpawnPoints  = other.ShowSpawnPoints;
            TooltipTemplate  = other.TooltipTemplate;
            TooltipContainer = other.TooltipContainer;
            SpawnOccupants   = other.SpawnOccupants;


            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");
        }
Esempio n. 19
0
        public override void Draw()
        {
            if (world == null || world.LocalPlayer == null)
            {
                return;
            }
            if (world.LocalPlayer.WinState != WinState.Undefined)
            {
                return;
            }

            radarCollection = "radar-" + world.LocalPlayer.Country.Race;
            var rsr = Game.Renderer.RgbaSpriteRenderer;

            rsr.DrawSprite(ChromeProvider.GetImage(radarCollection, "left"), radarOrigin);
            rsr.DrawSprite(ChromeProvider.GetImage(radarCollection, "right"), radarOrigin + new float2(201, 0));
            rsr.DrawSprite(ChromeProvider.GetImage(radarCollection, "bottom"), radarOrigin + new float2(0, 192));
            rsr.DrawSprite(ChromeProvider.GetImage(radarCollection, "bg"), radarOrigin + new float2(9, 0));

            // Don't draw the radar if the tray is moving
            if (radarAnimationFrame >= radarSlideAnimationLength)
            {
                var o = new float2(mapRect.Location.X, mapRect.Location.Y + world.Map.Bounds.Height * previewScale * (1 - radarMinimapHeight) / 2);
                var s = new float2(mapRect.Size.Width, mapRect.Size.Height * radarMinimapHeight);
                rsr.DrawSprite(terrainSprite, o, s);
                rsr.DrawSprite(customTerrainSprite, o, s);
                rsr.DrawSprite(actorSprite, o, s);
                rsr.DrawSprite(shroudSprite, o, s);

                // Draw viewport rect
                if (radarAnimationFrame == radarSlideAnimationLength + radarActivateAnimationLength)
                {
                    var wr  = Game.viewport.WorldRect;
                    var wro = new int2(wr.X, wr.Y);
                    var tl  = CellToMinimapPixel(wro);
                    var br  = CellToMinimapPixel(wro + new int2(wr.Width, wr.Height));

                    Game.Renderer.EnableScissor((int)mapRect.Left, (int)mapRect.Top, (int)mapRect.Width, (int)mapRect.Height);
                    Game.Renderer.LineRenderer.DrawRect(tl, br, Color.White);
                    Game.Renderer.DisableScissor();
                }
            }
        }
Esempio n. 20
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. 21
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 b         = RenderBounds;
            var indicator = ChromeProvider.GetImage(IndicatorCollection, IndicatorImage);

            var color = GetBarColor();

            if (Orientation == ResourceBarOrientation.Vertical)
            {
                var tl = new float2(b.X, (int)float2.Lerp(b.Bottom, b.Top, providedFrac));
                var br = tl + new float2(b.Width, (int)(providedFrac * b.Height));
                Game.Renderer.RgbaColorRenderer.FillRect(tl, br, color);

                var x = (b.Left + b.Right - indicator.Size.X) / 2;
                var y = float2.Lerp(b.Bottom, b.Top, usedFrac) - indicator.Size.Y / 2;
                Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, new float2(x, y));
            }
            else
            {
                var tl = new float2(b.X, b.Y);
                var br = tl + new float2((int)(providedFrac * b.Width), b.Height);
                Game.Renderer.RgbaColorRenderer.FillRect(tl, br, color);

                var x = float2.Lerp(b.Left, b.Right, usedFrac) - indicator.Size.X / 2;
                var y = (b.Bottom + b.Top - indicator.Size.Y) / 2;
                Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, new float2(x, y));
            }
        }
Esempio n. 22
0
        public override void Draw()
        {
            if (Monitor.TryEnter(bufferSync))
            {
                try
                {
                    mixerSprite.Sheet.GetTexture().SetData(front, 256, 256);
                }
                finally
                {
                    Monitor.Exit(bufferSync);
                }
            }

            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);
        }
Esempio n. 23
0
        public override void Draw()
        {
            base.Draw();
            var stateOffset = Depressed ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);

            var rb         = RenderBounds;
            var isDisabled = IsDisabled();
            var isHover    = Ui.MouseOverWidget == this || Children.Any(c => c == Ui.MouseOverWidget);

            var markerImageName = WidgetUtils.GetStatefulImageName(DecorationMarker, isDisabled, Depressed, isHover);
            var arrowImage      = ChromeProvider.GetImage(Decorations, markerImageName) ?? ChromeProvider.GetImage(Decorations, DecorationMarker);

            WidgetUtils.DrawRGBA(arrowImage, stateOffset + new float2(rb.Right - (int)((rb.Height + arrowImage.Size.X) / 2), rb.Top + (int)((rb.Height - arrowImage.Size.Y) / 2)));

            var separatorImageName = WidgetUtils.GetStatefulImageName(SeparatorImage, isDisabled, Depressed, isHover);
            var separatorImage     = ChromeProvider.GetImage(Separators, separatorImageName) ?? ChromeProvider.GetImage(Separators, SeparatorImage);

            if (separatorImage != null)
            {
                WidgetUtils.DrawRGBA(separatorImage, stateOffset + new float2(-3, 0) + new float2(rb.Right - rb.Height + 4, rb.Top + (int)((rb.Height - separatorImage.Size.Y) / 2)));
            }
        }
Esempio n. 24
0
        public override void Draw()
        {
            if (Monitor.TryEnter(front))
            {
                try
                {
                    mixerSprite.sheet.Texture.SetData(front, 256, 256);
                }
                finally
                {
                    Monitor.Exit(front);
                }
            }

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(mixerSprite, RenderOrigin, new float2(RenderBounds.Size));

            var sprite = ChromeProvider.GetImage("lobby-bits", "colorpicker");
            var pos    = RenderOrigin + PxFromValue() - new int2(sprite.bounds.Width / 2, sprite.bounds.Height / 2);

            WidgetUtils.FillRectWithColor(new Rectangle(pos.X + 3, pos.Y + 3, 10, 10), Color.RGB);
            Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos);
        }
Esempio n. 25
0
        public override void Draw()
        {
            lock (syncWorker)
            {
                if (updateFront)
                {
                    var swap = swapBitmap;
                    swapBitmap  = frontBitmap;
                    frontBitmap = swap;

                    mixerSprite.sheet.Texture.SetData(frontBitmap);
                    updateFront = false;
                }
            }

            Game.Renderer.RgbaSpriteRenderer.DrawSprite(mixerSprite, RenderOrigin, new float2(RenderBounds.Size));

            var sprite = ChromeProvider.GetImage("lobby-bits", "colorpicker");
            var pos    = RenderOrigin + PxFromValue() - new int2(sprite.bounds.Width / 2, sprite.bounds.Height / 2);

            WidgetUtils.FillRectWithColor(new Rectangle(pos.X + 3, pos.Y + 3, 10, 10), Color.RGB);
            Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos);
        }
Esempio n. 26
0
        void DrawBuildTabs(World world)
        {
            const int tabWidth  = 24;
            const int tabHeight = 40;
            var       x         = paletteOrigin.X - tabWidth;
            var       y         = paletteOrigin.Y + 9;

            tabs.Clear();

            foreach (var queue in VisibleQueues)
            {
                string[] tabKeys   = { "normal", "ready", "selected" };
                var      producing = queue.CurrentItem();
                var      index     = queue == CurrentQueue ? 2 : (producing != null && producing.Done) ? 1 : 0;

                var race = world.LocalPlayer.Country.Race;
                WidgetUtils.DrawRGBA(ChromeProvider.GetImage("tabs-" + tabKeys[index], race + "-" + queue.Info.Type), new float2(x, y));

                var rect = new Rectangle((int)x, (int)y, tabWidth, tabHeight);
                tabs.Add(Pair.New(rect, HandleTabClick(queue, world)));

                if (rect.Contains(Viewport.LastMousePos))
                {
                    var text = queue.Info.Type;
                    var font = Game.Renderer.Fonts["Bold"];
                    var sz   = font.Measure(text);
                    WidgetUtils.DrawPanelPartial("dialog4",
                                                 Rectangle.FromLTRB(rect.Left - sz.X - 30, rect.Top, rect.Left - 5, rect.Bottom),
                                                 PanelSides.All);

                    font.DrawText(text, new float2(rect.Left - sz.X - 20, rect.Top + 12), Color.White);
                }

                y += tabHeight;
            }
        }
Esempio n. 27
0
        public static void SelectSpawnPoint(OrderManager orderManager, MapPreviewWidget mapPreview, MapPreview preview, MouseInput mi)
        {
            if (mi.Button != MouseButton.Left)
            {
                return;
            }

            if (!orderManager.LocalClient.IsObserver && orderManager.LocalClient.State == Session.ClientState.Ready)
            {
                return;
            }

            var spawnSize     = new float2(ChromeProvider.GetImage("lobby-bits", "spawn-unclaimed").bounds.Size);
            var selectedSpawn = preview.SpawnPoints
                                .Select((sp, i) => Pair.New(mapPreview.ConvertToPreview(sp), i))
                                .Where(a => ((a.First - mi.Location).ToFloat2() / spawnSize * 2).LengthSquared <= 1)
                                .Select(a => a.Second + 1)
                                .FirstOrDefault();

            var locals       = orderManager.LobbyInfo.Clients.Where(c => c.Index == orderManager.LocalClient.Index || (Game.IsHost && c.Bot != null));
            var playerToMove = locals.FirstOrDefault(c => ((selectedSpawn == 0) ^ (c.SpawnPoint == 0) && !c.IsObserver));

            SetSpawnPoint(orderManager, playerToMove, selectedSpawn);
        }
Esempio n. 28
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);

            var upHover = Ui.MouseOverWidget == this && upButtonRect.Contains(Viewport.LastMousePos);

            upDisabled = thumbHeight == 0 || currentListOffset >= 0;

            var downHover = Ui.MouseOverWidget == this && downButtonRect.Contains(Viewport.LastMousePos);

            downDisabled = thumbHeight == 0 || currentListOffset <= Bounds.Height - ContentHeight;

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

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

            if (thumbHeight > 0)
            {
                ButtonWidget.DrawBackground(Button, 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));

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

            Game.Renderer.EnableScissor(drawBounds);

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

            Game.Renderer.DisableScissor();
        }
Esempio n. 29
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 b         = RenderBounds;
            var indicator = ChromeProvider.GetImage(IndicatorCollection, IndicatorImage);

            var color = GetBarColor();

            if (Orientation == ResourceBarOrientation.Vertical)
            {
                if (Style == ResourceBarStyle.Bevelled)
                {
                    var colorDark = Exts.ColorLerp(0.25f, color, Color.Black);
                    for (var i = 0; i < b.Height; i++)
                    {
                        color = (i - 1 < b.Height / 2) ? color : colorDark;
                        var bottom = new float2(b.Left + i, b.Bottom);
                        var top    = new float2(b.Left + i, b.Bottom + providedFrac * b.Height);

                        // Indent corners
                        if ((i == 0 || i == b.Width - 1) && providedFrac * b.Height > 1)
                        {
                            bottom.Y += 1;
                            top.Y    -= 1;
                        }

                        Game.Renderer.LineRenderer.DrawLine(bottom, top, color, color);
                    }
                }
                else
                {
                    Game.Renderer.LineRenderer.FillRect(new Rectangle(b.X, (int)float2.Lerp(b.Bottom, b.Top, providedFrac),
                                                                      b.Width, (int)(providedFrac * b.Height)), color);
                }

                var x = (b.Left + b.Right - indicator.size.X) / 2;
                var y = float2.Lerp(b.Bottom, b.Top, usedFrac) - indicator.size.Y / 2;
                Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, new float2(x, y));
            }
            else
            {
                if (Style == ResourceBarStyle.Bevelled)
                {
                    var colorDark = Exts.ColorLerp(0.25f, color, Color.Black);
                    for (var i = 0; i < b.Height; i++)
                    {
                        color = (i - 1 < b.Height / 2) ? color : colorDark;
                        var left  = new float2(b.Left, b.Top + i);
                        var right = new float2(b.Left + providedFrac * b.Width, b.Top + i);

                        // Indent corners
                        if ((i == 0 || i == b.Height - 1) && providedFrac * b.Width > 1)
                        {
                            left.X  += 1;
                            right.X -= 1;
                        }

                        Game.Renderer.LineRenderer.DrawLine(left, right, color, color);
                    }
                }
                else
                {
                    Game.Renderer.LineRenderer.FillRect(new Rectangle(b.X, b.Y, (int)(providedFrac * b.Width), b.Height), color);
                }

                var x = float2.Lerp(b.Left, b.Right, usedFrac) - indicator.size.X / 2;
                var y = (b.Bottom + b.Top - indicator.size.Y) / 2;
                Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, new float2(x, y));
            }
        }
Esempio n. 30
0
        int DrawPalette(ProductionQueue queue)
        {
            buttons.Clear();

            var paletteCollection = "palette-" + world.LocalPlayer.Country.Race;
            var origin            = new float2(paletteOrigin.X + 9, paletteOrigin.Y + 9);
            var iconOffset        = 0.5f * new float2(IconWidth, IconHeight);
            var x = 0;
            var y = 0;

            if (queue != null)
            {
                var buildableItems = queue.BuildableItems().ToArray();
                var allBuildables  = queue.AllItems().OrderBy(a => a.Traits.Get <BuildableInfo>().BuildPaletteOrder).ToArray();

                var overlayBits = new List <Pair <Sprite, float2> >();
                var textBits    = new List <Pair <float2, string> >();
                numActualRows = Math.Max((allBuildables.Count() + Columns - 1) / Columns, Rows);

                // Palette Background
                WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "top"), new float2(origin.X - 9, origin.Y - 9));
                for (var w = 0; w < numActualRows; w++)
                {
                    WidgetUtils.DrawRGBA(
                        ChromeProvider.GetImage(paletteCollection, "bg-" + (w % 4)),
                        new float2(origin.X - 9, origin.Y + IconHeight * w));
                }
                WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "bottom"),
                                     new float2(origin.X - 9, origin.Y - 1 + IconHeight * numActualRows));


                // Icons
                string tooltipItem   = null;
                var    tooltipHotkey = Hotkey.Invalid;
                var    i             = 0;
                foreach (var item in allBuildables)
                {
                    var rect    = new RectangleF(origin.X + x * IconWidth, origin.Y + IconHeight * y, IconWidth, IconHeight);
                    var drawPos = new float2(rect.Location);
                    var icon    = new Animation(world, RenderSimple.GetImage(item));
                    icon.Play(item.Traits.Get <TooltipInfo>().Icon);
                    WidgetUtils.DrawSHPCentered(icon.Image, drawPos + iconOffset, worldRenderer);

                    var firstOfThis = queue.AllQueued().FirstOrDefault(a => a.Item == item.Name);

                    if (rect.Contains(Viewport.LastMousePos))
                    {
                        tooltipItem   = item.Name;
                        tooltipHotkey = Game.Settings.Keys.GetProductionHotkey(i);
                    }

                    var overlayPos = drawPos + new float2(32, 16);

                    if (firstOfThis != null)
                    {
                        clock.PlayFetchIndex("idle",
                                             () => (firstOfThis.TotalTime - firstOfThis.RemainingTime)
                                             * (clock.CurrentSequence.Length - 1) / firstOfThis.TotalTime);
                        clock.Tick();
                        WidgetUtils.DrawSHPCentered(clock.Image, drawPos + iconOffset, worldRenderer);

                        if (queue.CurrentItem() == firstOfThis)
                        {
                            textBits.Add(Pair.New(overlayPos, GetOverlayForItem(firstOfThis)));
                        }

                        var repeats = queue.AllQueued().Count(a => a.Item == item.Name);
                        if (repeats > 1 || queue.CurrentItem() != firstOfThis)
                        {
                            textBits.Add(Pair.New(overlayPos + new float2(-24, -14), repeats.ToString()));
                        }
                    }
                    else
                    if (buildableItems.All(a => a.Name != item.Name))
                    {
                        overlayBits.Add(Pair.New(cantBuild.Image, drawPos));
                    }

                    var closureName = buildableItems.Any(a => a.Name == item.Name) ? item.Name : null;
                    buttons.Add(Pair.New(new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height), HandleClick(closureName, world)));

                    if (++x == Columns)
                    {
                        x = 0; y++;
                    }
                    i++;
                }
                if (x != 0)
                {
                    y++;
                }

                foreach (var ob in overlayBits)
                {
                    WidgetUtils.DrawSHPCentered(ob.First, ob.Second + iconOffset, worldRenderer);
                }

                var font = Game.Renderer.Fonts["TinyBold"];
                foreach (var tb in textBits)
                {
                    var size = font.Measure(tb.Second);
                    if (ReadyTextStyle == ReadyTextStyleOptions.Solid || orderManager.LocalFrameNumber / 9 % 2 == 0 || tb.Second != ReadyText)
                    {
                        font.DrawTextWithContrast(tb.Second, tb.First - new float2(size.X / 2, 0),
                                                  Color.White, Color.Black, 1);
                    }
                    else if (ReadyTextStyle == ReadyTextStyleOptions.AlternatingColor)
                    {
                        font.DrawTextWithContrast(tb.Second, tb.First - new float2(size.X / 2, 0),
                                                  ReadyTextAltColor, Color.Black, 1);
                    }
                }

                // Tooltip
                if (tooltipItem != null && !paletteAnimating && paletteOpen)
                {
                    DrawProductionTooltip(world, tooltipItem, tooltipHotkey,
                                          new float2(Game.Renderer.Resolution.Width, origin.Y + numActualRows * IconHeight + 9).ToInt2());
                }
            }

            // Palette Dock
            WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "dock-top"),
                                 new float2(Game.Renderer.Resolution.Width - 14, origin.Y - 23));

            for (var i = 0; i < numActualRows; i++)
            {
                WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "dock-" + (i % 4)),
                                     new float2(Game.Renderer.Resolution.Width - 14, origin.Y + IconHeight * i));
            }

            WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "dock-bottom"),
                                 new float2(Game.Renderer.Resolution.Width - 14, origin.Y - 1 + IconHeight * numActualRows));

            return(IconHeight * y + 9);
        }