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