#include "CConVar.h" #include "U_Scripting.h" #include "ILuaWrapableBase.h" CConVar::CConVar(std::unique_ptr _wrapable) : Wrapable(std::move(_wrapable)) {} bool CConVar::V_ScriptInit(std::shared_ptr state, sol::table table) { sol::state_view sv = table.lua_state(); ScriptFields.AddField("description", std::make_unique>(Description)); ScriptFields.AddField("value", std::make_unique( [this](sol::state_view sv) -> sol::object { ILuaWrapableBase* lua = dynamic_cast(Wrapable.get()); if(!lua) { return sol::lua_nil; } return lua->ConvertToLua(sv); }, [this](sol::object obj) -> void { ILuaWrapableBase* lua = dynamic_cast(Wrapable.get()); if(!lua || !obj.valid()) { return; } lua->SetFromLua(obj); })); sol::table wrapable = Wrapable->GetScriptTable(state); table["wrapable"] = wrapable; sol::table meta = sv.create_table(); ScriptFields.SetMetaFunctions(meta); table[sol::metatable_key] = meta; return true; }