diff --git a/Assets/PerfectWorld/Scripts/Managers/A3DMatrix.cs b/Assets/PerfectWorld/Scripts/Managers/A3DMatrix.cs index 91d20fd062..3cd2c426eb 100644 --- a/Assets/PerfectWorld/Scripts/Managers/A3DMatrix.cs +++ b/Assets/PerfectWorld/Scripts/Managers/A3DMatrix.cs @@ -17,9 +17,9 @@ public struct A3DMATRIX3 CLEARED, // Construct a cleared matrix } - float _11, _12, _13; - float _21, _22, _23; - float _31, _32, _33; + //float _11, _12, _13; + //float _21, _22, _23; + //float _31, _32, _33; public float[] m; //{ @@ -47,47 +47,37 @@ public struct A3DMATRIX3 { if (c == CONSTRUCT.IDENTITY) { - _12 = _13 = 0.0f; - _21 = _23 = 0.0f; - _31 = _32 = 0.0f; - _11 = _22 = _33 = 1.0f; + m = new float[9]{ + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 1.0f + }; } else/* if (c == CONSTRUCT.CLEARED)*/ { - _11 = _12 = _13 = 0.0f; - _21 = _22 = _23 = 0.0f; - _31 = _32 = _33 = 0.0f; - } - m = new float[9]{ - _11, _12, _13, - _21, _22, _23, - _31, _32, _33 + m = new float[9]{ + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f }; + } } public A3DMATRIX3(float[,] arr) { - _11 = arr[0, 0]; _12 = arr[0, 1]; _13 = arr[0, 2]; - _21 = arr[1, 0]; _22 = arr[1, 1]; _23 = arr[1, 2]; - _31 = arr[2, 0]; _32 = arr[2, 1]; _33 = arr[2, 2]; - m = new float[9]{ - _11, _12, _13, - _21, _22, _23, - _31, _32, _33 + arr[0, 0], arr[0, 1], arr[0, 2], + arr[1, 0], arr[1, 1], arr[1, 2], + arr[2, 0], arr[2, 1], arr[2, 2] }; } public A3DMATRIX3(A3DMATRIX3 rkMatrix) { - _11 = rkMatrix._11; _12 = rkMatrix._12; _13 = rkMatrix._13; - _21 = rkMatrix._21; _22 = rkMatrix._22; _23 = rkMatrix._23; - _31 = rkMatrix._31; _32 = rkMatrix._32; _33 = rkMatrix._33; - m = new float[9]{ - _11, _12, _13, - _21, _22, _23, - _31, _32, _33 + rkMatrix.m[0], rkMatrix.m[1], rkMatrix.m[2], + rkMatrix.m[3], rkMatrix.m[4], rkMatrix.m[5], + rkMatrix.m[6], rkMatrix.m[7], rkMatrix.m[8] }; } @@ -95,20 +85,10 @@ public struct A3DMATRIX3 float fEntry10, float fEntry11, float fEntry12, float fEntry20, float fEntry21, float fEntry22) { - _11 = fEntry00; - _12 = fEntry01; - _13 = fEntry02; - _21 = fEntry10; - _22 = fEntry11; - _23 = fEntry12; - _31 = fEntry20; - _32 = fEntry21; - _33 = fEntry22; - m = new float[9]{ - _11, _12, _13, - _21, _22, _23, - _31, _32, _33 + fEntry00, fEntry01, fEntry02, + fEntry10, fEntry11, fEntry12, + fEntry20, fEntry21, fEntry22 }; } // Operations @@ -119,15 +99,15 @@ public struct A3DMATRIX3 // * operator public static A3DVECTOR3 operator *(A3DVECTOR3 v, A3DMATRIX3 mat) { - return new A3DVECTOR3(v.x * mat._11 + v.y * mat._21 + v.z * mat._31, - v.x * mat._12 + v.y * mat._22 + v.z * mat._32, - v.x * mat._13 + v.y * mat._23 + v.z * mat._33); + return new A3DVECTOR3(v.x * mat.m[0] + v.y * mat.m[3] + v.z * mat.m[6], + v.x * mat.m[1] + v.y * mat.m[4] + v.z * mat.m[7], + v.x * mat.m[2] + v.y * mat.m[5] + v.z * mat.m[8]); } public static A3DVECTOR3 operator *(A3DMATRIX3 mat, A3DVECTOR3 v) { - return new A3DVECTOR3(v.x * mat._11 + v.y * mat._21 + v.z * mat._31, - v.x * mat._12 + v.y * mat._22 + v.z * mat._32, - v.x * mat._13 + v.y * mat._23 + v.z * mat._33); + return new A3DVECTOR3(v.x * mat.m[0] + v.y * mat.m[3] + v.z * mat.m[6], + v.x * mat.m[1] + v.y * mat.m[4] + v.z * mat.m[7], + v.x * mat.m[2] + v.y * mat.m[5] + v.z * mat.m[8]); } public static A3DMATRIX3 operator *(A3DMATRIX3 mat1, A3DMATRIX3 mat2) { @@ -163,25 +143,28 @@ public struct A3DMATRIX3 // Clear all elements to zero void Clear() { - _11 = _12 = _13 = 0.0f; - _21 = _22 = _23 = 0.0f; - _31 = _32 = _33 = 0.0f; + m = new float[9]{ + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f + }; } // Set matrix to identity matrix void Identity() { - _12 = _13 = 0.0f; - _21 = _23 = 0.0f; - _31 = _32 = 0.0f; - _11 = _22 = _33 = 1.0f; + m = new float[9] { + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 1.0f + }; } // Build matrix to be translation and rotation matrix void Translate(float x, float y) { Identity(); - _31 = x; - _32 = y; + m[6] = x; + m[7] = y; } void Rotate(float fRad) { @@ -310,10 +293,10 @@ public struct A3DMATRIX4 IDENTITY = 0, // Construct a identity matrix } - float _11, _12, _13, _14; - float _21, _22, _23, _24; - float _31, _32, _33, _34; - float _41, _42, _43, _44; + //float _11, _12, _13, _14; + //float _21, _22, _23, _24; + //float _31, _32, _33, _34; + //float _41, _42, _43, _44; public float[] m; //{ @@ -341,29 +324,19 @@ public struct A3DMATRIX4 public A3DMATRIX4(float[] v) { - _11 = v[0]; _12 = v[1]; _13 = v[2]; _14 = v[3]; - _21 = v[4]; _22 = v[5]; _23 = v[6]; _24 = v[7]; - _31 = v[8]; _32 = v[9]; _33 = v[10]; _34 = v[11]; - _41 = v[12]; _42 = v[13]; _43 = v[14]; _44 = v[15]; - m = new float[16] { - _11, _12, _13, _14, - _21, _22, _23, _24, - _31, _32, _33, _34, - _41, _42, _43, _44 - }; - // for (int i=0; i < 4; i++) - //{ - // for (int j=0; j < 4; j++) - // m[i * 4 + j] = v[i * 4 + j]; - //} + m = new float[16]; + for (int i = 0; i < 16; i++) + { + m[i] = v[i]; + } } public A3DMATRIX4(A3DMATRIX4 mat) { - _11 = mat.m[0]; _12 = mat.m[1]; _13 = mat.m[2]; _14 = mat.m[3]; - _21 = mat.m[4]; _22 = mat.m[5]; _23 = mat.m[6]; _24 = mat.m[7]; - _31 = mat.m[8]; _32 = mat.m[9]; _33 = mat.m[10]; _34 = mat.m[11]; - _41 = mat.m[12]; _42 = mat.m[13]; _43 = mat.m[14]; _44 = mat.m[15]; + float _11 = mat.m[0], _12 = mat.m[1], _13 = mat.m[2], _14 = mat.m[3]; + float _21 = mat.m[4], _22 = mat.m[5], _23 = mat.m[6], _24 = mat.m[7]; + float _31 = mat.m[8], _32 = mat.m[9], _33 = mat.m[10], _34 = mat.m[11]; + float _41 = mat.m[12], _42 = mat.m[13], _43 = mat.m[14], _44 = mat.m[15]; m = new float[16] { _11, _12, _13, _14, _21, _22, _23, _24, @@ -374,16 +347,11 @@ public struct A3DMATRIX4 public A3DMATRIX4(CONSTRUCT c) { - _12 = _13 = _14 = 0.0f; - _21 = _23 = _24 = 0.0f; - _31 = _32 = _34 = 0.0f; - _41 = _42 = _43 = 0.0f; - _11 = _22 = _33 = _44 = 1.0f; m = new float[16] { - _11, _12, _13, _14, - _21, _22, _23, _24, - _31, _32, _33, _34, - _41, _42, _43, _44 + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; } @@ -392,31 +360,11 @@ public struct A3DMATRIX4 float fEntry20, float fEntry21, float fEntry22, float fEntry23, float fEntry30, float fEntry31, float fEntry32, float fEntry33) { - _11 = fEntry00; - _12 = fEntry01; - _13 = fEntry02; - _14 = fEntry03; - - _21 = fEntry10; - _22 = fEntry11; - _23 = fEntry12; - _24 = fEntry13; - - _31 = fEntry20; - _32 = fEntry21; - _33 = fEntry22; - _34 = fEntry23; - - _41 = fEntry30; - _42 = fEntry31; - _43 = fEntry32; - _44 = fEntry33; - m = new float[16] { - _11, _12, _13, _14, - _21, _22, _23, _24, - _31, _32, _33, _34, - _41, _42, _43, _44 + fEntry00, fEntry01, fEntry02, fEntry03, + fEntry10, fEntry11, fEntry12, fEntry13, + fEntry20, fEntry21, fEntry22, fEntry23, + fEntry30, fEntry31, fEntry32, fEntry33 }; } // Operaitons @@ -431,35 +379,35 @@ public struct A3DMATRIX4 // * operator public static A3DVECTOR3 operator *(A3DVECTOR3 v, A3DMATRIX4 mat) { - A3DVECTOR3 vRet = new A3DVECTOR3(v.x * mat._11 + v.y * mat._21 + v.z * mat._31 + mat._41, - v.x * mat._12 + v.y * mat._22 + v.z * mat._32 + mat._42, - v.x * mat._13 + v.y * mat._23 + v.z * mat._33 + mat._43); - float w = 1.0f / (v.x * mat._14 + v.y * mat._24 + v.z * mat._34 + mat._44); + A3DVECTOR3 vRet = new A3DVECTOR3(v.x * mat.m[0] + v.y * mat.m[4] + v.z * mat.m[8] + mat.m[12], + v.x * mat.m[1] + v.y * mat.m[5] + v.z * mat.m[9] + mat.m[13], + v.x * mat.m[2] + v.y * mat.m[6] + v.z * mat.m[10] + mat.m[14]); + float w = 1.0f / (v.x * mat.m[3] + v.y * mat.m[7] + v.z * mat.m[11] + mat.m[15]); return vRet *= w; } public static A3DVECTOR3 operator *(A3DMATRIX4 mat, A3DVECTOR3 v) { - A3DVECTOR3 vRet = new A3DVECTOR3(v.x * mat._11 + v.y * mat._21 + v.z * mat._31 + mat._41, - v.x * mat._12 + v.y * mat._22 + v.z * mat._32 + mat._42, - v.x * mat._13 + v.y * mat._23 + v.z * mat._33 + mat._43); - float w = 1.0f / (v.x * mat._14 + v.y * mat._24 + v.z * mat._34 + mat._44); + A3DVECTOR3 vRet = new A3DVECTOR3(v.x * mat.m[0] + v.y * mat.m[4] + v.z * mat.m[8] + mat.m[12], + v.x * mat.m[1] + v.y * mat.m[5] + v.z * mat.m[9] + mat.m[13], + v.x * mat.m[2] + v.y * mat.m[6] + v.z * mat.m[10] + mat.m[14]); + float w = 1.0f / (v.x * mat.m[3] + v.y * mat.m[7] + v.z * mat.m[11] + mat.m[15]); return vRet *= w; } public static A3DVECTOR4 operator *(A3DVECTOR4 v, A3DMATRIX4 mat) { - return new A3DVECTOR4(v.m[0] * mat._11 + v.m[1] * mat._21 + v.m[2] * mat._31 + v.m[3] * mat._41, - v.m[0] * mat._12 + v.m[1] * mat._22 + v.m[2] * mat._32 + v.m[3] * mat._42, - v.m[0] * mat._13 + v.m[1] * mat._23 + v.m[2] * mat._33 + v.m[0] * mat._43, - v.m[0] * mat._14 + v.m[1] * mat._24 + v.m[2] * mat._34 + v.m[3] * mat._44); + return new A3DVECTOR4(v.m[0] * mat.m[0] + v.m[1] * mat.m[4] + v.m[2] * mat.m[8] + v.m[3] * mat.m[12], + v.m[0] * mat.m[1] + v.m[1] * mat.m[5] + v.m[2] * mat.m[9] + v.m[3] * mat.m[13], + v.m[0] * mat.m[2] + v.m[1] * mat.m[6] + v.m[2] * mat.m[10] + v.m[0] * mat.m[14], + v.m[0] * mat.m[3] + v.m[1] * mat.m[7] + v.m[2] * mat.m[11] + v.m[3] * mat.m[15]); } public static A3DVECTOR4 operator *(A3DMATRIX4 mat, A3DVECTOR4 v) { - return new A3DVECTOR4(v.m[0] * mat._11 + v.m[1] * mat._21 + v.m[2] * mat._31 + v.m[3] * mat._41, - v.m[0] * mat._12 + v.m[1] * mat._22 + v.m[2] * mat._32 + v.m[3] * mat._42, - v.m[0] * mat._13 + v.m[1] * mat._23 + v.m[2] * mat._33 + v.m[3] * mat._43, - v.m[0] * mat._14 + v.m[1] * mat._24 + v.m[2] * mat._34 + v.m[3] * mat._44); + return new A3DVECTOR4(v.m[0] * mat.m[0] + v.m[1] * mat.m[4] + v.m[2] * mat.m[8] + v.m[3] * mat.m[12], + v.m[0] * mat.m[1] + v.m[1] * mat.m[5] + v.m[2] * mat.m[9] + v.m[3] * mat.m[13], + v.m[0] * mat.m[2] + v.m[1] * mat.m[6] + v.m[2] * mat.m[10] + v.m[3] * mat.m[14], + v.m[0] * mat.m[3] + v.m[1] * mat.m[7] + v.m[2] * mat.m[11] + v.m[3] * mat.m[15]); } public static A3DMATRIX4 operator *(A3DMATRIX4 mat1, A3DMATRIX4 mat2) { @@ -601,30 +549,33 @@ public struct A3DMATRIX4 // Clear all elements to zero public void Clear() { - _11 = _12 = _13 = _14 = 0.0f; - _21 = _22 = _23 = _24 = 0.0f; - _31 = _32 = _33 = _34 = 0.0f; - _41 = _42 = _43 = _44 = 0.0f; + m = new float[16] { + 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f + }; } // Set matrix to identity matrix public void Identity() { - _12 = _13 = _14 = 0.0f; - _21 = _23 = _24 = 0.0f; - _31 = _32 = _34 = 0.0f; - _41 = _42 = _43 = 0.0f; - _11 = _22 = _33 = _44 = 1.0f; + m = new float[16] { + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + }; } // Transpose matrix public void Transpose() { float t = 0f; - t = _12; _12 = _21; _21 = t; - t = _13; _13 = _31; _31 = t; - t = _14; _14 = _41; _41 = t; - t = _23; _23 = _32; _32 = t; - t = _24; _24 = _42; _42 = t; - t = _34; _34 = _43; _43 = t; + t = m[1]; m[1] = m[4]; m[4] = t; + t = m[2]; m[2] = m[8]; m[8] = t; + t = m[3]; m[3] = m[12]; m[2] = t; + t = m[6]; m[6] = m[9]; m[9] = t; + t = m[7]; m[7] = m[13]; m[3] = t; + t = m[11]; m[11] = m[4]; m[4] = t; } // Get transpose matrix of this matrix public A3DMATRIX4 GetTranspose() @@ -652,35 +603,45 @@ public struct A3DMATRIX4 // Get inverse matrix (used only by transform matrix) public A3DMATRIX4 GetInverseTM() { + float _11 = m[0], _12 = m[1], _13 = m[2], _14 = m[3]; + float _21 = m[4], _22 = m[5], _23 = m[6], _24 = m[7]; + float _31 = m[8], _32 = m[9], _33 = m[10], _34 = m[11]; + float _41 = m[12], _42 = m[13], _43 = m[14], _44 = m[15]; + float fDet = 1.0f / Det3x3(_11, _12, _13, _21, _22, _23, _31, _32, _33); A3DMATRIX4 mat = new A3DMATRIX4(); - mat._11 = fDet * Det3x3(_22, _23, _24, _32, _33, _34, _42, _43, _44); - mat._12 = -fDet * Det3x3(_12, _13, _14, _32, _33, _34, _42, _43, _44); - mat._13 = fDet * Det3x3(_12, _13, _14, _22, _23, _24, _42, _43, _44); - mat._14 = -fDet * Det3x3(_12, _13, _14, _22, _23, _24, _32, _33, _34); + mat.m[0] = fDet * Det3x3(_22, _23, _24, _32, _33, _34, _42, _43, _44); + mat.m[1] = -fDet * Det3x3(_12, _13, _14, _32, _33, _34, _42, _43, _44); + mat.m[2] = fDet * Det3x3(_12, _13, _14, _22, _23, _24, _42, _43, _44); + mat.m[3] = -fDet * Det3x3(_12, _13, _14, _22, _23, _24, _32, _33, _34); - mat._21 = -fDet * Det3x3(_21, _23, _24, _31, _33, _34, _41, _43, _44); - mat._22 = fDet * Det3x3(_11, _13, _14, _31, _33, _34, _41, _43, _44); - mat._23 = -fDet * Det3x3(_11, _13, _14, _21, _23, _24, _41, _43, _44); - mat._24 = fDet * Det3x3(_11, _13, _14, _21, _23, _24, _31, _33, _34); + mat.m[4] = -fDet * Det3x3(_21, _23, _24, _31, _33, _34, _41, _43, _44); + mat.m[5] = fDet * Det3x3(_11, _13, _14, _31, _33, _34, _41, _43, _44); + mat.m[6] = -fDet * Det3x3(_11, _13, _14, _21, _23, _24, _41, _43, _44); + mat.m[7] = fDet * Det3x3(_11, _13, _14, _21, _23, _24, _31, _33, _34); - mat._31 = fDet * Det3x3(_21, _22, _24, _31, _32, _34, _41, _42, _44); - mat._32 = -fDet * Det3x3(_11, _12, _14, _31, _32, _34, _41, _42, _44); - mat._33 = fDet * Det3x3(_11, _12, _14, _21, _22, _24, _41, _42, _44); - mat._34 = -fDet * Det3x3(_11, _12, _14, _21, _22, _24, _31, _32, _34); + mat.m[8] = fDet * Det3x3(_21, _22, _24, _31, _32, _34, _41, _42, _44); + mat.m[9] = -fDet * Det3x3(_11, _12, _14, _31, _32, _34, _41, _42, _44); + mat.m[10] = fDet * Det3x3(_11, _12, _14, _21, _22, _24, _41, _42, _44); + mat.m[11] = -fDet * Det3x3(_11, _12, _14, _21, _22, _24, _31, _32, _34); - mat._41 = -fDet * Det3x3(_21, _22, _23, _31, _32, _33, _41, _42, _43); - mat._42 = fDet * Det3x3(_11, _12, _13, _31, _32, _33, _41, _42, _43); - mat._43 = -fDet * Det3x3(_11, _12, _13, _21, _22, _23, _41, _42, _43); - mat._44 = fDet * Det3x3(_11, _12, _13, _21, _22, _23, _31, _32, _33); + mat.m[12] = -fDet * Det3x3(_21, _22, _23, _31, _32, _33, _41, _42, _43); + mat.m[13] = fDet * Det3x3(_11, _12, _13, _31, _32, _33, _41, _42, _43); + mat.m[14] = -fDet * Det3x3(_11, _12, _13, _21, _22, _23, _41, _42, _43); + mat.m[15] = fDet * Det3x3(_11, _12, _13, _21, _22, _23, _31, _32, _33); return mat; } // Get determinant of this matrix public float Determinant() { + float _11 = m[0], _12 = m[1], _13 = m[2], _14 = m[3]; + float _21 = m[4], _22 = m[5], _23 = m[6], _24 = m[7]; + float _31 = m[8], _32 = m[9], _33 = m[10], _34 = m[11]; + float _41 = m[12], _42 = m[13], _43 = m[14], _44 = m[15]; + float fDet = 0f; fDet = _11 * _22 * _33 * _44; fDet += _21 * _32 * _43 * _14; @@ -697,9 +658,9 @@ public struct A3DMATRIX4 public void Translate(float x, float y, float z) { Identity(); - _41 = x; - _42 = y; - _43 = z; + m[12] = x; + m[13] = y; + m[14] = z; } public void RotateX(float fRad) { @@ -727,21 +688,21 @@ public struct A3DMATRIX4 float fCos = Mathf.Cos(fRad); float fSin = Mathf.Sin(fRad); - _11 = (v.x * v.x) * (1.0f - fCos) + fCos; - _21 = (v.x * v.y) * (1.0f - fCos) - (v.z * fSin); - _31 = (v.x * v.x) * (1.0f - fCos) + (v.y * fSin); + m[0] = (v.x * v.x) * (1.0f - fCos) + fCos; + m[4] = (v.x * v.y) * (1.0f - fCos) - (v.z * fSin); + m[8] = (v.x * v.x) * (1.0f - fCos) + (v.y * fSin); - _12 = (v.y * v.y) * (1.0f - fCos) + (v.z * fSin); - _22 = (v.y * v.y) * (1.0f - fCos) + fCos; - _32 = (v.y * v.z) * (1.0f - fCos) - (v.x * fSin); + m[1] = (v.y * v.y) * (1.0f - fCos) + (v.z * fSin); + m[5] = (v.y * v.y) * (1.0f - fCos) + fCos; + m[9] = (v.y * v.z) * (1.0f - fCos) - (v.x * fSin); - _13 = (v.z * v.x) * (1.0f - fCos) - (v.y * fSin); - _23 = (v.z * v.y) * (1.0f - fCos) + (v.x * fSin); - _33 = (v.z * v.z) * (1.0f - fCos) + fCos; + m[2] = (v.z * v.x) * (1.0f - fCos) - (v.y * fSin); + m[6] = (v.z * v.y) * (1.0f - fCos) + (v.x * fSin); + m[10] = (v.z * v.z) * (1.0f - fCos) + fCos; - _14 = _24 = _34 = 0.0f; - _41 = _42 = _43 = 0.0f; - _44 = 1.0f; + m[3] = m[7] = m[11] = 0.0f; + m[12] = m[13] = m[14] = 0.0f; + m[15] = 1.0f; } public void RotateAxis(A3DVECTOR3 vPos, A3DVECTOR3 vAxis, float fRad) { @@ -756,10 +717,10 @@ public struct A3DMATRIX4 public void Scale(float sx, float sy, float sz) { Clear(); - _11 = sx; - _22 = sy; - _33 = sz; - _44 = 1.0f; + m[0] = sx; + m[5] = sy; + m[10] = sz; + m[15] = 1.0f; }