Skip to content

Commit 61001f5

Browse files
committed
- refactor game over, so that it also uses the text from the game input and also is specific to the single player, since multiplayer game over has to be handled different
- also use this for the replay input
1 parent b812401 commit 61001f5

File tree

9 files changed

+39
-23
lines changed

9 files changed

+39
-23
lines changed

src/scenes/game_over/meson.build

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/scenes/meson.build

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
graphics_src_files += files('scene.cpp', 'scene.hpp', 'scene_id.hpp')
22

33
subdir('about_page')
4-
subdir('game_over')
54
subdir('main_menu')
65
subdir('multiplayer_menu')
76
subdir('play_select_menu')

src/scenes/replay_game/replay_game.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#include "replay_game.hpp"
2+
#include "../single_player_game/game_over.hpp"
3+
#include "../single_player_game/pause.hpp"
24
#include "helper/music_utils.hpp"
35
#include "manager/music_manager.hpp"
46
#include "scenes/scene.hpp"
@@ -75,9 +77,14 @@ namespace scenes {
7577
}
7678

7779
if (all_games_finished) {
80+
//TODOO(Totto): the game input we use here for the game over is not guarantteed to work, better wul dbe to get one for this system at the tart of this scene!
7881
return UpdateResult{
7982
SceneUpdate::StopUpdating,
80-
Scene::Push{ SceneId::GameOver, ui::FullScreenLayout{ m_service_provider->window() } }
83+
Scene::RawPush{ "GameOver",
84+
std::make_unique<scenes::SinglePlayerGameOver>(
85+
m_service_provider, ui::FullScreenLayout{ m_service_provider->window() },
86+
m_games.at(0)->game_input()
87+
) }
8188
};
8289
}
8390

@@ -89,11 +96,15 @@ namespace scenes {
8996
}
9097

