Added per-thing render hooks

This commit is contained in:
ZZYZX 2017-01-22 07:04:35 +02:00
commit 302af61686
5 changed files with 97 additions and 20 deletions

View file

@ -53,6 +53,18 @@ void E_RenderCamera()
handler->RenderCamera();
}
void E_RenderBeforeThing(AActor* thing)
{
for (DEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next)
handler->RenderBeforeThing(thing);
}
void E_RenderAfterThing(AActor* thing)
{
for (DEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next)
handler->RenderAfterThing(thing);
}
// declarations
IMPLEMENT_CLASS(DEventHandler, false, false);
IMPLEMENT_CLASS(DRenderEventHandler, false, false);
@ -62,6 +74,8 @@ DEFINE_FIELD_X(RenderEventHandler, DRenderEventHandler, ViewAngle);
DEFINE_FIELD_X(RenderEventHandler, DRenderEventHandler, ViewPitch);
DEFINE_FIELD_X(RenderEventHandler, DRenderEventHandler, ViewRoll);
DEFINE_FIELD_X(RenderEventHandler, DRenderEventHandler, FracTic);
DEFINE_FIELD_X(RenderEventHandler, DRenderEventHandler, Camera);
DEFINE_FIELD_X(RenderEventHandler, DRenderEventHandler, CurrentThing);
DEFINE_ACTION_FUNCTION(DEventHandler, Create)
{
@ -109,12 +123,12 @@ DEFINE_ACTION_FUNCTION(DEventHandler, Unregister)
return 0;
}
#define DEFINE_EVENT_HANDLER(cls, funcname) DEFINE_ACTION_FUNCTION(cls, funcname) \
#define DEFINE_EVENT_HANDLER(cls, funcname, args) DEFINE_ACTION_FUNCTION(cls, funcname) \
{ \
PARAM_SELF_PROLOGUE(cls); \
return 0; \
} \
void cls::funcname() \
void cls::funcname(args) \
{ \
IFVIRTUAL(cls, funcname) \
{ \
@ -125,10 +139,12 @@ void cls::funcname() \
} \
}
DEFINE_EVENT_HANDLER(DEventHandler, MapLoaded)
DEFINE_EVENT_HANDLER(DEventHandler, MapUnloading)
DEFINE_EVENT_HANDLER(DEventHandler, RenderFrame)
DEFINE_EVENT_HANDLER(DEventHandler, RenderCamera)
DEFINE_EVENT_HANDLER(DEventHandler, MapLoaded,)
DEFINE_EVENT_HANDLER(DEventHandler, MapUnloading,)
DEFINE_EVENT_HANDLER(DEventHandler, RenderFrame,)
DEFINE_EVENT_HANDLER(DEventHandler, RenderCamera,)
DEFINE_EVENT_HANDLER(DEventHandler, RenderBeforeThing, AActor*)
DEFINE_EVENT_HANDLER(DEventHandler, RenderAfterThing, AActor*)
//
void DEventHandler::OnDestroy()
@ -144,6 +160,7 @@ void DRenderEventHandler::Setup()
ViewPitch = ::ViewPitch;
ViewRoll = ::ViewRoll;
FracTic = ::r_TicFracF;
Camera = ::camera;
}
void DRenderEventHandler::RenderFrame()
@ -157,3 +174,15 @@ void DRenderEventHandler::RenderCamera()
Setup();
DEventHandler::RenderCamera();
}
void DRenderEventHandler::RenderBeforeThing(AActor* thing)
{
CurrentThing = thing;
DEventHandler::RenderBeforeThing(thing);
}
void DRenderEventHandler::RenderAfterThing(AActor* thing)
{
CurrentThing = thing;
DEventHandler::RenderAfterThing(thing);
}