void OnDisposed(object sender, EventArgs e) { this.component.Disposed -= DisposeHandler; if (this.owner != null) { this.owner.Remove(this); this.owner = null; } //remove from the game components list Microsoft.Xna.Framework.GameComponentCollection components = application.XnaComponents; for (int i = 0; i < components.Count; i++) { XnaDrawableGameComponentWrapper wrapper = components[i] as XnaDrawableGameComponentWrapper; if ((wrapper != null && wrapper.component == component)) { components.RemoveAt(i); break; } } if (UpdateOrderChangedHandler != null) { this.component.UpdateOrderChanged -= UpdateOrderChangedHandler; } this.Dispose(); }
public XnaDrawableGameComponentWrapper(Microsoft.Xna.Framework.DrawableGameComponent component, Xen.Graphics.DrawTarget owner, Application application) : base(component.Game) { if (owner == null || application == null) throw new ArgumentNullException(); this.owner = owner; this.component = component; this.application = application; this.component.Initialize(); this.DisposeHandler = new EventHandler<EventArgs>(OnDisposed); this.component.Disposed += DisposeHandler; //add this object to the main XNA update list, unless it's already there bool addToUpdateList = true; Microsoft.Xna.Framework.GameComponentCollection components = application.XnaComponents; foreach (Microsoft.Xna.Framework.GameComponent item in components) { XnaDrawableGameComponentWrapper wrapper = item as XnaDrawableGameComponentWrapper; if (item == component || (wrapper != null && wrapper.component == component)) { //already in the list... addToUpdateList = false; break; } } if (addToUpdateList) { components.Add(this); this.UpdateOrderChangedHandler = new EventHandler<EventArgs>(OnUpdateOrderChangedHandler); this.component.UpdateOrderChanged += UpdateOrderChangedHandler; } }
public void RemovedFromOwner() { this.owner = null; }