mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-23 04:33:09 +00:00
TITANIC: Further work on DMatrix
This commit is contained in:
parent
1b06a9294a
commit
0118919d35
@ -21,13 +21,84 @@
|
||||
*/
|
||||
|
||||
#include "titanic/star_control/dmatrix.h"
|
||||
#include "titanic/star_control/fmatrix.h"
|
||||
#include "titanic/star_control/star_control_sub26.h"
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
DMatrix *DMatrix::_static;
|
||||
|
||||
DMatrix::DMatrix() :
|
||||
_row1(1.0, 0.0, 0.0), _row2(0.0, 1.0, 0.0), _row3(0.0, 0.0, 1.0),
|
||||
_row4(0.0, 0.0, 0.0) {
|
||||
_row1(1.0, 0.0, 0.0), _row2(0.0, 1.0, 0.0), _row3(0.0, 0.0, 1.0) {
|
||||
}
|
||||
|
||||
DMatrix::DMatrix(int mode, const FMatrix *src) {
|
||||
assert(!mode);
|
||||
|
||||
_row1._x = 1.0;
|
||||
_row2._y = 1.0;
|
||||
_row3._z = 1.0;
|
||||
_frow1._x = src->_row1._x;
|
||||
_frow1._y = src->_row1._y;
|
||||
_frow1._z = src->_row1._z;
|
||||
_frow2._x = src->_row2._x;
|
||||
_frow2._y = src->_row2._y;
|
||||
_frow2._z = src->_row2._z;
|
||||
}
|
||||
|
||||
DMatrix::DMatrix(int mode, double val) {
|
||||
set(mode, val);
|
||||
}
|
||||
|
||||
void DMatrix::init() {
|
||||
_static = nullptr;
|
||||
}
|
||||
|
||||
void DMatrix::deinit() {
|
||||
delete _static;
|
||||
_static = nullptr;
|
||||
}
|
||||
|
||||
void DMatrix::set(int mode, double amount) {
|
||||
const double FACTOR = 0.0174532925199433;
|
||||
double sinVal = sin(amount * FACTOR);
|
||||
double cosVal = cos(amount * FACTOR);
|
||||
|
||||
switch (mode) {
|
||||
case 0:
|
||||
_row1._x = 1.0;
|
||||
_row2._y = cosVal;
|
||||
_row2._z = sinVal;
|
||||
_row3._y = -sinVal;
|
||||
_row3._z = cosVal;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
_row1._x = cosVal;
|
||||
_row1._z = sinVal;
|
||||
_row2._y = 1.0;
|
||||
_row3._x = -sinVal;
|
||||
_row3._z = cosVal;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
_row1._x = cosVal;
|
||||
_row1._y = sinVal;
|
||||
_row2._x = -sinVal;
|
||||
_row2._y = cosVal;
|
||||
_row3._z = 1.0;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DMatrix::fn3(CStarControlSub26 *sub26) {
|
||||
double v = sub26->fn1();
|
||||
v = (v < 0.0) ? 0.0 : 2.0 / v;
|
||||
|
||||
error("TODO: DMatrix::fn3 %d", (int)v);
|
||||
}
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -24,21 +24,40 @@
|
||||
#define TITANIC_DMATRIX_H
|
||||
|
||||
#include "titanic/star_control/dvector.h"
|
||||
#include "titanic/star_control/fvector.h"
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
class FMatrix;
|
||||
class CStarControlSub26;
|
||||
|
||||
/**
|
||||
* Double based matrix class.
|
||||
* @remarks TODO: See if it can be merged with FMatrix
|
||||
*/
|
||||
class DMatrix {
|
||||
private:
|
||||
static DMatrix *_static;
|
||||
public:
|
||||
DVector _row1;
|
||||
DVector _row2;
|
||||
DVector _row3;
|
||||
DVector _row4;
|
||||
FVector _frow1;
|
||||
FVector _frow2;
|
||||
public:
|
||||
static void init();
|
||||
static void deinit();
|
||||
public:
|
||||
DMatrix();
|
||||
DMatrix(int mode, const FMatrix *src);
|
||||
DMatrix(int mode, double val);
|
||||
|
||||
/**
|
||||
* Sets up data for the matrix
|
||||
*/
|
||||
void set(int mode, double amount);
|
||||
|
||||
void fn3(CStarControlSub26 *sub26);
|
||||
};
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include "titanic/support/screen_manager.h"
|
||||
#include "titanic/star_control/star_control.h"
|
||||
#include "titanic/star_control/dmatrix.h"
|
||||
#include "titanic/star_control/error_code.h"
|
||||
#include "titanic/star_control/star_control_sub6.h"
|
||||
|
||||
@ -37,10 +38,12 @@ END_MESSAGE_MAP()
|
||||
CStarControl::CStarControl() : _fieldBC(0), _field80B0(0),
|
||||
_starRect(20, 10, 620, 350) {
|
||||
CStarControlSub6::init();
|
||||
DMatrix::init();
|
||||
}
|
||||
|
||||
CStarControl::~CStarControl() {
|
||||
CStarControlSub6::deinit();
|
||||
DMatrix::deinit();
|
||||
}
|
||||
|
||||
void CStarControl::save(SimpleFile *file, int indent) {
|
||||
|
@ -25,4 +25,10 @@
|
||||
|
||||
namespace Titanic {
|
||||
|
||||
double CStarControlSub26::fn1() const {
|
||||
return _sub._v1 * _sub._v1 + _sub._v2 * _sub._v2 +
|
||||
_sub._v3 * _sub._v3 + _field0 * _field0;
|
||||
}
|
||||
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -27,19 +27,19 @@ namespace Titanic {
|
||||
|
||||
class CStarControlSub26 {
|
||||
struct Sub {
|
||||
int _field0;
|
||||
int _field4;
|
||||
int _field8;
|
||||
int _field10;
|
||||
int _field14;
|
||||
double _v1;
|
||||
double _v2;
|
||||
double _v3;
|
||||
|
||||
Sub() : _field0(0), _field4(0), _field8(0), _field10(0), _field14(0) {}
|
||||
Sub() : _v1(0.0), _v2(0.0), _v3(0.0) {}
|
||||
};
|
||||
public:
|
||||
int _field0;
|
||||
double _field4;
|
||||
double _field0;
|
||||
Sub _sub;
|
||||
public:
|
||||
CStarControlSub26() : _field0(0), _field4(1.875) {}
|
||||
CStarControlSub26() : _field0(1.0) {}
|
||||
|
||||
double fn1() const;
|
||||
};
|
||||
|
||||
} // End of namespace Titanic
|
||||
|
@ -40,6 +40,7 @@ void CStarControlSub6::init() {
|
||||
|
||||
void CStarControlSub6::deinit() {
|
||||
delete _static;
|
||||
_static = nullptr;
|
||||
}
|
||||
|
||||
void CStarControlSub6::clear() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user