aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/zvision/scripting/actions.cpp14
-rw-r--r--engines/zvision/scripting/actions.h6
-rw-r--r--engines/zvision/scripting/scr_file_handling.cpp2
-rw-r--r--engines/zvision/scripting/script_manager.cpp11
-rw-r--r--engines/zvision/scripting/script_manager.h1
5 files changed, 33 insertions, 1 deletions
diff --git a/engines/zvision/scripting/actions.cpp b/engines/zvision/scripting/actions.cpp
index 96411e2c3d..42b71ea5cc 100644
--- a/engines/zvision/scripting/actions.cpp
+++ b/engines/zvision/scripting/actions.cpp
@@ -272,6 +272,20 @@ bool ActionEnableControl::execute() {
}
//////////////////////////////////////////////////////////////////////////////
+// ActionFlushMouseEvents
+//////////////////////////////////////////////////////////////////////////////
+
+ActionFlushMouseEvents::ActionFlushMouseEvents(ZVision *engine, int32 slotkey) :
+ ResultAction(engine, slotkey) {
+}
+
+bool ActionFlushMouseEvents::execute() {
+ _engine->getScriptManager()->flushEvent(Common::EVENT_LBUTTONUP);
+ _engine->getScriptManager()->flushEvent(Common::EVENT_LBUTTONDOWN);
+ return true;
+}
+
+//////////////////////////////////////////////////////////////////////////////
// ActionInventory
//////////////////////////////////////////////////////////////////////////////
diff --git a/engines/zvision/scripting/actions.h b/engines/zvision/scripting/actions.h
index b80af9a6c5..c03238571c 100644
--- a/engines/zvision/scripting/actions.h
+++ b/engines/zvision/scripting/actions.h
@@ -223,6 +223,12 @@ private:
uint32 _key;
};
+class ActionFlushMouseEvents : public ResultAction {
+public:
+ ActionFlushMouseEvents(ZVision *engine, int32 slotkey);
+ bool execute();
+};
+
class ActionInventory : public ResultAction {
public:
ActionInventory(ZVision *engine, int32 slotkey, const Common::String &line);
diff --git a/engines/zvision/scripting/scr_file_handling.cpp b/engines/zvision/scripting/scr_file_handling.cpp
index daec4f8f18..a4d127f6f9 100644
--- a/engines/zvision/scripting/scr_file_handling.cpp
+++ b/engines/zvision/scripting/scr_file_handling.cpp
@@ -246,7 +246,7 @@ void ScriptManager::parseResults(Common::SeekableReadStream &stream, Common::Lis
} else if (act.matchString("enable_control", true)) {
actionList.push_back(new ActionEnableControl(_engine, slot, args));
} else if (act.matchString("flush_mouse_events", true)) {
- // TODO: Implement ActionFlushMouseEvents
+ actionList.push_back(new ActionFlushMouseEvents(_engine, slot));
} else if (act.matchString("inventory", true)) {
actionList.push_back(new ActionInventory(_engine, slot, args));
} else if (act.matchString("kill", true)) {
diff --git a/engines/zvision/scripting/script_manager.cpp b/engines/zvision/scripting/script_manager.cpp
index d2165734b4..28958dd972 100644
--- a/engines/zvision/scripting/script_manager.cpp
+++ b/engines/zvision/scripting/script_manager.cpp
@@ -775,6 +775,17 @@ void ScriptManager::addEvent(Common::Event event) {
_controlEvents.push_back(event);
}
+void ScriptManager::flushEvent(Common::EventType type) {
+ EventList::iterator it = _controlEvents.begin();
+ while (it != _controlEvents.end()) {
+
+ if ((*it).type == type)
+ it = _controlEvents.erase(it);
+ else
+ it++;
+ }
+}
+
ValueSlot::ValueSlot(ScriptManager *sc_man, const char *slot_val):
_sc_man(sc_man) {
value = 0;
diff --git a/engines/zvision/scripting/script_manager.h b/engines/zvision/scripting/script_manager.h
index 3fcbad5fa4..fb17077aa6 100644
--- a/engines/zvision/scripting/script_manager.h
+++ b/engines/zvision/scripting/script_manager.h
@@ -200,6 +200,7 @@ public:
void killSideFxType(SideFX::SideFXType type);
void addEvent(Common::Event);
+ void flushEvent(Common::EventType type);
/**
* Called when LeftMouse is pushed.