Some search functions, like FindInventory, do support this type of search by using the function IsKindOf (see p_mobj.cpp, line 1105).
Similar to FindInventory, it would be great if EventHandler had a subclass argument (false by default) that could locate handlers the same way.
This is probably not accurate code, but it could look something like this. Modified from events.cpp, lines 1683-1706
Code: Select all
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);
}
// we might later want to change this
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);
}