Introduce Scene class and handling

Co-authored-by: ζeh Matt <5415177+ZehMatt@users.noreply.github.com>
This commit is contained in:
Aaron van Geffen 2024-04-23 20:42:16 +02:00
parent be9f1a2072
commit 49b75e6606
5 changed files with 99 additions and 0 deletions

View File

@ -66,6 +66,7 @@
#include "ride/TrackDesignRepository.h"
#include "scenario/Scenario.h"
#include "scenario/ScenarioRepository.h"
#include "scenes/Scene.h"
#include "scripting/HookEngine.h"
#include "scripting/ScriptEngine.h"
#include "title/TitleScreen.h"
@ -122,6 +123,9 @@ namespace OpenRCT2
NetworkBase _network;
#endif
// Scenes
IScene* _activeScene = nullptr;
// Game states
std::unique_ptr<TitleScreen> _titleScreen;
@ -305,6 +309,20 @@ namespace OpenRCT2
return EXIT_FAILURE;
}
virtual IScene* GetActiveScene() override
{
return _activeScene;
}
void SetActiveScene(IScene* screen) override
{
if (_activeScene != nullptr)
_activeScene->Stop();
_activeScene = screen;
if (_activeScene)
_activeScene->Load();
}
void WriteLine(const std::string& s) override
{
_stdInOutConsole.WriteLine(s);

View File

@ -84,6 +84,7 @@ namespace OpenRCT2
struct IPlatformEnvironment;
struct IReplayManager;
struct IScene;
namespace Audio
{
@ -142,6 +143,10 @@ namespace OpenRCT2
#ifndef DISABLE_NETWORK
virtual NetworkBase& GetNetwork() abstract;
#endif
virtual IScene* GetActiveScene() abstract;
virtual void SetActiveScene(IScene * screen) abstract;
virtual int32_t RunOpenRCT2(int argc, const char** argv) abstract;
virtual bool Initialise() abstract;

View File

@ -511,6 +511,7 @@
<ClInclude Include="scenario\Scenario.h" />
<ClInclude Include="scenario\ScenarioRepository.h" />
<ClInclude Include="scenario\ScenarioSources.h" />
<ClInclude Include="scenes\Scene.h" />
<ClInclude Include="scripting\bindings\entity\ScGuest.hpp" />
<ClInclude Include="scripting\bindings\entity\ScLitter.hpp" />
<ClInclude Include="scripting\bindings\entity\ScPeep.hpp" />
@ -999,6 +1000,7 @@
<ClCompile Include="scenario\Scenario.cpp" />
<ClCompile Include="scenario\ScenarioRepository.cpp" />
<ClCompile Include="scenario\ScenarioSources.cpp" />
<ClCompile Include="scenes\Scene.cpp" />
<ClCompile Include="scripting\bindings\entity\ScGuest.cpp" />
<ClCompile Include="scripting\bindings\entity\ScLitter.cpp" />
<ClCompile Include="scripting\bindings\entity\ScStaff.cpp" />

View File

@ -0,0 +1,30 @@
/*****************************************************************************
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#include "Scene.h"
#include "../Context.h"
#include "../GameState.h"
using namespace OpenRCT2;
Scene::Scene(IContext& context)
: _context(context)
{
}
IContext& Scene::GetContext()
{
return _context;
}
GameState_t& Scene::GetGameState()
{
return OpenRCT2::GetGameState();
}

View File

@ -0,0 +1,44 @@
/*****************************************************************************
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#pragma once
#include "../common.h"
namespace OpenRCT2
{
struct GameState_t;
struct IContext;
struct IScene
{
public:
virtual ~IScene() = default;
virtual GameState_t& GetGameState() = 0;
virtual IContext& GetContext() = 0;
virtual void Load() = 0;
virtual void Update() = 0;
virtual void Stop() = 0;
};
class Scene : public IScene
{
public:
Scene(IContext& context);
GameState_t& GetGameState() override;
IContext& GetContext() override;
protected:
IContext& _context;
};
} // namespace OpenRCT2