#include "U_Scripting.h" #include "CEngine.h" #include "CScriptingManager.h" sol::state& ScriptUtils::GetStateReference(lua_State* state) { return CEngine::GetInstance()->Components.GetComponentTyped()->GetStateReference(state); } std::shared_ptr ScriptUtils::GetStateSharedPtr(lua_State* state) { return CEngine::GetInstance()->Components.GetComponentTyped()->GetStateSharedPtr(state); } CWrapableBase* ScriptUtils::ObjectToWrapable(sol::object obj) { if(obj.get_type() == sol::type::boolean) { return new CWrapable(obj.as()); } else if(obj.get_type() == sol::type::number) { return new CWrapable(obj.as()); } else if(obj.get_type() == sol::type::string) { return new CWrapable(obj.as()); } return nullptr; } //num: 90 //string: text //boolean: true //table: { name = "frweger", age = 90 } std::string ScriptUtils::ObjectToString(sol::object obj) { if(obj.get_type() == sol::type::boolean) { return obj.as() ? "true" : "false"; } else if(obj.get_type() == sol::type::number) { std::stringstream ss; ss << obj.as(); return ss.str(); } else if(obj.get_type() == sol::type::string) { return obj.as(); } else if(obj.get_type() == sol::type::table) { std::string ret = "{ "; size_t added = 0; for(auto& kv : obj.as()) { ret += ScriptUtils::ObjectToString(kv.first); ret += " = "; bool isValueStr = kv.second.get_type() == sol::type::string; if(isValueStr) { ret += "\""; } ret += ScriptUtils::ObjectToString(kv.second); if(isValueStr) { ret += "\""; } ret += ", "; added++; } //"{ " added 0 -> "{" //"{ age = 90, " added 1 -> "{ age = 90" ret.pop_back(); if(added > 0) { ret.pop_back(); ret += " "; } ret += "}"; } return {}; } std::wstring ScriptUtils::ObjectToWstring(sol::object obj) { if(obj.get_type() == sol::type::boolean) { return obj.as() ? L"true" : L"false"; } else if(obj.get_type() == sol::type::number) { std::wstringstream ss; ss << obj.as(); return ss.str(); } else if(obj.get_type() == sol::type::string) { return obj.as(); } else if(obj.get_type() == sol::type::table) { std::wstring ret = L"{ "; size_t added = 0; for(auto& kv : obj.as()) { ret += ScriptUtils::ObjectToWstring(kv.first); ret += L" = "; bool isValueStr = kv.second.get_type() == sol::type::string; if(isValueStr) { ret += L"\""; } ret += ScriptUtils::ObjectToWstring(kv.second); if(isValueStr) { ret += L"\""; } ret += L", "; added++; } ret.pop_back(); if(added > 0) { ret.pop_back(); ret += L" "; } ret += L"}"; } return {}; }