From c105be916ed2ee5cb0207ecfa69703ea89a61655 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 7 Jun 2017 21:50:03 -0400 Subject: TITANIC: Renamings for automatic camera mover classes --- engines/titanic/module.mk | 6 +- engines/titanic/star_control/camera_auto_mover.cpp | 106 ++++++++++++++ engines/titanic/star_control/camera_auto_mover.h | 71 +++++++++ engines/titanic/star_control/marked_auto_mover.cpp | 107 ++++++++++++++ engines/titanic/star_control/marked_auto_mover.h | 51 +++++++ .../titanic/star_control/star_control_sub21.cpp | 8 +- engines/titanic/star_control/star_control_sub21.h | 4 +- .../titanic/star_control/star_control_sub22.cpp | 6 +- engines/titanic/star_control/star_control_sub22.h | 4 +- .../titanic/star_control/star_control_sub23.cpp | 106 -------------- engines/titanic/star_control/star_control_sub23.h | 68 --------- .../titanic/star_control/star_control_sub24.cpp | 161 --------------------- engines/titanic/star_control/star_control_sub24.h | 46 ------ .../titanic/star_control/star_control_sub27.cpp | 107 -------------- engines/titanic/star_control/star_control_sub27.h | 48 ------ .../titanic/star_control/unmarked_auto_mover.cpp | 161 +++++++++++++++++++++ engines/titanic/star_control/unmarked_auto_mover.h | 49 +++++++ 17 files changed, 559 insertions(+), 550 deletions(-) create mode 100644 engines/titanic/star_control/camera_auto_mover.cpp create mode 100644 engines/titanic/star_control/camera_auto_mover.h create mode 100644 engines/titanic/star_control/marked_auto_mover.cpp create mode 100644 engines/titanic/star_control/marked_auto_mover.h delete mode 100644 engines/titanic/star_control/star_control_sub23.cpp delete mode 100644 engines/titanic/star_control/star_control_sub23.h delete mode 100644 engines/titanic/star_control/star_control_sub24.cpp delete mode 100644 engines/titanic/star_control/star_control_sub24.h delete mode 100644 engines/titanic/star_control/star_control_sub27.cpp delete mode 100644 engines/titanic/star_control/star_control_sub27.h create mode 100644 engines/titanic/star_control/unmarked_auto_mover.cpp create mode 100644 engines/titanic/star_control/unmarked_auto_mover.h diff --git a/engines/titanic/module.mk b/engines/titanic/module.mk index 1e85874fd8..d6c8396588 100644 --- a/engines/titanic/module.mk +++ b/engines/titanic/module.mk @@ -432,6 +432,7 @@ MODULE_OBJS := \ sound/wave_file.o \ star_control/star_control.o \ star_control/base_stars.o \ + star_control/camera_auto_mover.o \ star_control/camera_mover.o \ star_control/dmatrix.o \ star_control/dvector.o \ @@ -441,6 +442,7 @@ MODULE_OBJS := \ star_control/frange.o \ star_control/frect.o \ star_control/fvector.o \ + star_control/marked_auto_mover.o \ star_control/matrix_transform.o \ star_control/orientation_changer.o \ star_control/star_camera.o \ @@ -448,9 +450,6 @@ MODULE_OBJS := \ star_control/star_control_sub2.o \ star_control/star_control_sub21.o \ star_control/star_control_sub22.o \ - star_control/star_control_sub23.o \ - star_control/star_control_sub24.o \ - star_control/star_control_sub27.o \ star_control/star_crosshairs.o \ star_control/star_field.o \ star_control/star_markers.o \ @@ -460,6 +459,7 @@ MODULE_OBJS := \ star_control/star_view.o \ star_control/surface_area.o \ star_control/surface_fader.o \ + star_control/unmarked_auto_mover.o \ star_control/viewport.o \ support/avi_surface.o \ support/direct_draw.o \ diff --git a/engines/titanic/star_control/camera_auto_mover.cpp b/engines/titanic/star_control/camera_auto_mover.cpp new file mode 100644 index 0000000000..45e5a9e03e --- /dev/null +++ b/engines/titanic/star_control/camera_auto_mover.cpp @@ -0,0 +1,106 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "titanic/star_control/camera_auto_mover.h" +#include "common/textconsole.h" + +namespace Titanic { + +CCameraAutoMover::CCameraAutoMover() : _srcPos(0.0, 1000000.0, 0.0) { + _field4 = 0; + _active = false; + _distance = 0.0; + _field34 = false; + _field38 = 0.0; + _field3C = 0; + _field40 = 0; + _field44 = 0; + _field48 = 0; + _field4C = 0; + _field54 = 0; + _transitionPercent = 0.0; + _transitionPercentInc = 0.0; +} + +void CCameraAutoMover::proc2(const FVector &oldPos, const FVector &newPos, + const FMatrix &oldOrientation, const FMatrix &newOrientation) { + _srcPos = oldPos; + _destPos = newPos; + _posDelta = _destPos - _srcPos; + _distance = _posDelta.normalize(); + + _active = false; + _field34 = false; + _transitionPercent = 1.0; + _field40 = -1; + _field44 = -1; + _field48 = -1; + _field4C = 0; +} + +void CCameraAutoMover::proc3(const FMatrix &srcOrient, const FMatrix &destOrient) { + _srcPos.clear(); + _destPos.clear(); + _transitionPercent = 1.0; + _distance = 0.0; + _active = false; + _field34 = false; +} + +void CCameraAutoMover::setPath(const FVector &srcV, const FVector &destV, const FMatrix &orientation) { + _srcPos = srcV; + _destPos = destV; + _posDelta = _destPos - _srcPos; + _distance = _posDelta.normalize(); + + _active = false; + _field34 = false; + _field40 = -1; + _field44 = -1; + _field48 = -1; + _field4C = -1; + _transitionPercent = 1.0; +} + +void CCameraAutoMover::proc6(int val1, int val2, float val) { + _field44 = val1; + _field4C = val1 + 62; + _field38 = val / (double)(val1 + val2 * 2); + _field40 = 31; + _field48 = 31; + _field3C = (double)val2 * _field38; + + // Calculate the speeds for a graduated movement between stars + double base = 0.0, total = 0.0; + _speeds.resize(32); + for (int idx = 31; idx >= 0; --idx) { + _speeds[idx] = pow(base, 4.0); + total += _speeds[idx]; + base += 0.03125; + } + + for (int idx = 0; idx < 32; ++idx) { + _speeds[idx] = _speeds[idx] * _field3C / total; + } +} + +} // End of namespace Titanic diff --git a/engines/titanic/star_control/camera_auto_mover.h b/engines/titanic/star_control/camera_auto_mover.h new file mode 100644 index 0000000000..52938284ed --- /dev/null +++ b/engines/titanic/star_control/camera_auto_mover.h @@ -0,0 +1,71 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TITANIC_CAMERA_AUTO_MOVER_H +#define TITANIC_CAMERA_AUTO_MOVER_H + +#include "titanic/star_control/error_code.h" +#include "titanic/star_control/fmatrix.h" +#include "titanic/star_control/fvector.h" +#include "titanic/star_control/orientation_changer.h" + +namespace Titanic { + +/** + * Base class for automatic movement of the starview camera + */ +class CCameraAutoMover { +protected: + int _field4; + bool _active; + FVector _srcPos, _destPos; + double _distance; + FVector _posDelta; + bool _field34; + double _field38; + double _field3C; + int _field40; + int _field44; + int _field48; + int _field4C; + Common::Array _speeds; + int _field54; + double _transitionPercent; + double _transitionPercentInc; + COrientationChanger _orientationChanger; +public: + CCameraAutoMover(); + virtual ~CCameraAutoMover() {} + + virtual void proc2(const FVector &oldPos, const FVector &newPos, + const FMatrix &oldOrientation, const FMatrix &newOrientation); + virtual void proc3(const FMatrix &srcOrient, const FMatrix &destOrient); + virtual void setPath(const FVector &srcV, const FVector &destV, const FMatrix &orientation); + virtual int proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orientation) { return 2; } + virtual void proc6(int val1, int val2, float val); + + bool isActive() const { return _active; } +}; + +} // End of namespace Titanic + +#endif /* TITANIC_CAMERA_AUTO_MOVER_H */ diff --git a/engines/titanic/star_control/marked_auto_mover.cpp b/engines/titanic/star_control/marked_auto_mover.cpp new file mode 100644 index 0000000000..828fe03a95 --- /dev/null +++ b/engines/titanic/star_control/marked_auto_mover.cpp @@ -0,0 +1,107 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "titanic/star_control/marked_auto_mover.h" +#include "common/textconsole.h" + +namespace Titanic { + +void CMarkedAutoMover::proc2(const FVector &oldPos, const FVector &newPos, + const FMatrix &oldOrientation, const FMatrix &newOrientation) { + CCameraAutoMover::proc2(oldPos, newPos, oldOrientation, newOrientation); + + double distance = _distance; + if (distance > 0.0) { + _active = true; + _field34 = true; + proc6(120, 4, distance); + } + + if (newPos != oldPos) { + _orientationChanger.load(oldOrientation, newOrientation); + _transitionPercent = 0.0; + + if (_field4C == 0) { + _transitionPercentInc = 0.1; + _active = true; + } else { + _transitionPercentInc = 1.0 / _field4C; + _active = true; + } + } +} + +int CMarkedAutoMover::proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orientation) { + if (!_active) + return 0; + + _transitionPercent += _transitionPercentInc; + orientation = _orientationChanger.getOrientation(_transitionPercent); + errorCode.set(); + + if (_field40 >= 0) { + double speedVal = _speeds[_field40]; + pos += _posDelta * speedVal; + getVectorOnPath(pos); + + --_field40; + errorCode.set(); + return 1; + } else if (_field44 > 0) { + pos += _posDelta * _field38; + getVectorOnPath(pos); + + --_field44; + errorCode.set(); + return 1; + } else if (_field48 >= 0) { + double speedVal = _speeds[31 - _field48]; + pos += _posDelta * speedVal; + getVectorOnPath(pos); + + --_field48; + errorCode.set(); + return 1; + } else { + _active = false; + return 2; + } +} + +void CMarkedAutoMover::getVectorOnPath(FVector &pos) const { + double distance = _posDelta.getDistance(pos); + distance /= _distance; + + if (distance <= 0.0) { + pos = _srcPos; + } else if (distance >= 1.0) { + pos = _destPos; + } else { + pos = FVector( + (_destPos._x - _srcPos._x) * distance + _srcPos._x, + (_destPos._y - _srcPos._y) * distance + _srcPos._y, + (_destPos._z - _srcPos._z) * distance + _srcPos._z + ); + } +} + +} // End of namespace Titanic diff --git a/engines/titanic/star_control/marked_auto_mover.h b/engines/titanic/star_control/marked_auto_mover.h new file mode 100644 index 0000000000..5127496241 --- /dev/null +++ b/engines/titanic/star_control/marked_auto_mover.h @@ -0,0 +1,51 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TITANIC_MARKED_AUTO_MOVER_H +#define TITANIC_MARKED_AUTO_MOVER_H + +#include "titanic/star_control/camera_auto_mover.h" + +namespace Titanic { + +/** + * Automatic camera mover used when one or more markers have been set + */ +class CMarkedAutoMover : public CCameraAutoMover { +private: + /** + * Given a vector, figures out how far is from the movement source, and + * returns a vector on the proper point along the path to the destination + * with that same distance from the source. + */ + void getVectorOnPath(FVector &pos) const; +public: + virtual ~CMarkedAutoMover() {} + + virtual void proc2(const FVector &oldPos, const FVector &newPos, + const FMatrix &oldOrientation, const FMatrix &newOrientation); + virtual int proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orientation); +}; + +} // End of namespace Titanic + +#endif /* TITANIC_MARKED_AUTO_MOVER_H */ diff --git a/engines/titanic/star_control/star_control_sub21.cpp b/engines/titanic/star_control/star_control_sub21.cpp index bf5af80860..4b7a6c396b 100644 --- a/engines/titanic/star_control/star_control_sub21.cpp +++ b/engines/titanic/star_control/star_control_sub21.cpp @@ -38,7 +38,7 @@ void CStarControlSub21::moveTo(const FVector &srcV, const FVector &destV, const debugC(DEBUG_BASIC, kDebugStarfield, "Starfield move %s to %s", srcV.toString().c_str(), destV.toString().c_str()); - _sub24.setPath(srcV, destV, orientation); + _autoMover.setPath(srcV, destV, orientation); } void CStarControlSub21::proc10(const FVector &v1, const FVector &v2, const FVector &v3, const FMatrix &m) { @@ -50,14 +50,14 @@ void CStarControlSub21::proc10(const FVector &v1, const FVector &v2, const FVect DMatrix matrix1 = vector2.fn4(vector1); DMatrix matrix2 = matrix1.fn4(m); - _sub24.proc3(m, matrix2); + _autoMover.proc3(m, matrix2); incLockCount(); } void CStarControlSub21::updatePosition(CErrorCode &errorCode, FVector &pos, FMatrix &orientation) { - if (_sub24.isActive()) { + if (_autoMover.isActive()) { decLockCount(); - int val = _sub24.proc5(errorCode, pos, orientation); + int val = _autoMover.proc5(errorCode, pos, orientation); if (val == 1) incLockCount(); if (val == 2) { diff --git a/engines/titanic/star_control/star_control_sub21.h b/engines/titanic/star_control/star_control_sub21.h index 3b804d95ff..bd876e5631 100644 --- a/engines/titanic/star_control/star_control_sub21.h +++ b/engines/titanic/star_control/star_control_sub21.h @@ -24,13 +24,13 @@ #define TITANIC_STAR_CONTROL_SUB21_H #include "titanic/star_control/camera_mover.h" -#include "titanic/star_control/star_control_sub24.h" +#include "titanic/star_control/unmarked_auto_mover.h" namespace Titanic { class CStarControlSub21 : public CCameraMover { private: - CStarControlSub24 _sub24; + CUnmarkedAutoMover _autoMover; public: CStarControlSub21(const CNavigationInfo *src); virtual ~CStarControlSub21() {} diff --git a/engines/titanic/star_control/star_control_sub22.cpp b/engines/titanic/star_control/star_control_sub22.cpp index f3d9b6dc7a..f26fbb59a8 100644 --- a/engines/titanic/star_control/star_control_sub22.cpp +++ b/engines/titanic/star_control/star_control_sub22.cpp @@ -34,14 +34,14 @@ void CStarControlSub22::proc8(const FVector &oldPos, const FVector &newPos, if (isLocked()) decLockCount(); - _sub27.proc2(oldPos, newPos, oldOrientation, newOrientation); + _autoMover.proc2(oldPos, newPos, oldOrientation, newOrientation); incLockCount(); } void CStarControlSub22::updatePosition(CErrorCode &errorCode, FVector &pos, FMatrix &orientation) { - if (_sub27.isActive()) { + if (_autoMover.isActive()) { decLockCount(); - int val = _sub27.proc5(errorCode, pos, orientation); + int val = _autoMover.proc5(errorCode, pos, orientation); if (val == 1) incLockCount(); if (val == 2) { diff --git a/engines/titanic/star_control/star_control_sub22.h b/engines/titanic/star_control/star_control_sub22.h index 876e06daa5..91b9c4052b 100644 --- a/engines/titanic/star_control/star_control_sub22.h +++ b/engines/titanic/star_control/star_control_sub22.h @@ -24,13 +24,13 @@ #define TITANIC_STAR_CONTROL_SUB22_H #include "titanic/star_control/camera_mover.h" -#include "titanic/star_control/star_control_sub27.h" +#include "titanic/star_control/marked_auto_mover.h" namespace Titanic { class CStarControlSub22 : public CCameraMover { private: - CStarControlSub27 _sub27; + CMarkedAutoMover _autoMover; public: CStarControlSub22(const CNavigationInfo *src); virtual ~CStarControlSub22() {} diff --git a/engines/titanic/star_control/star_control_sub23.cpp b/engines/titanic/star_control/star_control_sub23.cpp deleted file mode 100644 index f72d5c846b..0000000000 --- a/engines/titanic/star_control/star_control_sub23.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "titanic/star_control/star_control_sub23.h" -#include "common/textconsole.h" - -namespace Titanic { - -CStarControlSub23::CStarControlSub23() : _srcPos(0.0, 1000000.0, 0.0) { - _field4 = 0; - _active = false; - _distance = 0.0; - _field34 = false; - _field38 = 0.0; - _field3C = 0; - _field40 = 0; - _field44 = 0; - _field48 = 0; - _field4C = 0; - _field54 = 0; - _transitionPercent = 0.0; - _transitionPercentInc = 0.0; -} - -void CStarControlSub23::proc2(const FVector &oldPos, const FVector &newPos, - const FMatrix &oldOrientation, const FMatrix &newOrientation) { - _srcPos = oldPos; - _destPos = newPos; - _posDelta = _destPos - _srcPos; - _distance = _posDelta.normalize(); - - _active = false; - _field34 = false; - _transitionPercent = 1.0; - _field40 = -1; - _field44 = -1; - _field48 = -1; - _field4C = 0; -} - -void CStarControlSub23::proc3(const FMatrix &srcOrient, const FMatrix &destOrient) { - _srcPos.clear(); - _destPos.clear(); - _transitionPercent = 1.0; - _distance = 0.0; - _active = false; - _field34 = false; -} - -void CStarControlSub23::setPath(const FVector &srcV, const FVector &destV, const FMatrix &orientation) { - _srcPos = srcV; - _destPos = destV; - _posDelta = _destPos - _srcPos; - _distance = _posDelta.normalize(); - - _active = false; - _field34 = false; - _field40 = -1; - _field44 = -1; - _field48 = -1; - _field4C = -1; - _transitionPercent = 1.0; -} - -void CStarControlSub23::proc6(int val1, int val2, float val) { - _field44 = val1; - _field4C = val1 + 62; - _field38 = val / (double)(val1 + val2 * 2); - _field40 = 31; - _field48 = 31; - _field3C = (double)val2 * _field38; - - // Calculate the speeds for a graduated movement between stars - double base = 0.0, total = 0.0; - _speeds.resize(32); - for (int idx = 31; idx >= 0; --idx) { - _speeds[idx] = pow(base, 4.0); - total += _speeds[idx]; - base += 0.03125; - } - - for (int idx = 0; idx < 32; ++idx) { - _speeds[idx] = _speeds[idx] * _field3C / total; - } -} - -} // End of namespace Titanic diff --git a/engines/titanic/star_control/star_control_sub23.h b/engines/titanic/star_control/star_control_sub23.h deleted file mode 100644 index af6d9de784..0000000000 --- a/engines/titanic/star_control/star_control_sub23.h +++ /dev/null @@ -1,68 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TITANIC_STAR_CONTROL_SUB23_H -#define TITANIC_STAR_CONTROL_SUB23_H - -#include "titanic/star_control/error_code.h" -#include "titanic/star_control/fmatrix.h" -#include "titanic/star_control/fvector.h" -#include "titanic/star_control/orientation_changer.h" - -namespace Titanic { - -class CStarControlSub23 { -protected: - int _field4; - bool _active; - FVector _srcPos, _destPos; - double _distance; - FVector _posDelta; - bool _field34; - double _field38; - double _field3C; - int _field40; - int _field44; - int _field48; - int _field4C; - Common::Array _speeds; - int _field54; - double _transitionPercent; - double _transitionPercentInc; - COrientationChanger _orientationChanger; -public: - CStarControlSub23(); - virtual ~CStarControlSub23() {} - - virtual void proc2(const FVector &oldPos, const FVector &newPos, - const FMatrix &oldOrientation, const FMatrix &newOrientation); - virtual void proc3(const FMatrix &srcOrient, const FMatrix &destOrient); - virtual void setPath(const FVector &srcV, const FVector &destV, const FMatrix &orientation); - virtual int proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orientation) { return 2; } - virtual void proc6(int val1, int val2, float val); - - bool isActive() const { return _active; } -}; - -} // End of namespace Titanic - -#endif /* TITANIC_STAR_CONTROL_SUB23_H */ diff --git a/engines/titanic/star_control/star_control_sub24.cpp b/engines/titanic/star_control/star_control_sub24.cpp deleted file mode 100644 index 7b2588e469..0000000000 --- a/engines/titanic/star_control/star_control_sub24.cpp +++ /dev/null @@ -1,161 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "titanic/star_control/star_control_sub24.h" -#include "common/textconsole.h" - -namespace Titanic { - -void CStarControlSub24::proc3(const FMatrix &srcOrient, const FMatrix &destOrient) { - CStarControlSub23::proc3(srcOrient, destOrient); - _orientationChanger.load(srcOrient, destOrient); - _transitionPercentInc = 0.1; - _transitionPercent = 0.0; - _field40 = _field44 = _field48 = -1; - _active = true; -} - -void CStarControlSub24::setPath(const FVector &srcV, const FVector &destV, const FMatrix &orientation) { - CStarControlSub23::setPath(srcV, destV, orientation); - - if (_distance > 8000.0) { - _active = true; - _field34 = 1; - proc6(120, 4, _distance - 8000.0); - } - - FVector row3 = orientation._row3; - double mult = _posDelta._x * row3._x + _posDelta._y * row3._y + _posDelta._z * row3._z; - _transitionPercent = 1.0; - - bool flag = false; - if (mult < 1.0) { - if (mult >= 1.0 - 1.0e-10) - flag = true; - } else { - if (mult <= 1.0 + 1.0e-10) - flag = true; - } - - if (!flag) { - FVector tempV1; - tempV1 = row3.addAndNormalize(_posDelta); - tempV1 = row3.addAndNormalize(tempV1); - tempV1 = row3.addAndNormalize(tempV1); - tempV1 = row3.addAndNormalize(tempV1); - - FMatrix newOrient; - newOrient.set(tempV1); - _orientationChanger.load(orientation, newOrient); - - _transitionPercent = 0.0; - _transitionPercentInc = 0.1; - _active = true; - } -} - -int CStarControlSub24::proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orientation) { - FVector v1, v2, v3, v4; - - if (!_active) - return 0; - - // Firstly we have to do a transition of the camera orientation from - // it's current position to one where the destination star is centered - if (_transitionPercent < 1.0) { - _transitionPercent += _transitionPercentInc; - orientation = _orientationChanger.getOrientation(_transitionPercent); - errorCode.set(); - return 1; - } - - // From here on, we handle the movement to the given destination - if (!_field34) { - _active = false; - return 2; - } - - v2 = orientation._row3; - v3 = _destPos - pos; - v3.normalize(); - - double val = orientation._row3._x * v3._x + orientation._row3._y * v3._y + orientation._row3._z * v3._z; - bool flag = false; - if (val < 1.0) { - if (val >= 1.0 - 1.0e-10) - flag = true; - } else { - if (val <= 1.0 + 1.0e-10) - flag = true; - } - - if (!flag) { - v1 = v2.addAndNormalize(v3); - v1 = v2.addAndNormalize(v1); - v1 = v2.addAndNormalize(v1); - v1 = v2.addAndNormalize(v1); - - orientation.set(v1); - v2 = v1; - } - - if (_field40 >= 0) { - double speedVal = _speeds[_field40]; - v1 = v2 * speedVal; - pos += v1; - - --_field40; - errorCode.set(); - return 1; - } - - if (_field44 > 0) { - v1._z = v2._z * _field38; - v1._x = v2._x * _field38; - pos._x = v1._x + pos._x; - pos._y = v2._y * _field38 + pos._y; - pos._z = v1._z + pos._z; - - --_field44; - errorCode.set(); - return 1; - } - - if (_field48 >= 0) { - double speedVal = _speeds[31 - _field48]; - v1._y = v2._y * speedVal; - v1._z = v2._z * speedVal; - v1._x = v2._x * speedVal; - pos._y = v1._y + pos._y; - pos._z = v1._z + pos._z; - pos._x = pos._x + v1._x; - - --_field48; - errorCode.set(); - return 1; - } - - _active = false; - return 2; -} - -} // End of namespace Titanic diff --git a/engines/titanic/star_control/star_control_sub24.h b/engines/titanic/star_control/star_control_sub24.h deleted file mode 100644 index 4b810ed924..0000000000 --- a/engines/titanic/star_control/star_control_sub24.h +++ /dev/null @@ -1,46 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TITANIC_STAR_CONTROL_SUB24_H -#define TITANIC_STAR_CONTROL_SUB24_H - -#include "titanic/star_control/star_control_sub23.h" - -namespace Titanic { - -class CStarControlSub24 : public CStarControlSub23 { -public: - virtual ~CStarControlSub24() {} - - virtual void proc3(const FMatrix &srcOrient, const FMatrix &destOrient); - - /** - * Sets the path to animate movement between - */ - virtual void setPath(const FVector &srcV, const FVector &destV, const FMatrix &orientation); - - virtual int proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orientation); -}; - -} // End of namespace Titanic - -#endif /* TITANIC_STAR_CONTROL_SUB24_H */ diff --git a/engines/titanic/star_control/star_control_sub27.cpp b/engines/titanic/star_control/star_control_sub27.cpp deleted file mode 100644 index d45bee6f99..0000000000 --- a/engines/titanic/star_control/star_control_sub27.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "titanic/star_control/star_control_sub27.h" -#include "common/textconsole.h" - -namespace Titanic { - -void CStarControlSub27::proc2(const FVector &oldPos, const FVector &newPos, - const FMatrix &oldOrientation, const FMatrix &newOrientation) { - CStarControlSub23::proc2(oldPos, newPos, oldOrientation, newOrientation); - - double distance = _distance; - if (distance > 0.0) { - _active = true; - _field34 = true; - proc6(120, 4, distance); - } - - if (newPos != oldPos) { - _orientationChanger.load(oldOrientation, newOrientation); - _transitionPercent = 0.0; - - if (_field4C == 0) { - _transitionPercentInc = 0.1; - _active = true; - } else { - _transitionPercentInc = 1.0 / _field4C; - _active = true; - } - } -} - -int CStarControlSub27::proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orientation) { - if (!_active) - return 0; - - _transitionPercent += _transitionPercentInc; - orientation = _orientationChanger.getOrientation(_transitionPercent); - errorCode.set(); - - if (_field40 >= 0) { - double speedVal = _speeds[_field40]; - pos += _posDelta * speedVal; - getVectorOnPath(pos); - - --_field40; - errorCode.set(); - return 1; - } else if (_field44 > 0) { - pos += _posDelta * _field38; - getVectorOnPath(pos); - - --_field44; - errorCode.set(); - return 1; - } else if (_field48 >= 0) { - double speedVal = _speeds[31 - _field48]; - pos += _posDelta * speedVal; - getVectorOnPath(pos); - - --_field48; - errorCode.set(); - return 1; - } else { - _active = false; - return 2; - } -} - -void CStarControlSub27::getVectorOnPath(FVector &pos) const { - double distance = _posDelta.getDistance(pos); - distance /= _distance; - - if (distance <= 0.0) { - pos = _srcPos; - } else if (distance >= 1.0) { - pos = _destPos; - } else { - pos = FVector( - (_destPos._x - _srcPos._x) * distance + _srcPos._x, - (_destPos._y - _srcPos._y) * distance + _srcPos._y, - (_destPos._z - _srcPos._z) * distance + _srcPos._z - ); - } -} - -} // End of namespace Titanic diff --git a/engines/titanic/star_control/star_control_sub27.h b/engines/titanic/star_control/star_control_sub27.h deleted file mode 100644 index c6d29b1ddf..0000000000 --- a/engines/titanic/star_control/star_control_sub27.h +++ /dev/null @@ -1,48 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef TITANIC_STAR_CONTROL_SUB27_H -#define TITANIC_STAR_CONTROL_SUB27_H - -#include "titanic/star_control/star_control_sub23.h" - -namespace Titanic { - -class CStarControlSub27 : public CStarControlSub23 { -private: - /** - * Given a vector, figures out how far is from the movement source, and - * returns a vector on the proper point along the path to the destination - * with that same distance from the source. - */ - void getVectorOnPath(FVector &pos) const; -public: - virtual ~CStarControlSub27() {} - - virtual void proc2(const FVector &oldPos, const FVector &newPos, - const FMatrix &oldOrientation, const FMatrix &newOrientation); - virtual int proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orientation); -}; - -} // End of namespace Titanic - -#endif /* TITANIC_STAR_CONTROL_SUB27_H */ diff --git a/engines/titanic/star_control/unmarked_auto_mover.cpp b/engines/titanic/star_control/unmarked_auto_mover.cpp new file mode 100644 index 0000000000..4f38f68a40 --- /dev/null +++ b/engines/titanic/star_control/unmarked_auto_mover.cpp @@ -0,0 +1,161 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "titanic/star_control/unmarked_auto_mover.h" +#include "common/textconsole.h" + +namespace Titanic { + +void CUnmarkedAutoMover::proc3(const FMatrix &srcOrient, const FMatrix &destOrient) { + CCameraAutoMover::proc3(srcOrient, destOrient); + _orientationChanger.load(srcOrient, destOrient); + _transitionPercentInc = 0.1; + _transitionPercent = 0.0; + _field40 = _field44 = _field48 = -1; + _active = true; +} + +void CUnmarkedAutoMover::setPath(const FVector &srcV, const FVector &destV, const FMatrix &orientation) { + CCameraAutoMover::setPath(srcV, destV, orientation); + + if (_distance > 8000.0) { + _active = true; + _field34 = 1; + proc6(120, 4, _distance - 8000.0); + } + + FVector row3 = orientation._row3; + double mult = _posDelta._x * row3._x + _posDelta._y * row3._y + _posDelta._z * row3._z; + _transitionPercent = 1.0; + + bool flag = false; + if (mult < 1.0) { + if (mult >= 1.0 - 1.0e-10) + flag = true; + } else { + if (mult <= 1.0 + 1.0e-10) + flag = true; + } + + if (!flag) { + FVector tempV1; + tempV1 = row3.addAndNormalize(_posDelta); + tempV1 = row3.addAndNormalize(tempV1); + tempV1 = row3.addAndNormalize(tempV1); + tempV1 = row3.addAndNormalize(tempV1); + + FMatrix newOrient; + newOrient.set(tempV1); + _orientationChanger.load(orientation, newOrient); + + _transitionPercent = 0.0; + _transitionPercentInc = 0.1; + _active = true; + } +} + +int CUnmarkedAutoMover::proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orientation) { + FVector v1, v2, v3, v4; + + if (!_active) + return 0; + + // Firstly we have to do a transition of the camera orientation from + // it's current position to one where the destination star is centered + if (_transitionPercent < 1.0) { + _transitionPercent += _transitionPercentInc; + orientation = _orientationChanger.getOrientation(_transitionPercent); + errorCode.set(); + return 1; + } + + // From here on, we handle the movement to the given destination + if (!_field34) { + _active = false; + return 2; + } + + v2 = orientation._row3; + v3 = _destPos - pos; + v3.normalize(); + + double val = orientation._row3._x * v3._x + orientation._row3._y * v3._y + orientation._row3._z * v3._z; + bool flag = false; + if (val < 1.0) { + if (val >= 1.0 - 1.0e-10) + flag = true; + } else { + if (val <= 1.0 + 1.0e-10) + flag = true; + } + + if (!flag) { + v1 = v2.addAndNormalize(v3); + v1 = v2.addAndNormalize(v1); + v1 = v2.addAndNormalize(v1); + v1 = v2.addAndNormalize(v1); + + orientation.set(v1); + v2 = v1; + } + + if (_field40 >= 0) { + double speedVal = _speeds[_field40]; + v1 = v2 * speedVal; + pos += v1; + + --_field40; + errorCode.set(); + return 1; + } + + if (_field44 > 0) { + v1._z = v2._z * _field38; + v1._x = v2._x * _field38; + pos._x = v1._x + pos._x; + pos._y = v2._y * _field38 + pos._y; + pos._z = v1._z + pos._z; + + --_field44; + errorCode.set(); + return 1; + } + + if (_field48 >= 0) { + double speedVal = _speeds[31 - _field48]; + v1._y = v2._y * speedVal; + v1._z = v2._z * speedVal; + v1._x = v2._x * speedVal; + pos._y = v1._y + pos._y; + pos._z = v1._z + pos._z; + pos._x = pos._x + v1._x; + + --_field48; + errorCode.set(); + return 1; + } + + _active = false; + return 2; +} + +} // End of namespace Titanic diff --git a/engines/titanic/star_control/unmarked_auto_mover.h b/engines/titanic/star_control/unmarked_auto_mover.h new file mode 100644 index 0000000000..fa1aa95140 --- /dev/null +++ b/engines/titanic/star_control/unmarked_auto_mover.h @@ -0,0 +1,49 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TITANIC_UNMARKED_AUTO_MOVER_H +#define TITANIC_UNMARKED_AUTO_MOVER_H + +#include "titanic/star_control/camera_auto_mover.h" + +namespace Titanic { + +/** + * Automatic camera mover used when no markers have been set + */ +class CUnmarkedAutoMover : public CCameraAutoMover { +public: + virtual ~CUnmarkedAutoMover() {} + + virtual void proc3(const FMatrix &srcOrient, const FMatrix &destOrient); + + /** + * Sets the path to animate movement between + */ + virtual void setPath(const FVector &srcV, const FVector &destV, const FMatrix &orientation); + + virtual int proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orientation); +}; + +} // End of namespace Titanic + +#endif /* TITANIC_UNMARKED_AUTO_MOVER_H */ -- cgit v1.2.3