#pragma once #include #include #include #include #include #include #include #include #include struct FormCallbackData { script::ScriptEngine* engine; script::Global func; }; struct RemoteCallData { std::string nameSpace; std::string funcName; script::Global callback; }; /* struct SimpleCallbackData { ScriptEngine* engine; script::Global func; std::vector> values; }; */ class Player; struct EngineOwnData { // 基础信息 std::string pluginName = ""; std::string pluginFileOrDirPath = ""; std::string engineType = LLSE_BACKEND_TYPE; // 表单回调 std::map formCallbacks; // RemoteCall Exported Functions: unordered_map std::unordered_map exportFuncs; /* uint64_t simpleCallbackIndex = 0; std::unordered_map simpleCallbacks; inline uint64_t addSimpleCallback(script::Local func, std::vector> values) { auto index = ++simpleCallbackIndex; std::vector> globalValues; for (auto& value : values) globalValues.emplace_back(value); SimpleCallbackData data{EngineScope::currentEngine(), script::Global(func), std::move(globalValues)}; simpleCallbacks.emplace(index, std::move(data)); return index; } inline bool removeSimpleCallback(uint64_t index) { return simpleCallbacks.erase(index); } */ // I18nAPI I18nBase* i18n = nullptr; // LoggerAPI bool toConsole = true; ::Logger logger = ::Logger(""); int maxLogLevel = 4; // 玩家绑定数据 std::unordered_map> playerDataDB; // Dynamic Call vm for NativeFFI DCCallVM* dynamicCallVM; // Unload Callbacks, use for close database... int index = 0; std::unordered_map> unloadCallbacks; inline int addUnloadCallback(std::function&& cb) { unloadCallbacks[++index] = cb; return index; } inline bool removeUnloadCallback(int index) { return unloadCallbacks.erase(index); } // Init EngineOwnData() { dynamicCallVM = dcNewCallVM(4096); dcMode(dynamicCallVM, DC_CALL_C_DEFAULT); } }; // 引擎附加数据 #define ENGINE_GET_DATA(e) (std::static_pointer_cast((e)->getData())) #define ENGINE_OWN_DATA() (std::static_pointer_cast(EngineScope::currentEngine()->getData()))