diff options
author | Paul Gilbert | 2013-05-31 21:31:33 -0400 |
---|---|---|
committer | Paul Gilbert | 2013-05-31 21:31:33 -0400 |
commit | a6c852c99d73d9bef30d85d59cbb8364858a0daa (patch) | |
tree | efb26f5b6df82ee0553396bc16b631f178950764 | |
parent | 4279eedceb261e3c179343b15d2e6841dc0bd43b (diff) | |
download | scummvm-rg350-a6c852c99d73d9bef30d85d59cbb8364858a0daa.tar.gz scummvm-rg350-a6c852c99d73d9bef30d85d59cbb8364858a0daa.tar.bz2 scummvm-rg350-a6c852c99d73d9bef30d85d59cbb8364858a0daa.zip |
VOYEUR: Implemented flipPage
-rw-r--r-- | engines/voyeur/files.cpp | 21 | ||||
-rw-r--r-- | engines/voyeur/files.h | 8 | ||||
-rw-r--r-- | engines/voyeur/graphics.cpp | 36 | ||||
-rw-r--r-- | engines/voyeur/graphics.h | 2 |
4 files changed, 52 insertions, 15 deletions
diff --git a/engines/voyeur/files.cpp b/engines/voyeur/files.cpp index f72517a672..05617a04cc 100644 --- a/engines/voyeur/files.cpp +++ b/engines/voyeur/files.cpp @@ -598,17 +598,20 @@ ViewPortResource::ViewPortResource(BoltFilesState &state, const byte *src): _state(state) { _flags = READ_LE_UINT16(src); _next = state._curLibPtr->getBoltEntry(READ_LE_UINT32(src + 2))._viewPortResource; - - int xs = READ_LE_UINT16(src + 0xC); - int ys = READ_LE_UINT16(src + 0xE); - _bounds = Common::Rect(xs, ys, xs + READ_LE_UINT16(src + 0x10), - ys + READ_LE_UINT16(src + 0x12)); + _pageCount = READ_LE_UINT16(src + 6); + _pageIndex = READ_LE_UINT16(src + 8); + _lastPage = READ_LE_UINT16(src + 10); + + int xs = READ_LE_UINT16(src + 12); + int ys = READ_LE_UINT16(src + 14); + _bounds = Common::Rect(xs, ys, xs + READ_LE_UINT16(src + 16), + ys + READ_LE_UINT16(src + 18)); _field18 = READ_LE_UINT16(src + 0x18); - _picResource = state._curLibPtr->getPictureResouce(READ_LE_UINT32(src + 0x20)); + _currentPic = state._curLibPtr->getPictureResouce(READ_LE_UINT32(src + 0x20)); _activePage = state._curLibPtr->getPictureResouce(READ_LE_UINT32(src + 0x24)); - _picResource2 = state._curLibPtr->getPictureResouce(READ_LE_UINT32(src + 0x28)); - _picResource3 = state._curLibPtr->getPictureResouce(READ_LE_UINT32(src + 0x2C)); + _pages[0] = state._curLibPtr->getPictureResouce(READ_LE_UINT32(src + 0x28)); + _pages[1] = state._curLibPtr->getPictureResouce(READ_LE_UINT32(src + 0x2C)); state._curLibPtr->resolveIt(READ_LE_UINT32(src + 0x30), &_field30); state._curLibPtr->resolveIt(READ_LE_UINT32(src + 0x34), &_field34); @@ -634,7 +637,7 @@ ViewPortResource::ViewPortResource(BoltFilesState &state, const byte *src): void ViewPortResource::setupViewPort(PictureResource *page, Common::Rect *clipRect, ViewPortSetupPtr setupFn, ViewPortAddPtr addFn, ViewPortRestorePtr restoreFn) { - PictureResource *pic = _picResource; + PictureResource *pic = _currentPic; Common::Rect r = _bounds; r.translate(pic->_bounds.left, pic->_bounds.top); int xDiff, yDiff; diff --git a/engines/voyeur/files.h b/engines/voyeur/files.h index d75c88ae0b..8e00731b78 100644 --- a/engines/voyeur/files.h +++ b/engines/voyeur/files.h @@ -223,12 +223,14 @@ private: ViewPortAddPtr addFn, ViewPortRestorePtr restoreFn); public: ViewPortResource *_next; + int _pageCount; + int _pageIndex; + int _lastPage; Common::Rect _bounds; int _field18; - PictureResource *_picResource; + PictureResource *_currentPic; PictureResource *_activePage; - PictureResource *_picResource2; - PictureResource *_picResource3; + PictureResource *_pages[2]; byte *_field30; byte *_field34; byte *_field38; diff --git a/engines/voyeur/graphics.cpp b/engines/voyeur/graphics.cpp index 0a208e4978..0b47e935fb 100644 --- a/engines/voyeur/graphics.cpp +++ b/engines/voyeur/graphics.cpp @@ -33,6 +33,7 @@ GraphicsManager::GraphicsManager() { _SVGAMode = 0; _SVGAReset = 0; _screenOffset = 0; + _planeSelect = 0; _palFlag = false; _MCGAMode = false; _saveBack = false; @@ -81,7 +82,7 @@ void GraphicsManager::setupMCGASaveRect(ViewPortResource *viewPort) { Common::Rect *clipRect = _clipPtr; _clipPtr = &viewPort->_clipRect; - sDrawPic(viewPort->_activePage, viewPort->_picResource, Common::Point(), NULL); + sDrawPic(viewPort->_activePage, viewPort->_currentPic, Common::Point(), NULL); _clipPtr = clipRect; } @@ -127,11 +128,11 @@ void GraphicsManager::sDrawPic(DisplayResource *srcDisplay, DisplayResource *des if (srcDisplay->_flags & 0x8000) { // A viewport was passed, not a picture - srcPic = ((ViewPortResource *)srcDisplay)->_picResource; + srcPic = ((ViewPortResource *)srcDisplay)->_currentPic; } if (destDisplay->_flags & 0x8000) { destViewPort = (ViewPortResource *)destDisplay; - destPic = destViewPort->_picResource; + destPic = destViewPort->_currentPic; } Common::Point ofs = Common::Point(offset.x + srcPic->_bounds.left - destPic->_bounds.left, @@ -275,12 +276,41 @@ void GraphicsManager::sDrawPic(DisplayResource *srcDisplay, DisplayResource *des } } +void GraphicsManager::sDisplayPic(PictureResource *pic) { + // TODO +} + void GraphicsManager::EMSMapPageHandle(int v1, int v2, int v3) { // TODO } void GraphicsManager::flipPage() { + Common::Array<ViewPortResource *> &viewPorts = *_viewPortListPtr; + bool flipFlag = false; + + for (uint idx = 0; idx < viewPorts.size(); ++idx) { + if (viewPorts[idx]->_flags & 0x20) { + if ((viewPorts[idx]->_flags & 9) == 9) { + if (_planeSelect == idx) + sDisplayPic(viewPorts[idx]->_currentPic); + flipFlag = true; + } + } + if (flipFlag) { + ViewPortResource &viewPort = *viewPorts[idx]; + + viewPort._lastPage = viewPort._pageIndex; + ++viewPort._pageIndex; + + if (viewPort._pageIndex >= viewPort._pageCount) + viewPort._pageIndex = 0; + + assert(viewPort._pageIndex < 2); + viewPort._currentPic = viewPort._pages[viewPort._pageIndex]; + viewPort._flags = (viewPort._flags & 0xFFF7) | 0x40; + } + } } void GraphicsManager::sWaitFlip() { diff --git a/engines/voyeur/graphics.h b/engines/voyeur/graphics.h index f7e43ff65a..1c86952f33 100644 --- a/engines/voyeur/graphics.h +++ b/engines/voyeur/graphics.h @@ -63,6 +63,7 @@ public: bool _saveBack; Common::Rect *_clipPtr; int _screenOffset; + uint _planeSelect; private: static void fadeIntFunc(); static void vDoFadeInt(); @@ -84,6 +85,7 @@ public: void EMSMapPageHandle(int v1, int v2, int v3); void sDrawPic(DisplayResource *srcDisplay, DisplayResource *destDisplay, const Common::Point &offset, void *v3); + void sDisplayPic(PictureResource *pic); void flipPage(); void sWaitFlip(); }; |