6#define DECLARE_SCRIPT_LINK(Type, ParentType, TopType) \
7 static bool sRegisteredScriptFuncs_##Type; \
8 virtual void RegisterScriptFuncs(lua_State* L) override;
10#define DEFINE_SCRIPT_LINK(Type, ParentType, TopType) \
11 bool Type::sRegisteredScriptFuncs_##Type = false; \
12 static std::vector<AutoRegData> sAutoRegs_##Type; \
13 void Type::RegisterScriptFuncs(lua_State* L) { \
14 if (Type::sRegisteredScriptFuncs_##Type) { return; } \
15 ParentType::RegisterScriptFuncs(L); \
16 int mtIndex = CreateClassMetatable(#Type, "cf" #Type, #ParentType); \
17 TopType::BindCommonLuaFuncs(L, mtIndex); \
18 for (AutoRegData& data : sAutoRegs_##Type) { \
19 lua_pushstring(L, data.mFuncName); \
20 lua_pushcfunction(L, data.mFunc); \
21 lua_rawset(L, mtIndex); \
24 sAutoRegs_##Type.clear(); \
25 sAutoRegs_##Type.shrink_to_fit(); \
26 Type::sRegisteredScriptFuncs_##Type = true; \
29#define DECLARE_SCRIPT_LINK_BASE(Base) \
30 virtual void RegisterScriptFuncs(lua_State* L); \
31 static void BindCommonLuaFuncs(lua_State* L, int mtIndex);
33#define DEFINE_SCRIPT_LINK_BASE(Base) \
34 void Base::RegisterScriptFuncs(lua_State* L){ } \
35 void Base::BindCommonLuaFuncs(lua_State* L, int mtIndex) { Base##_Lua::BindCommon(L, mtIndex); }
37#define REGISTER_SCRIPT_FUNCS() \
38 lua_State* L = GetLua(); \
41 RegisterScriptFuncs(L); \
46 AutoRegData(
const char* tableName,
const char* funcName, lua_CFunction func) :
61 ScriptFuncAutoReg(std::vector<AutoRegData>& autoRegs,
const char* tableName,
const char* funcName, lua_CFunction func)
63 autoRegs.emplace_back(tableName, funcName, func);
void InitAutoRegScripts()
Definition ScriptAutoReg.cpp:11
std::vector< AutoRegData > & GetGlobalAutoRegArray()
Definition ScriptAutoReg.cpp:5
Definition ScriptAutoReg.h:45
AutoRegData(const char *tableName, const char *funcName, lua_CFunction func)
Definition ScriptAutoReg.h:46
const char * mFuncName
Definition ScriptAutoReg.h:55
const char * mTableName
Definition ScriptAutoReg.h:54
lua_CFunction mFunc
Definition ScriptAutoReg.h:56
Definition ScriptAutoReg.h:60
ScriptFuncAutoReg(std::vector< AutoRegData > &autoRegs, const char *tableName, const char *funcName, lua_CFunction func)
Definition ScriptAutoReg.h:61