diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/titanic/core/game_object.cpp | 4 | ||||
-rw-r--r-- | engines/titanic/core/game_object.h | 15 | ||||
-rw-r--r-- | engines/titanic/star_control/star_control.cpp | 5 | ||||
-rw-r--r-- | engines/titanic/star_control/star_view.cpp | 41 | ||||
-rw-r--r-- | engines/titanic/star_control/star_view.h | 18 | ||||
-rw-r--r-- | engines/titanic/star_control/surface_fader_base.h | 16 |
6 files changed, 70 insertions, 29 deletions
diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp index a5657f583a..dcc66f569d 100644 --- a/engines/titanic/core/game_object.cpp +++ b/engines/titanic/core/game_object.cpp @@ -1101,10 +1101,6 @@ Point CGameObject::getControid() const { _bounds.top + _bounds.height() / 2); } -void CGameObject::performAction(int actionNum, CViewItem *view) { - // TODO -} - bool CGameObject::clipExistsByStart(const CString &name, int startFrame) const { return _movieClips.existsByStart(name, startFrame); } diff --git a/engines/titanic/core/game_object.h b/engines/titanic/core/game_object.h index 8c53e159be..20059539d9 100644 --- a/engines/titanic/core/game_object.h +++ b/engines/titanic/core/game_object.h @@ -336,11 +336,6 @@ protected: void petClear() const; /** - * Perform an action - */ - void performAction(int actionNum, CViewItem *view = nullptr); - - /** * Returns the MailMan */ CMailMan *getMailMan() const; @@ -361,11 +356,6 @@ protected: CRoomItem *getHiddenRoom() const; /** - * Returns a hidden object - */ - CGameObject *getHiddenObject(const CString &name) const; - - /** * Scan the specified room for an item by name */ CTreeItem *findUnder(CTreeItem *parent, const CString &name) const; @@ -659,6 +649,11 @@ public: Found find(const CString &name, CGameObject **item, int findAreas); /** + * Returns a hidden object + */ + CGameObject *getHiddenObject(const CString &name) const; + + /** * Sets up credits text */ void createCredits(); diff --git a/engines/titanic/star_control/star_control.cpp b/engines/titanic/star_control/star_control.cpp index aa65781e93..ae29f3af83 100644 --- a/engines/titanic/star_control/star_control.cpp +++ b/engines/titanic/star_control/star_control.cpp @@ -49,7 +49,10 @@ void CStarControl::load(SimpleFile *file) { if (!screenManager) error("There's no screen manager during loading"); - warning("TODO"); + _view.setup(screenManager, &_sub1, this); + _view.reset(); + + _fieldBC = 1; } CGameObject::load(file); diff --git a/engines/titanic/star_control/star_view.cpp b/engines/titanic/star_control/star_view.cpp index 8af94c6b08..c31a28c4b2 100644 --- a/engines/titanic/star_control/star_view.cpp +++ b/engines/titanic/star_control/star_view.cpp @@ -22,13 +22,15 @@ #include "titanic/support/screen_manager.h" #include "titanic/star_control/star_view.h" +#include "titanic/star_control/star_control.h" +#include "titanic/core/game_object.h" namespace Titanic { -CStarView::CStarView() : - _sub12(nullptr, nullptr), _sub13(nullptr), - _field4(0), _videoSurface(nullptr), _field118(0), _field20C(0), - _field210(0), _field214(0), _field218(0), _field21C(0) { +CStarView::CStarView() : _sub12(nullptr, nullptr), _sub13(nullptr), + _owner(nullptr), _sub1(nullptr), _videoSurface(nullptr), _field118(0), + _videoSurface2(nullptr), _field210(0), _homePhotoMask(nullptr), + _field218(0), _field21C(0) { _sub12.proc3(); } @@ -56,12 +58,39 @@ void CStarView::save(SimpleFile *file, int indent) { file->writeNumberLine(_field21C, indent); } +void CStarView::setup(CScreenManager *screenManager, CStarControlSub1 *sub1, CStarControl *starControl) { + _sub1 = sub1; + _owner = starControl; +} + +void CStarView::reset() { + // TODO +} + void CStarView::draw(CScreenManager *screenManager) { - if (!screenManager) + if (!screenManager || !_videoSurface || !_sub1) return; + if (_fader.isActive()) { + CVideoSurface *surface = _field21C ? _videoSurface2 : _videoSurface; + surface = _fader.fade(screenManager, surface); + screenManager->blitFrom(SURFACE_PRIMARY, surface); + } else { + Point destPos(20, 10); - // TODO + if (_field21C) { + screenManager->blitFrom(SURFACE_PRIMARY, _videoSurface2, &destPos); + + if (!_homePhotoMask && _owner) { + _homePhotoMask = _owner->getHiddenObject("HomePhotoMask"); + } + + if (_homePhotoMask) + _homePhotoMask->draw(screenManager, Point(20, 187)); + } else { + // TODO + } + } } } // End of namespace Titanic diff --git a/engines/titanic/star_control/star_view.h b/engines/titanic/star_control/star_view.h index d625d9bf0f..cfd2c8c94d 100644 --- a/engines/titanic/star_control/star_view.h +++ b/engines/titanic/star_control/star_view.h @@ -31,18 +31,21 @@ namespace Titanic { +class CStarControl; +class CStarControlSub1; + class CStarView { private: - int _field0; - int _field4; + CStarControl *_owner; + CStarControlSub1 *_sub1; CVideoSurface *_videoSurface; CStarControlSub12 _sub12; int _field118; CStarControlSub13 _sub13; CSurfaceFader _fader; - int _field20C; + CVideoSurface *_videoSurface2; int _field210; - int _field214; + CGameObject *_homePhotoMask; int _field218; int _field21C; public: @@ -59,6 +62,13 @@ public: void save(SimpleFile *file, int indent); /** + * Sets references used by the view + */ + void setup(CScreenManager *screenManager, CStarControlSub1 *sub1, CStarControl *starControl); + + void reset(); + + /** * Allows the item to draw itself */ void draw(CScreenManager *screenManager); diff --git a/engines/titanic/star_control/surface_fader_base.h b/engines/titanic/star_control/surface_fader_base.h index ead4460521..463183537b 100644 --- a/engines/titanic/star_control/surface_fader_base.h +++ b/engines/titanic/star_control/surface_fader_base.h @@ -36,18 +36,21 @@ private: */ bool setupSurface(CScreenManager *screenManager, CVideoSurface *srcSurface); protected: - int _index; - int _count; - CVideoSurface *_videoSurface; -protected: /** * Create a faded version of the source surface at the given dest */ virtual void copySurface(CSurfaceArea &srcSurface, CSurfaceArea &destSurface) = 0; public: + int _index; + int _count; + CVideoSurface *_videoSurface; +public: CSurfaceFaderBase(); virtual ~CSurfaceFaderBase(); + /** + * Reset fading back to the start + */ virtual void reset(); /** @@ -55,6 +58,11 @@ public: * visibility specified by _index of _count */ virtual CVideoSurface *fade(CScreenManager *screenManager, CVideoSurface *srcSurface); + + /** + * Returns true if a fade is in progress + */ + bool isActive() const { return _index != -1 && _index < _count; } }; } // End of namespace Titanic |