diff --git a/OpenRA.Game/Widgets/Delegates/ServerBrowserDelegate.cs b/OpenRA.Game/Widgets/Delegates/ServerBrowserDelegate.cs index 436e1daad0..c0c85e1a88 100644 --- a/OpenRA.Game/Widgets/Delegates/ServerBrowserDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/ServerBrowserDelegate.cs @@ -58,8 +58,9 @@ namespace OpenRA.Widgets.Delegates }; bg.GetWidget("SERVER_INFO").IsVisible = () => currentServer != null; - bg.GetWidget("MAP_PREVIEW").Map = () => CurrentMap(); - bg.GetWidget("MAP_CONTAINER").IsVisible = () => CurrentMap() != null; + var preview = bg.GetWidget("MAP_PREVIEW"); + preview.Map = () => CurrentMap(); + preview.IsVisible = () => CurrentMap() != null; bg.GetWidget("SERVER_IP").GetText = () => currentServer.Address; bg.GetWidget("SERVER_MODS").GetText = () => string.Join( ",", currentServer.Mods ); diff --git a/OpenRA.Game/Widgets/MapPreviewWidget.cs b/OpenRA.Game/Widgets/MapPreviewWidget.cs index fdf0a3d1f7..f20531538c 100755 --- a/OpenRA.Game/Widgets/MapPreviewWidget.cs +++ b/OpenRA.Game/Widgets/MapPreviewWidget.cs @@ -25,8 +25,13 @@ namespace OpenRA.Widgets : base(other) { lastMap = (other as MapPreviewWidget).lastMap; + Map = (other as MapPreviewWidget).Map; + OnSpawnClick = (other as MapPreviewWidget).OnSpawnClick; + SpawnColors = (other as MapPreviewWidget).SpawnColors; } - + + static Sprite UnownedSpawn = null; + static Sprite OwnedSpawn = null; const int closeEnough = 50; public override bool HandleInput(MouseInput mi) { @@ -35,11 +40,9 @@ namespace OpenRA.Widgets return false; if (mi.Event == MouseInputEvent.Down && mi.Button == MouseButton.Left) - { - var container = new Rectangle(RenderOrigin.X, RenderOrigin.Y, Parent.Bounds.Width, Parent.Bounds.Height); - + { var p = map.Waypoints - .Select((sp, i) => Pair.New(map.ConvertToPreview(sp.Value, container), i)) + .Select((sp, i) => Pair.New(map.ConvertToPreview(sp.Value, RenderBounds), i)) .Where(a => (a.First - mi.Location).LengthSquared < closeEnough) .Select(a => a.Second + 1) .FirstOrDefault(); @@ -54,6 +57,11 @@ namespace OpenRA.Widgets public override void DrawInner( World world ) { + if (UnownedSpawn == null) + UnownedSpawn = ChromeProvider.GetImage(Game.chrome.renderer, "spawnpoints", "unowned"); + if (OwnedSpawn == null) + OwnedSpawn = ChromeProvider.GetImage(Game.chrome.renderer, "spawnpoints", "owned"); + var map = Map(); if( map == null ) return; if (lastMap != map) @@ -79,29 +87,30 @@ namespace OpenRA.Widgets "chrome", new float2( mapRect.Size ) ); - DrawSpawnPoints( map, new Rectangle(RenderOrigin.X, RenderOrigin.Y, Parent.Bounds.Width, Parent.Bounds.Height ), world ); + DrawSpawnPoints( map, world ); } - void DrawSpawnPoints(MapStub map, Rectangle container, World world) + void DrawSpawnPoints(MapStub map, World world) { var colors = SpawnColors(); foreach (var p in map.SpawnPoints) { - var pos = map.ConvertToPreview(p, container) - new int2(8, 8); - var sprite = "unowned"; - + var pos = map.ConvertToPreview(p, RenderBounds); + var sprite = UnownedSpawn; + var offset = new int2(-UnownedSpawn.bounds.Width/2, -UnownedSpawn.bounds.Height/2); + if (colors.ContainsKey(p)) { + sprite = OwnedSpawn; + offset = new int2(-OwnedSpawn.bounds.Width/2, -OwnedSpawn.bounds.Height/2); + Game.chrome.lineRenderer.FillRect(new RectangleF( - Game.viewport.Location.X + pos.X + 2, - Game.viewport.Location.Y + pos.Y + 2, + Game.viewport.Location.X + pos.X + offset.X + 2, + Game.viewport.Location.Y + pos.Y + offset.Y + 2, 12, 12), colors[p]); - - sprite = "owned"; } - Game.chrome.renderer.RgbaSpriteRenderer.DrawSprite( - ChromeProvider.GetImage(Game.chrome.renderer, "spawnpoints", sprite), pos, "chrome"); + Game.chrome.renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos + offset, "chrome"); } Game.chrome.lineRenderer.Flush(); diff --git a/mods/cnc/menus.yaml b/mods/cnc/menus.yaml index a2b68e2e4d..9feaa68f6d 100644 --- a/mods/cnc/menus.yaml +++ b/mods/cnc/menus.yaml @@ -474,20 +474,12 @@ Container: Align:Left Width:70 Height:20 - Background@MAP_CONTAINER: - Id:MAP_CONTAINER - X:PARENT_RIGHT-245 + MapPreview@MAP_PREVIEW: + Id:MAP_PREVIEW + X:PARENT_RIGHT-241 Y:140 - Width:200 - Height:200 - Background:dialog3 - Children: - MapPreview@MAP_PREVIEW: - Id:MAP_PREVIEW - X:4 - Y:4 - Width:192 - Height:192 + Width:192 + Height:192 Button@DIRECTCONNECT_BUTTON: Id:DIRECTCONNECT_BUTTON X:20 diff --git a/mods/ra/menus.yaml b/mods/ra/menus.yaml index 735bbd814d..8619f21c80 100644 --- a/mods/ra/menus.yaml +++ b/mods/ra/menus.yaml @@ -474,20 +474,12 @@ Container: Align:Left Width:70 Height:20 - Background@MAP_CONTAINER: - Id:MAP_CONTAINER - X:PARENT_RIGHT-245 + MapPreview@MAP_PREVIEW: + Id:MAP_PREVIEW + X:PARENT_RIGHT-241 Y:140 - Width:200 - Height:200 - Background:dialog3 - Children: - MapPreview@MAP_PREVIEW: - Id:MAP_PREVIEW - X:4 - Y:4 - Width:192 - Height:192 + Width:192 + Height:192 Button@DIRECTCONNECT_BUTTON: Id:DIRECTCONNECT_BUTTON X:20