openmw-tes3coop/apps/openmw-mp/Script/LuaState.hpp
David Cernat 993cc3dfd6 [Server] Rename server "plugins"/"mods" into "modules" for clarity
The terms "plugins" and "mods" were used interchangeably to refer to collections of server scripts, which was bound to cause confusion later on, especially with client data files frequently being referred to as "plugins" and "mods" as well.

Moreover, the server configuration file now starts its manual ordering with "Module1" for consistency with the pluginlist.json (soon to be dataFileList.json) of the CoreScripts.
2017-12-02 15:39:08 +02:00

61 lines
1.7 KiB
C++

//
// Created by koncord on 01.08.17.
//
#pragma once
#include "sol.hpp"
#include "CommandController.hpp"
#include "Timer.hpp"
#include <unordered_map>
#include <memory>
#include <apps/openmw-mp/Actors.hpp>
#include <apps/openmw-mp/Object.hpp>
//class CommandController;
class EventController;
//class TimerController;
struct ServerModuleInfo
{
std::string name;
std::pair<std::string, std::string> path; // homePath, moduleName
std::string version;
std::string author;
std::vector<std::pair<std::string, std::string>> dependencies; // name, requestedVersion
sol::environment env;
};
class LuaState
{
public:
LuaState();
~LuaState() = default;
std::shared_ptr<sol::state> 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<std::string> *list = nullptr);
CommandController &getCmdCtrl();
EventController &getEventCtrl();
TimerController &getTimerCtrl();
ObjectController &getObjectCtrl();
ActorController &getActorCtrl();
private:
sol::environment openScript(std::string path, std::string moduleName);
private:
std::shared_ptr<sol::state> lua;
sol::environment dataEnv;
sol::environment configEnv;
std::unique_ptr<CommandController> cmdCtrl;
std::unique_ptr<EventController> eventCtrl;
std::unique_ptr<TimerController> timerCtrl;
std::unique_ptr<ActorController> actorCtrl;
std::unique_ptr<ObjectController> objectCtrl;
std::vector<ServerModuleInfo> modules;
};