aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/messages/messages.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2016-03-06 22:57:45 -0500
committerPaul Gilbert2016-03-06 22:57:45 -0500
commitfbcd4de457cfa18d121158e6be45ade57a3428f1 (patch)
tree57164bead00648b82210a34409bfc85ff52c42ea /engines/titanic/messages/messages.cpp
parent2395e5601ca09c001ba5cff7c67a0dd70019f789 (diff)
downloadscummvm-rg350-fbcd4de457cfa18d121158e6be45ade57a3428f1.tar.gz
scummvm-rg350-fbcd4de457cfa18d121158e6be45ade57a3428f1.tar.bz2
scummvm-rg350-fbcd4de457cfa18d121158e6be45ade57a3428f1.zip
TITANIC: Overall message handling method
Diffstat (limited to 'engines/titanic/messages/messages.cpp')
-rw-r--r--engines/titanic/messages/messages.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/engines/titanic/messages/messages.cpp b/engines/titanic/messages/messages.cpp
index c2a6197d4a..f9648f9dfb 100644
--- a/engines/titanic/messages/messages.cpp
+++ b/engines/titanic/messages/messages.cpp
@@ -22,6 +22,7 @@
#include "titanic/messages/messages.h"
#include "titanic/core/game_object.h"
+#include "titanic/core/tree_item.h"
namespace Titanic {
@@ -37,4 +38,32 @@ void CMessage::load(SimpleFile *file) {
CSaveableObject::load(file);
}
+bool CMessage::execute(CTreeItem *target, const ClassDef *classDef, int flags) {
+ // If no target was specified, then there's nothing to do
+ if (!target)
+ return false;
+
+ bool result = false;
+ CTreeItem *item = target;
+ CTreeItem *nextItem = nullptr;
+ do {
+ if (flags & MSGFLAG_SCAN)
+ nextItem = item->scan(target);
+
+ if (!(flags & MSGFLAG_CLASS_DEF) || item->isInstanceOf(*classDef)) {
+ bool handled = true; // item->handleEvent(this);
+
+ if (handled) {
+ result = true;
+ if (flags & MSGFLAG_BREAK_IF_HANDLED)
+ return true;
+ }
+ }
+
+ item = nextItem;
+ } while (nextItem);
+
+ return result;
+}
+
} // End of namespace Titanic