114 static void CreateObject(
const luaL_Reg *methods,
const luaL_Reg *attrs,
const luaL_Reg *meta,
bool protect =
false);
153 static void CreateClass(
const char *type,
const char *parent,
const luaL_Reg *methods,
const luaL_Reg *attrs,
const luaL_Reg *meta);
205 template <
typename T>
208 template <
typename T,
typename... Args>
209 static T *
AllocateNew(Args &&...args) {
return new (Allocate<T>()) T(std::forward<Args>(args)...); }
217 const char *
GetType()
const {
return m_type; }
227 bool Isa(
const char *base)
const;
244 static inline void PushToLua(
const T &o);
246 template <
typename... Args>
249 template <
typename Ret,
typename Key,
typename... Args>
250 static inline Ret
CallMethod(T *o,
const Key &key,
const Args &...args);
251 template <
typename Key,
typename... Args>
252 static inline void CallMethod(T *o,
const Key &key,
const Args &...args)
254 CallMethod<bool>(o, key, args...);
257 template <
typename Ret1,
typename Ret2,
typename... Ret,
typename Key,
typename... Args>
258 static inline std::tuple<Ret1, Ret2, Ret...>
CallMethod(T *o,
const Key &key,
const Args &...args);
265#pragma clang diagnostic push
266#pragma clang diagnostic ignored "-Wundefined-var-template"
270#pragma clang diagnostic pop
278#pragma clang diagnostic push
279#pragma clang diagnostic ignored "-Wundefined-var-template"
283#pragma clang diagnostic pop
290 return dynamic_cast<T *
>(o);
295#pragma clang diagnostic push
296#pragma clang diagnostic ignored "-Wundefined-var-template"
302#pragma clang diagnostic pop
308 static const char *s_type;
322 m_deleteConnection = m_object->DeleteEmitter::onDelete.connect(sigc::mem_fun(
this, &LuaCoreObject::OnDelete));
327 if (m_deleteConnection.connected())
328 m_deleteConnection.disconnect();
338 if (m_deleteConnection.connected())
339 m_deleteConnection.disconnect();
352 sigc::connection m_deleteConnection;
393 return m_object.Get();
409 m_object = LuaObjectBase::AllocateNew<T>(o);
459 if (!PushRegistered(o))
466 if (!PushRegistered(o))
473 if (!PushRegistered(o))
484template <
typename... Args>
487 T *p(
new T(std::forward<Args>(args)...));
492template <
typename Ret,
typename Key,
typename... Args>
499 lua_checkstack(l,
sizeof...(args) + 5);
503 lua_pushvalue(l, -2);
514template <
typename Ret1,
typename Ret2,
typename... Ret,
typename Key,
typename... Args>
520 lua_checkstack(l,
sizeof...(args) + 5);
524 lua_pushvalue(l, -2);
528 auto ret_values =
pi_lua_multiple_pull<Ret1, Ret2, Ret...>(l, -2 -
static_cast<int>(
sizeof...(Ret)));
529 lua_pop(l, 2 +
static_cast<int>(
sizeof...(Ret)));
nlohmann::json Json
Definition Json.h:8
void pi_lua_generic_pull(lua_State *l, int index, SystemPath &out)
Definition LuaObject.h:539
bool(* PromotionTest)(LuaWrappable *o)
Definition LuaObject.h:74
void pi_lua_generic_push(lua_State *l, const SystemPath &value)
Definition LuaObject.h:545
bool pi_lua_strict_pull(lua_State *l, int index, T *&out)
Definition LuaObject.h:560
std::tuple< Types... > pi_lua_multiple_pull(lua_State *l, int beg)
Definition LuaPushPull.h:237
void pi_lua_multiple_push(lua_State *l, Types... args)
#define LUA_DEBUG_START(luaptr)
Definition LuaUtils.h:103
#define LUA_DEBUG_END(luaptr, expectedStackDiff)
Definition LuaUtils.h:104
void pi_lua_protected_call(lua_State *L, int nargs, int nresults)
Definition Sandbox.cpp:248
Definition DeleteEmitter.h:16
Definition LuaObject.h:360
LuaWrappable * GetObject() const override
Definition LuaObject.h:367
void ClearObject() override
Definition LuaObject.h:372
LuaComponentObject(T *o)
Definition LuaObject.h:362
Definition LuaObject.h:404
LuaWrappable * GetObject() const override
Definition LuaObject.h:420
LuaCopyObject(const T &o)
Definition LuaObject.h:406
~LuaCopyObject()
Definition LuaObject.h:414
Definition LuaObject.h:317
void ClearObject() override
Definition LuaObject.h:336
LuaCoreObject(T *o)
Definition LuaObject.h:319
~LuaCoreObject()
Definition LuaObject.h:325
LuaWrappable * GetObject() const override
Definition LuaObject.h:331
lua_State * GetLuaState()
Definition LuaManager.h:14
Definition LuaObject.h:107
static void CreateObject(const luaL_Reg *methods, const luaL_Reg *attrs, const luaL_Reg *meta, bool protect=false)
Definition LuaObject.cpp:282
virtual void ClearObject()
Definition LuaObject.h:215
static void RegisterPersistent(LuaObjectBase *lo)
Definition LuaObject.cpp:563
static bool DeserializeComponents(LuaWrappable *object, const Json &obj)
Definition LuaObject.cpp:786
const char * GetType() const
Definition LuaObject.h:217
static LuaWrappable * CheckFromLua(int index, const char *type)
Definition LuaObject.cpp:633
static T * AllocateNew(Args &&...args)
Definition LuaObject.h:209
LuaObjectBase(const char *type)
Definition LuaObject.h:145
static PropertyMap * GetPropertiesFromObject(lua_State *l, int object)
Definition LuaObject.cpp:228
static LuaWrappable * GetFromLua(int index, const char *type)
Definition LuaObject.cpp:653
static T * Allocate()
Definition LuaObject.h:206
static void RegisterPromotion(const char *base_type, const char *target_type, PromotionTest test_fn)
Definition LuaObject.cpp:709
static bool SerializeToJson(lua_State *l, Json &out)
Definition LuaObject.cpp:826
static void CreateClass(const char *type, const char *parent, const luaL_Reg *methods, const luaL_Reg *attrs, const luaL_Reg *meta)
Definition LuaObject.cpp:339
virtual ~LuaObjectBase()
Definition LuaObject.h:147
static bool PushRegistered(LuaWrappable *o)
Definition LuaObject.cpp:446
static void Register(LuaObjectBase *lo)
Definition LuaObject.cpp:480
static bool SerializeComponents(LuaWrappable *object, Json &out)
Definition LuaObject.cpp:735
static void RegisterSerializer(const char *type, SerializerPair pair)
Definition LuaObject.cpp:714
static void DeregisterObject(LuaWrappable *object)
Definition LuaObject.cpp:581
virtual LuaWrappable * GetObject() const =0
static bool DeserializeFromJson(lua_State *l, const Json &obj)
Definition LuaObject.cpp:857
Definition LuaObject.cpp:98
Definition LuaObject.h:235
static T * CheckFromLua(int idx)
Definition LuaObject.h:262
static void PushComponentToLua(LuaWrappable *o)
Definition LuaObject.h:464
static void PushToLua(DeleteEmitter *o)
Definition LuaObject.h:457
static Ret CallMethod(T *o, const Key &key, const Args &...args)
Definition LuaObject.h:493
static void CallMethod(T *o, const Key &key, const Args &...args)
Definition LuaObject.h:252
LuaObject()
Definition LuaObject.h:298
static bool DynamicCastPromotionTest(LuaWrappable *o)
Definition LuaObject.h:288
static void CreateInLua(Args &&...args)
Definition LuaObject.h:485
static T * GetFromLua(int idx)
Definition LuaObject.h:275
static void RegisterClass()
Definition LuaObject.h:433
~LuaOwnObject()
Definition LuaObject.h:440
LuaWrappable * GetObject() const override
Definition LuaObject.h:445
LuaOwnObject(T *o)
Definition LuaObject.h:435
Definition LuaSerializer.h:14
Definition LuaObject.h:386
LuaSharedObject(T *o)
Definition LuaObject.h:388
LuaWrappable * GetObject() const override
Definition LuaObject.h:391
Definition LuaWrappable.h:13
Definition Property.h:171
Definition RefCounted.h:36
Definition RefCounted.h:11
T * Get() const
Definition SmartPtr.h:37
Definition SystemPath.h:13
LuaManager * manager
Definition Lua.cpp:43
Definition LuaObject.h:82
SerializerPair(Serializer serialize_, Deserializer deserialize_)
Definition LuaObject.h:93
bool(*)(lua_State *l, const Json &obj) Deserializer
Definition LuaObject.h:86
SerializerPair()
Definition LuaObject.h:88
Serializer serialize
Definition LuaObject.h:98
Deserializer deserialize
Definition LuaObject.h:99