diff options
Diffstat (limited to 'saga/interface.cpp')
-rw-r--r-- | saga/interface.cpp | 103 |
1 files changed, 81 insertions, 22 deletions
diff --git a/saga/interface.cpp b/saga/interface.cpp index 8e941c94c4..ec4f8690bd 100644 --- a/saga/interface.cpp +++ b/saga/interface.cpp @@ -27,6 +27,7 @@ #include "saga/gfx.h" #include "saga/actor.h" #include "saga/console.h" +#include "saga/events.h" #include "saga/font.h" #include "saga/objectmap.h" #include "saga/isomap.h" @@ -264,7 +265,7 @@ void Interface::setMode(int mode) { switch (_panelMode) { case kPanelMain: if (_vm->getGameType() == GType_IHNM) - warning("FIXME: Implement IHNM differences from ExecuteInvontoryPanel"); + warning("FIXME: Implement IHNM differences from ExecuteInventoryPanel"); _mainPanel.currentButton = NULL; break; @@ -301,6 +302,8 @@ void Interface::setMode(int mode) { _vm->_render->setFlag(RF_DEMO_SUBST); _vm->_gfx->getCurrentPal(_mapSavedPal); break; + case kPanelChapterSelection: + break; } draw(); @@ -1169,6 +1172,56 @@ void Interface::handleOptionClick(const Point& mousePoint) { } } +void Interface::handleChapterSelectionUpdate(const Point& mousePoint) { + +} + +void Interface::handleChapterSelectionClick(const Point& mousePoint) { + int obj = _vm->_script->_pointerObject; + + _vm->_actor->abortSpeech(); + + if (obj) { + int script = 0; + HitZone *hitZone; + ActorData *a; + ObjectData *o; + EVENT event; + + switch (objectTypeId(obj)) { + case kGameObjectHitZone: + hitZone = _vm->_scene->_actionMap->getHitZone(objectIdToIndex(obj)); + if (hitZone->getFlags() & kHitZoneExit) + script = hitZone->getScriptNumber(); + break; + + case kGameObjectActor: + a = _vm->_actor->getActor(obj); + script = a->scriptEntrypointNumber; + break; + + case kGameObjectObject: + o = _vm->_actor->getObj(obj); + script = o->scriptEntrypointNumber; + break; + } + + if (script > 0) { + event.type = ONESHOT_EVENT; + event.code = SCRIPT_EVENT; + event.op = EVENT_EXEC_NONBLOCKING; + event.time = 0; + event.param = _vm->_scene->getScriptModuleNumber(); + event.param2 = script; + event.param3 = kVerbIHNMUse; // Action + event.param4 = obj; // Object + event.param5 = 0; // With Object + event.param6 = obj; // Actor + + _vm->_events->queue(&event); + } + } +} void Interface::setOption(PanelButton *panelButton) { char * fileName; @@ -1210,7 +1263,8 @@ void Interface::update(const Point& mousePoint, int updateFlag) { return; } - if (_panelMode == kPanelMain) { + switch (_panelMode) { + case kPanelMain: if (updateFlag & UPDATE_MOUSEMOVE) { bool lastWasPlayfield = _lastMousePoint.y < _vm->getSceneHeight(); if (mousePoint.y < _vm->getSceneHeight()) { @@ -1235,13 +1289,11 @@ void Interface::update(const Point& mousePoint, int updateFlag) { } } } - } + break; - if (_panelMode == kPanelConverse) { + case kPanelConverse: if (updateFlag & UPDATE_MOUSEMOVE) { - handleConverseUpdate(mousePoint); - } else { if (updateFlag & UPDATE_MOUSECLICK) { handleConverseClick(mousePoint); @@ -1257,13 +1309,11 @@ void Interface::update(const Point& mousePoint, int updateFlag) { _vm->_puzzle->handleClick(mousePoint); } } - } + break; - if (_panelMode == kPanelOption) { + case kPanelOption: if (updateFlag & UPDATE_MOUSEMOVE) { - handleOptionUpdate(mousePoint); - } else { if (updateFlag & UPDATE_MOUSECLICK) { handleOptionClick(mousePoint); @@ -1279,21 +1329,19 @@ void Interface::update(const Point& mousePoint, int updateFlag) { calcOptionSaveSlider(); } } - } + break; - if (_panelMode == kPanelQuit) { + case kPanelQuit: if (updateFlag & UPDATE_MOUSEMOVE) { - handleQuitUpdate(mousePoint); - } else { if (updateFlag & UPDATE_MOUSECLICK) { handleQuitClick(mousePoint); } } - } + break; - if (_panelMode == kPanelLoad) { + case kPanelLoad: if (updateFlag & UPDATE_MOUSEMOVE) { handleLoadUpdate(mousePoint); @@ -1303,9 +1351,9 @@ void Interface::update(const Point& mousePoint, int updateFlag) { handleLoadClick(mousePoint); } } - } + break; - if (_panelMode == kPanelSave) { + case kPanelSave: if (updateFlag & UPDATE_MOUSEMOVE) { handleSaveUpdate(mousePoint); @@ -1315,20 +1363,31 @@ void Interface::update(const Point& mousePoint, int updateFlag) { handleSaveClick(mousePoint); } } - } + break; - if (_panelMode == kPanelMap) { + case kPanelMap: if (updateFlag & UPDATE_MOUSECLICK) mapPanelClean(); - } + break; - if (_panelMode == kPanelSceneSubstitute) { + case kPanelSceneSubstitute: if (updateFlag & UPDATE_MOUSECLICK) { _vm->_render->clearFlag(RF_DEMO_SUBST); _vm->_gfx->setPalette(_mapSavedPal); setMode(kPanelMain); _vm->_script->setNoPendingVerb(); } + break; + + case kPanelChapterSelection: + // TODO: panel has silent button + if (updateFlag & UPDATE_MOUSEMOVE) { + handleChapterSelectionUpdate(mousePoint); + } else { + if (updateFlag & UPDATE_MOUSECLICK) + handleChapterSelectionClick(mousePoint); + } + break; } _lastMousePoint = mousePoint; |