#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 _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& _State) : State(_State) {}