diff options
-rw-r--r-- | engines/zvision/scripting/actions.cpp | 14 | ||||
-rw-r--r-- | engines/zvision/scripting/actions.h | 6 | ||||
-rw-r--r-- | engines/zvision/scripting/scr_file_handling.cpp | 2 | ||||
-rw-r--r-- | engines/zvision/scripting/script_manager.cpp | 11 | ||||
-rw-r--r-- | engines/zvision/scripting/script_manager.h | 1 |
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. |