diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index 0b7c54f84b..1fc79b6d8b 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -27,7 +27,7 @@ namespace OpenRA { Set actors = new Set(); List effects = new List(); - List> frameEndActions = new List>(); + Queue> frameEndActions = new Queue>(); public XRandom SharedRandom = new XRandom(0); @@ -140,7 +140,7 @@ namespace OpenRA public void Add(IEffect b) { effects.Add(b); } public void Remove(IEffect b) { effects.Remove(b); } - public void AddFrameEndTask( Action a ) { frameEndActions.Add( a ); } + public void AddFrameEndTask( Action a ) { frameEndActions.Enqueue( a ); } public event Action ActorAdded = _ => { }; public event Action ActorRemoved = _ => { }; @@ -170,9 +170,8 @@ namespace OpenRA Game.viewport.Tick(); Timer.Time(" viewport: {0:0.000}"); - var acts = frameEndActions; - frameEndActions = new List>(); - foreach (var a in acts) a(this); + while( frameEndActions.Count != 0 ) + frameEndActions.Dequeue()( this ); Timer.Time(" frameEndActions: {0:0.000}"); WorldRenderer.Tick();