00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __ASENTITYCOMPONENT_H__
00017 #define __ASENTITYCOMPONENT_H__
00018
00019
00020 #include "../../dependencies.h"
00021
00022 #ifdef __COMPILE_WITH_ANGELSCRIPT__
00023
00024 #include "../../core/EntityComponent.h"
00025 #include "../ScriptHelper.h"
00026
00027
00028
00032 class ScriptedEntityComponent : public EntityComponent
00033 {
00034 public:
00035
00036
00037 ScriptedEntityComponent(asIScriptObject *object);
00038 virtual ~ScriptedEntityComponent();
00039
00040 private:
00041
00042
00043 asIScriptObject *mObject;
00044 asIScriptContext *mContext;
00045
00046 };
00047
00049 extern void bindEntityComponent(asIScriptEngine *engine);
00050
00053 template<typename T>
00054 void bindEntityComponentBase(asIScriptEngine *engine, const char *type)
00055 {
00056
00057 int r;
00058 std::string sType = type;
00059
00060
00061 r = engine->RegisterObjectBehaviour(type, asBEHAVE_ADDREF, "void f()",
00062 asMETHOD(T, grab), asCALL_THISCALL); assert(r >= 0);
00063 r = engine->RegisterObjectBehaviour(type, asBEHAVE_RELEASE, "void f()",
00064 asMETHOD(T, drop), asCALL_THISCALL); assert(r >= 0);
00065
00066 r = engine->RegisterObjectBehaviour("EntityComponent", asBEHAVE_REF_CAST, std::string(sType + "@ f()").c_str(),
00067 asFUNCTION((asRefCast<EntityComponent,T>)), asCALL_CDECL_OBJLAST); assert( r >= 0 );
00068 r = engine->RegisterObjectBehaviour(type, asBEHAVE_IMPLICIT_REF_CAST, std::string("EntityComponent@ f()").c_str(),
00069 asFUNCTION((asRefCast<T,EntityComponent>)), asCALL_CDECL_OBJLAST); assert( r >= 0 );
00070
00071
00072 r = engine->RegisterObjectMethod(type, "u32 getID()",
00073 asMETHOD(T, getID), asCALL_THISCALL); assert(r >= 0);
00074
00075 r = engine->RegisterObjectMethod(type, "const string& getName()",
00076 asMETHOD(T, getName), asCALL_THISCALL); assert(r >= 0);
00077
00078 r = engine->RegisterObjectMethod(type, "Entity@ getParent()",
00079 asMETHOD(T, getParent), asCALL_THISCALL); assert(r >= 0);
00080 }
00081
00082 #endif // __COMPILE_WITH_ANGELSCRIPT__
00083
00084 #endif
00085