#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
}
}