#region License /* FNA - XNA4 Reimplementation for Desktop Platforms * Copyright 2009-2016 Ethan Lee and the MonoGame Team * * Released under the Microsoft Public License. * See LICENSE for details. */ #endregion #region Using Statements using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; #endregion namespace Microsoft.Xna.Framework.Graphics { /// /// Represents a collection of effects associated with a model. /// public sealed class ModelEffectCollection : ReadOnlyCollection { #region Public Constructor public ModelEffectCollection(IList list) : base(list) { } #endregion #region Internal Constructor internal ModelEffectCollection() : base(new List()) { } #endregion #region Public Methods /// /// Returns a ModelEffectCollection.Enumerator that can iterate through a ModelEffectCollection. /// public new ModelEffectCollection.Enumerator GetEnumerator() { return new ModelEffectCollection.Enumerator((List) Items); } #endregion #region Internal Methods // ModelMeshPart needs to be able to add to ModelMesh's effects list internal void Add(Effect item) { Items.Add(item); } internal void Remove(Effect item) { Items.Remove(item); } #endregion #region Public Enumerator struct /// /// Provides the ability to iterate through the bones in an ModelEffectCollection. /// public struct Enumerator : IEnumerator, IDisposable, IEnumerator { /// /// Gets the current element in the ModelEffectCollection. /// public Effect Current { get { return enumerator.Current; } } List.Enumerator enumerator; bool disposed; internal Enumerator(List list) { enumerator = list.GetEnumerator(); disposed = false; } /// /// Immediately releases the unmanaged resources used by this object. /// public void Dispose() { if (!disposed) { enumerator.Dispose(); disposed = true; } } /// /// Advances the enumerator to the next element of the ModelEffectCollection. /// public bool MoveNext() { return enumerator.MoveNext(); } object IEnumerator.Current { get { return Current; } } void IEnumerator.Reset() { IEnumerator resetEnumerator = enumerator; resetEnumerator.Reset(); enumerator = (List.Enumerator) resetEnumerator; } } #endregion } }