diff options
author | Andrew Kurushin | 2005-04-22 14:11:04 +0000 |
---|---|---|
committer | Andrew Kurushin | 2005-04-22 14:11:04 +0000 |
commit | cdede6caa485c8ea6f1868b1723a52d77b544c1e (patch) | |
tree | bc31bb0d1be9f43c75a3fa9f5c4f97265625ae76 /saga/script.cpp | |
parent | ff19273ae6d161f63d81561a9a73f925afa9b652 (diff) | |
download | scummvm-rg350-cdede6caa485c8ea6f1868b1723a52d77b544c1e.tar.gz scummvm-rg350-cdede6caa485c8ea6f1868b1723a52d77b544c1e.tar.bz2 scummvm-rg350-cdede6caa485c8ea6f1868b1723a52d77b544c1e.zip |
implemented inventory
todo: timeout catchup & capital 'U' & 'D' handling
svn-id: r17748
Diffstat (limited to 'saga/script.cpp')
-rw-r--r-- | saga/script.cpp | 150 |
1 files changed, 87 insertions, 63 deletions
diff --git a/saga/script.cpp b/saga/script.cpp index 33390c6e1e..47823abf45 100644 --- a/saga/script.cpp +++ b/saga/script.cpp @@ -417,10 +417,10 @@ void Script::setLeftButtonVerb(int verb) { if ((_currentVerb != oldVerb) && (_vm->_interface->getMode() == kPanelMain)){ if (oldVerb > kVerbNone) - _vm->_interface->drawVerb(oldVerb, 2); + _vm->_interface->setVerbState(oldVerb, 2); if (_currentVerb > kVerbNone) - _vm->_interface->drawVerb(_currentVerb, 2); + _vm->_interface->setVerbState(_currentVerb, 2); } } @@ -431,10 +431,10 @@ void Script::setRightButtonVerb(int verb) { if ((_rightButtonVerb != oldVerb) && (_vm->_interface->getMode() == kPanelMain)){ if (oldVerb > kVerbNone) - _vm->_interface->drawVerb(oldVerb, 2); + _vm->_interface->setVerbState(oldVerb, 2); if (_rightButtonVerb > kVerbNone) - _vm->_interface->drawVerb(_rightButtonVerb, 2); + _vm->_interface->setVerbState(_rightButtonVerb, 2); } } @@ -673,10 +673,12 @@ void Script::whichObject(const Point& mousePoint) { int newRightButtonVerb; uint16 newObjectId; ActorData *actor; + ObjectData *obj; Point pickPoint; Location pickLocation; int hitZoneIndex; const HitZone * hitZone; + PanelButton * panelButton; objectId = ID_NOTHING; objectFlags = 0; @@ -685,81 +687,103 @@ void Script::whichObject(const Point& mousePoint) { if (_vm->_actor->_protagonist->currentAction == kActionWalkDir) { } else { - newObjectId = _vm->_actor->hitTest(mousePoint, true); + if (_vm->getSceneHeight() >= mousePoint.y) { + newObjectId = _vm->_actor->hitTest(mousePoint, true); - if (newObjectId != ID_NOTHING) { - if (objectTypeId(newObjectId) == kGameObjectObject) { - objectId = newObjectId; - objectFlags = 0; - newRightButtonVerb = kVerbLookAt; + if (newObjectId != ID_NOTHING) { + if (objectTypeId(newObjectId) == kGameObjectObject) { + objectId = newObjectId; + objectFlags = 0; + newRightButtonVerb = kVerbLookAt; - if ((_currentVerb == kVerbTalkTo) || ((_currentVerb == kVerbGive) && _firstObjectSet)) { - objectId = ID_NOTHING; - newObjectId = ID_NOTHING; - } - } else { - actor = _vm->_actor->getActor(newObjectId); - objectId = newObjectId; - objectFlags = kObjUseWith; - newRightButtonVerb = kVerbTalkTo; - - if ((_currentVerb == kVerbPickUp) || - (_currentVerb == kVerbOpen) || - (_currentVerb == kVerbClose) || - ((_currentVerb == kVerbGive) && !_firstObjectSet) || - ((_currentVerb == kVerbUse) && !(actor->flags & kFollower))) { - objectId = ID_NOTHING; - newObjectId = ID_NOTHING; + if ((_currentVerb == kVerbTalkTo) || ((_currentVerb == kVerbGive) && _firstObjectSet)) { + objectId = ID_NOTHING; + newObjectId = ID_NOTHING; + } + } else { + actor = _vm->_actor->getActor(newObjectId); + objectId = newObjectId; + objectFlags = kObjUseWith; + newRightButtonVerb = kVerbTalkTo; + + if ((_currentVerb == kVerbPickUp) || + (_currentVerb == kVerbOpen) || + (_currentVerb == kVerbClose) || + ((_currentVerb == kVerbGive) && !_firstObjectSet) || + ((_currentVerb == kVerbUse) && !(actor->flags & kFollower))) { + objectId = ID_NOTHING; + newObjectId = ID_NOTHING; + } } } - } - if (newObjectId == ID_NOTHING) { + if (newObjectId == ID_NOTHING) { - pickPoint = mousePoint; + pickPoint = mousePoint; - if (_vm->_scene->getFlags() & kSceneFlagISO) { - pickPoint.y -= _vm->_actor->_protagonist->location.z; - _vm->_isoMap->screenPointToTileCoords(pickPoint, pickLocation); - pickLocation.toScreenPointUV(pickPoint); - } - - hitZoneIndex = _vm->_scene->_objectMap->hitTest(pickPoint); - - if ((hitZoneIndex != -1)) { - hitZone = _vm->_scene->_objectMap->getHitZone(hitZoneIndex); - objectId = hitZone->getHitZoneId(); - objectFlags = 0; - newRightButtonVerb = hitZone->getRightButtonVerb() & 0x7f; - - if (newRightButtonVerb == kVerbWalkOnly) { - if (_firstObjectSet) { - objectId = ID_NOTHING; - } else { - newRightButtonVerb = _leftButtonVerb = kVerbWalkTo; - } - } else { - if (newRightButtonVerb == kVerbLookOnly) { + if (_vm->_scene->getFlags() & kSceneFlagISO) { + pickPoint.y -= _vm->_actor->_protagonist->location.z; + _vm->_isoMap->screenPointToTileCoords(pickPoint, pickLocation); + pickLocation.toScreenPointUV(pickPoint); + } + + hitZoneIndex = _vm->_scene->_objectMap->hitTest(pickPoint); + + if ((hitZoneIndex != -1)) { + hitZone = _vm->_scene->_objectMap->getHitZone(hitZoneIndex); + objectId = hitZone->getHitZoneId(); + objectFlags = 0; + newRightButtonVerb = hitZone->getRightButtonVerb() & 0x7f; + + if (newRightButtonVerb == kVerbWalkOnly) { if (_firstObjectSet) { objectId = ID_NOTHING; } else { - newRightButtonVerb = _leftButtonVerb = kVerbLookAt; + newRightButtonVerb = _leftButtonVerb = kVerbWalkTo; + } + } else { + if (newRightButtonVerb == kVerbLookOnly) { + if (_firstObjectSet) { + objectId = ID_NOTHING; + } else { + newRightButtonVerb = _leftButtonVerb = kVerbLookAt; + } } } - } - if (newRightButtonVerb >= kVerbOptions) { - newRightButtonVerb = kVerbNone; - } + if (newRightButtonVerb >= kVerbOptions) { + newRightButtonVerb = kVerbNone; + } - if ((_currentVerb == kVerbTalkTo) || ((_currentVerb == kVerbGive) && !_firstObjectSet)) { - objectId = ID_NOTHING; - newObjectId = ID_NOTHING; + if ((_currentVerb == kVerbTalkTo) || ((_currentVerb == kVerbGive) && !_firstObjectSet)) { + objectId = ID_NOTHING; + newObjectId = ID_NOTHING; + } + + if ((_leftButtonVerb == kVerbUse) && (hitZone->getRightButtonVerb() & 0x80)) { + objectFlags = kObjUseWith; + } } + } + } else { + if ((_currentVerb == kVerbTalkTo) || ((_currentVerb == kVerbGive) && !_firstObjectSet)) { + // no way + } else { + panelButton = _vm->_interface->inventoryHitTest(mousePoint); + if (panelButton) { + objectId = _vm->_interface->getInventoryContentByPanelButton(panelButton); + if (objectId != 0) { + obj = _vm->_actor->getObj(objectId); + newRightButtonVerb = kVerbLookAt; + if (obj->interactBits & kObjUseWith) { + objectFlags = kObjUseWith; + } + } + } + } - if ((_leftButtonVerb == kVerbUse) && (hitZone->getRightButtonVerb() & 0x80)) { - objectFlags = kObjUseWith; - } + if ((_currentVerb == kVerbPickUp) || (_currentVerb == kVerbTalkTo) || (_currentVerb == kVerbWalkTo)) { + _leftButtonVerb = kVerbLookAt; } } } |