// // 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 ServerModuleInfo { std::string name; std::pair path; // homePath, moduleName 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 loadModules(const std::string &path, std::vector *list = nullptr); CommandController &getCmdCtrl(); EventController &getEventCtrl(); TimerController &getTimerCtrl(); ObjectController &getObjectCtrl(); ActorController &getActorCtrl(); private: sol::environment openModule(std::string path, std::string moduleName); 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 modules; };