MCPcopy Create free account
hub / github.com/OpenMW/openmw / receiveEvent

Method receiveEvent

components/lua/scriptscontainer.cpp:350–384  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

348 }
349
350 void ScriptsContainer::receiveEvent(std::string_view eventName, std::string_view eventData)
351 {
352 LoadedData& data = ensureLoaded();
353 auto it = data.mEventHandlers.find(eventName);
354 if (it == data.mEventHandlers.end())
355 return;
356 mLua.protectedCall([&](LuaView& view) {
357 sol::object object;
358 try
359 {
360 object = LuaUtil::deserialize(view.sol(), eventData, mSerializer);
361 }
362 catch (std::exception& e)
363 {
364 Log(Debug::Error) << mNamePrefix << " can not parse eventData for '" << eventName << "': " << e.what();
365 return;
366 }
367 EventHandlerList& list = it->second;
368 for (size_t i = list.size(); i > 0; --i)
369 {
370 const Handler& h = list[i - 1];
371 try
372 {
373 sol::object res = LuaUtil::call({ this, h.mScriptId }, h.mFn, object);
374 if (res.is<bool>() && !res.as<bool>())
375 break; // Skip other handlers if 'false' was returned.
376 }
377 catch (std::exception& e)
378 {
379 Log(Debug::Error) << mNamePrefix << "[" << scriptPath(h.mScriptId) << "] eventHandler[" << eventName
380 << "] failed. " << e.what();
381 }
382 }
383 });
384 }
385
386 void ScriptsContainer::registerEngineHandlers(std::initializer_list<EngineHandlerList*> handlers)
387 {

Callers 3

TEST_FFunction · 0.80
callEventHandlersMethod · 0.80
callMenuEventHandlersMethod · 0.80

Calls 9

LogClass · 0.85
solMethod · 0.80
deserializeFunction · 0.70
callFunction · 0.70
findMethod · 0.45
endMethod · 0.45
protectedCallMethod · 0.45
whatMethod · 0.45
sizeMethod · 0.45

Tested by 1

TEST_FFunction · 0.64