From d5f2ea814ad3f7322f8174fe0961f1e072a9b52a Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 22 Jan 2017 21:57:14 +0000 Subject: [PATCH 1/2] Use scenario repository to load SFMM in title sequence --- src/openrct2/OpenRCT2.cpp | 3 ++- src/openrct2/title/TitleSequencePlayer.cpp | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/openrct2/OpenRCT2.cpp b/src/openrct2/OpenRCT2.cpp index 506da03804..855c07d679 100644 --- a/src/openrct2/OpenRCT2.cpp +++ b/src/openrct2/OpenRCT2.cpp @@ -152,7 +152,7 @@ extern "C" IObjectRepository * objRepo = CreateObjectRepository(OpenRCT2::_env); ITrackDesignRepository * tdRepo = CreateTrackDesignRepository(OpenRCT2::_env); - CreateScenarioRepository(OpenRCT2::_env); + IScenarioRepository * scenarioRepo = CreateScenarioRepository(OpenRCT2::_env); if (!language_open(gConfigGeneral.language)) { @@ -174,6 +174,7 @@ extern "C" // as its not required until the player wants to place a new ride. tdRepo->Scan(); + scenarioRepo->Scan(); TitleSequenceManager::Scan(); if (!gOpenRCT2Headless) diff --git a/src/openrct2/title/TitleSequencePlayer.cpp b/src/openrct2/title/TitleSequencePlayer.cpp index c231801736..6d23f40ed4 100644 --- a/src/openrct2/title/TitleSequencePlayer.cpp +++ b/src/openrct2/title/TitleSequencePlayer.cpp @@ -39,6 +39,8 @@ extern "C" class TitleSequencePlayer final : public ITitleSequencePlayer { private: + static constexpr const char * SFMM_FILENAME = "Six Flags Magic Mountain.SC6"; + uint32 _sequenceId = 0; TitleSequence * _sequence = nullptr; sint32 _position = 0; @@ -231,7 +233,15 @@ private: break; case TITLE_SCRIPT_LOADMM: { - const utf8 * path = get_file_path(PATH_ID_SIXFLAGS_MAGICMOUNTAIN); + IScenarioRepository * scenarioRepo = GetScenarioRepository(); + const scenario_index_entry * entry = scenarioRepo->GetByFilename(SFMM_FILENAME); + if (entry == nullptr) + { + Console::Error::WriteLine("%s not found.", SFMM_FILENAME); + return false; + } + + const utf8 * path = entry->path; if (!LoadParkFromFile(path)) { Console::Error::WriteLine("Failed to load: \"%s\" for the title sequence.", path); From e36dc622ad84ebf04d42ce40da67c44018e71b31 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 22 Jan 2017 22:04:07 +0000 Subject: [PATCH 2/2] Pass scenario repository dependency to TitleSequencePlayer --- src/openrct2/title/TitleScreen.cpp | 4 +++- src/openrct2/title/TitleSequencePlayer.cpp | 22 +++++++++++++++------- src/openrct2/title/TitleSequencePlayer.h | 4 +++- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/openrct2/title/TitleScreen.cpp b/src/openrct2/title/TitleScreen.cpp index a44e10c20e..1b0628b972 100644 --- a/src/openrct2/title/TitleScreen.cpp +++ b/src/openrct2/title/TitleScreen.cpp @@ -17,6 +17,7 @@ #include "../core/Console.hpp" #include "../network/network.h" #include "../OpenRCT2.h" +#include "../scenario/ScenarioRepository.h" #include "TitleScreen.h" #include "TitleSequence.h" #include "TitleSequenceManager.h" @@ -59,7 +60,8 @@ static void TitleInitialise() { if (_sequencePlayer == nullptr) { - _sequencePlayer = CreateTitleSequencePlayer(); + IScenarioRepository * scenarioRepository = GetScenarioRepository(); + _sequencePlayer = CreateTitleSequencePlayer(scenarioRepository); } size_t seqId = title_sequence_manager_get_index_for_config_id(gConfigInterface.current_title_sequence_preset); if (seqId == SIZE_MAX) diff --git a/src/openrct2/title/TitleSequencePlayer.cpp b/src/openrct2/title/TitleSequencePlayer.cpp index 6d23f40ed4..ebbd3f0ca8 100644 --- a/src/openrct2/title/TitleSequencePlayer.cpp +++ b/src/openrct2/title/TitleSequencePlayer.cpp @@ -18,6 +18,7 @@ #include #include "../core/Console.hpp" #include "../core/Exception.hpp" +#include "../core/Guard.hpp" #include "../core/Math.hpp" #include "../core/Path.hpp" #include "../core/String.hpp" @@ -41,6 +42,8 @@ class TitleSequencePlayer final : public ITitleSequencePlayer private: static constexpr const char * SFMM_FILENAME = "Six Flags Magic Mountain.SC6"; + IScenarioRepository * _scenarioRepository = nullptr; + uint32 _sequenceId = 0; TitleSequence * _sequence = nullptr; sint32 _position = 0; @@ -51,6 +54,13 @@ private: rct_xy32 _viewCentreLocation = { 0 }; public: + TitleSequencePlayer(IScenarioRepository * scenarioRepository) + { + Guard::ArgumentNotNull(scenarioRepository); + + _scenarioRepository = scenarioRepository; + } + ~TitleSequencePlayer() override { Eject(); @@ -233,8 +243,7 @@ private: break; case TITLE_SCRIPT_LOADMM: { - IScenarioRepository * scenarioRepo = GetScenarioRepository(); - const scenario_index_entry * entry = scenarioRepo->GetByFilename(SFMM_FILENAME); + const scenario_index_entry * entry = _scenarioRepository->GetByFilename(SFMM_FILENAME); if (entry == nullptr) { Console::Error::WriteLine("%s not found.", SFMM_FILENAME); @@ -299,11 +308,10 @@ private: } const utf8 * path = nullptr; - IScenarioRepository * scenarioRepo = GetScenarioRepository(); - size_t numScenarios = scenarioRepo->GetCount(); + size_t numScenarios = _scenarioRepository->GetCount(); for (size_t i = 0; i < numScenarios; i++) { - const scenario_index_entry * scenario = scenarioRepo->GetByIndex(i); + const scenario_index_entry * scenario = _scenarioRepository->GetByIndex(i); if (scenario->source_index == sourceDesc.index) { path = scenario->path; @@ -442,9 +450,9 @@ private: } }; -ITitleSequencePlayer * CreateTitleSequencePlayer() +ITitleSequencePlayer * CreateTitleSequencePlayer(IScenarioRepository * scenarioRepository) { - return new TitleSequencePlayer(); + return new TitleSequencePlayer(scenarioRepository); } extern "C" diff --git a/src/openrct2/title/TitleSequencePlayer.h b/src/openrct2/title/TitleSequencePlayer.h index ef6f6f18ce..15ab54f83d 100644 --- a/src/openrct2/title/TitleSequencePlayer.h +++ b/src/openrct2/title/TitleSequencePlayer.h @@ -20,6 +20,8 @@ #ifdef __cplusplus +interface IScenarioRepository; + interface ITitleSequencePlayer { virtual ~ITitleSequencePlayer() = default; @@ -33,7 +35,7 @@ interface ITitleSequencePlayer virtual void Eject() abstract; }; -ITitleSequencePlayer * CreateTitleSequencePlayer(); +ITitleSequencePlayer * CreateTitleSequencePlayer(IScenarioRepository * scenarioRepository); #else