aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/star_control/dmatrix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/star_control/dmatrix.cpp')
-rw-r--r--engines/titanic/star_control/dmatrix.cpp64
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) {