Right click lobby spawns to disable or remove players.

This commit is contained in:
Trevor Nichols
2020-07-19 11:11:27 +10:00
committed by abcdefg30
parent 13581c030d
commit d66e0bb22e
30 changed files with 165 additions and 45 deletions

View File

@@ -57,6 +57,8 @@ namespace OpenRA.Mods.Common.Widgets
public class MapPreviewWidget : Widget
{
static readonly int[] NoDisabledSpawnPoints = Array.Empty<int>();
public readonly bool IgnoreMouseInput = false;
public readonly bool ShowSpawnPoints = true;
@@ -64,13 +66,14 @@ namespace OpenRA.Mods.Common.Widgets
public readonly string TooltipTemplate = "SPAWN_TOOLTIP";
readonly Lazy<TooltipContainerWidget> tooltipContainer;
readonly Sprite spawnClaimed, spawnUnclaimed;
readonly Sprite spawnClaimed, spawnUnclaimed, spawnDisabled;
readonly SpriteFont spawnFont;
readonly Color spawnColor, spawnContrastColor;
readonly int2 spawnLabelOffset;
public Func<MapPreview> Preview = () => null;
public Func<Dictionary<int, SpawnOccupant>> SpawnOccupants = () => new Dictionary<int, SpawnOccupant>();
public Func<IEnumerable<int>> DisabledSpawnPoints = () => NoDisabledSpawnPoints;
public Action<MouseInput> OnMouseDown = _ => { };
public int TooltipSpawnIndex = -1;
public bool ShowUnoccupiedSpawnpoints = true;
@@ -85,6 +88,7 @@ namespace OpenRA.Mods.Common.Widgets
spawnClaimed = ChromeProvider.GetImage("lobby-bits", "spawn-claimed");
spawnUnclaimed = ChromeProvider.GetImage("lobby-bits", "spawn-unclaimed");
spawnDisabled = ChromeProvider.GetImage("lobby-bits", "spawn-disabled") ?? spawnUnclaimed;
spawnFont = Game.Renderer.Fonts[ChromeMetrics.Get<string>("SpawnFont")];
spawnColor = ChromeMetrics.Get<Color>("SpawnColor");
spawnContrastColor = ChromeMetrics.Get<Color>("SpawnContrastColor");
@@ -184,6 +188,7 @@ namespace OpenRA.Mods.Common.Widgets
{
var spawnPoints = preview.SpawnPoints;
var occupants = SpawnOccupants();
var disabledSpawnPoints = DisabledSpawnPoints();
var gridType = preview.GridType;
for (var i = 0; i < spawnPoints.Length; i++)
{
@@ -191,21 +196,30 @@ namespace OpenRA.Mods.Common.Widgets
// Spawn numbers are 1 indexed with 0 meaning "random spawn".
var occupied = occupants.TryGetValue(i + 1, out var occupant);
var disabled = disabledSpawnPoints.Contains(i + 1);
var pos = ConvertToPreview(p, gridType);
var sprite = occupied ? spawnClaimed : spawnUnclaimed;
var sprite = disabled ? spawnDisabled : occupied ? spawnClaimed : spawnUnclaimed;
var offset = sprite.Size.XY.ToInt2() / 2;
if (((pos - Viewport.LastMousePos).ToFloat2() / offset.ToFloat2()).LengthSquared <= 1)
TooltipSpawnIndex = spawnPoints.IndexOf(p) + 1;
if (disabled)
{
Game.Renderer.RgbaSpriteRenderer.DrawSprite(spawnDisabled, pos - offset);
continue;
}
if (occupied)
WidgetUtils.FillEllipseWithColor(new Rectangle(pos.X - offset.X + 1, pos.Y - offset.Y + 1, (int)sprite.Size.X - 2, (int)sprite.Size.Y - 2), occupant.Color);
Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos - offset);
var number = Convert.ToChar('A' + spawnPoints.IndexOf(p)).ToString();
var textOffset = spawnFont.Measure(number) / 2 + spawnLabelOffset;
spawnFont.DrawTextWithContrast(number, pos - textOffset, spawnColor, spawnContrastColor, 1);
if (((pos - Viewport.LastMousePos).ToFloat2() / offset.ToFloat2()).LengthSquared <= 1)
TooltipSpawnIndex = spawnPoints.IndexOf(p) + 1;
}
}
}