diff options
author | Paul Gilbert | 2015-05-31 17:55:56 -0400 |
---|---|---|
committer | Paul Gilbert | 2015-05-31 17:55:56 -0400 |
commit | 6b8452538fb9fa608394f407123a1c622ebf1ba6 (patch) | |
tree | bd36066392d5263b610947388ee502b24b74b60f /engines/sherlock/tattoo | |
parent | c79b0d1db9d9ce6529674e2c982e76bb68d93eb6 (diff) | |
download | scummvm-rg350-6b8452538fb9fa608394f407123a1c622ebf1ba6.tar.gz scummvm-rg350-6b8452538fb9fa608394f407123a1c622ebf1ba6.tar.bz2 scummvm-rg350-6b8452538fb9fa608394f407123a1c622ebf1ba6.zip |
SHERLOCK: Implement remainder of RT doBgAnim
Diffstat (limited to 'engines/sherlock/tattoo')
-rw-r--r-- | engines/sherlock/tattoo/tattoo.cpp | 4 | ||||
-rw-r--r-- | engines/sherlock/tattoo/tattoo.h | 5 | ||||
-rw-r--r-- | engines/sherlock/tattoo/tattoo_scene.cpp | 105 | ||||
-rw-r--r-- | engines/sherlock/tattoo/tattoo_scene.h | 2 | ||||
-rw-r--r-- | engines/sherlock/tattoo/tattoo_user_interface.cpp | 1 | ||||
-rw-r--r-- | engines/sherlock/tattoo/tattoo_user_interface.h | 1 |
6 files changed, 112 insertions, 6 deletions
diff --git a/engines/sherlock/tattoo/tattoo.cpp b/engines/sherlock/tattoo/tattoo.cpp index 368b24bfcd..765016ba49 100644 --- a/engines/sherlock/tattoo/tattoo.cpp +++ b/engines/sherlock/tattoo/tattoo.cpp @@ -72,6 +72,10 @@ void TattooEngine::drawCredits() { // TODO } +void TattooEngine::blitCredits() { + // TODO +} + void TattooEngine::eraseCredits() { // TODO } diff --git a/engines/sherlock/tattoo/tattoo.h b/engines/sherlock/tattoo/tattoo.h index bb6310dbe3..28fa77f409 100644 --- a/engines/sherlock/tattoo/tattoo.h +++ b/engines/sherlock/tattoo/tattoo.h @@ -59,6 +59,11 @@ public: void drawCredits(); /** + * Blit the drawn credits to the screen + */ + void blitCredits(); + + /** * Erase any area of the screen covered by credits */ void eraseCredits(); diff --git a/engines/sherlock/tattoo/tattoo_scene.cpp b/engines/sherlock/tattoo/tattoo_scene.cpp index cd86a58d1a..8a3c5864b7 100644 --- a/engines/sherlock/tattoo/tattoo_scene.cpp +++ b/engines/sherlock/tattoo/tattoo_scene.cpp @@ -196,15 +196,15 @@ void TattooScene::doBgAnimEraseBackground() { } void TattooScene::doBgAnim() { + TattooEngine &vm = *(TattooEngine *)_vm; + Events &events = *_vm->_events; + People &people = *_vm->_people; + Screen &screen = *_vm->_screen; + Talk &talk = *_vm->_talk; TattooUserInterface &ui = *((TattooUserInterface *)_vm->_ui); doBgAnimCheckCursor(); -// Events &events = *_vm->_events; - People &people = *_vm->_people; -// Scene &scene = *_vm->_scene; - Screen &screen = *_vm->_screen; - Talk &talk = *_vm->_talk; screen.setDisplayBounds(Common::Rect(0, 0, SHERLOCK_SCREEN_WIDTH, SHERLOCK_SCENE_HEIGHT)); talk._talkToAbort = false; @@ -226,6 +226,23 @@ void TattooScene::doBgAnim() { doBgAnimUpdateBgObjectsAndAnim(); ui.drawInterface(); + + doBgAnimDrawSprites(); + + if (vm._creditsActive) + vm.blitCredits(); + + if (!vm._fastMode) + events.wait(3); + + screen._flushScreen = false; + _doBgAnimDone = false; + ui._drawMenu = false; + + for (uint idx = 1; idx < MAX_CHARACTERS; ++idx) { + if (people[idx]._updateNPCPath) + people[idx].updateNPC(); + } } void TattooScene::doBgAnimUpdateBgObjectsAndAnim() { @@ -288,7 +305,6 @@ void TattooScene::doBgAnimUpdateBgObjectsAndAnim() { } } - void TattooScene::updateBackground() { People &people = *_vm->_people; Screen &screen = *_vm->_screen; @@ -397,6 +413,83 @@ void TattooScene::updateBackground() { screen._flushScreen = false; } +void TattooScene::doBgAnimDrawSprites() { + People &people = *_vm->_people; + Screen &screen = *_vm->_screen; + TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui; + + for (uint idx = 0; idx < MAX_CHARACTERS; ++idx) { + Person &person = people[idx]; + + if (person._type != INVALID) { + if (_goToScene == -1 || _cAnim.size() == 0) { + if (person._type == REMOVE) { + screen.slamRect(person.getOldBounds()); + person._type = INVALID; + } else { + if (person._tempScaleVal == 256) { + screen.flushImage(person._imageFrame, Common::Point(person._tempX, person._position.y / FIXED_INT_MULTIPLIER + - person.frameHeight()), &person._oldPosition.x, &person._oldPosition.y, &person._oldSize.x, &person._oldSize.y); + } else { + int ts = person._imageFrame->sDrawYSize(person._tempScaleVal); + int ty = person._position.y / FIXED_INT_MULTIPLIER - ts; + screen.flushScaleImage(person._imageFrame, Common::Point(person._tempX, ty), + &person._oldPosition.x, &person._oldPosition.y, &person._oldSize.x, &person._oldSize.y, person._tempScaleVal); + } + } + } + } + } + + for (uint idx = 0; idx < _bgShapes.size(); ++idx) { + Object &obj = _bgShapes[idx]; + + if (obj._type == ACTIVE_BG_SHAPE || obj._type == REMOVE) { + if (_goToScene == -1) { + if (obj._scaleVal == 256) + screen.flushImage(obj._imageFrame, obj._position, &obj._oldPosition.x, &obj._oldPosition.y, + &obj._oldSize.x, &obj._oldSize.y); + else + screen.flushScaleImage(obj._imageFrame, obj._position, &obj._oldPosition.x, &obj._oldPosition.y, + &obj._oldSize.x, &obj._oldSize.y, obj._scaleVal); + + if (obj._type == REMOVE) + obj._type = INVALID; + } + } + } + + for (uint idx = 0; idx < _bgShapes.size(); ++idx) { + Object &obj = _bgShapes[idx]; + + if (_goToScene == -1) { + if (obj._type == NO_SHAPE && (obj._flags & 1) == 0) { + screen.slamRect(obj.getNoShapeBounds()); + screen.slamRect(obj.getOldBounds()); + } else if (obj._type == HIDE_SHAPE) { + if (obj._scaleVal == 256) + screen.flushImage(obj._imageFrame, obj._position, &obj._oldPosition.x, &obj._oldPosition.y, + &obj._oldSize.x, &obj._oldSize.y); + else + screen.flushScaleImage(obj._imageFrame, obj._position, &obj._oldPosition.x, &obj._oldPosition.y, + &obj._oldSize.x, &obj._oldSize.y, obj._scaleVal); + obj._type = HIDDEN; + } + } + } + + if (_activeCAnim._images != nullptr || _activeCAnim._zPlacement == REMOVE) { + if (_activeCAnim._zPlacement != REMOVE) { + screen.flushImage(_activeCAnim._imageFrame, _activeCAnim._position, _activeCAnim._oldBounds, _activeCAnim._scaleVal); + } else { + screen.slamArea(_activeCAnim._removeBounds.left - ui._currentScroll.x, _activeCAnim._removeBounds.top, + _activeCAnim._removeBounds.width(), _activeCAnim._removeBounds.height()); + _activeCAnim._removeBounds.left = _activeCAnim._removeBounds.top = 0; + _activeCAnim._removeBounds.right = _activeCAnim._removeBounds.bottom = 0; + _activeCAnim._zPlacement = -1; // Reset _zPlacement so we don't REMOVE again + } + } +} } // End of namespace Tattoo diff --git a/engines/sherlock/tattoo/tattoo_scene.h b/engines/sherlock/tattoo/tattoo_scene.h index de28306c1b..91e7ad4665 100644 --- a/engines/sherlock/tattoo/tattoo_scene.h +++ b/engines/sherlock/tattoo/tattoo_scene.h @@ -44,6 +44,8 @@ private: * Update the background objects and canimations as part of doBgAnim */ void doBgAnimUpdateBgObjectsAndAnim(); + + void doBgAnimDrawSprites(); protected: /** * Checks all the background shapes. If a background shape is animating, diff --git a/engines/sherlock/tattoo/tattoo_user_interface.cpp b/engines/sherlock/tattoo/tattoo_user_interface.cpp index e1568b4394..6779cc48ae 100644 --- a/engines/sherlock/tattoo/tattoo_user_interface.cpp +++ b/engines/sherlock/tattoo/tattoo_user_interface.cpp @@ -34,6 +34,7 @@ TattooUserInterface::TattooUserInterface(SherlockEngine *vm): UserInterface(vm) _tagBuffer = nullptr; _invGraphic = nullptr; _scrollSize = _scrollSpeed = 0; + _drawMenu = false; } void TattooUserInterface::initScrollVars() { diff --git a/engines/sherlock/tattoo/tattoo_user_interface.h b/engines/sherlock/tattoo/tattoo_user_interface.h index fea9ca8442..db6a04f75c 100644 --- a/engines/sherlock/tattoo/tattoo_user_interface.h +++ b/engines/sherlock/tattoo/tattoo_user_interface.h @@ -53,6 +53,7 @@ private: public: Common::Point _currentScroll, _targetScroll; int _scrollSize, _scrollSpeed; + bool _drawMenu; public: TattooUserInterface(SherlockEngine *vm); |