diff --git a/src/events.cpp b/src/events.cpp index 80059b5e7..b87c580c8 100755 --- a/src/events.cpp +++ b/src/events.cpp @@ -1699,9 +1699,14 @@ DEFINE_ACTION_FUNCTION(DEventHandler, Find) { PARAM_PROLOGUE; PARAM_CLASS(t, DStaticEventHandler); + PARAM_BOOL(subclass); for (DStaticEventHandler* handler = currentVMLevel->localEventManager->FirstEventHandler; handler; handler = handler->next) + { if (handler->GetClass() == t) // check precise class ACTION_RETURN_OBJECT(handler); + else if (subclass && handler->IsKindOf(t)); + ACTION_RETURN_OBJECT(handler); + } ACTION_RETURN_OBJECT(nullptr); } @@ -1710,9 +1715,14 @@ DEFINE_ACTION_FUNCTION(DStaticEventHandler, Find) { PARAM_PROLOGUE; PARAM_CLASS(t, DStaticEventHandler); + PARAM_BOOL(subclass); for (DStaticEventHandler* handler = staticEventManager.FirstEventHandler; handler; handler = handler->next) + { if (handler->GetClass() == t) // check precise class ACTION_RETURN_OBJECT(handler); + else if (subclass && handler->IsKindOf(t)); + ACTION_RETURN_OBJECT(handler); + } ACTION_RETURN_OBJECT(nullptr); } diff --git a/wadsrc/static/zscript/events.zs b/wadsrc/static/zscript/events.zs index 883e8c360..c851c05d0 100644 --- a/wadsrc/static/zscript/events.zs +++ b/wadsrc/static/zscript/events.zs @@ -148,7 +148,7 @@ class StaticEventHandler : Object native play version("2.4") { // static event handlers CAN register other static event handlers. // unlike EventHandler.Create that will not create them. - clearscope static native StaticEventHandler Find(Class type); // just for convenience. who knows. + clearscope static native StaticEventHandler Find(Class type, bool subclass = false); // just for convenience. who knows. // these are called when the handler gets registered or unregistered // you can set Order/IsUiProcessor here.