void ScriptEventListener::ScriptEventDelegate(IEventDataPtr pEvent) { //assert(m_scriptCallbackFunction.IsFunction()); // this should never happen since it's validated before even creating this object // call the Lua function std::shared_ptr<ScriptEvent> pScriptEvent = std::static_pointer_cast<ScriptEvent>(pEvent); sol::function Callback = m_scriptCallbackFunction.lua_state(); //Callback.set_functionl //LuaPlus::LuaFunction<void> Callback = m_scriptCallbackFunction; //Callback(pScriptEvent->GetEventData()); }
bool LuaScriptSystem::addUpdateListener(const sol::object& function, bool global) { if(std::find_if(mUpdateListeners.begin(), mUpdateListeners.end(), [function] (Listener l) { return l.function == function; } ) != mUpdateListeners.end()) return true; if(function.get_type() == sol::type::function) { mUpdateListeners.emplace_back(function.as<sol::protected_function>(), global); } else { LOG(WARNING) << "Tried to add update listener object of unsupported type"; return false; } return true; }
std::vector<std::pair<std::string, int>> test_table_return_two() { return{ { "one", 1 },{ "two", 2 },{ "three", 3 } }; } std::map<std::string, std::string> test_table_return_three() { return{ { "name", "Rapptz" },{ "friend", "ThePhD" },{ "project", "sol" } }; } TEST_CASE("containers/returns", "make sure that even references to vectors are being serialized as tables") { sol::state lua; std::vector<int> v{ 1, 2, 3 }; lua.set_function("f", [&]() -> std::vector<int>& { return v; }); lua.script("x = f()"); sol::object x = lua["x"]; sol::type xt = x.get_type(); REQUIRE(xt == sol::type::userdata); sol::table t = x; bool matching; matching = t[1] == 1; REQUIRE(matching); matching = t[2] == 2; REQUIRE(matching); matching = t[3] == 3; REQUIRE(matching); } TEST_CASE("containers/vector_roundtrip", "make sure vectors can be round-tripped") { sol::state lua; std::vector<int> v{ 1, 2, 3 };
m.b = t[1][2]; return m; } }; TEST_CASE("usertype/usertype", "Show that we can create classes from usertype and use them") { sol::state lua; sol::usertype<fuser> lc{ "add", &fuser::add, "add2", &fuser::add2 }; lua.set_usertype(lc); lua.script("a = fuser:new()\n" "b = a:add(1)\n" "c = a:add2(1)\n"); sol::object a = lua.get<sol::object>("a"); sol::object b = lua.get<sol::object>("b"); sol::object c = lua.get<sol::object>("c"); REQUIRE((a.is<sol::userdata_value>())); auto atype = a.get_type(); auto btype = b.get_type(); auto ctype = c.get_type(); REQUIRE((atype == sol::type::userdata)); REQUIRE((btype == sol::type::number)); REQUIRE((ctype == sol::type::number)); int bresult = b.as<int>(); int cresult = c.as<int>(); REQUIRE(bresult == 1); REQUIRE(cresult == 3); }