aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/titanic/star_control/star_camera.cpp16
-rw-r--r--engines/titanic/star_control/star_camera.h10
-rw-r--r--engines/titanic/star_control/star_view.cpp2
3 files changed, 24 insertions, 4 deletions
diff --git a/engines/titanic/star_control/star_camera.cpp b/engines/titanic/star_control/star_camera.cpp
index d3bc3d988f..c9cffd481f 100644
--- a/engines/titanic/star_control/star_camera.cpp
+++ b/engines/titanic/star_control/star_camera.cpp
@@ -41,12 +41,12 @@ FMatrix *CStarCamera::_priorOrientation;
FMatrix *CStarCamera::_newOrientation;
CStarCamera::CStarCamera(const CNavigationInfo *data) :
- _starLockState(ZERO_LOCKED), _mover(nullptr), _isMoved(false) {
+ _starLockState(ZERO_LOCKED), _mover(nullptr), _isMoved(false), _isInLockingProcess(false) {
setupHandler(data);
}
CStarCamera::CStarCamera(CViewport *src) :
- _starLockState(ZERO_LOCKED), _mover(nullptr), _isMoved(false), _viewport(src) {
+ _starLockState(ZERO_LOCKED), _mover(nullptr), _isMoved(false), _isInLockingProcess(false), _viewport(src) {
}
void CStarCamera::init() {
@@ -65,6 +65,10 @@ bool CStarCamera::isLocked() {
return _mover->isLocked();
}
+bool CStarCamera::isNotInLockingProcess() {
+ return !_isInLockingProcess;
+}
+
CStarCamera::~CStarCamera() {
deleteHandler();
}
@@ -252,6 +256,8 @@ void CStarCamera::setViewportAngle(const FPoint &angles) {
if (isLocked())
return;
+ _isInLockingProcess = false;
+
switch(_starLockState) {
case ZERO_LOCKED: {
FPose subX(X_AXIS, angles._y);
@@ -471,6 +477,7 @@ bool CStarCamera::lockMarker1(FVector v1, FVector firstStarPosition, FVector v3)
if (_starLockState != ZERO_LOCKED)
return true;
+ _isInLockingProcess = true;
FVector tempV;
double val1, val2, val3, val4, val5;
double val6, val7, val8, val9;
@@ -504,12 +511,15 @@ bool CStarCamera::lockMarker1(FVector v1, FVector firstStarPosition, FVector v3)
CStarVector *sv = new CStarVector(this, firstStarPosition);
_mover->setVector(sv);
+
return true;
}
bool CStarCamera::lockMarker2(CViewport *viewport, const FVector &secondStarPosition) {
if (_starLockState != ONE_LOCKED)
return true;
+
+ _isInLockingProcess = true;
FVector firstStarPosition = _lockedStarsPos._row1;
DAffine m2(0, firstStarPosition); // Identity matrix and col4 as the 1st stars position
DVector starDelta = secondStarPosition - firstStarPosition;
@@ -603,6 +613,7 @@ bool CStarCamera::lockMarker3(CViewport *viewport, const FVector &thirdStarPosit
if (_starLockState != TWO_LOCKED)
return true;
+ _isInLockingProcess = true;
FMatrix newOr = viewport->getOrientation();
FMatrix oldOr = _viewport.getOrientation();
FVector newPos = viewport->_position;
@@ -612,6 +623,7 @@ bool CStarCamera::lockMarker3(CViewport *viewport, const FVector &thirdStarPosit
CStarVector *sv = new CStarVector(this, thirdStarPosition);
_mover->setVector(sv);
+
return true;
}
diff --git a/engines/titanic/star_control/star_camera.h b/engines/titanic/star_control/star_camera.h
index 71be90d345..72c26c12a6 100644
--- a/engines/titanic/star_control/star_camera.h
+++ b/engines/titanic/star_control/star_camera.h
@@ -49,7 +49,8 @@ private:
FMatrix _lockedStarsPos; // Each row represents the location of a locked star
CCameraMover *_mover;
CViewport _viewport;
- bool _isMoved;
+ bool _isMoved; // TODO: determine if this is being used
+ bool _isInLockingProcess; // The mover/view is homing in on a new star
private:
/**
* Set up a handler
@@ -77,6 +78,13 @@ public:
virtual void proc3(const CNavigationInfo *src);
/**
+ * The mover/view is not currently homing in on a new star
+ * This can mean it is unmarked, or that it is fully locked
+ * onto one star or more (but not in the process of doing so)
+ */
+ bool isNotInLockingProcess();
+
+ /**
* Set the camera position
*/
virtual void setPosition(const FVector &v);
diff --git a/engines/titanic/star_control/star_view.cpp b/engines/titanic/star_control/star_view.cpp
index 6730d02391..e65c5dab61 100644
--- a/engines/titanic/star_control/star_view.cpp
+++ b/engines/titanic/star_control/star_view.cpp
@@ -434,7 +434,7 @@ void CStarView::lockStar() {
}
void CStarView::unlockStar() {
- if (_starField && !_showingPhoto) {
+ if (_starField && !_showingPhoto && _camera.isNotInLockingProcess()) {
_camera.removeLockedStar();
_starField->fn8(_photoSurface);
}