Right click lobby spawns to disable or remove players.
This commit is contained in:
committed by
abcdefg30
parent
13581c030d
commit
d66e0bb22e
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user