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

Function getAsyncPackageInitializer

components/lua/asyncpackage.cpp:63–105  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

61 }
62
63 sol::function getAsyncPackageInitializer(
64 lua_State* state, std::function<double()> simulationTimeFn, std::function<double()> gameTimeFn)
65 {
66 sol::state_view lua(state);
67 using TimerType = ScriptsContainer::TimerType;
68 sol::usertype<AsyncPackageId> api = lua.new_usertype<AsyncPackageId>("AsyncPackage");
69 api["registerTimerCallback"]
70 = [](const AsyncPackageId& asyncId, std::string_view name, sol::main_protected_function callback) {
71 asyncId.mContainer->registerTimerCallback(asyncId.mScriptId, name, std::move(callback));
72 return TimerCallback{ asyncId, std::string(name) };
73 };
74 api["newSimulationTimer"] = [simulationTimeFn](const AsyncPackageId&, double delay,
75 const TimerCallback& callback, sol::main_object callbackArg) {
76 callback.mAsyncId.mContainer->setupSerializableTimer(TimerType::SIMULATION_TIME, simulationTimeFn() + delay,
77 callback.mAsyncId.mScriptId, callback.mName, std::move(callbackArg));
78 };
79 api["newGameTimer"] = [gameTimeFn](const AsyncPackageId&, double delay, const TimerCallback& callback,
80 sol::main_object callbackArg) {
81 callback.mAsyncId.mContainer->setupSerializableTimer(TimerType::GAME_TIME, gameTimeFn() + delay,
82 callback.mAsyncId.mScriptId, callback.mName, std::move(callbackArg));
83 };
84 api["newUnsavableSimulationTimer"]
85 = [simulationTimeFn](const AsyncPackageId& asyncId, double delay, sol::main_protected_function callback) {
86 asyncId.mContainer->setupUnsavableTimer(
87 TimerType::SIMULATION_TIME, simulationTimeFn() + delay, asyncId.mScriptId, std::move(callback));
88 };
89 api["newUnsavableGameTimer"]
90 = [gameTimeFn](const AsyncPackageId& asyncId, double delay, sol::main_protected_function callback) {
91 asyncId.mContainer->setupUnsavableTimer(
92 TimerType::GAME_TIME, gameTimeFn() + delay, asyncId.mScriptId, std::move(callback));
93 };
94
95 sol::table callbackMeta = Callback::makeMetatable(state);
96 api["callback"] = [callbackMeta](const AsyncPackageId& asyncId, sol::main_protected_function fn) -> sol::table {
97 return Callback::make(asyncId, std::move(fn), callbackMeta);
98 };
99
100 auto initializer = [](sol::table hiddenData) {
101 ScriptId id = hiddenData[ScriptsContainer::sScriptIdKey];
102 return AsyncPackageId{ id.mContainer, id.mIndex, std::move(hiddenData) };
103 };
104 return sol::make_object(lua, initializer);
105 }
106
107}

Callers 3

SetUpMethod · 0.85
TESTFunction · 0.85
initCommonPackagesFunction · 0.85

Calls 4

make_objectFunction · 0.85
registerTimerCallbackMethod · 0.80
setupUnsavableTimerMethod · 0.80

Tested by 2

SetUpMethod · 0.68
TESTFunction · 0.68