diff --git a/code/fgame/scriptdelegate.cpp b/code/fgame/scriptdelegate.cpp index 42d62034..636aa88c 100644 --- a/code/fgame/scriptdelegate.cpp +++ b/code/fgame/scriptdelegate.cpp @@ -29,11 +29,11 @@ ScriptRegisteredDelegate_Script::ScriptRegisteredDelegate_Script(const ScriptThr : label(inLabel) {} -void ScriptRegisteredDelegate_Script::Execute(const Event& ev) +void ScriptRegisteredDelegate_Script::Execute(Listener *object, const Event& ev) { Event newev = ev; - label.Execute(NULL, newev); + label.Execute(object, newev); } bool ScriptRegisteredDelegate_Script::operator==(const ScriptRegisteredDelegate_Script& registeredDelegate) const @@ -48,13 +48,13 @@ ScriptRegisteredDelegate_CodeMember::ScriptRegisteredDelegate_CodeMember( , response(inResponse) {} -void ScriptRegisteredDelegate_CodeMember::Execute(const Event& ev) +void ScriptRegisteredDelegate_CodeMember::Execute(Listener *object, const Event& ev) { if (!object) { return; } - (object->*response)(ev); + (object->*response)(object, ev); } bool ScriptRegisteredDelegate_CodeMember::operator==(const ScriptRegisteredDelegate_CodeMember& registeredDelegate @@ -67,9 +67,9 @@ ScriptRegisteredDelegate_Code::ScriptRegisteredDelegate_Code(DelegateResponse in : response(inResponse) {} -void ScriptRegisteredDelegate_Code::Execute(const Event& ev) +void ScriptRegisteredDelegate_Code::Execute(Listener *object, const Event& ev) { - (*response)(ev); + (*response)(object, ev); } bool ScriptRegisteredDelegate_Code::operator==(const ScriptRegisteredDelegate_Code& registeredDelegate) const @@ -134,27 +134,32 @@ void ScriptDelegate::Unregister(Class *object, ScriptRegisteredDelegate_CodeMemb } void ScriptDelegate::Trigger(const Event& ev) const +{ + Trigger(NULL, ev); +} + +void ScriptDelegate::Trigger(Listener *object, const Event& ev) const { size_t i; { const Container tmpList = list_script; for (i = 1; i <= tmpList.NumObjects(); i++) { - tmpList.ObjectAt(i).Execute(ev); + tmpList.ObjectAt(i).Execute(object, ev); } } { const Container tmpList = list_code; for (i = 1; i <= tmpList.NumObjects(); i++) { - tmpList.ObjectAt(i).Execute(ev); + tmpList.ObjectAt(i).Execute(object, ev); } } { const Container tmpList = list_codeMember; for (i = 1; i <= tmpList.NumObjects(); i++) { - tmpList.ObjectAt(i).Execute(ev); + tmpList.ObjectAt(i).Execute(object, ev); } } } @@ -179,7 +184,7 @@ void ScriptDelegate::Reset() void ScriptDelegate::ResetAllDelegates() { - for (ScriptDelegate* delegate = root; delegate; delegate = delegate->next) { + for (ScriptDelegate *delegate = root; delegate; delegate = delegate->next) { delegate->Reset(); } } diff --git a/code/fgame/scriptdelegate.h b/code/fgame/scriptdelegate.h index 2a2387a6..3de52c3d 100644 --- a/code/fgame/scriptdelegate.h +++ b/code/fgame/scriptdelegate.h @@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA class ScriptRegisteredDelegate { public: - void Execute(const Event& ev); + void Execute(Listener *object, const Event& ev); }; /** @@ -41,7 +41,7 @@ class ScriptRegisteredDelegate_Script : public ScriptRegisteredDelegate public: ScriptRegisteredDelegate_Script(const ScriptThreadLabel& inLabel); - void Execute(const Event& ev); + void Execute(Listener *object, const Event& ev); bool operator==(const ScriptRegisteredDelegate_Script& registeredDelegate) const; @@ -56,12 +56,12 @@ private: class ScriptRegisteredDelegate_Code : public ScriptRegisteredDelegate { public: - using DelegateResponse = void (*)(const Event& ev); + using DelegateResponse = void (*)(Listener *object, const Event& ev); public: ScriptRegisteredDelegate_Code(DelegateResponse inResponse); - void Execute(const Event& ev); + void Execute(Listener *object, const Event& ev); bool operator==(const ScriptRegisteredDelegate_Code& registeredDelegate) const; @@ -77,12 +77,12 @@ private: class ScriptRegisteredDelegate_CodeMember : public ScriptRegisteredDelegate { public: - using DelegateClassResponse = void (Class::*)(const Event& ev); + using DelegateClassResponse = void (Class::*)(Listener *object, const Event& ev); public: ScriptRegisteredDelegate_CodeMember(Class *inObject, DelegateClassResponse inResponse); - void Execute(const Event& ev); + void Execute(Listener *object, const Event& ev); bool operator==(const ScriptRegisteredDelegate_CodeMember& registeredDelegate) const; @@ -156,6 +156,13 @@ public: */ void Trigger(const Event& ev) const; + /** + * Executes all registered delegates with the specified event. + * + * @param ev Parameter list + */ + void Trigger(Listener *object, const Event& ev) const; + /** * Reset the delegate, unregister callbacks. */ @@ -167,7 +174,7 @@ public: * @param name The name to search for */ static ScriptDelegate *GetScriptDelegate(const char *name); - static void ResetAllDelegates(); + static void ResetAllDelegates(); // non-movable and non-copyable ScriptDelegate(ScriptDelegate&& other) = delete;