// // Created by koncord on 01.08.17. // #pragma once #include "sol.hpp" #include "CommandController.hpp" #include "Timer.hpp" #include #include #include #include //class CommandController; class EventController; //class TimerController; struct ServerPluginInfo { std::string name; std::pair path; // homePath, modname std::string version; std::string author; std::vector> dependencies; // name, requestedVersion sol::environment env; }; class LuaState { public: LuaState(); ~LuaState() = default; std::shared_ptr getState() { return lua; } void addGlobalPackagePath(const std::string &path); void addGlobalCPath(const std::string &path); sol::table getCoreTable() { return dataEnv["Core"]; } sol::environment &getDataEnv(){ return dataEnv; } void loadMods(const std::string &path, std::vector *list = nullptr); CommandController &getCmdCtrl(); EventController &getEventCtrl(); TimerController &getTimerCtrl(); ObjectController &getObjectCtrl(); ActorController &getActorCtrl(); private: sol::environment openScript(std::string path, std::string modname); private: std::shared_ptr lua; sol::environment dataEnv; sol::environment configEnv; std::unique_ptr cmdCtrl; std::unique_ptr eventCtrl; std::unique_ptr timerCtrl; std::unique_ptr actorCtrl; std::unique_ptr objectCtrl; std::vector mods; };