00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "asEventManager.h"
00018
00019 #ifdef __COMPILE_WITH_ANGELSCRIPT__
00020
00021 #include "../../core/GameManager.h"
00022 #include "ScriptedEvent.h"
00023
00026 bool connectEventSignal(const std::string &groupName, const std::string &slotName,
00027 asIScriptObject *object, const std::string &function,
00028 EventManager *pEventMgr)
00029 {
00030
00031 ScriptedEvent *scriptedEvent = new ScriptedEvent(object, function);
00032
00033
00034 if(pEventMgr->connectEventSignal(groupName, slotName, scriptedEvent, &ScriptedEvent::onEvent))
00035 {
00036
00037 std::stringstream ss;
00038 ss << slotName << "#disconnect[" << object->GetTypeId() << "-"
00039 << object->GetObjectType()->GetMethodIdByName(function.c_str()) << "]";
00040
00041 pEventMgr->createEventSlot(groupName, ss.str());
00042 pEventMgr->connectEventSignal(groupName, ss.str(), scriptedEvent, &ScriptedEvent::onDisconnect);
00043
00044
00045 return true;
00046 }
00047
00048 else
00049 {
00050 scriptedEvent->drop();
00051 return false;
00052 }
00053 }
00054
00057 void disconnectEventSignal(const std::string &groupName, const std::string &slotName,
00058 asIScriptObject *object, const std::string &function,
00059 EventManager *pEventMgr)
00060 {
00061
00062 std::stringstream ss;
00063 ss << slotName << "#disconnect[" << object->GetTypeId() << "-"
00064 << object->GetObjectType()->GetMethodIdByName(function.c_str()) << "]";
00065
00066 pEventMgr->emitEvent(groupName, ss.str());
00067
00068
00069 pEventMgr->removeEventSlot(groupName, ss.str());
00070 }
00071
00072
00074 void bindEventManager(asIScriptEngine *engine)
00075 {
00076
00077 int r;
00078
00079
00080 r = engine->RegisterObjectType("EventManager", sizeof(EventManager), asOBJ_REF); assert(r >= 0);
00081
00082
00083 r = engine->RegisterObjectBehaviour("EventManager", asBEHAVE_ADDREF, "void f()",
00084 asMETHOD(EventManager, grab), asCALL_THISCALL); assert(r >= 0);
00085 r = engine->RegisterObjectBehaviour("EventManager", asBEHAVE_RELEASE, "void f()",
00086 asMETHOD(EventManager, drop), asCALL_THISCALL); assert(r >= 0);
00087
00088
00089 r = engine->RegisterObjectMethod("EventManager", "void init()",
00090 asMETHOD(EventManager, init), asCALL_THISCALL); assert(r >= 0);
00091 r = engine->RegisterObjectMethod("EventManager", "void clear()",
00092 asMETHOD(EventManager, clear), asCALL_THISCALL); assert(r >= 0);
00093
00094 r = engine->RegisterObjectMethod("EventManager", "bool createEventGroup(const string &in)",
00095 asMETHOD(EventManager, createEventGroup), asCALL_THISCALL); assert(r >= 0);
00096 r = engine->RegisterObjectMethod("EventManager", "bool createEventSlot(const string &in, const string &in)",
00097 asMETHOD(EventManager, createEventSlot), asCALL_THISCALL); assert(r >= 0);
00098
00099 r = engine->RegisterObjectMethod("EventManager", "bool connectEventSignal(const string &in, " \
00100 "const string &in, IHasSlots@, const string &in)",
00101 asFUNCTION(connectEventSignal), asCALL_CDECL_OBJLAST); assert(r >= 0);
00102 r = engine->RegisterObjectMethod("EventManager", "void disconnectEventSignal(const string &in, " \
00103 "const string &in, IHasSlots@, const string &in)",
00104 asFUNCTION(disconnectEventSignal), asCALL_CDECL_OBJLAST); assert(r >= 0);
00105
00106 r = engine->RegisterObjectMethod("EventManager", "bool getIsKeyDown(EKEY_CODE)",
00107 asMETHOD(EventManager, getIsKeyDown), asCALL_THISCALL); assert(r >= 0);
00108 r = engine->RegisterObjectMethod("EventManager", "bool getIsKeyUp(EKEY_CODE)",
00109 asMETHOD(EventManager, getIsKeyDown), asCALL_THISCALL); assert(r >= 0);
00110
00111 r = engine->RegisterObjectMethod("EventManager", "s32 getMouseX()",
00112 asMETHOD(EventManager, getMouseX), asCALL_THISCALL); assert(r >= 0);
00113 r = engine->RegisterObjectMethod("EventManager", "s32 getMouseY()",
00114 asMETHOD(EventManager, getMouseY), asCALL_THISCALL); assert(r >= 0);
00115 r = engine->RegisterObjectMethod("EventManager", "const vector2di& getMousePos()",
00116 asMETHOD(EventManager, getMousePos), asCALL_THISCALL); assert(r >= 0);
00117 r = engine->RegisterObjectMethod("EventManager", "f32 getMouseWheel()",
00118 asMETHOD(EventManager, getMouseWheel), asCALL_THISCALL); assert(r >= 0);
00119
00120 r = engine->RegisterObjectMethod("EventManager", "void removeEventGroups()",
00121 asMETHOD(EventManager, removeEventGroups), asCALL_THISCALL); assert(r >= 0);
00122 r = engine->RegisterObjectMethod("EventManager", "bool removeEventSlots(const string &in)",
00123 asMETHOD(EventManager, removeEventSlots), asCALL_THISCALL); assert(r >= 0);
00124 r = engine->RegisterObjectMethod("EventManager", "bool removeEventGroup(const string &in)",
00125 asMETHOD(EventManager, removeEventGroup), asCALL_THISCALL); assert(r >= 0);
00126 r = engine->RegisterObjectMethod("EventManager", "bool removeEventSlot(const string &in, const string &in)",
00127 asMETHOD(EventManager, removeEventSlot), asCALL_THISCALL); assert(r >= 0);
00128 }
00129
00130 #endif // __COMPILE_WITH_ANGELSCRIPT__
00131
00132