I have a struct declared as the following
[StructLayout(LayoutKind.Sequential)]
public struct PositionColoredTextured4
{
public Maths.Vector3 Position;
public int Color;
public TextureCoord Texture0;
public TextureCoord Texture1;
public TextureCoord Texture2;
public TextureCoord Texture3;
public static readonly VertexFormat Format = VertexFormat.Position | VertexFormat.Diffuse | VertexFormat.Texture4;
public static readonly int StrideSize = Marshal.SizeOf(typeof(PositionColoredTextured4));
}
I have the following method that I wrote to set the texture coordinates for Texture0.
public void SetTexture0Rect(Rectangle rect, float pixelTrim)
{
if(m_texture0 == null)
return;
m_pixelTrim0 = pixelTrim;
SizeF ratio = new SizeF(1f / (float)m_texture0.Width, 1f / (float)m_texture0.Height);
m_texture0Rect = new RectangleF(rect.X * ratio.Width, rect.Y * ratio.Height, rect.Width * ratio.Width, rect.Height * ratio.Height);
topLeft.Tu = ((rect.X + m_pixelTrim0) / m_texture0.Width);
topLeft.Tv = ((rect.Y + m_pixelTrim0) / m_texture0.Height);
topRight.Tu = ((rect.X + rect.Width - m_pixelTrim0) / m_texture0.Width);
topRight.Tv = ((rect.Y + m_pixelTrim0) / m_texture0.Height);
bottomLeft.Tu = ((rect.X + m_pixelTrim0) / m_texture0.Width);
bottomLeft.Tv = ((rect.Y + rect.Height - m_pixelTrim0) / m_texture0.Height);
bottomRight.Tu = ((rect.X + rect.Width - m_pixelTrim0) / m_texture0.Width);
bottomRight.Tv = ((rect.Y + rect.Height - m_pixelTrim0) / m_texture0.Height);
if ((m_flipFlags & FlipFlags.Horizontal) != 0)
{
m_vertices[0].Texture0.Tu = bottomRight.Tu;
m_vertices[1].Texture0.Tu = topRight.Tu;
m_vertices[2].Texture0.Tu = topLeft.Tu;
m_vertices[3].Texture0.Tu = bottomLeft.Tu;
m_vertices[4].Texture0.Tu = bottomRight.Tu;
m_vertices[5].Texture0.Tu = topLeft.Tu;
}
else
{
m_vertices[0].Texture0.Tu = bottomLeft.Tu;
m_vertices[1].Texture0.Tu = topLeft.Tu;
m_vertices[2].Texture0.Tu = topRight.Tu;
m_vertices[3].Texture0.Tu = bottomRight.Tu;
m_vertices[4].Texture0.Tu = bottomLeft.Tu;
m_vertices[5].Texture0.Tu = topRight.Tu;
}
if ((m_flipFlags & FlipFlags.Vertical) != 0)
{
m_vertices[0].Texture0.Tv = topLeft.Tv;
m_vertices[1].Texture0.Tv = bottomLeft.Tv;
m_vertices[2].Texture0.Tv = bottomRight.Tv;
m_vertices[3].Texture0.Tv = topRight.Tv;
m_vertices[4].Texture0.Tv = topLeft.Tv;
m_vertices[5].Texture0.Tv = bottomRight.Tv;
}
else
{
m_vertices[0].Texture0.Tv = bottomLeft.Tv;
m_vertices[1].Texture0.Tv = topLeft.Tv;
m_vertices[2].Texture0.Tv = topRight.Tv;
m_vertices[3].Texture0.Tv = bottomRight.Tv;
m_vertices[4].Texture0.Tv = bottomLeft.Tv;
m_vertices[5].Texture0.Tv = topRight.Tv;
}
}
But now I want to add support for Texture1, Texture2 and Texture3 without having to copy and paste the code. I was wondering if there is a way using reflection?