← Back to file list Raw

src/CScriptObjectBase.cpp

#include "CScriptObjectBase.h"
#include "CEngine.h"
#include "U_Scripting.h"
#include "CScriptingManager.h"
CScriptObjectBase::CScriptObjectBase(std::shared_ptr<sol::state> state) { ScriptInit(state); }
bool CScriptObjectBase::m_internalInit(std::shared_ptr<sol::state> state, sol::table table) { return true; }
bool CScriptObjectBase::V_ScriptInit(std::shared_ptr<sol::state> state, sol::table table) { return true; }
bool CScriptObjectBase::V_BaseScriptInit(std::shared_ptr<sol::state> 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<sol::state> 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<sol::state> _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<sol::state> _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<sol::state> _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<sol::state> 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) {}