Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
References:
File last commit:
Show/Diff file:
Action:
FNA/src/Graphics/ModelMeshCollection.cs
157 lines | 3.1 KiB | text/x-csharp | CSharpLexer
157 lines | 3.1 KiB | text/x-csharp | CSharpLexer
r0 | #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 | ||||
} | ||||
} | ||||