← Back to file list Raw

src/CScriptComponentsManager.cpp

#include "CScriptComponentsManager.h"
CScriptComponent::CScriptComponent(const std::string& _TypeName, sol::function _Constructor,
sol::function _Destructor, sol::function _LuaInit, sol::function _LuaPostInit, sol::function _LuaUpdate) :
TypeName(_TypeName), Constructor(_Constructor), Destructor(_Destructor), Init(_LuaInit), PostInit(_LuaPostInit), Update(_LuaUpdate)
{
}
CGenericComponent* CScriptComponentsManager::Create(const std::string& typenm)
{
if(!IsPresent(typenm)) { return nullptr; }
auto& compInfo = Components.find(typenm)->second;
std::map<std::string, sol::function> _functions =
{
{ "constructor", compInfo.Constructor },
{ "destructor", compInfo.Destructor },
{ "init", compInfo.Init },
{ "postinit", compInfo.PostInit },
{ "update", compInfo.Update },
};
return new CGenericComponent(typenm, _functions, State);
}
bool CScriptComponentsManager::IsPresent(const std::string& typenm) const
{
return Components.find(typenm) != Components.end();
}
void CScriptComponentsManager::Register(const std::string& typenm, sol::function _Constructor, sol::function _Destructor,
sol::function _LuaInit, sol::function _LuaPostInit, sol::function _LuaUpdate)
{
if(typenm.empty() || IsPresent(typenm)) { return; }
Components.insert({ typenm, { typenm, _Constructor, _Destructor, _LuaInit, _LuaPostInit, _LuaUpdate } });
}
void CScriptComponentsManager::Remove(const std::string& typenm)
{
auto it = Components.find(typenm);
if(it != Components.end())
{
Components.erase(it);
}
}
CScriptComponentsManager::CScriptComponentsManager(std::shared_ptr<sol::state>& _State) : State(_State) {}