aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/illusions/bbdou/bbdou_triggerfunctions.cpp82
-rw-r--r--engines/illusions/bbdou/bbdou_triggerfunctions.h60
-rw-r--r--engines/illusions/bbdou/illusions_bbdou.cpp55
-rw-r--r--engines/illusions/bbdou/illusions_bbdou.h28
-rw-r--r--engines/illusions/module.mk1
5 files changed, 144 insertions, 82 deletions
diff --git a/engines/illusions/bbdou/bbdou_triggerfunctions.cpp b/engines/illusions/bbdou/bbdou_triggerfunctions.cpp
new file mode 100644
index 0000000000..7c1ee4702e
--- /dev/null
+++ b/engines/illusions/bbdou/bbdou_triggerfunctions.cpp
@@ -0,0 +1,82 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "illusions/bbdou/illusions_bbdou.h"
+#include "illusions/bbdou/bbdou_triggerfunctions.h"
+
+namespace Illusions {
+
+// TriggerFunction
+
+TriggerFunction::TriggerFunction(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback)
+ : _sceneId(sceneId), _verbId(verbId), _objectId2(objectId2), _objectId(objectId), _callback(callback) {
+}
+
+TriggerFunction::~TriggerFunction() {
+ delete _callback;
+}
+
+void TriggerFunction::run(uint32 callingThreadId) {
+ (*_callback)(this, callingThreadId);
+}
+
+// TriggerFunctions
+
+void TriggerFunctions::add(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback) {
+ ItemsIterator it = findInternal(sceneId, verbId, objectId2, objectId);
+ if (it != _triggerFunctions.end()) {
+ delete *it;
+ _triggerFunctions.erase(it);
+ }
+ _triggerFunctions.push_back(new TriggerFunction(sceneId, verbId, objectId2, objectId, callback));
+}
+
+TriggerFunction *TriggerFunctions::find(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId) {
+ ItemsIterator it = findInternal(sceneId, verbId, objectId2, objectId);
+ if (it != _triggerFunctions.end())
+ return (*it);
+ return 0;
+}
+
+void TriggerFunctions::removeBySceneId(uint32 sceneId) {
+ ItemsIterator it = _triggerFunctions.begin();
+ while (it != _triggerFunctions.end()) {
+ if ((*it)->_sceneId == sceneId) {
+ delete *it;
+ it = _triggerFunctions.erase(it);
+ } else
+ ++it;
+ }
+}
+
+TriggerFunctions::ItemsIterator TriggerFunctions::findInternal(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId) {
+ ItemsIterator it = _triggerFunctions.begin();
+ for (; it != _triggerFunctions.end(); ++it) {
+ TriggerFunction *triggerFunction = *it;
+ if (triggerFunction->_sceneId == sceneId && triggerFunction->_verbId == verbId &&
+ triggerFunction->_objectId2 == objectId2 && triggerFunction->_objectId == objectId)
+ break;
+ }
+ return it;
+}
+
+} // End of namespace Illusions
diff --git a/engines/illusions/bbdou/bbdou_triggerfunctions.h b/engines/illusions/bbdou/bbdou_triggerfunctions.h
new file mode 100644
index 0000000000..a41bfba50b
--- /dev/null
+++ b/engines/illusions/bbdou/bbdou_triggerfunctions.h
@@ -0,0 +1,60 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ILLUSIONS_BBDOU_BBDOU_TRIGGERFUNCTIONS_H
+#define ILLUSIONS_BBDOU_BBDOU_TRIGGERFUNCTIONS_H
+
+#include "common/algorithm.h"
+#include "common/stack.h"
+
+namespace Illusions {
+
+struct TriggerFunction;
+
+typedef Common::Functor2<TriggerFunction*, uint32, void> TriggerFunctionCallback;
+
+struct TriggerFunction {
+ uint32 _sceneId;
+ uint32 _verbId;
+ uint32 _objectId2;
+ uint32 _objectId;
+ TriggerFunctionCallback *_callback;
+ TriggerFunction(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback);
+ ~TriggerFunction();
+ void run(uint32 callingThreadId);
+};
+
+class TriggerFunctions {
+public:
+ void add(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback);
+ TriggerFunction *find(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId);
+ void removeBySceneId(uint32 sceneId);
+public:
+ typedef Common::List<TriggerFunction*> Items;
+ typedef Items::iterator ItemsIterator;
+ Items _triggerFunctions;
+ ItemsIterator findInternal(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId);
+};
+
+} // End of namespace Illusions
+
+#endif // ILLUSIONS_BBDOU_BBDOU_TRIGGERFUNCTIONS_H
diff --git a/engines/illusions/bbdou/illusions_bbdou.cpp b/engines/illusions/bbdou/illusions_bbdou.cpp
index 9aeb0808cf..b2e5098085 100644
--- a/engines/illusions/bbdou/illusions_bbdou.cpp
+++ b/engines/illusions/bbdou/illusions_bbdou.cpp
@@ -65,60 +65,6 @@
namespace Illusions {
-// TriggerFunction
-
-TriggerFunction::TriggerFunction(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback)
- : _sceneId(sceneId), _verbId(verbId), _objectId2(objectId2), _objectId(objectId), _callback(callback) {
-}
-
-TriggerFunction::~TriggerFunction() {
- delete _callback;
-}
-
-void TriggerFunction::run(uint32 callingThreadId) {
- (*_callback)(this, callingThreadId);
-}
-
-// TriggerFunctions
-
-void TriggerFunctions::add(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback) {
- ItemsIterator it = findInternal(sceneId, verbId, objectId2, objectId);
- if (it != _triggerFunctions.end()) {
- delete *it;
- _triggerFunctions.erase(it);
- }
- _triggerFunctions.push_back(new TriggerFunction(sceneId, verbId, objectId2, objectId, callback));
-}
-
-TriggerFunction *TriggerFunctions::find(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId) {
- ItemsIterator it = findInternal(sceneId, verbId, objectId2, objectId);
- if (it != _triggerFunctions.end())
- return (*it);
- return 0;
-}
-
-void TriggerFunctions::removeBySceneId(uint32 sceneId) {
- ItemsIterator it = _triggerFunctions.begin();
- while (it != _triggerFunctions.end()) {
- if ((*it)->_sceneId == sceneId) {
- delete *it;
- it = _triggerFunctions.erase(it);
- } else
- ++it;
- }
-}
-
-TriggerFunctions::ItemsIterator TriggerFunctions::findInternal(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId) {
- ItemsIterator it = _triggerFunctions.begin();
- for (; it != _triggerFunctions.end(); ++it) {
- TriggerFunction *triggerFunction = *it;
- if (triggerFunction->_sceneId == sceneId && triggerFunction->_verbId == verbId &&
- triggerFunction->_objectId2 == objectId2 && triggerFunction->_objectId == objectId)
- break;
- }
- return it;
-}
-
// ActiveScenes
ActiveScenes::ActiveScenes() {
@@ -348,7 +294,6 @@ uint32 IllusionsEngine_BBDOU::causeTrigger(uint32 sceneId, uint32 verbId, uint32
if (triggerFunction) {
triggerFunction->run(callingThreadId);
} else if (findTriggerCause(sceneId, verbId, objectId2, objectId, codeOffs)) {
- //debug("Run cause at %08X", codeOffs);
causeThreadId = startTempScriptThread(_scriptResource->getCode(codeOffs),
callingThreadId, verbId, objectId2, objectId);
}
diff --git a/engines/illusions/bbdou/illusions_bbdou.h b/engines/illusions/bbdou/illusions_bbdou.h
index 5317809907..f2dbd1aee7 100644
--- a/engines/illusions/bbdou/illusions_bbdou.h
+++ b/engines/illusions/bbdou/illusions_bbdou.h
@@ -24,6 +24,7 @@
#define ILLUSIONS_ILLUSIONS_BBDOU_H
#include "illusions/illusions.h"
+#include "illusions/bbdou/bbdou_triggerfunctions.h"
#include "common/algorithm.h"
#include "common/stack.h"
@@ -32,33 +33,6 @@ namespace Illusions {
class Dictionary;
class ScriptMan;
class ScriptStack;
-class TriggerFunctions;
-class TriggerFunction;
-
-typedef Common::Functor2<TriggerFunction*, uint32, void> TriggerFunctionCallback;
-
-struct TriggerFunction {
- uint32 _sceneId;
- uint32 _verbId;
- uint32 _objectId2;
- uint32 _objectId;
- TriggerFunctionCallback *_callback;
- TriggerFunction(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback);
- ~TriggerFunction();
- void run(uint32 callingThreadId);
-};
-
-class TriggerFunctions {
-public:
- void add(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId, TriggerFunctionCallback *callback);
- TriggerFunction *find(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId);
- void removeBySceneId(uint32 sceneId);
-public:
- typedef Common::List<TriggerFunction*> Items;
- typedef Items::iterator ItemsIterator;
- Items _triggerFunctions;
- ItemsIterator findInternal(uint32 sceneId, uint32 verbId, uint32 objectId2, uint32 objectId);
-};
struct ActiveScene {
uint32 _sceneId;
diff --git a/engines/illusions/module.mk b/engines/illusions/module.mk
index 0a01f7f877..d1df55c6a9 100644
--- a/engines/illusions/module.mk
+++ b/engines/illusions/module.mk
@@ -6,6 +6,7 @@ MODULE_OBJS := \
bbdou/bbdou_cursor.o \
bbdou/bbdou_inventory.o \
bbdou/bbdou_specialcode.o \
+ bbdou/bbdou_triggerfunctions.o \
bbdou/illusions_bbdou.o \
bbdou/scriptopcodes_bbdou.o \
camera.o \