2017-01-30 23:28:47 +00:00
class BaseEvent native { } // just a base class. it doesn't inherit from Object on the scripting side so you can't call Destroy() on it and break everything.
class RenderEvent : BaseEvent native
{
native readonly Vector3 ViewPos;
native readonly double ViewAngle;
native readonly double ViewPitch;
native readonly double ViewRoll;
native readonly double FracTic;
native readonly Actor Camera;
}
class WorldEvent : BaseEvent native
{
// for loaded/unloaded
native readonly bool IsSaveGame;
// for thingspawned/thingdied/thingdestroyed
native readonly Actor Thing;
2017-01-31 00:07:00 +00:00
// for thingdied. can be null
native readonly Actor Inflictor;
2017-01-31 02:35:44 +00:00
// for thingdamaged.
native readonly int Damage;
native readonly Actor DamageSource;
native readonly Name DamageType;
native readonly EDmgFlags DamageFlags;
native readonly double DamageAngle;
2017-01-30 23:28:47 +00:00
}
2017-01-22 06:56:57 +00:00
class StaticEventHandler : Object native
2017-01-22 02:15:30 +00:00
{
2017-01-30 07:28:27 +00:00
// static event handlers CAN register other static event handlers.
// unlike EventHandler.Create that will not create them.
protected static native StaticEventHandler Create(class<StaticEventHandler> type);
protected static native StaticEventHandler CreateOnce(class<StaticEventHandler> type);
2017-01-30 07:33:06 +00:00
protected static native StaticEventHandler Find(Class<StaticEventHandler> type); // just for convenience. who knows.
2017-01-30 07:28:27 +00:00
protected static native bool Register(StaticEventHandler handler);
protected static native bool Unregister(StaticEventHandler handler);
2017-01-30 23:28:47 +00:00
// actual handlers are here
virtual native void WorldLoaded(WorldEvent e);
virtual native void WorldUnloaded(WorldEvent e);
virtual native void WorldThingSpawned(WorldEvent e);
2017-01-31 00:07:00 +00:00
virtual native void WorldThingDied(WorldEvent e);
2017-01-31 02:11:09 +00:00
virtual native void WorldThingRevived(WorldEvent e);
2017-01-31 02:35:44 +00:00
virtual native void WorldThingDamaged(WorldEvent e);
2017-01-31 00:07:00 +00:00
virtual native void WorldThingDestroyed(WorldEvent e);
virtual native void WorldLightning(WorldEvent e); // for the sake of completeness.
2017-01-31 01:24:38 +00:00
virtual native void WorldTick(WorldEvent e);
2017-01-22 06:56:57 +00:00
2017-01-30 23:28:47 +00:00
virtual native void RenderFrame(RenderEvent e);
2017-01-30 06:47:15 +00:00
}
2017-01-22 06:56:57 +00:00
class EventHandler : StaticEventHandler native
{
2017-01-30 09:56:03 +00:00
static native StaticEventHandler Create(class<StaticEventHandler> type);
static native StaticEventHandler CreateOnce(class<StaticEventHandler> type);
static native StaticEventHandler Find(class<StaticEventHandler> type);
2017-01-22 06:56:57 +00:00
2017-01-30 09:56:03 +00:00
static native bool Register(StaticEventHandler handler);
static native bool Unregister(StaticEventHandler handler);
2017-01-22 06:56:57 +00:00
}