diff options
Diffstat (limited to 'engines/titanic/star_control/star_camera.cpp')
-rw-r--r-- | engines/titanic/star_control/star_camera.cpp | 50 |
1 files changed, 29 insertions, 21 deletions
diff --git a/engines/titanic/star_control/star_camera.cpp b/engines/titanic/star_control/star_camera.cpp index f1bf24b90e..68427a3452 100644 --- a/engines/titanic/star_control/star_camera.cpp +++ b/engines/titanic/star_control/star_camera.cpp @@ -269,10 +269,10 @@ void CStarCamera::setViewportAngle(const FPoint &angles) { tempV5 -= row1; tempV6 -= row1; - tempV1 = tempV1.fn5(pose); - tempV4 = tempV4.fn5(pose); - tempV5 = tempV5.fn5(pose); - tempV6 = tempV6.fn5(pose); + tempV1 = tempV1.MatProdRowVect(pose); + tempV4 = tempV4.MatProdRowVect(pose); + tempV5 = tempV5.MatProdRowVect(pose); + tempV6 = tempV6.MatProdRowVect(pose); tempV4 -= tempV1; tempV5 -= tempV1; @@ -450,9 +450,9 @@ void CStarCamera::deleteHandler() { } } -void CStarCamera::lockMarker1(FVector v1, FVector v2, FVector v3) { +bool CStarCamera::lockMarker1(FVector v1, FVector v2, FVector v3) { if (_starLockState != ZERO_LOCKED) - return; + return true; FVector tempV; double val1, val2, val3, val4, val5; @@ -487,11 +487,12 @@ void CStarCamera::lockMarker1(FVector v1, FVector v2, FVector v3) { CStarVector *sv = new CStarVector(this, v2); _mover->setVector(sv); + return true; } -void CStarCamera::lockMarker2(CViewport *viewport, const FVector &v) { +bool CStarCamera::lockMarker2(CViewport *viewport, const FVector &v) { if (_starLockState != ONE_LOCKED) - return; + return true; DAffine m2(X_AXIS, _matrix._row1); DVector tempV1 = v - _matrix._row1; @@ -567,7 +568,7 @@ void CStarCamera::lockMarker2(CViewport *viewport, const FVector &v) { m4._col2 -= m4._col1; m4._col4 -= m4._col1; - FMatrix m6 = _viewport.getOrientation(); + double unusedScale=0.0; if (!m4._col2.normalize(unusedScale) || @@ -581,32 +582,39 @@ void CStarCamera::lockMarker2(CViewport *viewport, const FVector &v) { m5.set(m4._col3, m4._col2, m4._col4); FVector newPos = m4._col1; - - if (_viewport._position != newPos) { - // Only change view if positions are different + FMatrix m6 = _viewport.getOrientation(); + + if (minDistance > 1.0e8) { + // The transition will do poorly in this case. + //removeLockedStar(); // undo locking 2nd star + _mover->proc8(_viewport._position, _viewport._position, m6, m6); + //CStarVector *sv = new CStarVector(this, v); + //_mover->setVector(sv); + return false; + } + else { _mover->proc8(_viewport._position, newPos, m6, m5); + CStarVector *sv = new CStarVector(this, v); + _mover->setVector(sv); + } - - CStarVector *sv = new CStarVector(this, v); - _mover->setVector(sv); + return true; } -void CStarCamera::lockMarker3(CViewport *viewport, const FVector &v) { +bool CStarCamera::lockMarker3(CViewport *viewport, const FVector &v) { if (_starLockState != TWO_LOCKED) - return; + return true; FMatrix newOr = viewport->getOrientation(); FMatrix oldOr = _viewport.getOrientation(); FVector newPos = viewport->_position; FVector oldPos = _viewport._position; - if (oldPos != newPos) { - // Only change view if positions are different - _mover->proc8(oldPos, newPos, oldOr, newOr); - } + _mover->proc8(oldPos, newPos, oldOr, newOr); CStarVector *sv = new CStarVector(this, v); _mover->setVector(sv); + return true; } } // End of namespace Titanic |