/// /// Created by Anonymous275 on 5/20/2020 /// #pragma once #include #include #include "lua.hpp" #include #include #include #include namespace fs = std::experimental::filesystem; struct LuaArg{ std::vector args; void PushArgs(lua_State *State){ for(std::any arg : args){ if(!arg.has_value())return; std::string Type = arg.type().name(); if(Type.find("bool") != -1){ lua_pushboolean(State,std::any_cast(arg)); } if(Type.find("basic_string") != -1 || Type.find("char") != -1){ lua_pushstring(State,std::any_cast(arg).c_str()); } if(Type.find("int") != -1){ lua_pushinteger(State,std::any_cast(arg)); } if(Type.find("float") != -1){ lua_pushnumber(State,std::any_cast(arg)); } } } }; class Lua { private: std::set> RegisteredEvents; lua_State *luaState = luaL_newstate(); fs::file_time_type LastWrote; std::string PluginName; std::string FileName; public: void RegisterEvent(const std::string&Event,const std::string&FunctionName); std::string GetRegistered(const std::string&Event); void UnRegisterEvent(const std::string&Event); void SetLastWrite(fs::file_time_type time); bool IsRegistered(const std::string&Event); void SetPluginName(const std::string&Name); void SetFileName(const std::string&Name); fs::file_time_type GetLastWrite(); bool isThreadExecuting = false; std::string GetPluginName(); std::string GetFileName(); bool isExecuting = false; bool StopThread = false; bool HasThread = false; lua_State* GetState(); char* GetOrigin(); void Reload(); void Init(); }; int CallFunction(Lua*lua,const std::string& FuncName,LuaArg* args); int TriggerLuaEvent(const std::string& Event,bool local,Lua*Caller,LuaArg* arg); extern std::set PluginEngine;