#include "CScriptObjectBase.h" #include "CEngine.h" #include "U_Scripting.h" #include "CScriptingManager.h" CScriptObjectBase::CScriptObjectBase(std::shared_ptr state) { ScriptInit(state); } bool CScriptObjectBase::m_internalInit(std::shared_ptr state, sol::table table) { return true; } bool CScriptObjectBase::V_ScriptInit(std::shared_ptr state, sol::table table) { return true; } bool CScriptObjectBase::V_BaseScriptInit(std::shared_ptr state, sol::table table) { return true; } sol::table CScriptObjectBase::ScriptInit(sol::state_view state) { return ScriptInit(ScriptUtils::GetStateSharedPtr(state)); } sol::table CScriptObjectBase::ScriptInit(std::shared_ptr state) { sol::table Table = state->create_table(); bool succ_base = V_BaseScriptInit(state, Table); if(!succ_base) { return sol::lua_nil; } bool succ = V_ScriptInit(state, Table); if(!succ) { return sol::lua_nil; } bool internal_succ = m_internalInit(state, Table); if(!internal_succ) { return sol::lua_nil; } Bindings.insert({ state, Table }); return Table; } bool CScriptObjectBase::IsScriptTableExist(sol::state_view _state) const { return std::find_if(Bindings.begin(), Bindings.end(), [&_state](auto& kv) -> bool { return (*kv.first) == _state; }) != Bindings.end(); } bool CScriptObjectBase::IsScriptTableExist(std::shared_ptr _state_ptr) const { return std::find_if(Bindings.begin(), Bindings.end(), [&_state_ptr](auto& kv) -> bool { return kv.first == _state_ptr; }) != Bindings.end(); } sol::table CScriptObjectBase::GetScriptTable(sol::state_view _state) { auto it = std::find_if(Bindings.begin(), Bindings.end(), [&_state](auto& kv) -> bool { return (*kv.first) == _state; }); if(it == Bindings.end()) { return ScriptInit(ScriptUtils::GetStateSharedPtr(_state)); } return it->second; } sol::table CScriptObjectBase::GetScriptTable(std::shared_ptr _state_ptr) { auto it = std::find_if(Bindings.begin(), Bindings.end(), [&_state_ptr](auto& kv) -> bool { return kv.first == _state_ptr; }); if(it == Bindings.end()) { return ScriptInit(_state_ptr); } return it->second; } bool CScriptObjectBase::DeleteScriptTable(sol::state_view _state) { auto it = std::find_if(Bindings.begin(), Bindings.end(), [&_state](auto& kv) -> bool { return (*kv.first) == _state; }); if(it != Bindings.end()) { Bindings.erase(it); return true; } return false; } bool CScriptObjectBase::DeleteScriptTable(std::shared_ptr _state_ptr) { auto it = std::find_if(Bindings.begin(), Bindings.end(), [&_state_ptr](auto& kv) -> bool { return kv.first == _state_ptr; }); if(it != Bindings.end()) { Bindings.erase(it); return true; } return false; } void CScriptObjectBase::ScriptTypeInit(std::shared_ptr state) { return ScriptTypeInit(*state); } void CScriptObjectBase::ScriptTypeInit(sol::state_view state) { V_BaseScriptTypeInit(state); V_ScriptTypeInit(state); } sol::object CScriptObjectBase::GetScriptUserType(sol::state_view state) { return V_GetScriptUserType(state); } sol::object CScriptObjectBase::V_GetScriptUserType(sol::state_view state) { return sol::make_object(state, this); } void CScriptObjectBase::V_BaseScriptTypeInit(sol::state_view state) {} void CScriptObjectBase::V_ScriptTypeInit(sol::state_view state) {}