aboutsummaryrefslogtreecommitdiff
path: root/saga/events.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'saga/events.cpp')
-rw-r--r--saga/events.cpp65
1 files changed, 52 insertions, 13 deletions
diff --git a/saga/events.cpp b/saga/events.cpp
index f0f2e63e92..3babfcbc8c 100644
--- a/saga/events.cpp
+++ b/saga/events.cpp
@@ -259,6 +259,7 @@ int Events::handleImmediate(EVENT *event) {
int Events::handleOneShot(EVENT *event) {
SURFACE *back_buf;
SCRIPT_THREAD *sthread;
+ Rect rect;
static SCENE_BGINFO bginfo;
@@ -372,29 +373,48 @@ int Events::handleOneShot(EVENT *event) {
case EVENT_ACTIVATE:
_vm->_interface->activate();
break;
+ case EVENT_DEACTIVATE:
+ _vm->_interface->deactivate();
+ break;
+ case EVENT_SET_STATUS:
+ _vm->_interface->setStatusText((const char*)event->data);
+ _vm->_interface->drawStatusBar(_vm->_gfx->getBackBuffer());
+ break;
+ case EVENT_CLEAR_STATUS:
+ _vm->_interface->setStatusText("");
+ _vm->_interface->drawStatusBar(_vm->_gfx->getBackBuffer());
+ break;
default:
break;
}
break;
case SCRIPT_EVENT:
- debug(0, "Starting start script #%d", event->param);
+ switch (event->op) {
+ case EVENT_EXEC_BLOCKING:
+ case EVENT_EXEC_NONBLOCKING:
+ debug(0, "Starting start script #%d", event->param);
- sthread = _vm->_script->SThreadCreate();
- if (sthread == NULL) {
- _vm->_console->DebugPrintf("Thread creation failed.\n");
- break;
- }
+ sthread = _vm->_script->SThreadCreate();
+ if (sthread == NULL) {
+ _vm->_console->DebugPrintf("Thread creation failed.\n");
+ break;
+ }
- sthread->threadVars[kVarAction] = TO_LE_16(event->param2);
- sthread->threadVars[kVarObject] = TO_LE_16(event->param3);
- sthread->threadVars[kVarWithObject] = TO_LE_16(event->param4);
- sthread->threadVars[kVarActor] = TO_LE_16(event->param5);
+ sthread->threadVars[kVarAction] = TO_LE_16(event->param2);
+ sthread->threadVars[kVarObject] = TO_LE_16(event->param3);
+ sthread->threadVars[kVarWithObject] = TO_LE_16(event->param4);
+ sthread->threadVars[kVarActor] = TO_LE_16(event->param5);
- _vm->_script->SThreadExecute(sthread, event->param);
+ _vm->_script->SThreadExecute(sthread, event->param);
- if (event->op == EVENT_BLOCKING)
- _vm->_script->SThreadCompleteThread();
+ if (event->op == EVENT_EXEC_BLOCKING)
+ _vm->_script->SThreadCompleteThread();
+ break;
+ case EVENT_THREAD_WAKE:
+ _vm->_script->wakeUpThreads(event->param);
+ break;
+ }
break;
case CURSOR_EVENT:
switch (event->op) {
@@ -407,6 +427,25 @@ int Events::handleOneShot(EVENT *event) {
default:
break;
}
+ break;
+ case GRAPHICS_EVENT:
+ switch (event->op) {
+ case EVENT_FILL_RECT:
+ rect.top = event->param2;
+ rect.bottom = event->param3;
+ rect.left = event->param4;
+ rect.right = event->param5;
+ drawRect((SURFACE *)event->data, &rect, event->param);
+ break;
+ case EVENT_SETFLAG:
+ _vm->_render->setFlag(event->param);
+ break;
+ case EVENT_CLEARFLAG:
+ _vm->_render->clearFlag(event->param);
+ break;
+ default:
+ break;
+ }
default:
break;
}