From e36dc622ad84ebf04d42ce40da67c44018e71b31 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 22 Jan 2017 22:04:07 +0000 Subject: [PATCH] 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