MOHAWK: Turn the active hotspot into a pointer
This commit is contained in:
parent
23bbf05c91
commit
6b988670e8
4 changed files with 29 additions and 37 deletions
|
@ -513,15 +513,16 @@ bool RivenConsole::Cmd_Hotspots(int argc, const char **argv) {
|
|||
debugPrintf("Current card (%d) has %d hotspots:\n", _vm->getCurCard()->getId(), _vm->_hotspots.size());
|
||||
|
||||
for (uint16 i = 0; i < _vm->_hotspots.size(); i++) {
|
||||
debugPrintf("Hotspot %d, index %d, BLST ID %d (", i, _vm->_hotspots[i]->index, _vm->_hotspots[i]->blstID);
|
||||
RivenHotspot *hotspot = _vm->_hotspots[i];
|
||||
debugPrintf("Hotspot %d, index %d, BLST ID %d (", i, hotspot->index, hotspot->blstID);
|
||||
|
||||
if (_vm->_hotspots[i]->enabled)
|
||||
if (hotspot->enabled)
|
||||
debugPrintf("enabled");
|
||||
else
|
||||
debugPrintf("disabled");
|
||||
|
||||
debugPrintf(") - (%d, %d, %d, %d)\n", _vm->_hotspots[i]->rect.left, _vm->_hotspots[i]->rect.top, _vm->_hotspots[i]->rect.right, _vm->_hotspots[i]->rect.bottom);
|
||||
debugPrintf(" Name = %s\n", _vm->getHotspotName(i).c_str());
|
||||
debugPrintf(") - (%d, %d, %d, %d)\n", hotspot->rect.left, hotspot->rect.top, hotspot->rect.right, hotspot->rect.bottom);
|
||||
debugPrintf(" Name = %s\n", _vm->getHotspotName(hotspot).c_str());
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -67,7 +67,7 @@ MohawkEngine_Riven::MohawkEngine_Riven(OSystem *syst, const MohawkGameDescriptio
|
|||
_saveLoad = nullptr;
|
||||
_optionsDialog = nullptr;
|
||||
_card = nullptr;
|
||||
_curHotspot = -1;
|
||||
_curHotspot = nullptr;
|
||||
removeTimer();
|
||||
|
||||
// NOTE: We can never really support CD swapping. All of the music files
|
||||
|
@ -227,17 +227,17 @@ void MohawkEngine_Riven::handleEvents() {
|
|||
needsUpdate = true;
|
||||
break;
|
||||
case Common::EVENT_LBUTTONDOWN:
|
||||
if (_curHotspot >= 0) {
|
||||
if (_curHotspot) {
|
||||
checkSunnerAlertClick();
|
||||
runHotspotScript(_curHotspot, kMouseDownScript);
|
||||
_curHotspot->runScript(kMouseDownScript);
|
||||
}
|
||||
break;
|
||||
case Common::EVENT_LBUTTONUP:
|
||||
// See RivenScript::switchCard() for more information on why we sometimes
|
||||
// disable the next up event.
|
||||
if (!_ignoreNextMouseUp) {
|
||||
if (_curHotspot >= 0)
|
||||
runHotspotScript(_curHotspot, kMouseUpScript);
|
||||
if (_curHotspot)
|
||||
_curHotspot->runScript(kMouseUpScript);
|
||||
else
|
||||
checkInventoryClick();
|
||||
}
|
||||
|
@ -294,8 +294,8 @@ void MohawkEngine_Riven::handleEvents() {
|
|||
}
|
||||
}
|
||||
|
||||
if (_curHotspot >= 0)
|
||||
runHotspotScript(_curHotspot, kMouseInsideScript);
|
||||
if (_curHotspot)
|
||||
_curHotspot->runScript(kMouseInsideScript);
|
||||
|
||||
// Update the screen if we need to
|
||||
if (needsUpdate)
|
||||
|
@ -468,39 +468,35 @@ void MohawkEngine_Riven::updateZipMode() {
|
|||
}
|
||||
|
||||
void MohawkEngine_Riven::checkHotspotChange() {
|
||||
uint16 hotspotIndex = 0;
|
||||
bool foundHotspot = false;
|
||||
RivenHotspot *hotspot = nullptr;
|
||||
for (uint16 i = 0; i < _hotspots.size(); i++)
|
||||
if (_hotspots[i]->enabled && _hotspots[i]->rect.contains(_eventMan->getMousePos())) {
|
||||
foundHotspot = true;
|
||||
hotspotIndex = i;
|
||||
hotspot = _hotspots[i];
|
||||
}
|
||||
|
||||
if (foundHotspot) {
|
||||
if (_curHotspot != hotspotIndex) {
|
||||
_curHotspot = hotspotIndex;
|
||||
_cursor->setCursor(_hotspots[_curHotspot]->mouse_cursor);
|
||||
if (hotspot) {
|
||||
if (_curHotspot != hotspot) {
|
||||
_curHotspot = hotspot;
|
||||
_cursor->setCursor(hotspot->mouse_cursor);
|
||||
_system->updateScreen();
|
||||
}
|
||||
} else {
|
||||
_curHotspot = -1;
|
||||
_curHotspot = nullptr;
|
||||
_cursor->setCursor(kRivenMainCursor);
|
||||
_system->updateScreen();
|
||||
}
|
||||
}
|
||||
|
||||
void MohawkEngine_Riven::updateCurrentHotspot() {
|
||||
_curHotspot = -1;
|
||||
_curHotspot = nullptr;
|
||||
checkHotspotChange();
|
||||
}
|
||||
|
||||
Common::String MohawkEngine_Riven::getHotspotName(uint16 hotspot) {
|
||||
assert(hotspot < _hotspots.size());
|
||||
|
||||
if (_hotspots[hotspot]->name_resource < 0)
|
||||
Common::String MohawkEngine_Riven::getHotspotName(const RivenHotspot *hotspot) {
|
||||
if (hotspot->name_resource < 0)
|
||||
return Common::String();
|
||||
|
||||
return getName(HotspotNames, _hotspots[hotspot]->name_resource);
|
||||
return getName(HotspotNames, hotspot->name_resource);
|
||||
}
|
||||
|
||||
void MohawkEngine_Riven::checkInventoryClick() {
|
||||
|
@ -633,10 +629,6 @@ uint32 MohawkEngine_Riven::getCurCardRMAP() {
|
|||
return rmapCode;
|
||||
}
|
||||
|
||||
void MohawkEngine_Riven::runHotspotScript(uint16 hotspot, uint16 scriptType) {
|
||||
_hotspots[hotspot]->runScript(scriptType);
|
||||
}
|
||||
|
||||
void MohawkEngine_Riven::delayAndUpdate(uint32 ms) {
|
||||
uint32 startTime = _system->getMillis();
|
||||
|
||||
|
@ -935,7 +927,7 @@ void MohawkEngine_Riven::checkSunnerAlertClick() {
|
|||
return;
|
||||
|
||||
// Only set the sunners variable on the forward hotspot
|
||||
if ((rmapCode == 0x79bd && _curHotspot != 1) || (rmapCode == 0x7beb && _curHotspot != 2))
|
||||
if ((rmapCode == 0x79bd && _curHotspot->index != 2) || (rmapCode == 0x7beb && _curHotspot->index != 3))
|
||||
return;
|
||||
|
||||
// If the alert video is no longer playing, we have nothing left to do
|
||||
|
|
|
@ -167,11 +167,10 @@ public:
|
|||
|
||||
// Hotspot functions/variables
|
||||
Common::Array<RivenHotspot *> _hotspots;
|
||||
int32 _curHotspot;
|
||||
RivenHotspot *_curHotspot;
|
||||
Common::Array<ZipMode> _zipModeData;
|
||||
void runHotspotScript(uint16 hotspot, uint16 scriptType);
|
||||
int32 getCurHotspot() const { return _curHotspot; }
|
||||
Common::String getHotspotName(uint16 hotspot);
|
||||
RivenHotspot *getCurHotspot() const { return _curHotspot; }
|
||||
Common::String getHotspotName(const RivenHotspot *hotspot);
|
||||
void updateCurrentHotspot();
|
||||
void addZipVisitedCard(uint16 cardId, uint16 cardNameId);
|
||||
|
||||
|
|
|
@ -1342,7 +1342,7 @@ void RivenExternal::xgrviewer(uint16 argc, uint16 *argv) {
|
|||
// Calculate how much we're moving
|
||||
static const uint16 hotspotPositions[] = { 2, 1, 5, 4, 3 };
|
||||
uint32 &curPos = _vm->_vars["grviewpos"];
|
||||
uint32 newPos = curPos + hotspotPositions[_vm->_curHotspot - 1];
|
||||
uint32 newPos = curPos + hotspotPositions[_vm->_curHotspot->index - 2];
|
||||
|
||||
// Now play the movie
|
||||
VideoHandle handle = _vm->_video->playMovieRiven(1);
|
||||
|
@ -1411,7 +1411,7 @@ void RivenExternal::xglviewer(uint16 argc, uint16 *argv) {
|
|||
// Calculate how much we're moving
|
||||
static const uint16 hotspotPositions[] = { 1, 5, 4, 2, 0, 0, 3 };
|
||||
uint32 &curPos = _vm->_vars["glviewpos"];
|
||||
uint32 newPos = curPos + hotspotPositions[_vm->_curHotspot - 1];
|
||||
uint32 newPos = curPos + hotspotPositions[_vm->_curHotspot->index - 2];
|
||||
|
||||
// Now play the movie
|
||||
VideoHandle handle = _vm->_video->playMovieRiven(1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue