aboutsummaryrefslogtreecommitdiff
path: root/engines/fullpipe/messages.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2013-08-02 02:04:03 +0300
committerEugene Sandulenko2013-09-06 14:51:09 +0300
commitc78803db2d38afed1cd0a55aff5b599c7441172c (patch)
tree05719b209aa0db85b580ef87b47e5a2370d20d09 /engines/fullpipe/messages.cpp
parent9232315880633e66f99e874623446664ca262719 (diff)
downloadscummvm-rg350-c78803db2d38afed1cd0a55aff5b599c7441172c.tar.gz
scummvm-rg350-c78803db2d38afed1cd0a55aff5b599c7441172c.tar.bz2
scummvm-rg350-c78803db2d38afed1cd0a55aff5b599c7441172c.zip
FULLPIPE: Unstubbed ExCommand::handleMessage()
Diffstat (limited to 'engines/fullpipe/messages.cpp')
-rw-r--r--engines/fullpipe/messages.cpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/engines/fullpipe/messages.cpp b/engines/fullpipe/messages.cpp
index ee9210f066..e7b317116c 100644
--- a/engines/fullpipe/messages.cpp
+++ b/engines/fullpipe/messages.cpp
@@ -79,8 +79,23 @@ bool ExCommand::load(MfcArchive &file) {
return true;
}
-void ExCommand::handleMessage() {
- warning("STUB: ExCommand::handleMessage()");
+bool ExCommand::handleMessage() {
+ int cnt = 0;
+ for (MessageHandler *m = g_fullpipe->_messageHandlers; m; m = m->nextItem)
+ cnt += m->callback(this);
+
+ if (_messageKind == 17 || (_excFlags & 1)) {
+ if (_parId) {
+ MessageQueue *m = g_fullpipe->_globalMessageQueueList->getMessageQueueById(_parId);
+ if (m)
+ m->update();
+ }
+ }
+
+ if (_excFlags & 2)
+ delete this;
+
+ return (cnt > 0);
}
Message::Message() {
@@ -213,6 +228,25 @@ bool MessageQueue::chain(StaticANIObject *ani) {
return true;
}
+void MessageQueue::update() {
+ if (_counter > 0)
+ _counter--;
+
+ if (_exCommands.size()) {
+ sendNextCommand();
+ } else if (_counter == 0 ) {
+ _isFinished = 1;
+ finish();
+ }
+}
+
+void MessageQueue::sendNextCommand() {
+ warning("STUB: MessageQueue::sendNextCommand()");
+}
+
+void MessageQueue::finish() {
+ warning("STUB: MessageQueue::finish()");
+}
MessageQueue *GlobalMessageQueueList::getMessageQueueById(int id) {
for (CPtrList::iterator s = begin(); s != end(); ++s) {