From bf729d4796be98a3b05a92cbf1d36d12290b65a1 Mon Sep 17 00:00:00 2001 From: HumanoidSandvichDispenser Date: Mon, 16 Mar 2026 13:48:07 -0700 Subject: [PATCH] Add menu UI --- as6/EnergyBarRaygui.hpp | 15 ++++++++++----- as6/scene/DeathScene.cpp | 11 +++++------ as6/scene/DeathScene.hpp | 3 +++ as6/scene/GameplayScene.cpp | 2 +- as6/scene/GameplayScene.hpp | 2 ++ as6/scene/StartMenuScene.cpp | 21 +++++++++++++++++++-- as6/scene/StartMenuScene.hpp | 5 +++++ 7 files changed, 45 insertions(+), 14 deletions(-) diff --git a/as6/EnergyBarRaygui.hpp b/as6/EnergyBarRaygui.hpp index 8ca5c41..c2d5faa 100644 --- a/as6/EnergyBarRaygui.hpp +++ b/as6/EnergyBarRaygui.hpp @@ -30,10 +30,10 @@ inline void DrawHud(float value, int stars) { } inline void DrawMainMenu() { - GuiLabel((Rectangle){WINDOW_WIDTH / 2 - 100, WINDOW_HEIGHT / 2 - 60, 200, 40}, + GuiLabel((Rectangle){WINDOW_WIDTH / 2 - 60, WINDOW_HEIGHT / 2 - 60, 200, 40}, "GRAVITY SURFING"); - GuiLabel((Rectangle){WINDOW_WIDTH / 2 - 200, WINDOW_HEIGHT / 2, 400, 60}, + GuiLabel((Rectangle){WINDOW_WIDTH / 2 - 160, WINDOW_HEIGHT / 2, 400, 60}, "LEFT CLICK to place a black hole that lasts 1 second\n" "Each black hole costs 10 meter and does not drain over time\n" "Avoid hazards and collect stars to refill meter\n" @@ -41,11 +41,16 @@ inline void DrawMainMenu() { "Press SPACE or LEFT CLICK to start"); } +inline bool DrawMuteButton(bool muted) { + const char *label = muted ? "Audio: Muted" : "Audio: On"; + return GuiButton((Rectangle){WINDOW_WIDTH - 136, 16, 120, 28}, label); +} + inline void DrawDeathStats(int stars) { - GuiLabel((Rectangle){WINDOW_WIDTH / 2 - 150, WINDOW_HEIGHT / 2 - 40, 300, 32}, "YOU DIED"); - GuiLabel((Rectangle){WINDOW_WIDTH / 2 - 150, WINDOW_HEIGHT / 2 - 4, 300, 24}, + GuiLabel((Rectangle){WINDOW_WIDTH / 2 - 120, WINDOW_HEIGHT / 2 - 40, 300, 32}, "YOU DIED"); + GuiLabel((Rectangle){WINDOW_WIDTH / 2 - 120, WINDOW_HEIGHT / 2 - 4, 300, 24}, TextFormat("Stars Collected: %d", stars)); - GuiLabel((Rectangle){WINDOW_WIDTH / 2 - 150, WINDOW_HEIGHT / 2 + 28, 300, 20}, + GuiLabel((Rectangle){WINDOW_WIDTH / 2 - 120, WINDOW_HEIGHT / 2 + 28, 300, 20}, "Press ENTER or LEFT CLICK to retry"); } diff --git a/as6/scene/DeathScene.cpp b/as6/scene/DeathScene.cpp index 6334b00..311c175 100644 --- a/as6/scene/DeathScene.cpp +++ b/as6/scene/DeathScene.cpp @@ -7,12 +7,12 @@ void DeathScene::Update(float) { if (IsKeyPressed(KEY_ENTER)) { - manager.QueueSceneChange(); + manager.QueueSceneChange(this->isMuted); return; } if (IsKeyPressed(KEY_ESCAPE)) { - manager.QueueSceneChange(); + manager.QueueSceneChange(this->isMuted); } } @@ -24,11 +24,10 @@ void DeathScene::Draw() { if (GuiButton((Rectangle){WINDOW_WIDTH / 2 - 150, WINDOW_HEIGHT / 2 + 28, 300, 20}, "Main Menu")) { - manager.QueueSceneChange(); + manager.QueueSceneChange(this->isMuted); } - if (GuiButton((Rectangle){WINDOW_WIDTH / 2 - 150, WINDOW_HEIGHT / 2 + 60, 300, 20}, - "Retry")) { - manager.QueueSceneChange(); + if (GuiButton((Rectangle){WINDOW_WIDTH / 2 - 150, WINDOW_HEIGHT / 2 + 60, 300, 20}, "Retry")) { + manager.QueueSceneChange(this->isMuted); } } diff --git a/as6/scene/DeathScene.hpp b/as6/scene/DeathScene.hpp index a2bb548..6ac0474 100644 --- a/as6/scene/DeathScene.hpp +++ b/as6/scene/DeathScene.hpp @@ -16,9 +16,12 @@ class DeathScene : public Scene { explicit DeathScene(SceneManager &owner) : Scene(owner) {} // Alternate constructor that accepts the star count to display. explicit DeathScene(SceneManager &owner, int stars) : Scene(owner), collectedStars(stars) {} + explicit DeathScene(SceneManager &owner, int stars, bool muted) + : Scene(owner), collectedStars(stars), isMuted(muted) {} void Update(float dt) override; void Draw() override; private: int collectedStars = 0; + bool isMuted = false; }; diff --git a/as6/scene/GameplayScene.cpp b/as6/scene/GameplayScene.cpp index 29df318..69f2b78 100644 --- a/as6/scene/GameplayScene.cpp +++ b/as6/scene/GameplayScene.cpp @@ -17,7 +17,7 @@ void GameplayScene::Enter() { // Inject the collected star count into the queued DeathScene by passing it // as a constructor argument. SceneManager::QueueSceneChange supports // forwarding constructor args. - manager.QueueSceneChange(collectedCount); + manager.QueueSceneChange(collectedCount, this->isMuted); }; context.AddCollectiblePickedListener([this](Entity &collectible) { collectedCount++; diff --git a/as6/scene/GameplayScene.hpp b/as6/scene/GameplayScene.hpp index 876a070..ecf6666 100644 --- a/as6/scene/GameplayScene.hpp +++ b/as6/scene/GameplayScene.hpp @@ -20,6 +20,7 @@ class DeathScene; class GameplayScene : public Scene { public: explicit GameplayScene(SceneManager &owner) : Scene(owner) {} + explicit GameplayScene(SceneManager &owner, bool muted) : Scene(owner), isMuted(muted) {} void Enter() override; void Exit() override; void Update(float dt) override; @@ -29,4 +30,5 @@ class GameplayScene : public Scene { GameContext context; int collectedCount = 0; float meterValue = 60.0f; + bool isMuted = false; }; diff --git a/as6/scene/StartMenuScene.cpp b/as6/scene/StartMenuScene.cpp index ae1de53..a121c91 100644 --- a/as6/scene/StartMenuScene.cpp +++ b/as6/scene/StartMenuScene.cpp @@ -4,13 +4,30 @@ #include "scene/GameplayScene.hpp" #include "scene/SceneManager.hpp" +#include "raylib.h" + +void StartMenuScene::Enter() { ::SetMasterVolume(isMuted ? 0.0f : 1.0f); } + void StartMenuScene::Update(float) { - if (IsKeyPressed(KEY_ENTER) || IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) { - manager.QueueSceneChange(); + if (IsKeyPressed(KEY_M)) { + isMuted = !isMuted; + ::SetMasterVolume(isMuted ? 0.0f : 1.0f); + } + + if (IsKeyPressed(KEY_ENTER)) { + manager.QueueSceneChange(isMuted); } } void StartMenuScene::Draw() { DrawMainMenu(); + if (DrawMuteButton(isMuted)) { + isMuted = !isMuted; + ::SetMasterVolume(isMuted ? 0.0f : 1.0f); + } + + if (GuiButton((Rectangle){WINDOW_WIDTH / 2 - 150, WINDOW_HEIGHT / 2 + 80, 300, 20}, "Start Game")) { + manager.QueueSceneChange(isMuted); + } Scene::Draw(); } diff --git a/as6/scene/StartMenuScene.hpp b/as6/scene/StartMenuScene.hpp index 96bfc37..afb90b8 100644 --- a/as6/scene/StartMenuScene.hpp +++ b/as6/scene/StartMenuScene.hpp @@ -13,6 +13,11 @@ class GameplayScene; class StartMenuScene : public Scene { public: explicit StartMenuScene(SceneManager &owner) : Scene(owner) {} + explicit StartMenuScene(SceneManager &owner, bool muted) : Scene(owner), isMuted(muted) {} + void Enter() override; void Update(float dt) override; void Draw() override; + + private: + bool isMuted = false; };