diff options
-rw-r--r-- | engines/sci/gui/gui.cpp | 2 | ||||
-rw-r--r-- | engines/sci/gui/gui_gfx.cpp | 60 | ||||
-rw-r--r-- | engines/sci/gui/gui_gfx.h | 2 |
3 files changed, 60 insertions, 4 deletions
diff --git a/engines/sci/gui/gui.cpp b/engines/sci/gui/gui.cpp index f006f0032b..16cfff765c 100644 --- a/engines/sci/gui/gui.cpp +++ b/engines/sci/gui/gui.cpp @@ -405,7 +405,7 @@ void SciGui::animate(reg_t listReference, bool cycle, int argc, reg_t *argv) { _gfx->AnimateUpdate(); } - _gfx->AnimateDrawCels(); + _gfx->AnimateDrawCels(list); if (_screen->_picNotValid) { //(this->*ShowPic)(_showMap, _showStyle); diff --git a/engines/sci/gui/gui_gfx.cpp b/engines/sci/gui/gui_gfx.cpp index f76f60e74e..1259814329 100644 --- a/engines/sci/gui/gui_gfx.cpp +++ b/engines/sci/gui/gui_gfx.cpp @@ -1115,7 +1115,7 @@ void SciGuiGfx::AnimateFill(List *list, byte &old_picNotValid) { while (curNode) { curObject = curNode->value; - // Get cel data... + // Get animation data... viewId = GET_SEL32V(curObject, view); loopNo = GET_SEL32V(curObject, loop); celNo = GET_SEL32V(curObject, cel); @@ -1200,7 +1200,63 @@ Common::List<GuiAnimateList> *SciGuiGfx::AnimateMakeSortedList(List *list) { void SciGuiGfx::AnimateUpdate() { } -void SciGuiGfx::AnimateDrawCels() { +void SciGuiGfx::AnimateDrawCels(List *list) { + SegManager *segMan = _s->_segMan; + reg_t curAddress = list->first; + Node *curNode = _s->_segMan->lookupNode(curAddress); + reg_t curObject; + SciGuiView *view = NULL; + GuiResourceId viewId; + GuiViewLoopNo loopNo; + GuiViewCelNo celNo; + int16 x, y, priority; + Common::Rect rect; + uint16 mask, paletteNo; + reg_t hSaved; + + while (curNode) { + curObject = curNode->value; + + mask = GET_SEL32V(curObject, signal); + if (!(mask & (SCI_ANIMATE_MASK_NOUPDATE | SCI_ANIMATE_MASK_HIDDEN | SCI_ANIMATE_MASK_ALWAYSUPDATE))) { + // Get animation data... + viewId = GET_SEL32V(curObject, view); + loopNo = GET_SEL32V(curObject, loop); + celNo = GET_SEL32V(curObject, cel); + x = GET_SEL32V(curObject, x); + y = GET_SEL32V(curObject, y); + priority = GET_SEL32V(curObject, priority); + paletteNo = GET_SEL32V(curObject, palette); + + //rect = (Common::Rect *)&cobj[_objOfs[8]]; + + //hSaved = SaveBits(rect, SCI_SCREEN_MASK_ALL); + //PUT_SEL32V(curObject, 11, hSaved.toUint16()); + + // draw corresponding cel + drawCel(viewId, loopNo, celNo, x, y, priority, paletteNo); + + // arr1[inx] = 1; + if (mask & SCI_ANIMATE_MASK_REMOVEVIEW) { + mask &= 0xFFFF ^ GFX_REMOVEVIEW; + PUT_SEL32V(curObject, signal, mask); + } + +// HEAPHANDLE hNewCast = heapNewPtr(sizeof(sciCast), kDataCast); +// sciCast *pNewCast = (sciCast *)heap2Ptr(hNewCast); +// pNewCast->view = view; +// pNewCast->loop = loop; +// pNewCast->cel = cel; +// pNewCast->z = z; +// pNewCast->pal = pal; +// pNewCast->hSaved = 0; +// pNewCast->rect = *rect; +// _lastCast->AddToEnd(hNewCast); + } + + curAddress = curNode->succ; + curNode = _s->_segMan->lookupNode(curAddress); + } } void SciGuiGfx::AnimateRestoreAndDelete() { diff --git a/engines/sci/gui/gui_gfx.h b/engines/sci/gui/gui_gfx.h index 2c355f13ad..a2e9895293 100644 --- a/engines/sci/gui/gui_gfx.h +++ b/engines/sci/gui/gui_gfx.h @@ -109,7 +109,7 @@ public: void AnimateFill(List *list, byte &oldPicNotValid); Common::List<GuiAnimateList> *AnimateMakeSortedList(List *list); void AnimateUpdate(); - void AnimateDrawCels(); + void AnimateDrawCels(List *list); void AnimateRestoreAndDelete(); void SetNowSeen(reg_t objectReference); |