using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; namespace FSO.Common.Rendering.Framework { public class _3DLayer : IGraphicsLayer { public GraphicsDevice Device; public List<_3DAbstract> Scenes = new List<_3DAbstract>(); public List<_3DAbstract> External = new List<_3DAbstract>(); #region IGraphicsLayer Members public void Update(FSO.Common.Rendering.Framework.Model.UpdateState state) { foreach (var scene in Scenes) { scene.Update(state); } foreach (var scene in External) { scene.Update(state); } } public void PreDraw(Microsoft.Xna.Framework.Graphics.GraphicsDevice device) { foreach (var scene in Scenes) { if (scene.Visible) scene.PreDraw(device); } } public void Draw(Microsoft.Xna.Framework.Graphics.GraphicsDevice device) { foreach (var scene in Scenes) { if (scene.Visible) scene.Draw(device); } } public void Initialize(Microsoft.Xna.Framework.Graphics.GraphicsDevice device) { this.Device = device; foreach (var scene in Scenes) { scene.Initialize(this); } foreach (var scene in External) { scene.Initialize(this); } } public void Add(_3DAbstract scene) { Scenes.Add(scene); if (this.Device != null) { scene.Initialize(this); } } public void Remove(_3DAbstract scene) { Scenes.Remove(scene); } public void Clear() { foreach (var scene in Scenes) { if (scene is IDisposable) ((IDisposable)scene).Dispose(); } Scenes.Clear(); } /// /// Adds a scene to the draw stack. The system will not call /// Draw on the scene but it will be initialized and given updates /// /// public void AddExternal(_3DAbstract scene){ External.Add(scene); if (this.Device != null) { scene.Initialize(this); } } public void RemoveExternal(_3DAbstract scene) { External.Remove(scene); } #endregion } }