Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
File last commit:
Show/Diff file:
Action:
FNA/src/Graphics/ModelMeshCollection.cs
157 lines | 3.1 KiB | text/x-csharp | CSharpLexer
#region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
* Copyright 2009-2020 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
{
/// <summary>
/// Represents a collection of ModelMesh objects.
/// </summary>
public sealed class ModelMeshCollection : ReadOnlyCollection<ModelMesh>
{
#region Public Properties
/// <summary>
/// Retrieves a ModelMesh from the collection, given the name of the mesh.
/// </summary>
/// <param name="meshName">
/// The name of the mesh to retrieve.
/// </param>
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<ModelMesh> list) : base(list)
{
}
#endregion
#region Public Methods
/// <summary>
/// Finds a mesh with a given name if it exists in the collection.
/// </summary>
/// <param name="meshName">
/// The name of the mesh to find.
/// </param>
/// <param name="value">
/// [OutAttribute] The mesh named meshName, if found.
/// </param>
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
/// <summary>
/// Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection.
/// </summary>
/// <returns></returns>
public new Enumerator GetEnumerator()
{
return new Enumerator(this);
}
/// <summary>
/// Provides the ability to iterate through the bones in an ModelMeshCollection.
/// </summary>
public struct Enumerator : IEnumerator<ModelMesh>
{
private readonly ModelMeshCollection collection;
private int position;
internal Enumerator(ModelMeshCollection collection)
{
this.collection = collection;
position = -1;
}
/// <summary>
/// Gets the current element in the ModelMeshCollection.
/// </summary>
public ModelMesh Current
{
get
{
return collection[position];
}
}
/// <summary>
/// Advances the enumerator to the next element of the ModelMeshCollection.
/// </summary>
public bool MoveNext()
{
position += 1;
return (position < collection.Count);
}
/// <summary>
/// Immediately releases the unmanaged resources used by this object.
/// </summary>
public void Dispose()
{
}
object IEnumerator.Current
{
get
{
return collection[position];
}
}
void IEnumerator.Reset()
{
position = -1;
}
}
#endregion
}
}