9198
switch (next_scene) {
92-
/* case NextScene::Pause:
99+
case NextScene::Pause:
100+
//TODO(Totto): the game input we use here for the Pauseis not guarantteed to work, better wul dbe to get one for this system at the tart of this scene!
93101
return UpdateResult{
94102
SceneUpdate::StopUpdating,
95-
Scene::Push{ SceneId::Pause, ui::FullScreenLayout{ m_service_provider->window() } }
96-
}; */
103+
Scene::RawPush{ "Pause", std::make_unique<scenes::SinglePlayerPause>(
104+
m_service_provider, ui::FullScreenLayout{ m_service_provider->window() },
105+
m_games.at(0)->game_input()
106+
) }
107+
};
97108
case NextScene::Settings:
98109
return UpdateResult{
99110
SceneUpdate::StopUpdating,

src/scenes/scene.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include "scenes/scene.hpp"
22
#include "about_page/about_page.hpp"
3-
#include "game_over/game_over.hpp"
43
#include "main_menu/main_menu.hpp"
54
#include "multiplayer_menu/multiplayer_menu.hpp"
65
#include "play_select_menu/play_select_menu.hpp"
@@ -26,8 +25,6 @@ namespace scenes {
2625
return std::make_unique<MainMenu>(&service_provider, layout);
2726
case SceneId::SinglePlayerGame:
2827
return std::make_unique<SinglePlayerGame>(&service_provider, layout);
29-
case SceneId::GameOver:
30-
return std::make_unique<GameOver>(&service_provider, layout);
3128
case SceneId::SettingsMenu:
3229
return std::make_unique<SettingsMenu>(&service_provider, layout);
3330
case SceneId::AboutPage:

src/scenes/scene_id.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ enum class SceneId : u8 {
66
AboutPage,
77
AchievementsPage,
88
AIMultiPlayerGame,
9-
GameOver,
109
LocalMultiPlayerGame,
1110
MainMenu,
1211
MultiPlayerModeSelectMenu,

src/scenes/game_over/game_over.cpp renamed to src/scenes/single_player_game/game_over.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010

1111
namespace scenes {
1212

13-
GameOver::GameOver(ServiceProvider* service_provider, const ui::Layout& layout)
13+
SinglePlayerGameOver::SinglePlayerGameOver(ServiceProvider* service_provider, const ui::Layout& layout, const std::shared_ptr<input::GameInput>& game_input)
1414
: Scene{ service_provider, layout },
1515
m_text{
1616
service_provider,
1717
fmt::format(
1818
"Game Over, Press {} to continue",
19-
service_provider->input_manager().get_primary_input()->describe_navigation_event(input::NavigationEvent::BACK)
19+
game_input->underlying_input()->describe_navigation_event(input::NavigationEvent::BACK)
2020
),
2121
service_provider->font_manager().get(FontId::Default),
2222
Color::white(),
@@ -26,15 +26,15 @@ namespace scenes {
2626
ui::Alignment{ ui::AlignmentHorizontal::Middle, ui::AlignmentVertical::Center },
2727
layout,
2828
true
29-
} {
29+
} ,m_game_input{game_input}{
3030
service_provider->music_manager()
3131
.load_and_play_music(
3232
utils::get_assets_folder() / "music" / utils::get_supported_music_extension("05. Results")
3333
)
3434
.and_then(utils::log_error);
3535
}
3636

37-
[[nodiscard]] Scene::UpdateResult GameOver::update() {
37+
[[nodiscard]] Scene::UpdateResult SinglePlayerGameOver::update() {
3838
if (m_should_exit) {
3939
return UpdateResult{
4040
SceneUpdate::StopUpdating,
@@ -44,12 +44,15 @@ namespace scenes {
4444
return UpdateResult{ SceneUpdate::StopUpdating, helper::nullopt };
4545
}
4646

47-
void GameOver::render(const ServiceProvider& service_provider) {
47+
void SinglePlayerGameOver::render(const ServiceProvider& service_provider) {
4848
service_provider.renderer().draw_rect_filled(get_layout().get_rect(), Color::black(180));
4949
m_text.render(service_provider);
5050
}
5151

52-
bool GameOver::handle_event(const std::shared_ptr<input::InputManager>& input_manager, const SDL_Event& event) {
52+
bool SinglePlayerGameOver::handle_event(
53+
const std::shared_ptr<input::InputManager>& input_manager,
54+
const SDL_Event& event
55+
) {
5356

5457
const auto navigation_event = input_manager->get_navigation_event(event);
5558

src/scenes/game_over/game_over.hpp renamed to src/scenes/single_player_game/game_over.hpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,18 @@
55

66
namespace scenes {
77

8-
struct GameOver : public Scene {
8+
struct SinglePlayerGameOver : public Scene {
99
private:
1010
bool m_should_exit{ false };
1111
ui::Label m_text;
12+
std::shared_ptr<input::GameInput> m_game_input;
1213

1314
public:
14-
explicit GameOver(ServiceProvider* service_provider, const ui::Layout& layout);
15+
explicit SinglePlayerGameOver(
16+
ServiceProvider* service_provider,
17+
const ui::Layout& layout,
18+
const std::shared_ptr<input::GameInput>& game_input
19+
);
1520

1621
[[nodiscard]] UpdateResult update() override;
1722

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
graphics_src_files += files(
22
'pause.cpp',
33
'pause.hpp',
4+
'game_over.cpp',
5+
'game_over.hpp',
46
'single_player_game.cpp',
57
'single_player_game.hpp',
68
)

src/scenes/single_player_game/single_player_game.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "manager/music_manager.hpp"
1010
#include "scenes/scene.hpp"
1111
#include "scenes/settings_menu/settings_menu.hpp"
12+
#include "scenes/single_player_game/game_over.hpp"
1213
#include "scenes/single_player_game/pause.hpp"
1314

1415
namespace scenes {
@@ -64,7 +65,11 @@ namespace scenes {
6465
if (m_game->is_game_finished()) {
6566
return UpdateResult{
6667
SceneUpdate::StopUpdating,
67-
Scene::Push{ SceneId::GameOver, ui::FullScreenLayout{ m_service_provider->window() } }
68+
Scene::RawPush{ "GameOver",
69+
std::make_unique<scenes::SinglePlayerGameOver>(
70+
m_service_provider, ui::FullScreenLayout{ m_service_provider->window() },
71+
m_game->game_input()
72+
) }
6873
};
6974
}
7075

0 commit comments

Comments
 (0)