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"); }
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); }
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); } }
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(); }
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)); }
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; }
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")); }
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); }
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)); }
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(); }
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); }
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); } }
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); }
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); }
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); }
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"); }
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"); }
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(); } } }
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)); }
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)); } }
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); }
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))); } }
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); }
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); }
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; } }
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); }
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(); }
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)); } }
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); }