#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 ModelMesh objects.
///
public sealed class ModelMeshCollection : ReadOnlyCollection
{
#region Public Properties
///
/// Retrieves a ModelMesh from the collection, given the name of the mesh.
///
///
/// The name of the mesh to retrieve.
///
public ModelMesh this[string meshName]
{
get
{
ModelMesh ret;
if (!this.TryGetValue(meshName, out ret))
{
throw new KeyNotFoundException();
}
return ret;
}
}
#endregion
#region Internal Constructor
internal ModelMeshCollection(IList list) : base(list)
{
}
#endregion
#region Public Methods
///
/// Finds a mesh with a given name if it exists in the collection.
///
///
/// The name of the mesh to find.
///
///
/// [OutAttribute] The mesh named meshName, if found.
///
public bool TryGetValue(string meshName, out ModelMesh value)
{
if (string.IsNullOrEmpty(meshName))
{
throw new ArgumentNullException("meshName");
}
foreach (ModelMesh mesh in this)
{
if (string.Compare(mesh.Name, meshName, StringComparison.Ordinal) == 0)
{
value = mesh;
return true;
}
}
value = null;
return false;
}
#endregion
#region Enumerator
///
/// Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection.
///
///
public new Enumerator GetEnumerator()
{
return new Enumerator(this);
}
///
/// Provides the ability to iterate through the bones in an ModelMeshCollection.
///
public struct Enumerator : IEnumerator
{
private readonly ModelMeshCollection collection;
private int position;
internal Enumerator(ModelMeshCollection collection)
{
this.collection = collection;
position = -1;
}
///
/// Gets the current element in the ModelMeshCollection.
///
public ModelMesh Current
{
get
{
return collection[position];
}
}
///
/// Advances the enumerator to the next element of the ModelMeshCollection.
///
public bool MoveNext()
{
position += 1;
return (position < collection.Count);
}
///
/// Immediately releases the unmanaged resources used by this object.
///
public void Dispose()
{
}
object IEnumerator.Current
{
get
{
return collection[position];
}
}
void IEnumerator.Reset()
{
position = -1;
}
}
#endregion
}
}