diff --git a/include/AudioService.h b/include/AudioService.h index a3b9ba2..04fa67f 100644 --- a/include/AudioService.h +++ b/include/AudioService.h @@ -10,12 +10,12 @@ class AudioService : public Service { private: /** Friend to allow access to the destructor */ - friend class Service; + // friend class Service; std::optional music; EMusic currentTrack; protected: - ~AudioService(); + // ~AudioService(); public: void setMusic(EMusic music); diff --git a/include/EScreen.h b/include/EScreen.h index e3b1e20..42b42e2 100644 --- a/include/EScreen.h +++ b/include/EScreen.h @@ -11,7 +11,8 @@ enum class EScreen { GAME, PAUSE, GAMEOVER, - VICTORY + VICTORY, + CLOSE }; #endif \ No newline at end of file diff --git a/include/MainScreen.h b/include/MainScreen.h index df723be..d6d0fd9 100644 --- a/include/MainScreen.h +++ b/include/MainScreen.h @@ -9,6 +9,9 @@ class MainScreen : public Screen { private: int hoveredButton = 0; + void mouseLogic(); + void keyboardLogic(); + public: MainScreen(); ~MainScreen(); diff --git a/include/Screen.h b/include/Screen.h index 63d809c..dc576f4 100644 --- a/include/Screen.h +++ b/include/Screen.h @@ -7,8 +7,6 @@ class Screen { private: - void handleMusic(); - protected: std::vector text; diff --git a/include/StateService.h b/include/StateService.h index a0cc11a..3449bf8 100644 --- a/include/StateService.h +++ b/include/StateService.h @@ -15,6 +15,15 @@ class StateService : public Service { private: std::unique_ptr currentScreen; + + bool gameRunning = true; + + /** + * One step of the gameloop + */ + void step(); + + void handleMusic(); public: @@ -24,10 +33,6 @@ public: * Start the game loop */ void startGame(); - /** - * One step of the gameloop - */ - void step(); }; #endif \ No newline at end of file diff --git a/include/Text.h b/include/Text.h index c2081e9..4e51dc3 100644 --- a/include/Text.h +++ b/include/Text.h @@ -30,13 +30,18 @@ class Text { this->color = color; } + void setText(std::string text) { + this->text = text; + } + + Vector2 getPosition() { + return position; + } + std::string getText() { return this->text; } - void setText(std::string text) { - this->text = text; - } void draw(); }; diff --git a/src/screens/MainScreen.cpp b/src/screens/MainScreen.cpp index d6bce17..7bb1d36 100644 --- a/src/screens/MainScreen.cpp +++ b/src/screens/MainScreen.cpp @@ -2,6 +2,7 @@ #include "AssetService.h" #include "AudioService.h" #include +#include "StateService.h" MainScreen::MainScreen() { @@ -37,6 +38,42 @@ MainScreen::~MainScreen() } void MainScreen::logic() +{ + // Vector2 mouseD = GetMouseDelta(); + // std::cout << mouseD.y <= rect.x && mousePos.x <= (rect.x+rect.width) && + if (mousePos.x >= rect.x && mousePos.x <= (rect.x+rect.width) && mousePos.y >= rect.y && mousePos.y <= (rect.y + rect.height)) + { + text[hoveredButton].setColor(WHITE); + hoveredButton = i; + text[hoveredButton].setColor(RED); + break; + } + } +} + +void MainScreen::keyboardLogic() { if (IsKeyPressed(KEY_DOWN) || IsKeyPressed(KEY_UP)) { @@ -46,8 +83,21 @@ void MainScreen::logic() text[hoveredButton].setColor(RED); } - if (IsKeyPressed(KEY_ENTER)) + if (IsKeyPressed(KEY_ENTER) || IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) { std::cout << text[hoveredButton].getText() << std::endl; + std::string selectedButton = text[hoveredButton].getText(); + + + if(selectedButton == "new game") { + } + else if(selectedButton == "load game") { + } + else if(selectedButton == "tutorial") { + StateService::getInstance().setScreen(EScreen::TUTORIAL); + } + else if(selectedButton == "quit") { + StateService::getInstance().setScreen(EScreen::CLOSE); + } } } \ No newline at end of file diff --git a/src/screens/Screen.cpp b/src/screens/Screen.cpp index e3976e1..6209d13 100644 --- a/src/screens/Screen.cpp +++ b/src/screens/Screen.cpp @@ -2,17 +2,8 @@ #include "AudioService.h" #include -void Screen::handleMusic() -{ - std::optional music = AudioService::getInstance().getMusic(); - if(music.has_value()) { - UpdateMusicStream(music.value()); - } -} - void Screen::draw() { - handleMusic(); BeginDrawing(); ClearBackground(BLACK); diff --git a/src/screens/TitleScreen.cpp b/src/screens/TitleScreen.cpp index 27a7af9..5153721 100644 --- a/src/screens/TitleScreen.cpp +++ b/src/screens/TitleScreen.cpp @@ -45,7 +45,7 @@ TitleScreen::~TitleScreen() void TitleScreen::logic() { - if (IsKeyPressed(KEY_ENTER)) + if (IsKeyPressed(KEY_ENTER) || IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) { StateService::getInstance().setScreen(EScreen::MAIN); // std::cout << "Next screen!" << std::endl; diff --git a/src/services/AudioService.cpp b/src/services/AudioService.cpp index d9fa5c4..1d8db1d 100644 --- a/src/services/AudioService.cpp +++ b/src/services/AudioService.cpp @@ -1,12 +1,12 @@ #include "AudioService.h" #include "AssetService.h" -AudioService::~AudioService() -{ - if (!music.has_value()) - return; - UnloadMusicStream(music.value()); -} +// AudioService::~AudioService() +// { +// if (!music.has_value()) +// return; +// UnloadMusicStream(music.value()); +// } void AudioService::setMusic(EMusic music) { diff --git a/src/services/StateService.cpp b/src/services/StateService.cpp index 5aa9a1f..7c9c0d2 100644 --- a/src/services/StateService.cpp +++ b/src/services/StateService.cpp @@ -2,6 +2,8 @@ #include "raylib.h" #include "TitleScreen.h" #include "MainScreen.h" +#include +#include "AudioService.h" void StateService::setScreen(EScreen state) { @@ -13,6 +15,9 @@ void StateService::setScreen(EScreen state) case EScreen::MAIN: currentScreen = std::make_unique(); break; + case EScreen::CLOSE: + gameRunning = false; + break; default: currentScreen = std::make_unique(); } @@ -35,7 +40,7 @@ void StateService::startGame() emscripten_set_main_loop(step, 0, 1); #else - while (!WindowShouldClose()) + while (!WindowShouldClose() && gameRunning) { step(); } @@ -45,8 +50,18 @@ void StateService::startGame() CloseAudioDevice(); } +void StateService::handleMusic() +{ + std::optional music = AudioService::getInstance().getMusic(); + if(music.has_value()) { + UpdateMusicStream(music.value()); + } +} + void StateService::step() { + handleMusic(); currentScreen->draw(); currentScreen->logic(); -} \ No newline at end of file +} +