RigsofRods
Soft-body Physics Simulation
|
A content database MOTIVATION: RoR users usually have A LOT of content installed. More...
#include <CacheSystem.h>
Public Types | |
typedef std::map< int, Ogre::String > | CategoryIdNameMap |
Public Member Functions | |
CacheSystem () | |
const std::vector< CacheEntryPtr > & | GetEntries () const |
const CategoryIdNameMap & | GetCategories () const |
Ogre::String | GetPrettyName (Ogre::String fname) |
std::string | ActorTypeToName (ActorType driveable) |
const std::vector< std::string > & | GetContentDirs () const |
Startup | |
void | LoadModCache (CacheValidity validity) |
bool | IsModCacheLoaded () |
Lookups | |
CacheEntryPtr | FindEntryByFilename (RoR::LoaderType type, bool partial, const std::string &_filename_maybe_bundlequalified) |
Returns NULL if none found; "Bundle-qualified" format also specifies the ZIP/directory in modcache, i.e. "mybundle.zip:myactor.truck". More... | |
CacheEntryPtr | GetEntryByNumber (int modid) |
CacheEntryPtr | FetchSkinByName (std::string const &skin_name) |
size_t | Query (CacheQuery &query) |
Loading | |
void | LoadResource (CacheEntryPtr &t) |
Loads the associated resource bundle if not already done. More... | |
void | ReLoadResource (CacheEntryPtr &t) |
Forces reloading the associated bundle. More... | |
void | UnLoadResource (CacheEntryPtr &t) |
Unloads associated bundle, destroying all spawned actors. More... | |
void | LoadSupplementaryDocuments (CacheEntryPtr &t) |
Loads the associated .truck*, .skin and .tuneup files. More... | |
void | LoadAssetPack (CacheEntryPtr &t_dest, Ogre::String const &assetpack_filename) |
Adds asset pack to the requesting cache entry's resource group. More... | |
Projects | |
CacheEntryPtr | CreateProject (CreateProjectRequest *request) |
Creates subdirectory in 'My Games\Rigs of Rods\projects', pre-populates it with files and adds modcache entry. More... | |
void | ModifyProject (ModifyProjectRequest *request) |
void | DeleteProject (CacheEntryPtr &entry) |
Private Member Functions | |
CacheValidity | EvaluateCacheValidity () |
void | WriteCacheFileJson () |
void | ExportEntryToJson (rapidjson::Value &j_entries, rapidjson::Document &j_doc, CacheEntryPtr const &entry) |
CacheValidity | LoadCacheFileJson () |
void | ImportEntryFromJson (rapidjson::Value &j_entry, CacheEntryPtr &out_entry) |
void | ParseZipArchives (Ogre::String group) |
bool | ParseKnownFiles (Ogre::String group) |
void | ParseSingleZip (Ogre::String path) |
void | ClearCache () |
void | PruneCache () |
void | ClearResourceGroups () |
void | AddFile (Ogre::String group, Ogre::FileInfo f, Ogre::String ext) |
void | DetectDuplicates () |
void | GenerateHashFromFilenames () |
For quick detection of added/removed content. More... | |
void | GenerateFileCache (CacheEntryPtr &entry, Ogre::String group) |
void | RemoveFileCache (CacheEntryPtr &entry) |
bool | Match (size_t &out_score, std::string data, std::string const &query, size_t) |
bool | IsPathContentDirRoot (const std::string &path) const |
Document loading helpers | |
void | LoadAssociatedSkinDef (CacheEntryPtr &cache_entry) |
Loads+parses the .skin file and updates all related CacheEntries. More... | |
void | LoadAssociatedTuneupDef (CacheEntryPtr &cache_entry) |
Loads+parses the .tuneup file and updates all related CacheEntries. More... | |
Cache update helpers | |
void | FillTerrainDetailInfo (CacheEntryPtr &entry, Ogre::DataStreamPtr ds, Ogre::String fname) |
void | FillTruckDetailInfo (CacheEntryPtr &entry, Ogre::DataStreamPtr ds, Ogre::String fname, Ogre::String group) |
void | FillSkinDetailInfo (CacheEntryPtr &entry, std::shared_ptr< SkinDef > &skin_def) |
void | FillAddonPartDetailInfo (CacheEntryPtr &entry, Ogre::DataStreamPtr ds) |
void | FillTuneupDetailInfo (CacheEntryPtr &entry, TuneupDefPtr &tuneup_def) |
void | FillAssetPackDetailInfo (CacheEntryPtr &entry, Ogre::DataStreamPtr ds) |
Static Private Member Functions | |
static Ogre::String | StripUIDfromString (Ogre::String uidstr) |
static Ogre::String | StripSHA1fromString (Ogre::String sha1str) |
static std::string | ComposeResourceGroupName (const CacheEntryPtr &entry) |
Private Attributes | |
bool | m_loaded = false |
std::time_t | m_update_time |
Ensures that all inserted files share the same timestamp. More... | |
std::string | m_filenames_hash_loaded |
hash from cachefile, for quick update detection More... | |
std::string | m_filenames_hash_generated |
stores hash over the content, for quick update detection More... | |
std::vector< CacheEntryPtr > | m_entries |
std::vector< Ogre::String > | m_known_extensions |
the extensions we track in the cache system More... | |
std::vector< std::string > | m_content_dirs |
the various mod directories we track in the cache system More... | |
std::set< Ogre::String > | m_resource_paths |
A temporary list of existing resource paths. More... | |
std::map< int, Ogre::String > | m_categories |
Friends | |
class | ContentManager |
A content database MOTIVATION: RoR users usually have A LOT of content installed.
Traversing it all on every game startup would be a pain. HOW IT WORKS: For each recognized resource type (vehicle, terrain, skin...) an instance of 'CacheEntry' is created. These entries are persisted in file CACHE_FILE (see above) Associated media live in a "resource bundle" (ZIP archive or subdirectory) in content directory (ROR_HOME/mods) and subdirectories. If multiple CacheEntries share a bundle, the bundle is loaded only once. Each bundle has dedicated OGRE resource group. UPDATING THE CACHE: Historically it was a synchronous process which could only happen at main menu, in bulk. In October 2023 it became an ad-hoc process but all synchronous logic was kept, to be slowly phased out later. See https://github.com/RigsOfRods/rigs-of-rods/pull/3096
Definition at line 288 of file CacheSystem.h.
typedef std::map<int, Ogre::String> RoR::CacheSystem::CategoryIdNameMap |
Definition at line 292 of file CacheSystem.h.
CacheSystem::CacheSystem | ( | ) |
Definition at line 125 of file CacheSystem.cpp.
std::string CacheSystem::ActorTypeToName | ( | ActorType | driveable | ) |
|
private |
Definition at line 741 of file CacheSystem.cpp.
|
private |
Definition at line 709 of file CacheSystem.cpp.
|
private |
|
staticprivate |
Definition at line 1378 of file CacheSystem.cpp.
CacheEntryPtr CacheSystem::CreateProject | ( | CreateProjectRequest * | request | ) |
Creates subdirectory in 'My Games\Rigs of Rods\projects', pre-populates it with files and adds modcache entry.
Definition at line 1670 of file CacheSystem.cpp.
void CacheSystem::DeleteProject | ( | CacheEntryPtr & | entry | ) |
Definition at line 2052 of file CacheSystem.cpp.
|
private |
Definition at line 474 of file CacheSystem.cpp.
|
private |
Definition at line 256 of file CacheSystem.cpp.
|
private |
CacheEntryPtr CacheSystem::FetchSkinByName | ( | std::string const & | skin_name | ) |
|
private |
Definition at line 1217 of file CacheSystem.cpp.
|
private |
Definition at line 1251 of file CacheSystem.cpp.
|
private |
|
private |
Definition at line 1177 of file CacheSystem.cpp.
|
private |
Definition at line 833 of file CacheSystem.cpp.
|
private |
CacheEntryPtr CacheSystem::FindEntryByFilename | ( | RoR::LoaderType | type, |
bool | partial, | ||
const std::string & | _filename_maybe_bundlequalified | ||
) |
Returns NULL if none found; "Bundle-qualified" format also specifies the ZIP/directory in modcache, i.e. "mybundle.zip:myactor.truck".
Definition at line 184 of file CacheSystem.cpp.
|
private |
Definition at line 1059 of file CacheSystem.cpp.
|
private |
For quick detection of added/removed content.
Definition at line 1171 of file CacheSystem.cpp.
|
inline |
|
inline |
Definition at line 332 of file CacheSystem.h.
|
inline |
Definition at line 326 of file CacheSystem.h.
CacheEntryPtr CacheSystem::GetEntryByNumber | ( | int | modid | ) |
Definition at line 546 of file CacheSystem.cpp.
String CacheSystem::GetPrettyName | ( | Ogre::String | fname | ) |
|
private |
|
inline |
Definition at line 299 of file CacheSystem.h.
|
private |
Definition at line 1420 of file CacheSystem.cpp.
void CacheSystem::LoadAssetPack | ( | CacheEntryPtr & | t_dest, |
Ogre::String const & | assetpack_filename | ||
) |
Adds asset pack to the requesting cache entry's resource group.
Definition at line 1304 of file CacheSystem.cpp.
|
private |
Loads+parses the .skin file and updates all related CacheEntries.
Definition at line 1572 of file CacheSystem.cpp.
|
private |
Loads+parses the .tuneup file and updates all related CacheEntries.
Definition at line 1621 of file CacheSystem.cpp.
|
private |
Definition at line 396 of file CacheSystem.cpp.
void CacheSystem::LoadModCache | ( | CacheValidity | validity | ) |
Definition at line 151 of file CacheSystem.cpp.
void CacheSystem::LoadResource | ( | CacheEntryPtr & | t | ) |
Loads the associated resource bundle if not already done.
Definition at line 1435 of file CacheSystem.cpp.
void CacheSystem::LoadSupplementaryDocuments | ( | CacheEntryPtr & | t | ) |
Loads the associated .truck*, .skin and .tuneup files.
Definition at line 1399 of file CacheSystem.cpp.
|
private |
void CacheSystem::ModifyProject | ( | ModifyProjectRequest * | request | ) |
Definition at line 1843 of file CacheSystem.cpp.
|
private |
Definition at line 1156 of file CacheSystem.cpp.
|
private |
Definition at line 1133 of file CacheSystem.cpp.
|
private |
Definition at line 1110 of file CacheSystem.cpp.
|
private |
Definition at line 428 of file CacheSystem.cpp.
size_t CacheSystem::Query | ( | CacheQuery & | query | ) |
Definition at line 2090 of file CacheSystem.cpp.
void CacheSystem::ReLoadResource | ( | CacheEntryPtr & | t | ) |
Forces reloading the associated bundle.
Definition at line 1521 of file CacheSystem.cpp.
|
private |
Definition at line 1051 of file CacheSystem.cpp.
|
staticprivate |
|
staticprivate |
void CacheSystem::UnLoadResource | ( | CacheEntryPtr & | t | ) |
Unloads associated bundle, destroying all spawned actors.
Definition at line 1534 of file CacheSystem.cpp.
|
private |
Definition at line 683 of file CacheSystem.cpp.
|
friend |
Definition at line 290 of file CacheSystem.h.
|
private |
Definition at line 392 of file CacheSystem.h.
|
private |
the various mod directories we track in the cache system
Definition at line 390 of file CacheSystem.h.
|
private |
Definition at line 388 of file CacheSystem.h.
|
private |
stores hash over the content, for quick update detection
Definition at line 387 of file CacheSystem.h.
|
private |
hash from cachefile, for quick update detection
Definition at line 386 of file CacheSystem.h.
|
private |
the extensions we track in the cache system
Definition at line 389 of file CacheSystem.h.
|
private |
Definition at line 384 of file CacheSystem.h.
|
private |
A temporary list of existing resource paths.
Definition at line 391 of file CacheSystem.h.
|
private |
Ensures that all inserted files share the same timestamp.
Definition at line 385 of file CacheSystem.h.