[Scummvm-git-logs] scummvm master -> 0aaa6c415fc14229d0bd82fa3cfb175444a5c47a

dreammaster dreammaster at scummvm.org
Tue Mar 21 01:19:51 CET 2017


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
0aaa6c415f TITANIC: Implemented CStarControlSub12 fn2


Commit: 0aaa6c415fc14229d0bd82fa3cfb175444a5c47a
    https://github.com/scummvm/scummvm/commit/0aaa6c415fc14229d0bd82fa3cfb175444a5c47a
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2017-03-20T20:19:41-04:00

Commit Message:
TITANIC: Implemented CStarControlSub12 fn2

Changed paths:
    engines/titanic/star_control/base_star.cpp
    engines/titanic/star_control/base_star.h
    engines/titanic/star_control/star_control_sub12.cpp
    engines/titanic/star_control/star_control_sub20.cpp
    engines/titanic/star_control/star_control_sub20.h


diff --git a/engines/titanic/star_control/base_star.cpp b/engines/titanic/star_control/base_star.cpp
index ffe5fd0..c1564e1 100644
--- a/engines/titanic/star_control/base_star.cpp
+++ b/engines/titanic/star_control/base_star.cpp
@@ -214,4 +214,10 @@ int CBaseStar::baseFn2(CSurfaceArea *surfaceArea, CStarControlSub12 *sub12) {
 	return ref._index;
 }
 
+/*------------------------------------------------------------------------*/
+
+void CStarVector::proc1() {
+	_owner->setArrayVector(_vector);
+}
+
 } // End of namespace Titanic
diff --git a/engines/titanic/star_control/base_star.h b/engines/titanic/star_control/base_star.h
index 8fc36ba..7dd3fb5 100644
--- a/engines/titanic/star_control/base_star.h
+++ b/engines/titanic/star_control/base_star.h
@@ -146,6 +146,16 @@ public:
 	int baseFn2(CSurfaceArea *surfaceArea, CStarControlSub12 *sub12);
 };
 
+class CStarVector {
+private:
+	CStarControlSub12 *_owner;
+	FVector _vector;
+public:
+	CStarVector(CStarControlSub12 *owner, const FVector &v) : _owner(owner), _vector(v) {}
+
+	virtual void proc1();
+};
+
 } // End of namespace Titanic
 
 #endif /* TITANIC_STAR_CONTROL_SUB3_H */
diff --git a/engines/titanic/star_control/star_control_sub12.cpp b/engines/titanic/star_control/star_control_sub12.cpp
index 254b2a8..5e8cf5a 100644
--- a/engines/titanic/star_control/star_control_sub12.cpp
+++ b/engines/titanic/star_control/star_control_sub12.cpp
@@ -456,7 +456,26 @@ void CStarControlSub12::fn1(CStarControlSub13 *sub13, const FVector &v) {
 }
 
 void CStarControlSub12::fn2(FVector v1, FVector v2, FVector v3) {
-	// TODO
+	if (_currentIndex == -1) {
+		FVector tempV;
+		tempV._z = _sub13._field10;
+		v3._z = v1._z;
+		tempV._x = _sub13._fieldD0 * v1._y * v1._z / _sub13._fieldC8;
+		v3._y = _sub13._fieldCC * tempV._z * v3._x / _sub13._fieldC8;
+		v3._x = _sub13._fieldCC * v1._x * v1._z / _sub13._fieldC8 - _sub13._valArray[2];
+		tempV._y = _sub13._fieldD0 * tempV._z * v3._y / _sub13._fieldC8;
+		tempV._x = tempV._x - _sub13._valArray[2];
+
+		v3.normalize();
+		tempV.normalize();
+
+		FMatrix matrix = _sub13.getMatrix();
+		const FVector &pos = _sub13._position;
+		_handlerP->proc10(v3, tempV, pos, matrix);
+
+		CStarVector *sv = new CStarVector(this, v2);
+		_handlerP->setVector(sv);
+	}
 }
 
 void CStarControlSub12::fn3(CStarControlSub13 *sub13, const FVector &v) {
diff --git a/engines/titanic/star_control/star_control_sub20.cpp b/engines/titanic/star_control/star_control_sub20.cpp
index ca60cc9..955a855 100644
--- a/engines/titanic/star_control/star_control_sub20.cpp
+++ b/engines/titanic/star_control/star_control_sub20.cpp
@@ -27,7 +27,7 @@ namespace Titanic {
 
 CStarControlSub20::CStarControlSub20(const CStar20Data *src) {
 	_lockCounter = 0;
-	_dataP = nullptr;
+	_starVector = nullptr;
 
 	if (src) {
 		copyFrom(src);
@@ -100,15 +100,15 @@ void CStarControlSub20::proc11(CErrorCode &errorCode, FVector &v, const FMatrix
 	}
 }
 
-void CStarControlSub20::setData(void *data) {
+void CStarControlSub20::setVector(CStarVector *sv) {
 	clear();
-	_dataP = (byte *)data;
+	_starVector = sv;
 }
 
 void CStarControlSub20::clear() {
-	if (_dataP) {
-		delete _dataP;
-		_dataP = nullptr;
+	if (_starVector) {
+		delete _starVector;
+		_starVector = nullptr;
 	}
 }
 
diff --git a/engines/titanic/star_control/star_control_sub20.h b/engines/titanic/star_control/star_control_sub20.h
index 49b63d5..5d7e8c0 100644
--- a/engines/titanic/star_control/star_control_sub20.h
+++ b/engines/titanic/star_control/star_control_sub20.h
@@ -24,6 +24,7 @@
 #define TITANIC_STAR_CONTROL_SUB20_H
 
 #include "titanic/support/simple_file.h"
+#include "titanic/star_control/base_star.h"
 #include "titanic/star_control/error_code.h"
 #include "titanic/star_control/fmatrix.h"
 
@@ -43,7 +44,7 @@ struct CStar20Data {
 class CStarControlSub20 : public CStar20Data {
 public:
 	int _lockCounter;
-	byte *_dataP;
+	CStarVector *_starVector;
 public:
 	CStarControlSub20(const CStar20Data *src);
 	virtual ~CStarControlSub20();
@@ -58,11 +59,7 @@ public:
 	virtual void proc9(FVector &v1, FVector &v2, FMatrix &matrix) {}
 	virtual void proc10(const FVector &v1, const FVector &v2, const FVector &v3, const FMatrix &m) {}
 	virtual void proc11(CErrorCode &errorCode, FVector &v, const FMatrix &m);
-
-	/**
-	 * Set the data
-	 */
-	virtual void setData(void *data);
+	virtual void setVector(CStarVector *sv);
 
 	/**
 	 * Clear the class





More information about the Scummvm-git-logs mailing list