using System; namespace NW4RTools { public enum ByteEndian { LittleEndian, BigEndian } public struct Color { public byte r, g, b, a; } public struct Vec3 { public float x, y, z; } public struct Vec2 { public float x, y; } public struct Matrix { public float v00, v01, v02, v03, v10, v11, v12, v13, v20, v21, v22, v23; public float this[int x, int y] { get { switch (y) { case 0: switch (x) { case 0: return v00; case 1: return v01; case 2: return v02; case 3: return v03; } break; case 1: switch (x) { case 0: return v10; case 1: return v11; case 2: return v12; case 3: return v13; } break; case 2: switch (x) { case 0: return v20; case 1: return v21; case 2: return v22; case 3: return v23; } break; } throw new IndexOutOfRangeException(); } set { switch (y) { case 0: switch (x) { case 0: v00 = value; break; case 1: v01 = value; break; case 2: v02 = value; break; case 3: v03 = value; break; } break; case 1: switch (x) { case 0: v10 = value; break; case 1: v11 = value; break; case 2: v12 = value; break; case 3: v13 = value; break; } break; case 2: switch (x) { case 0: v20 = value; break; case 1: v21 = value; break; case 2: v22 = value; break; case 3: v23 = value; break; } break; } throw new IndexOutOfRangeException(); } } } }