Polyphase Game Engine
Loading...
Searching...
No Matches
ScriptAutoReg.h
Go to the documentation of this file.
1#pragma once
2
3#include "Utilities.h"
4#include "Log.h"
5
6#define DECLARE_SCRIPT_LINK(Type, ParentType, TopType) \
7 static bool sRegisteredScriptFuncs_##Type; \
8 virtual void RegisterScriptFuncs(lua_State* L) override;
9
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); \
22 } \
23 lua_pop(L, 1); \
24 sAutoRegs_##Type.clear(); \
25 sAutoRegs_##Type.shrink_to_fit(); \
26 Type::sRegisteredScriptFuncs_##Type = true; \
27 }
28
29#define DECLARE_SCRIPT_LINK_BASE(Base) \
30 virtual void RegisterScriptFuncs(lua_State* L); \
31 static void BindCommonLuaFuncs(lua_State* L, int mtIndex);
32
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); }
36
37#define REGISTER_SCRIPT_FUNCS() \
38 lua_State* L = GetLua(); \
39 if (L != nullptr) \
40 { \
41 RegisterScriptFuncs(L); \
42 }
43
45{
46 AutoRegData(const char* tableName, const char* funcName, lua_CFunction func) :
47 mTableName(tableName),
48 mFuncName(funcName),
49 mFunc(func)
50 {
51
52 }
53
54 const char* mTableName;
55 const char* mFuncName;
56 lua_CFunction mFunc;
57};
58
60{
61 ScriptFuncAutoReg(std::vector<AutoRegData>& autoRegs, const char* tableName, const char* funcName, lua_CFunction func)
62 {
63 autoRegs.emplace_back(tableName, funcName, func);
64 }
65};
66
67std::vector<AutoRegData>& GetGlobalAutoRegArray();
68
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