aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPaul Gilbert2017-03-01 22:22:16 -0500
committerPaul Gilbert2017-03-01 22:22:16 -0500
commit49218970131904419777873019fbc8067d1d7a30 (patch)
treee3635a3756c5f2b2ab2e5e249e43215d17e79d40 /engines
parent4ab38721ce3e57a7174d12d017bdb6679f635153 (diff)
downloadscummvm-rg350-49218970131904419777873019fbc8067d1d7a30.tar.gz
scummvm-rg350-49218970131904419777873019fbc8067d1d7a30.tar.bz2
scummvm-rg350-49218970131904419777873019fbc8067d1d7a30.zip
TITANIC: Implemented CStarView MouseMoveMsg
Diffstat (limited to 'engines')
-rw-r--r--engines/titanic/star_control/fpoint.cpp3
-rw-r--r--engines/titanic/star_control/fpoint.h5
-rw-r--r--engines/titanic/star_control/star_control_sub12.cpp4
-rw-r--r--engines/titanic/star_control/star_control_sub12.h8
-rw-r--r--engines/titanic/star_control/star_control_sub2.cpp4
-rw-r--r--engines/titanic/star_control/star_control_sub2.h2
-rw-r--r--engines/titanic/star_control/star_view.cpp37
-rw-r--r--engines/titanic/star_control/star_view.h4
8 files changed, 48 insertions, 19 deletions
diff --git a/engines/titanic/star_control/fpoint.cpp b/engines/titanic/star_control/fpoint.cpp
index a2829572f8..a7c764177a 100644
--- a/engines/titanic/star_control/fpoint.cpp
+++ b/engines/titanic/star_control/fpoint.cpp
@@ -25,13 +25,14 @@
namespace Titanic {
-void FPoint::normalize() {
+double FPoint::normalize() {
double hyp = sqrt(_x * _x + _y * _y);
assert(hyp != 0.0);
double fraction = 1.0 / hyp;
_x *= fraction;
_y *= fraction;
+ return hyp;
}
} // End of namespace Titanic
diff --git a/engines/titanic/star_control/fpoint.h b/engines/titanic/star_control/fpoint.h
index 9ce58c08af..d967351289 100644
--- a/engines/titanic/star_control/fpoint.h
+++ b/engines/titanic/star_control/fpoint.h
@@ -23,6 +23,8 @@
#ifndef TITANIC_FPOINT_H
#define TITANIC_FPOINT_H
+#include "common/rect.h"
+
namespace Titanic {
/**
@@ -34,6 +36,7 @@ public:
public:
FPoint() : _x(0), _y(0) {}
FPoint(double x, double y) : _x(x), _y(y) {}
+ FPoint(const Common::Point &pt) : _x(pt.x), _y(pt.y) {}
bool operator==(const FPoint &p) const { return _x == p._x && _y == p._y; }
bool operator!=(const FPoint &p) const { return _x != p._x || _y != p._y; }
@@ -54,7 +57,7 @@ public:
* Normalises the X and Y coordinates as fractions relative to the
* value of the hypotenuse formed by a triangle from the origin (0,0)
*/
- void normalize();
+ double normalize();
};
} // End of namespace Titanic
diff --git a/engines/titanic/star_control/star_control_sub12.cpp b/engines/titanic/star_control/star_control_sub12.cpp
index e8d49992bb..b60bb0ae3f 100644
--- a/engines/titanic/star_control/star_control_sub12.cpp
+++ b/engines/titanic/star_control/star_control_sub12.cpp
@@ -216,8 +216,8 @@ FVector CStarControlSub12::proc31(int index, const FVector &v) {
return _sub13.fn18(index, v);
}
-void CStarControlSub12::proc32(double v1, double v2) {
- error("TODO: CStarControlSub12::proc32");
+void CStarControlSub12::setViewportPosition(const FPoint &pt) {
+ // TODO
}
bool CStarControlSub12::setArrayVector(const FVector &v) {
diff --git a/engines/titanic/star_control/star_control_sub12.h b/engines/titanic/star_control/star_control_sub12.h
index 8da45df5c0..648225140f 100644
--- a/engines/titanic/star_control/star_control_sub12.h
+++ b/engines/titanic/star_control/star_control_sub12.h
@@ -25,6 +25,7 @@
#include "titanic/support/simple_file.h"
#include "titanic/star_control/fmatrix.h"
+#include "titanic/star_control/fpoint.h"
#include "titanic/star_control/star_control_sub13.h"
#include "titanic/star_control/star_control_sub20.h"
@@ -93,7 +94,12 @@ public:
virtual FVector proc29(const FVector &v);
virtual FVector proc30(int index, const FVector &v);
virtual FVector proc31(int index, const FVector &v);
- virtual void proc32(double v1, double v2);
+
+ /**
+ * Sets the viewport position within the starfield
+ */
+ virtual void setViewportPosition(const FPoint &pt);
+
virtual int getCurrentIndex() const { return _currentIndex; }
virtual bool setArrayVector(const FVector &v);
virtual bool proc35();
diff --git a/engines/titanic/star_control/star_control_sub2.cpp b/engines/titanic/star_control/star_control_sub2.cpp
index fcbb70cbcb..f020e2ceb5 100644
--- a/engines/titanic/star_control/star_control_sub2.cpp
+++ b/engines/titanic/star_control/star_control_sub2.cpp
@@ -24,9 +24,9 @@
namespace Titanic {
-bool CStarControlSub2::proc3(int v1) {
+bool CStarControlSub2::loadYale(int v1) {
clear();
- // TODO
+ error("Original loadYale not supported");
return true;
}
diff --git a/engines/titanic/star_control/star_control_sub2.h b/engines/titanic/star_control/star_control_sub2.h
index cd7781548f..c3d756e793 100644
--- a/engines/titanic/star_control/star_control_sub2.h
+++ b/engines/titanic/star_control/star_control_sub2.h
@@ -31,7 +31,7 @@ class CStarControlSub2: public CBaseStar {
public:
virtual ~CStarControlSub2() {}
- virtual bool proc3(int v1);
+ virtual bool loadYale(int v1);
virtual bool proc4(int v1, int v2, int v3, int v4, int v5);
virtual bool loadStar();
virtual bool proc7(int v1, int v2);
diff --git a/engines/titanic/star_control/star_view.cpp b/engines/titanic/star_control/star_view.cpp
index d10e0ee094..46e4702caa 100644
--- a/engines/titanic/star_control/star_view.cpp
+++ b/engines/titanic/star_control/star_view.cpp
@@ -31,9 +31,8 @@ namespace Titanic {
CStarView::CStarView() : _sub12(nullptr, nullptr), _sub13((void *)nullptr),
_owner(nullptr), _starField(nullptr), _videoSurface(nullptr), _field118(0),
_videoSurface2(nullptr), _homePhotoMask(nullptr),
- _field218(0), _field21C(0) {
- CStar20Data data = { 0, 0, 0x47C35000, 0, 0x41A00000,
- 0x3F800000, 0x3F800000, 0x3F800000 };
+ _field218(0), _showingPhoto(false) {
+ CStar20Data data = { 0, 0, 100000.0, 0, 20.0, 1.0, 1.0, 1.0 };
_sub12.proc3(&data);
}
@@ -47,7 +46,7 @@ void CStarView::load(SimpleFile *file, int param) {
_sub13.load(file, 0);
_field218 = file->readNumber();
- _field21C = file->readNumber();
+ _showingPhoto = file->readNumber();
}
}
@@ -59,7 +58,7 @@ void CStarView::save(SimpleFile *file, int indent) {
_sub13.save(file, indent);
file->writeNumberLine(_field218, indent);
- file->writeNumberLine(_field21C, indent);
+ file->writeNumberLine(_showingPhoto, indent);
}
void CStarView::setup(CScreenManager *screenManager, CStarField *starField, CStarControl *starControl) {
@@ -76,13 +75,13 @@ void CStarView::draw(CScreenManager *screenManager) {
return;
if (_fader.isActive()) {
- CVideoSurface *surface = _field21C ? _videoSurface2 : _videoSurface;
+ CVideoSurface *surface = _showingPhoto ? _videoSurface2 : _videoSurface;
surface = _fader.fade(screenManager, surface);
screenManager->blitFrom(SURFACE_PRIMARY, surface);
} else {
Point destPos(20, 10);
- if (_field21C) {
+ if (_showingPhoto) {
screenManager->blitFrom(SURFACE_PRIMARY, _videoSurface2, &destPos);
if (!_homePhotoMask && _owner) {
@@ -110,8 +109,28 @@ void CStarView::MouseButtonDownMsg(int unused, const Point &pt) {
// TODO
}
-void CStarView::MouseMoveMsg(int unused, const Point &pt) {
- // TODO
+bool CStarView::MouseMoveMsg(int unused, const Point &pt) {
+ if (!_showingPhoto && (_fader._index < 0 || _fader._count >= 0)) {
+ FPoint fpt = pt;
+ FPoint centerPt(300.0, 170.0);
+
+ if (fpt != centerPt) {
+ double threshold = MIN(centerPt._x, centerPt._y) * 0.5;
+ FPoint tempPt = fpt - centerPt;
+
+ double distance = tempPt.normalize();
+ if (distance >= threshold) {
+ distance -= threshold;
+
+ FPoint relPt(tempPt._x * -2.0 * distance / threshold,
+ tempPt._y * -2.0 * distance / threshold);
+ _sub12.setViewportPosition(relPt);
+ return true;
+ }
+ }
+ }
+
+ return false;
}
CErrorCode CStarView::KeyCharMsg(int key) {
diff --git a/engines/titanic/star_control/star_view.h b/engines/titanic/star_control/star_view.h
index 5e958c8053..4fd640cb9d 100644
--- a/engines/titanic/star_control/star_view.h
+++ b/engines/titanic/star_control/star_view.h
@@ -47,7 +47,7 @@ private:
CVideoSurface *_videoSurface2;
CGameObject *_homePhotoMask;
int _field218;
- int _field21C;
+ bool _showingPhoto;
#if 0
int _field210;
#endif
@@ -86,7 +86,7 @@ public:
/**
* Handles mouse move messages
*/
- void MouseMoveMsg(int unused, const Point &pt);
+ bool MouseMoveMsg(int unused, const Point &pt);
/**
* Handles keyboard messages