diff options
Diffstat (limited to 'engines/titanic/star_control/dmatrix.cpp')
-rw-r--r-- | engines/titanic/star_control/dmatrix.cpp | 64 |
1 files changed, 26 insertions, 38 deletions
diff --git a/engines/titanic/star_control/dmatrix.cpp b/engines/titanic/star_control/dmatrix.cpp index b7ebbc718a..079ce2f975 100644 --- a/engines/titanic/star_control/dmatrix.cpp +++ b/engines/titanic/star_control/dmatrix.cpp @@ -22,7 +22,7 @@ #include "titanic/star_control/dmatrix.h" #include "titanic/star_control/fmatrix.h" -#include "titanic/star_control/star_control_sub26.h" +#include "titanic/star_control/matrix_transform.h" namespace Titanic { @@ -174,43 +174,31 @@ DMatrix DMatrix::fn1() const { return m; } -void DMatrix::fn3(CStarControlSub26 *sub26) { - double v3, v4, v5, v6, v7, v8, v9, v10; - double v11, v12, v13, v14, v15, v16, v17, v18, v19, v20; - - v3 = sub26->fn1(); - if (v3 <= 0.0) - v20 = 0.0; - else - v20 = 2.0 / v3; - v4 = v20 * sub26->_sub._v1; - v5 = v20 * sub26->_sub._v2; - v6 = v20 * sub26->_sub._v3; - v7 = v4 * sub26->_sub._v1; - v8 = v4; - v9 = v5; - v10 = v5 * sub26->_sub._v1; - v11 = v5 * sub26->_sub._v2; - v12 = v6; - v13 = v8 * sub26->_field0; - v14 = v12 + v11; - v15 = v6 * sub26->_sub._v2; - v16 = v6 * sub26->_field0; - v17 = v11 + v7; - v18 = v6 * sub26->_sub._v1; - v19 = v9 * sub26->_field0; - _row1._x = 1.0 - v14; - _row1._y = v10 + v16; - _row1._z = v18 - v19; - _row2._x = v10 - v16; - _row2._y = 1.0 - (v12 + v7); - _row2._z = v15 + v13; - _row3._x = v18 + v19; - _row3._y = v15 - v13; - _row3._z = 1.0 - v17; - _row4._x = 0.0; - _row4._y = 0.0; - _row4._z = 0.0; +void DMatrix::loadTransform(const CMatrixTransform &src) { + double total = src.fn1(); + double factor = (total <= 0.0) ? 0.0 : 2.0 / total; + DVector temp1V = src._vector * factor; + DVector temp2V = temp1V * src._vector; + + double val1 = temp1V._y * src._vector._x; + double val2 = temp1V._z * src._vector._x; + double val3 = temp1V._z * src._vector._y; + double val4 = temp1V._x * src._field0; + double val5 = temp1V._y * src._field0; + double val6 = temp1V._z * src._field0; + + _row1._x = 1.0 - (temp2V._z + temp2V._y); + _row1._y = val1 + val6; + _row1._z = val2 - val5; + _row2._x = val1 - val6; + _row2._y = 1.0 - (temp2V._z + temp2V._x); + _row2._z = val3 + val4; + _row3._x = val2 + val5; + _row3._y = val3 - val4; + _row3._z = 1.0 - (temp2V._y + temp2V._x); + _row4._x = 0; + _row4._y = 0; + _row4._z = 0; } DMatrix DMatrix::fn4(const DMatrix &m) { |