56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
//
|
|
// Created by aurailus on 17/12/18.
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include <unordered_set>
|
|
#include <unordered_map>
|
|
|
|
#include "lua/LuaParser.h"
|
|
|
|
#include "Mod.h"
|
|
#include "util/CovariantPtr.h"
|
|
#include "util/EventEmitter.h"
|
|
#include "lua/LuaKeybindHandler.h"
|
|
|
|
class Client;
|
|
class LocalWorld;
|
|
class LocalPlayer;
|
|
class LocalSubgame;
|
|
|
|
class LocalLuaParser : public LuaParser {
|
|
public:
|
|
explicit LocalLuaParser(LocalSubgame& game);
|
|
|
|
void init(WorldPtr world, PlayerPtr player, Client& client);
|
|
|
|
void update(double delta) override;
|
|
|
|
void addMod(const Mod& mod);
|
|
|
|
void setModLoadOrder(const vec<string> order);
|
|
|
|
void addKBObserver(usize id);
|
|
|
|
void removeKBObserver(usize id);
|
|
|
|
private:
|
|
void loadApi(WorldPtr world);
|
|
|
|
/** Exposed to Lua, can provide a relative path, uses environment variables to resolve. */
|
|
sol::protected_function_result require(sol::this_environment env, string requirePath);
|
|
|
|
/** Loads a file with the right enviroment, needs a canonical path. */
|
|
sol::protected_function_result loadFile(string path);
|
|
|
|
Client* client;
|
|
PlayerPtr player;
|
|
double accumulatedDelta = 0;
|
|
|
|
vec<string> modOrder {};
|
|
vec<ListenerRef> listeners;
|
|
std::unordered_set<usize> kbObservers {};
|
|
std::unordered_map<string, Mod> mods {};
|
|
};
|