Preserve editor actor order.

This commit is contained in:
Paul Chote
2016-04-17 20:25:20 -04:00
parent 6323f763f1
commit c68ef3d25f

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Mods.Common.Traits
public class EditorActorLayer : IWorldLoaded, ITickRender, IRender, IRadarSignature, ICreatePlayers public class EditorActorLayer : IWorldLoaded, ITickRender, IRender, IRadarSignature, ICreatePlayers
{ {
readonly EditorActorLayerInfo info; readonly EditorActorLayerInfo info;
readonly Dictionary<string, EditorActorPreview> previews = new Dictionary<string, EditorActorPreview>(); readonly List<EditorActorPreview> previews = new List<EditorActorPreview>();
readonly Dictionary<CPos, List<EditorActorPreview>> cellMap = new Dictionary<CPos, List<EditorActorPreview>>(); readonly Dictionary<CPos, List<EditorActorPreview>> cellMap = new Dictionary<CPos, List<EditorActorPreview>>();
SpatiallyPartitioned<EditorActorPreview> screenMap; SpatiallyPartitioned<EditorActorPreview> screenMap;
@@ -75,7 +75,7 @@ namespace OpenRA.Mods.Common.Traits
Add(kv.Key, new ActorReference(kv.Value.Value, kv.Value.ToDictionary()), true); Add(kv.Key, new ActorReference(kv.Value.Value, kv.Value.ToDictionary()), true);
// Update neighbours in one pass // Update neighbours in one pass
foreach (var p in previews.Values) foreach (var p in previews)
UpdateNeighbours(p.Footprint); UpdateNeighbours(p.Footprint);
} }
@@ -84,8 +84,8 @@ namespace OpenRA.Mods.Common.Traits
if (wr.World.Type != WorldType.Editor) if (wr.World.Type != WorldType.Editor)
return; return;
foreach (var kv in previews.Values) foreach (var p in previews)
kv.Tick(); p.Tick();
} }
static readonly IEnumerable<IRenderable> NoRenderables = Enumerable.Empty<IRenderable>(); static readonly IEnumerable<IRenderable> NoRenderables = Enumerable.Empty<IRenderable>();
@@ -105,7 +105,7 @@ namespace OpenRA.Mods.Common.Traits
var owner = Players.Players[reference.InitDict.Get<OwnerInit>().PlayerName]; var owner = Players.Players[reference.InitDict.Get<OwnerInit>().PlayerName];
var preview = new EditorActorPreview(worldRenderer, id, reference, owner); var preview = new EditorActorPreview(worldRenderer, id, reference, owner);
previews.Add(id, preview); previews.Add(preview);
screenMap.Add(preview, preview.Bounds); screenMap.Add(preview, preview.Bounds);
foreach (var kv in preview.Footprint) foreach (var kv in preview.Footprint)
@@ -133,7 +133,7 @@ namespace OpenRA.Mods.Common.Traits
public void Remove(EditorActorPreview preview) public void Remove(EditorActorPreview preview)
{ {
previews.Remove(preview.ID); previews.Remove(preview);
screenMap.Remove(preview); screenMap.Remove(preview);
foreach (var kv in preview.Footprint) foreach (var kv in preview.Footprint)
@@ -156,7 +156,7 @@ namespace OpenRA.Mods.Common.Traits
void SyncMultiplayerCount() void SyncMultiplayerCount()
{ {
var newCount = previews.Count(p => p.Value.Info.Name == "mpspawn"); var newCount = previews.Count(p => p.Info.Name == "mpspawn");
var mp = Players.Players.Where(p => p.Key.StartsWith("Multi")).ToList(); var mp = Players.Players.Where(p => p.Key.StartsWith("Multi")).ToList();
foreach (var kv in mp) foreach (var kv in mp)
{ {
@@ -246,7 +246,7 @@ namespace OpenRA.Mods.Common.Traits
var id = previews.Count(); var id = previews.Count();
var possibleName = "Actor" + id.ToString(); var possibleName = "Actor" + id.ToString();
while (previews.ContainsKey(possibleName)) while (previews.Any(p => p.ID == possibleName))
{ {
id++; id++;
possibleName = "Actor" + id.ToString(); possibleName = "Actor" + id.ToString();
@@ -259,7 +259,7 @@ namespace OpenRA.Mods.Common.Traits
{ {
var nodes = new List<MiniYamlNode>(); var nodes = new List<MiniYamlNode>();
foreach (var a in previews) foreach (var a in previews)
nodes.Add(new MiniYamlNode(a.Key, a.Value.Save())); nodes.Add(new MiniYamlNode(a.ID, a.Save()));
return nodes; return nodes;
} }