Add menu UI
parent
15525c2278
commit
bf729d4796
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@
|
|||
|
||||
void DeathScene::Update(float) {
|
||||
if (IsKeyPressed(KEY_ENTER)) {
|
||||
manager.QueueSceneChange<GameplayScene>();
|
||||
manager.QueueSceneChange<GameplayScene>(this->isMuted);
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsKeyPressed(KEY_ESCAPE)) {
|
||||
manager.QueueSceneChange<StartMenuScene>();
|
||||
manager.QueueSceneChange<StartMenuScene>(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<StartMenuScene>();
|
||||
manager.QueueSceneChange<StartMenuScene>(this->isMuted);
|
||||
}
|
||||
|
||||
if (GuiButton((Rectangle){WINDOW_WIDTH / 2 - 150, WINDOW_HEIGHT / 2 + 60, 300, 20},
|
||||
"Retry")) {
|
||||
manager.QueueSceneChange<GameplayScene>();
|
||||
if (GuiButton((Rectangle){WINDOW_WIDTH / 2 - 150, WINDOW_HEIGHT / 2 + 60, 300, 20}, "Retry")) {
|
||||
manager.QueueSceneChange<GameplayScene>(this->isMuted);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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<DeathScene>(collectedCount);
|
||||
manager.QueueSceneChange<DeathScene>(collectedCount, this->isMuted);
|
||||
};
|
||||
context.AddCollectiblePickedListener([this](Entity &collectible) {
|
||||
collectedCount++;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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<GameplayScene>();
|
||||
if (IsKeyPressed(KEY_M)) {
|
||||
isMuted = !isMuted;
|
||||
::SetMasterVolume(isMuted ? 0.0f : 1.0f);
|
||||
}
|
||||
|
||||
if (IsKeyPressed(KEY_ENTER)) {
|
||||
manager.QueueSceneChange<GameplayScene>(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<GameplayScene>(isMuted);
|
||||
}
|
||||
Scene::Draw();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue