Something went wrong. Try again.
OpenMW is an open implementation of the Morrowind engine
Something went wrong. Try again.
2.4 kB · 69 lines
C++
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970#ifndef COMPONENTS_LUA_CONFIGURATION_H#define COMPONENTS_LUA_CONFIGURATION_H
#include <map>#include <optional>
#include <components/esm/luascripts.hpp>#include <components/esm3/refnum.hpp>#include <components/vfs/pathutil.hpp>
namespace ESM{ class ESMReader; class ESMWriter;}
namespace LuaUtil{ using ScriptIdsWithInitializationData = std::map<int, std::string_view>;
class ScriptsConfiguration { public: void init(ESM::LuaScriptsCfg, bool);
size_t size() const { return mScripts.size(); } const ESM::LuaScriptCfg& operator[](size_t id) const { return mScripts[id]; }
std::optional<int> findId(VFS::Path::NormalizedView path) const; std::optional<int> mapId(int savedId) const;
bool isCustomScript(int id) const { return mScripts[id].mFlags & ESM::LuaScriptCfg::sCustom; }
ScriptIdsWithInitializationData getMenuConf() const { return getConfByFlag(ESM::LuaScriptCfg::sMenu); } ScriptIdsWithInitializationData getGlobalConf() const { return getConfByFlag(ESM::LuaScriptCfg::sGlobal); } ScriptIdsWithInitializationData getPlayerConf() const { return getConfByFlag(ESM::LuaScriptCfg::sPlayer); } ScriptIdsWithInitializationData getLoadConf() const { return getConfByFlag(ESM::LuaScriptCfg::sLoad); } ScriptIdsWithInitializationData getLocalConf( uint32_t type, const ESM::RefId& recordId, ESM::RefNum refnum) const;
void read(ESM::ESMReader&); void write(ESM::ESMWriter&) const;
private: ScriptIdsWithInitializationData getConfByFlag(ESM::LuaScriptCfg::Flags flag) const;
std::vector<ESM::LuaScriptCfg> mScripts; std::map<VFS::Path::Normalized, int, std::less<>> mPathToIndex;
struct DetailedConf { int mScriptId; bool mAttach; std::string_view mInitializationData; }; std::map<uint32_t, std::vector<int>> mScriptsPerType; std::map<ESM::RefId, std::vector<DetailedConf>, std::less<>> mScriptsPerRecordId; std::map<ESM::RefNum, std::vector<DetailedConf>> mScriptsPerRefNum; std::map<int, int> mScriptIdMapping; };
// Parse ESM::LuaScriptsCfg from text and add to `cfg`. void parseOMWScripts(ESM::LuaScriptsCfg& cfg, std::string_view data);
std::string scriptCfgToString(const ESM::LuaScriptCfg& script);
}
#endif // COMPONENTS_LUA_CONFIGURATION_H