From ece5133fdfd34e25e00be589072cd61b36b035df Mon Sep 17 00:00:00 2001 From: Bastien Bouclet Date: Fri, 6 Jan 2012 13:38:22 +0100 Subject: [PATCH] MYST3: Spotitem fixes for the menus --- engines/myst3/directorysubentry.h | 1 + engines/myst3/node.cpp | 27 +++++++++++++++++++-------- engines/myst3/node.h | 3 ++- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/engines/myst3/directorysubentry.h b/engines/myst3/directorysubentry.h index e73014d1b0b..f3a69c115c9 100644 --- a/engines/myst3/directorysubentry.h +++ b/engines/myst3/directorysubentry.h @@ -54,6 +54,7 @@ class DirectorySubEntry { kCursor = 7, kMovie = 8, kStillMovie = 10, + kMenuSpotItem = 69, kMenuFrame = 70, kImagerMovie = 72 }; diff --git a/engines/myst3/node.cpp b/engines/myst3/node.cpp index ba3f3f33445..b929b650953 100644 --- a/engines/myst3/node.cpp +++ b/engines/myst3/node.cpp @@ -143,6 +143,9 @@ void Node::loadSpotItem(uint16 id, uint16 condition, bool fade) { for (int i = 0; i < 6; i++) { const DirectorySubEntry *jpegDesc = _vm->getFileDescription(id, i + 1, DirectorySubEntry::kSpotItem); + if (!jpegDesc) + jpegDesc = _vm->getFileDescription(id, i + 1, DirectorySubEntry::kMenuSpotItem); + if (!jpegDesc) continue; SpotItemFace *spotItemFace = new SpotItemFace( @@ -166,8 +169,14 @@ void Node::loadSpotItem(uint16 id, uint16 condition, bool fade) { } void Node::update() { + // First undraw ... for (uint i = 0; i < _spotItems.size(); i++) { - _spotItems[i]->update(); + _spotItems[i]->updateUndraw(); + } + + // ... then redraw + for (uint i = 0; i < _spotItems.size(); i++) { + _spotItems[i]->updateDraw(); } } @@ -181,21 +190,23 @@ SpotItem::~SpotItem() { } } -void SpotItem::update() { - // First undraw ... +void SpotItem::updateUndraw() { for (uint i = 0; i < _faces.size(); i++) { if (!_vm->_vars->evaluate(_condition) && _faces[i]->isDrawn()) { _faces[i]->undraw(); } } +} - // ... then redraw +void SpotItem::updateDraw() { for (uint i = 0; i < _faces.size(); i++) { - uint16 newFadeValue = _vm->_vars->get(_fadeVar); + if (_enableFade) { + uint16 newFadeValue = _vm->_vars->get(_fadeVar); - if (_enableFade && _faces[i]->getFadeValue() != newFadeValue) { - _faces[i]->setFadeValue(newFadeValue); - _faces[i]->setDrawn(false); + if (_faces[i]->getFadeValue() != newFadeValue) { + _faces[i]->setFadeValue(newFadeValue); + _faces[i]->setDrawn(false); + } } if (_vm->_vars->evaluate(_condition) && !_faces[i]->isDrawn()) { diff --git a/engines/myst3/node.h b/engines/myst3/node.h index 47f2c0d53d7..84048506a39 100644 --- a/engines/myst3/node.h +++ b/engines/myst3/node.h @@ -90,7 +90,8 @@ class SpotItem { void setFadeVar(uint16 var) { _fadeVar = var; } void addFace(SpotItemFace *face) { _faces.push_back(face); } - void update(); + void updateUndraw(); + void updateDraw(); private: Myst3Engine *_vm;