using System;
using ANX.Framework.NonXNA.Development;

// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license

namespace ANX.Framework.Graphics
{
	[PercentageComplete(100)]
	[TestState(TestStateAttribute.TestState.Untested)]
	public sealed class ModelMeshPart
	{
		#region Private
		internal ModelMesh parentMesh;
		private Effect effect;
		private IndexBuffer indexBuffer;
		private int numVertices;
		private int primitiveCount;
		private int startIndex;
		private Object tag;
		private VertexBuffer vertexBuffer;
		private int vertexOffset;
		#endregion

		#region Public
		public Effect Effect
		{
			get { return effect; }
			set
			{
				if (this.effect != value)
				{
					var old = this.effect;
					this.effect = value;
					this.parentMesh.EffectChangedOnMeshPart(this, old, value);
				}
			}
		}

		public IndexBuffer IndexBuffer
		{
			get { return indexBuffer; }
			internal set { this.indexBuffer = value; }
		}

		public int NumVertices
		{
			get { return numVertices; }
		}

		public int PrimitiveCount
		{
			get { return primitiveCount; }
		}

		public int StartIndex
		{
			get { return startIndex; }
		}

		public Object Tag
		{
			get { return tag; }
			set { tag = value; }
		}


		public VertexBuffer VertexBuffer
		{
			get { return vertexBuffer; }
			internal set { this.vertexBuffer = value; }
		}


		public int VertexOffset
		{
			get { return vertexOffset; }
		}
		#endregion

		internal ModelMeshPart(int vertexOffset, int numVertices, int startIndex, int primitiveCount, object tag)
		{
			this.vertexOffset = vertexOffset;
			this.numVertices = numVertices;
			this.startIndex = startIndex;
			this.primitiveCount = primitiveCount;
			this.tag = tag;
		}
	}
}