Added the spawnpoint map tooltip that displays players name in the lobby (closes #2024)

This commit is contained in:
Carko
2013-01-05 00:05:45 +01:00
committed by Chris Forbes
parent 914afa2dee
commit e10920d4ea
3 changed files with 24 additions and 4 deletions

View File

@@ -11,6 +11,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Linq;
using OpenRA.FileFormats; using OpenRA.FileFormats;
using OpenRA.Graphics; using OpenRA.Graphics;
@@ -21,6 +22,7 @@ namespace OpenRA.Widgets
public Func<Map> Map = () => null; public Func<Map> Map = () => null;
public Func<Dictionary<int2, Color>> SpawnColors = () => new Dictionary<int2, Color>(); public Func<Dictionary<int2, Color>> SpawnColors = () => new Dictionary<int2, Color>();
public Action<MouseInput> OnMouseDown = _ => {}; public Action<MouseInput> OnMouseDown = _ => {};
public Action<int, int2> OnTooltip = (_, __) => { };
public bool IgnoreMouseInput = false; public bool IgnoreMouseInput = false;
public bool ShowSpawnPoints = true; public bool ShowSpawnPoints = true;
@@ -96,7 +98,8 @@ namespace OpenRA.Widgets
{ {
var colors = SpawnColors(); var colors = SpawnColors();
foreach (var p in map.GetSpawnPoints()) var spawnPoints = map.GetSpawnPoints().ToList();
foreach (var p in spawnPoints)
{ {
var owned = colors.ContainsKey(p); var owned = colors.ContainsKey(p);
var pos = ConvertToPreview(p); var pos = ConvertToPreview(p);
@@ -107,6 +110,11 @@ namespace OpenRA.Widgets
WidgetUtils.FillRectWithColor(new Rectangle(pos.X + offset.X + 2, pos.Y + offset.Y + 2, 12, 12), colors[p]); 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); Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos + offset);
if ((pos - Viewport.LastMousePos).LengthSquared < 64)
{
OnTooltip(spawnPoints.IndexOf(p) + 1, pos);
}
} }
} }
} }

View File

@@ -110,7 +110,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic
mapPreview.IsVisible = () => Map != null; mapPreview.IsVisible = () => Map != null;
mapPreview.Map = () => Map; mapPreview.Map = () => Map;
mapPreview.OnMouseDown = mi => LobbyUtils.SelectSpawnPoint( orderManager, mapPreview, Map, mi ); mapPreview.OnMouseDown = mi => LobbyUtils.SelectSpawnPoint( orderManager, mapPreview, Map, mi );
mapPreview.SpawnColors = () => LobbyUtils.GetSpawnColors( orderManager, Map ); mapPreview.OnTooltip = (spawnPoint, pos) => LobbyUtils.ShowSpawnPointTooltip(orderManager, spawnPoint, pos);
mapPreview.SpawnColors = () => LobbyUtils.GetSpawnColors(orderManager, Map);
var mapTitle = lobby.GetOrNull<LabelWidget>("MAP_TITLE"); var mapTitle = lobby.GetOrNull<LabelWidget>("MAP_TITLE");
if (mapTitle != null) if (mapTitle != null)

View File

@@ -151,7 +151,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
{ {
var spawns = map.GetSpawnPoints(); var spawns = map.GetSpawnPoints();
return orderManager.LobbyInfo.Clients return orderManager.LobbyInfo.Clients
.Where( c => c.SpawnPoint != 0 ) .Where( c => c.SpawnPoint != 0)
.ToDictionary( .ToDictionary(
c => spawns[c.SpawnPoint - 1], c => spawns[c.SpawnPoint - 1],
c => c.ColorRamp.GetColor(0)); c => c.ColorRamp.GetColor(0));
@@ -173,9 +173,20 @@ namespace OpenRA.Mods.RA.Widgets.Logic
if (selectedSpawn == 0 || !owned) if (selectedSpawn == 0 || !owned)
{ {
var locals = orderManager.LobbyInfo.Clients.Where(c => c.Index == orderManager.LocalClient.Index || (Game.IsHost && c.Bot != null)); var locals = orderManager.LobbyInfo.Clients.Where(c => c.Index == orderManager.LocalClient.Index || (Game.IsHost && c.Bot != null));
var playerToMove = locals.Where(c => (selectedSpawn == 0) ^ (c.SpawnPoint == 0)).FirstOrDefault(); var playerToMove = locals.FirstOrDefault(c => (selectedSpawn == 0) ^ (c.SpawnPoint == 0));
orderManager.IssueOrder(Order.Command("spawn {0} {1}".F((playerToMove ?? orderManager.LocalClient).Index, selectedSpawn))); orderManager.IssueOrder(Order.Command("spawn {0} {1}".F((playerToMove ?? orderManager.LocalClient).Index, selectedSpawn)));
} }
} }
public static void ShowSpawnPointTooltip(OrderManager orderManager, int spawnPoint, int2 position)
{
var client = orderManager.LobbyInfo.Clients.FirstOrDefault(c => c.SpawnPoint == spawnPoint);
if (client != null)
{
var rect = new Rectangle(position.X, position.Y, Game.Renderer.Fonts["Regular"].Measure(client.Name).X + 15, 25);
WidgetUtils.DrawPanel("dialog4", rect);
Game.Renderer.Fonts["Regular"].DrawText(client.Name, position + new int2(5, 5), Color.White);
}
}
} }
} }