From 13e9a76732844d8ea013f5e17ba71d871063e3c9 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 4 Jul 2016 18:26:36 +0100 Subject: [PATCH] force a object repo reload if language changes --- src/editor.c | 3 +++ src/object/ObjectRepository.cpp | 14 ++++++++++---- src/object/ObjectRepository.h | 1 + 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/editor.c b/src/editor.c index 2483101076..28adee5d2d 100644 --- a/src/editor.c +++ b/src/editor.c @@ -60,6 +60,7 @@ void editor_load() audio_pause_sounds(); audio_unpause_sounds(); object_unload_all(); + object_list_load(); map_init(150); banner_init(); reset_park_entrances(); @@ -146,6 +147,7 @@ void trackdesigner_load() gScreenAge = 0; object_unload_all(); + object_list_load(); map_init(150); set_all_land_owned(); banner_init(); @@ -184,6 +186,7 @@ void trackmanager_load() gScreenAge = 0; object_unload_all(); + object_list_load(); map_init(150); set_all_land_owned(); banner_init(); diff --git a/src/object/ObjectRepository.cpp b/src/object/ObjectRepository.cpp index abc7264cd7..04ca902f2d 100644 --- a/src/object/ObjectRepository.cpp +++ b/src/object/ObjectRepository.cpp @@ -46,11 +46,12 @@ extern "C" #include "../util/sawyercoding.h" } -constexpr uint16 OBJECT_REPOSITORY_VERSION = 8; +constexpr uint16 OBJECT_REPOSITORY_VERSION = 9; struct ObjectRepositoryHeader { uint16 Version; + uint16 LanguageId; uint32 TotalFiles; uint64 TotalFileSize; uint32 FileDateModifiedChecksum; @@ -96,6 +97,7 @@ class ObjectRepository : public IObjectRepository std::vector _items; QueryDirectoryResult _queryDirectoryResult; ObjectEntryMap _itemMap; + uint16 _languageId; public: ~ObjectRepository() @@ -103,7 +105,7 @@ public: ClearItems(); } - void LoadOrConstruct() + void LoadOrConstruct() override { ClearItems(); @@ -117,6 +119,8 @@ public: if (!Load()) { + _languageId = gCurrentLanguage; + Construct(); Save(); } @@ -310,6 +314,7 @@ private: auto header = fs.ReadValue(); if (header.Version == OBJECT_REPOSITORY_VERSION && + header.LanguageId == gCurrentLanguage && header.TotalFiles == _queryDirectoryResult.TotalFiles && header.TotalFileSize == _queryDirectoryResult.TotalFileSize && header.FileDateModifiedChecksum == _queryDirectoryResult.FileDateModifiedChecksum && @@ -344,6 +349,7 @@ private: // Write header ObjectRepositoryHeader header; header.Version = OBJECT_REPOSITORY_VERSION; + header.LanguageId = _languageId; header.TotalFiles = _queryDirectoryResult.TotalFiles; header.TotalFileSize = _queryDirectoryResult.TotalFileSize; header.FileDateModifiedChecksum = _queryDirectoryResult.FileDateModifiedChecksum; @@ -571,7 +577,6 @@ IObjectRepository * GetObjectRepository() if (_objectRepository == nullptr) { _objectRepository = new ObjectRepository(); - _objectRepository->LoadOrConstruct(); } return _objectRepository; } @@ -605,7 +610,8 @@ extern "C" void object_list_load() { - IObjectRepository * objRepo = GetObjectRepository(); + IObjectRepository * objectRepository = GetObjectRepository(); + objectRepository->LoadOrConstruct(); } bool object_load_chunk(int groupIndex, const rct_object_entry * entry, int * outGroupIndex) diff --git a/src/object/ObjectRepository.h b/src/object/ObjectRepository.h index 21620e4209..77db1c82d4 100644 --- a/src/object/ObjectRepository.h +++ b/src/object/ObjectRepository.h @@ -62,6 +62,7 @@ interface IObjectRepository { virtual ~IObjectRepository() { } + virtual void LoadOrConstruct() abstract; virtual const size_t GetNumObjects() const abstract; virtual const ObjectRepositoryItem * GetObjects() const abstract; virtual const ObjectRepositoryItem * FindObject(const utf8 * name) const abstract;