22#include < bave/imgui/im_text.hpp>
33#include < spaced/assets/asset_list.hpp>
44#include < spaced/scenes/game.hpp>
5- #include < spaced/scenes/home .hpp>
5+ #include < spaced/scenes/menu .hpp>
66#include < spaced/services/scene_switcher.hpp>
77#include < spaced/services/stats.hpp>
88#include < spaced/services/styles.hpp>
@@ -23,11 +23,13 @@ using bave::Ptr;
2323using bave::Seconds;
2424using bave::Shader;
2525
26- auto Game ::get_manifest () -> AssetManifest {
26+ auto GameScene ::get_manifest () -> AssetManifest {
2727 return AssetManifest{
2828 .audio_clips =
2929 {
3030 " sfx/bubble.wav" ,
31+ " music/menu.mp3" ,
32+ " music/game.mp3" ,
3133 },
3234 .particle_emitters =
3335 {
@@ -38,7 +40,7 @@ auto Game::get_manifest() -> AssetManifest {
3840 };
3941}
4042
41- Game::Game (App& app, Services const & services) : Scene(app, services, " Game" ), m_save(&app), m_world(&services, this ) {
43+ GameScene::GameScene (App& app, Services const & services) : Scene(app, services, " Game" ), m_save(&app), m_world(&services, this ) {
4244 clear_colour = services.get <Styles>().rgbas [" mocha" ];
4345
4446 auto hud = std::make_unique<Hud>(services);
@@ -49,19 +51,19 @@ Game::Game(App& app, Services const& services) : Scene(app, services, "Game"), m
4951 ++services.get <Stats>().game .play_count ;
5052}
5153
52- void Game ::on_focus (FocusChange const & focus_change) { m_world.player .on_focus (focus_change); }
54+ void GameScene ::on_focus (FocusChange const & focus_change) { m_world.player .on_focus (focus_change); }
5355
54- void Game ::on_key (KeyInput const & key_input) {
56+ void GameScene ::on_key (KeyInput const & key_input) {
5557 if (key_input.key == Key::eEscape && key_input.action == Action::eRelease && key_input.mods == KeyMods{}) {
56- get_services ().get <ISceneSwitcher>().switch_to <Home >();
58+ get_services ().get <ISceneSwitcher>().switch_to <MenuScene >();
5759 }
5860}
5961
60- void Game ::on_move (PointerMove const & pointer_move) { m_world.player .on_move (pointer_move); }
62+ void GameScene ::on_move (PointerMove const & pointer_move) { m_world.player .on_move (pointer_move); }
6163
62- void Game ::on_tap (PointerTap const & pointer_tap) { m_world.player .on_tap (pointer_tap); }
64+ void GameScene ::on_tap (PointerTap const & pointer_tap) { m_world.player .on_tap (pointer_tap); }
6365
64- void Game ::tick (Seconds const dt) {
66+ void GameScene ::tick (Seconds const dt) {
6567 auto ft = bave::DeltaTime{};
6668
6769 m_world.tick (dt);
@@ -70,19 +72,19 @@ void Game::tick(Seconds const dt) {
7072 if constexpr (bave::debug_v) { inspect (dt, ft.update ()); }
7173}
7274
73- void Game ::render (Shader& shader) const { m_world.draw (shader); }
75+ void GameScene ::render (Shader& shader) const { m_world.draw (shader); }
7476
75- void Game ::add_score (std::int64_t const score) {
77+ void GameScene ::add_score (std::int64_t const score) {
7678 m_score += score;
7779 m_hud->set_score (m_score);
7880 update_hi_score ();
7981}
8082
81- void Game ::on_game_over () {
83+ void GameScene ::on_game_over () {
8284 auto dci = ui::DialogCreateInfo{
8385 .size = {600 .0f , 200 .0f },
8486 .content_text = " GAME OVER" ,
85- .main_button = {.text = " RESTART" , .callback = [this ] { get_services ().get <ISceneSwitcher>().switch_to <Game >(); }},
87+ .main_button = {.text = " RESTART" , .callback = [this ] { get_services ().get <ISceneSwitcher>().switch_to <GameScene >(); }},
8688 .second_button = {.text = " QUIT" , .callback = [this ] { get_app ().shutdown (); }},
8789 };
8890
@@ -91,13 +93,13 @@ void Game::on_game_over() {
9193 push_view (std::move (dialog));
9294}
9395
94- void Game ::update_hi_score () {
96+ void GameScene ::update_hi_score () {
9597 if (m_score <= m_save.get_hi_score ()) { return ; }
9698 m_save.set_hi_score (m_score);
9799 m_hud->set_hi_score (m_save.get_hi_score ());
98100}
99101
100- void Game ::inspect (Seconds const dt, Seconds const frame_time) {
102+ void GameScene ::inspect (Seconds const dt, Seconds const frame_time) {
101103 if constexpr (bave::imgui_v) {
102104 m_debug.fps .tick (dt);
103105
@@ -118,6 +120,9 @@ void Game::inspect(Seconds const dt, Seconds const frame_time) {
118120 im_text (" fps: {}" , m_debug.fps .fps );
119121 ImGui::SliderInt (" fps limit" , &m_debug.fps .limit , 5 , 1000 );
120122 ImGui::Checkbox (" fps lock" , &m_debug.fps .lock );
123+
124+ ImGui::Separator ();
125+ if (ImGui::Button (" reload scene" )) { get_services ().get <ISceneSwitcher>().switch_to <GameScene>(); }
121126 }
122127 ImGui::End ();
123128
0 commit comments