using System; using System.Collections.Generic; using OpenRa.Game.Effects; namespace OpenRa.Game { class World { List actors = new List(); List effects = new List(); List> frameEndActions = new List>(); public void Add(Actor a) { actors.Add(a); ActorAdded(a); } public void Remove(Actor a) { actors.Remove(a); ActorRemoved(a); } 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 event Action ActorAdded = _ => { }; public event Action ActorRemoved = _ => { }; public void Tick() { foreach (var a in actors) a.Tick(); foreach (var e in effects) e.Tick(); Game.viewport.Tick(); var acts = frameEndActions; frameEndActions = new List>(); foreach (var a in acts) a(this); } public IEnumerable Actors { get { return actors; } } public IEnumerable Effects { get { return effects; } } uint nextAID = 0; internal uint NextAID() { return nextAID++; } } }