// List of event handlers (for entities) the engine will call in to. // Using integer tags should be ever-so-slightly faster than the hashmap lookup // Also allows events to be renamed without affecting other code. #ifndef EVENT_HANDLERS_INCLUDED #define EVENT_HANDLERS_INCLUDED #include "scripting/DOMEvent.h" #include "Vector3D.h" #include "EntityOrders.h" class CEventInitialize : public CScriptEvent { public: CEventInitialize() : CScriptEvent( L"initialize", EVENT_INITIALIZE, false ) {} }; class CEventDeath : public CScriptEvent { public: CEventDeath() : CScriptEvent( L"death", EVENT_DEATH, false ) {} }; class CEventTick : public CScriptEvent { public: CEventTick() : CScriptEvent( L"tick", EVENT_TICK, false ) {} }; class CEventGeneric : public CScriptEvent { CEntity* m_target; int m_action; public: CEventGeneric( CEntity* target, int action ); }; class CEventStartProduction : public CScriptEvent { int m_productionType; CStrW m_name; float m_time; public: CEventStartProduction( int productionType, const CStrW& name ); inline float GetTime() { return m_time; } }; class CEventFinishProduction : public CScriptEvent { int m_productionType; CStrW m_name; public: CEventFinishProduction( int productionType, const CStrW& name ); }; class CEventCancelProduction : public CScriptEvent { int m_productionType; CStrW m_name; public: CEventCancelProduction( int productionType, const CStrW& name ); }; class CEventTargetChanged : public CScriptEvent { CEntity* m_target; public: int m_defaultOrder; int m_defaultAction; CStrW m_defaultCursor; CStrW m_secondaryCursor; int m_secondaryOrder; int m_secondaryAction; CEventTargetChanged( CEntity* target ); }; class CEventPrepareOrder : public CScriptEvent { public: CEntity* m_target; int m_orderType; int m_action; CStrW m_name; CEntity* m_notifySource; int m_notifyType; CEventPrepareOrder( CEntity* target, int orderType, int action, const CStrW& name ); }; class CEventOrderTransition : public CScriptEvent { int m_orderPrevious; int m_orderCurrent; CEntity** m_target; CVector3D* m_worldPosition; public: CEventOrderTransition( int orderPrevious, int orderCurrent, CEntity*& target, CVector3D& worldPosition ); }; class CEventNotification : public CScriptEvent { //Same as CEntityOrder data for support of all orders CEntity* m_target; int m_action; //u64 is unsupported...will this work? int m_notifyType; CVector3D m_location; //No real use for y, but CVector2D unsupported public: CEventNotification( CEntityOrder order, int notifyType ); }; class CFormationEvent : public CScriptEvent { int m_formationEvent; public: CFormationEvent( int type ); enum FormationEventType { FORMATION_ENTER, FORMATION_LEAVE, FORMATION_DAMAGE, FORMATION_ATTACK, FORMATION_LAST }; }; class CIdleEvent : public CScriptEvent { int m_notifyType; //previous order in notification code form int m_orderType; int m_action; //previous order in terms of generic order action CVector3D m_location; CEntity* m_target; public: CIdleEvent( CEntityOrder order, int notifyType ); }; #endif