Make -force-scan command run without starting game

reformat object_list_load to use parameter instead of external flag boolean

remove object_list_load_force_scan, call directly from RootCommands
This commit is contained in:
wolfreak99 2016-10-29 09:32:55 -04:00
parent 5cd6c864a5
commit 6ba51e36da
4 changed files with 18 additions and 21 deletions

View File

@ -190,7 +190,7 @@ extern "C"
// TODO Ideally we want to delay this until we show the title so that we can // TODO Ideally we want to delay this until we show the title so that we can
// still open the game window and draw a progress screen for the creation // still open the game window and draw a progress screen for the creation
// of the object cache. // of the object cache.
objRepo->LoadOrConstruct(); objRepo->LoadOrConstruct(false);
// TODO Like objects, this can take a while if there are a lot of track designs // TODO Like objects, this can take a while if there are a lot of track designs
// its also really something really we might want to do in the background // its also really something really we might want to do in the background

View File

@ -23,7 +23,6 @@ extern "C"
#include "../config.h" #include "../config.h"
#include "../OpenRCT2.h" #include "../OpenRCT2.h"
#include "../platform/crash.h" #include "../platform/crash.h"
#include "../object/ObjectRepository.h"
} }
#include "../core/Console.hpp" #include "../core/Console.hpp"
@ -31,6 +30,7 @@ extern "C"
#include "../core/Path.hpp" #include "../core/Path.hpp"
#include "../core/String.hpp" #include "../core/String.hpp"
#include "../network/network.h" #include "../network/network.h"
#include "../object/ObjectRepository.h"
#include "CommandLine.hpp" #include "CommandLine.hpp"
#ifdef USE_BREAKPAD #ifdef USE_BREAKPAD
@ -196,7 +196,14 @@ exitcode_t CommandLine::HandleCommandDefault()
gOpenRCT2Headless = _headless; gOpenRCT2Headless = _headless;
gOpenRCT2SilentBreakpad = _silentBreakpad || _headless; gOpenRCT2SilentBreakpad = _silentBreakpad || _headless;
object_repository_force_scan_flag = _forceScan;
if (_forceScan)
{
IObjectRepository * objectRepository = GetObjectRepository();
objectRepository->LoadOrConstruct(true);
result = EXITCODE_OK;
}
if (_userDataPath != nullptr) if (_userDataPath != nullptr)
{ {

View File

@ -112,7 +112,7 @@ public:
ClearItems(); ClearItems();
} }
void LoadOrConstruct() override void LoadOrConstruct(bool forceScan) override
{ {
ClearItems(); ClearItems();
@ -123,8 +123,12 @@ public:
QueryDirectory(&_queryDirectoryResult, rct2Path); QueryDirectory(&_queryDirectoryResult, rct2Path);
QueryDirectory(&_queryDirectoryResult, openrct2Path); QueryDirectory(&_queryDirectoryResult, openrct2Path);
if (!Load()) if (forceScan || !Load())
{ {
if (forceScan)
{
Console::WriteLine("Forcing object repository scan.");
}
_languageId = gCurrentLanguage; _languageId = gCurrentLanguage;
Construct(); Construct();
@ -300,16 +304,6 @@ private:
bool Load() bool Load()
{ {
const std::string &path = _env->GetFilePath(PATHID::CACHE_OBJECTS); const std::string &path = _env->GetFilePath(PATHID::CACHE_OBJECTS);
// Override if force-flag is set.
if (object_repository_force_scan_flag)
{
Console::WriteLine("Forcing object repository scan.");
// This should only be called once, so set back to false.
object_repository_force_scan_flag = false;
return false;
}
try try
{ {
auto fs = FileStream(path, FILE_MODE_OPEN); auto fs = FileStream(path, FILE_MODE_OPEN);
@ -659,8 +653,6 @@ static int GetObjectEntryIndex(uint8 objectType, uint8 entryIndex)
extern "C" extern "C"
{ {
bool object_repository_force_scan_flag = false;
rct_object_entry * object_list_find(rct_object_entry * entry) rct_object_entry * object_list_find(rct_object_entry * entry)
{ {
IObjectRepository * objRepo = GetObjectRepository(); IObjectRepository * objRepo = GetObjectRepository();
@ -678,7 +670,7 @@ extern "C"
void object_list_load() void object_list_load()
{ {
IObjectRepository * objectRepository = GetObjectRepository(); IObjectRepository * objectRepository = GetObjectRepository();
objectRepository->LoadOrConstruct(); objectRepository->LoadOrConstruct(false);
IObjectManager * objectManager = GetObjectManager(); IObjectManager * objectManager = GetObjectManager();
objectManager->UnloadAll(); objectManager->UnloadAll();

View File

@ -63,7 +63,7 @@ interface IObjectRepository
{ {
virtual ~IObjectRepository() { } virtual ~IObjectRepository() { }
virtual void LoadOrConstruct() abstract; virtual void LoadOrConstruct(bool forceScan) abstract;
virtual size_t GetNumObjects() const abstract; virtual size_t GetNumObjects() const abstract;
virtual const ObjectRepositoryItem * GetObjects() const abstract; virtual const ObjectRepositoryItem * GetObjects() const abstract;
virtual const ObjectRepositoryItem * FindObject(const utf8 * name) const abstract; virtual const ObjectRepositoryItem * FindObject(const utf8 * name) const abstract;
@ -88,8 +88,6 @@ extern "C"
{ {
#endif #endif
extern bool object_repository_force_scan_flag;
size_t object_repository_get_items_count(); size_t object_repository_get_items_count();
const ObjectRepositoryItem * object_repository_get_items(); const ObjectRepositoryItem * object_repository_get_items();
const ObjectRepositoryItem * object_repository_find_object_by_entry(const rct_object_entry * entry); const ObjectRepositoryItem * object_repository_find_object_by_entry(const rct_object_entry * entry);