Here is some loose ideas
In general some kind of OnEvent system callback. I don't know if you have some kind of base class in LE3 like the TEntity in LE2 but lets assume that.
void OnEvent( TEntity& source, const EventData& data );
where Event is a enumeration of various supported events
namespace Event
{
enum Type
{
Collision,
Create,
Destroy,
Update,
...
...
};
}
and EventData is a base structure for any data that
may belong to the event
struct EventData
{};
This structure would then have various implementations depending
on the event type. Like this ficitional event
struct CreateEventData : public EventData
{
TVec3 CreatePostion ;
TVec3 CreateRotation;
};
The user registers callbacks of interest
void myCreateCallback( TEntity& source, const EventData& data )
{
// we know that this is a Create Event with CreateEventData
const CreateEventData& eventData = static_cast<const CreateEventData&>(data);
// use eventData and source.
// source was created at eventData.CreatePosition etc.....
}
LE3::register( Event::Create, myCreateCallback ); // LE3 will call myCreateCallback each time a TEntity is created ...
... later on
LE3::unregister( myCreateCallback); // we dont bother anymore