diff options
author | Jack <66967891+ASpoonPlaysGames@users.noreply.github.com> | 2024-09-07 21:10:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-07 22:10:28 +0200 |
commit | 160f503bc81bffdef6dbaa16eec7c73fccef0eee (patch) | |
tree | 8d92b3ad01cd8b17f456e997126bfe44430d5044 /primedev/mods/modmanager.h | |
parent | dab57649caef0f2bea82d5cd2a7d4729e4b0bd19 (diff) | |
download | NorthstarLauncher-160f503bc81bffdef6dbaa16eec7c73fccef0eee.tar.gz NorthstarLauncher-160f503bc81bffdef6dbaa16eec7c73fccef0eee.zip |
Big rpak loading refactor (#766)v1.28.0-rc3v1.28.0-rc2
This reworks how rpaks are loaded, unloaded and tracked.
It allows for rpak reloading between map loads, meaning that skins and map overhauls could be enabled and disabled on the fly.
Previous methods of loading rpaks still work.
Diffstat (limited to 'primedev/mods/modmanager.h')
-rw-r--r-- | primedev/mods/modmanager.h | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/primedev/mods/modmanager.h b/primedev/mods/modmanager.h index 95a8fe12..7859d618 100644 --- a/primedev/mods/modmanager.h +++ b/primedev/mods/modmanager.h @@ -8,6 +8,7 @@ #include <vector> #include <filesystem> #include <unordered_set> +#include <regex> namespace fs = std::filesystem; @@ -19,6 +20,8 @@ const std::string COMPILED_ASSETS_SUFFIX = "\\runtime\\compiled"; const std::set<std::string> MODS_BLACKLIST = {"Mod Settings"}; +class Mod; + struct ModConVar { public: @@ -71,9 +74,22 @@ public: struct ModRpakEntry { public: - bool m_bAutoLoad; - std::string m_sPakName; - std::string m_sLoadAfterPak; + ModRpakEntry(Mod& parent) + : m_parent(parent) + , m_loadRegex("^thisMatchesNothing^") // discord couldnt give me a funny string + { + } + + Mod& m_parent; + std::string m_pakName; + std::regex m_loadRegex; + + // these exist purely for backwards compatibility, i don't really like them anymore + + // Preload, loads before the first rpak is loaded + bool m_preload = false; + // Postload, this rpak depends on an rpak with this hash + size_t m_dependentPakHash; }; class Mod @@ -120,11 +136,12 @@ public: std::string Pdiff; // only need one per mod std::vector<ModRpakEntry> Rpaks; - std::unordered_map<std::string, std::string> - RpakAliases; // paks we alias to other rpaks, e.g. to load sp_crashsite paks on the map mp_crashsite - std::vector<size_t> StarpakPaths; // starpaks that this mod contains + // paks we alias to other rpaks, e.g. to load sp_crashsite paks on the map mp_crashsite + std::unordered_map<std::string, std::string> RpakAliases; + // starpaks that this mod contains // there seems to be no nice way to get the rpak that is causing the load of a starpak? // hashed with STR_HASH + std::vector<size_t> StarpakPaths; std::unordered_map<std::string, std::string> DependencyConstants; std::vector<std::string> PluginDependencyConstants; |