From 59fdceb4fdd6e8c446b85eb8edc2762c35b9f141 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Tue, 18 Oct 2011 20:34:00 +1300 Subject: [PATCH] convert Map.SpawnPoints to int2[]; tidy --- OpenRA.Game/Map.cs | 12 ++++++++++-- OpenRA.Game/Widgets/MapPreviewWidget.cs | 2 +- OpenRA.Mods.Cnc/Widgets/Logic/CncLobbyLogic.cs | 8 ++++---- OpenRA.Mods.RA/MPStartLocations.cs | 6 +++--- OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs | 2 +- OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs | 2 +- OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs | 5 +++-- 7 files changed, 23 insertions(+), 14 deletions(-) diff --git a/OpenRA.Game/Map.cs b/OpenRA.Game/Map.cs index 50fe1c084e..6d0b1e8888 100644 --- a/OpenRA.Game/Map.cs +++ b/OpenRA.Game/Map.cs @@ -41,7 +41,14 @@ namespace OpenRA [FieldLoader.Ignore] public Lazy> Actors; public int PlayerCount { get { return Players.Count(p => p.Value.Playable); } } - public IEnumerable SpawnPoints { get { return Actors.Value.Values.Where(a => a.Type == "mpspawn").Select(a => a.InitDict.Get().value); } } + + public int2[] GetSpawnPoints() + { + return Actors.Value.Values + .Where(a => a.Type == "mpspawn") + .Select(a => a.InitDict.Get().value) + .ToArray(); + } public Rectangle Bounds; @@ -420,7 +427,8 @@ namespace OpenRA NonCombatant = true }); - for (int index = 0; index < SpawnPoints.Count(); index++) + var numSpawns = GetSpawnPoints().Length; + for (var index = 0; index < numSpawns; index++) { var p = new PlayerReference { diff --git a/OpenRA.Game/Widgets/MapPreviewWidget.cs b/OpenRA.Game/Widgets/MapPreviewWidget.cs index 5e46989ffa..4e8f2085ee 100644 --- a/OpenRA.Game/Widgets/MapPreviewWidget.cs +++ b/OpenRA.Game/Widgets/MapPreviewWidget.cs @@ -91,7 +91,7 @@ namespace OpenRA.Widgets // Overlay spawnpoints var colors = SpawnColors(); - foreach (var p in map.SpawnPoints) + foreach (var p in map.GetSpawnPoints()) { var owned = colors.ContainsKey(p); var pos = ConvertToPreview(map, p); diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncLobbyLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/CncLobbyLogic.cs index a20f4449e1..e5ecfa5eca 100644 --- a/OpenRA.Mods.Cnc/Widgets/Logic/CncLobbyLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/Logic/CncLobbyLogic.cs @@ -123,7 +123,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic || orderManager.LocalClient.State == Session.ClientState.Ready) return; - var p = map.SpawnPoints + var p = map.GetSpawnPoints() .Select((sp, i) => Pair.New(mapPreview.ConvertToPreview(map, sp), i)) .Where(a => (a.First - mi.Location).LengthSquared < 64) .Select(a => a.Second + 1) @@ -278,8 +278,8 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic Func setupItem = (ii, itemTemplate) => { var item = ScrollItemWidget.Setup(itemTemplate, - () => client.SpawnPoint == ii, - () => orderManager.IssueOrder(Order.Command("spawn {0} {1}".F(client.Index, ii)))); + () => client.SpawnPoint == ii, + () => orderManager.IssueOrder(Order.Command("spawn {0} {1}".F(client.Index, ii)))); item.GetWidget("LABEL").GetText = () => ii == 0 ? "-" : ii.ToString(); return item; }; @@ -288,7 +288,7 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic .Where(c => c.SpawnPoint != 0 && c.SpawnPoint != client.SpawnPoint && c.Slot != null) .Select(c => c.SpawnPoint).ToList(); - var options = Graphics.Util.MakeArray(Map.SpawnPoints.Count() + 1, i => i).Except(taken).ToList(); + var options = Graphics.Util.MakeArray(Map.GetSpawnPoints().Length + 1, i => i).Except(taken).ToList(); dropdown.ShowDropDown("TEAM_DROPDOWN_TEMPLATE", 150, options, setupItem); } diff --git a/OpenRA.Mods.RA/MPStartLocations.cs b/OpenRA.Mods.RA/MPStartLocations.cs index df5344a370..79ad39e8ae 100755 --- a/OpenRA.Mods.RA/MPStartLocations.cs +++ b/OpenRA.Mods.RA/MPStartLocations.cs @@ -29,8 +29,8 @@ namespace OpenRA.Mods.RA public void WorldLoaded(World world) { var taken = world.LobbyInfo.Clients.Where(c => c.SpawnPoint != 0 && c.Slot != null) - .Select(c => world.Map.SpawnPoints.ElementAt(c.SpawnPoint - 1)).ToList(); - var available = world.Map.SpawnPoints.Except(taken).ToList(); + .Select(c => world.Map.GetSpawnPoints()[c.SpawnPoint-1]).ToList(); + var available = world.Map.GetSpawnPoints().Except(taken).ToList(); // Set spawn foreach (var kv in world.LobbyInfo.Slots) @@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA var client = world.LobbyInfo.ClientInSlot(kv.Key); var spid = (client == null || client.SpawnPoint == 0) ? ChooseSpawnPoint(world, available, taken) - : world.Map.SpawnPoints.ElementAt(client.SpawnPoint - 1); + : world.Map.GetSpawnPoints()[client.SpawnPoint-1]; Start.Add(player, spid); } diff --git a/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs b/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs index c161031ca5..63a2d67bf1 100644 --- a/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs +++ b/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs @@ -381,7 +381,7 @@ namespace OpenRA.Mods.RA.Server return true; int spawnPoint; - if (!int.TryParse(parts[1], out spawnPoint) || spawnPoint < 0 || spawnPoint > server.Map.SpawnPoints.Count()) + if (!int.TryParse(parts[1], out spawnPoint) || spawnPoint < 0 || spawnPoint > server.Map.GetSpawnPoints().Length) { Log.Write("server", "Invalid spawn point: {0}", parts[1]); return true; diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs index 56c52e6c4b..251a0c23e8 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs @@ -70,7 +70,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic || orderManager.LocalClient.State == Session.ClientState.Ready) return; - var p = map.SpawnPoints + var p = map.GetSpawnPoints() .Select((sp, i) => Pair.New(mapPreview.ConvertToPreview(map, sp), i)) .Where(a => (a.First - mi.Location).LengthSquared < 64) .Select(a => a.Second + 1) diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs index 49ad2f0162..c77fa3778a 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs @@ -97,7 +97,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic return item; }; - var options = Graphics.Util.MakeArray(map.SpawnPoints.Count() + 1, i => i).ToList(); + var options = Graphics.Util.MakeArray(map.GetSpawnPoints().Length + 1, i => i).ToList(); dropdown.ShowDropDown("TEAM_DROPDOWN_TEMPLATE", 150, options, setupItem); } @@ -121,10 +121,11 @@ namespace OpenRA.Mods.RA.Widgets.Logic public static Dictionary GetSpawnColors(OrderManager orderManager, Map map) { + var spawns = map.GetSpawnPoints(); return orderManager.LobbyInfo.Clients .Where( c => c.SpawnPoint != 0 ) .ToDictionary( - c => Map.SpawnPoints.ElementAt( c.SpawnPoint - 1 ), + c => spawns[c.SpawnPoint - 1], c => c.ColorRamp.GetColor(0)); } }