Added QuitButton

This commit is contained in:
2025-12-25 21:32:58 +08:00
parent 91a4f8a9fd
commit 86d92eaf15
7 changed files with 31 additions and 18 deletions

View File

@@ -11,7 +11,14 @@ GameScene::~GameScene() {
void GameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer){
m_renderer = renderer;
m_uiRenderer = uiRenderer;
m_gameUIManager = std::make_unique<GameUIManager>(renderer, uiRenderer->getTextRenderer());
m_gameUIManager = std::make_unique<GameUIManager>(
[this](const std::string& sceneName) {
if (m_eventCallback) {
SceneEvent event{SceneEventType::ChangeScene, sceneName};
m_eventCallback(event);
}
}
);
m_gameUIManager->init();
m_gameUIManager->setCallback([this]() {
this->restartGame();

View File

@@ -9,8 +9,6 @@ void MainMenuScene::onEnter(SDL_Renderer* renderer, int width, int height, UIRen
m_renderer = renderer;
m_uiRenderer = uiRenderer;
m_mainMenuUIManager = std::make_unique<MainMenuUIManager>(
renderer,
uiRenderer->getTextRenderer(),
[this](const std::string& sceneName) {
if (m_eventCallback) {
SceneEvent event{SceneEventType::ChangeScene, sceneName};

View File

@@ -12,6 +12,7 @@
class IUIManager {
public:
using SceneEventCallback = std::function<void(const std::string&)>;
virtual ~IUIManager() = default;
virtual void init() = 0;
@@ -26,9 +27,8 @@ protected:
std::unordered_map<int, std::unique_ptr<Button>> m_buttons;
std::unordered_map<int, std::unique_ptr<Label>> m_labels;
UIRenderData m_uiRenderData;
SDL_Renderer* m_renderer = nullptr;
TextRenderer* m_textRenderer = nullptr;
SceneEventCallback m_eventCallback;
size_t makeHash(const std::string& name) {
return std::hash<std::string>{}(name);
}

View File

@@ -1,9 +1,8 @@
#include "GameUIManager.h"
#include "ui/base/UIWidgetFactory.h"
GameUIManager::GameUIManager(SDL_Renderer* renderer, TextRenderer* textRenderer)
GameUIManager::GameUIManager(SceneEventCallback eventCallback)
{
m_renderer = renderer;
m_textRenderer = textRenderer;
m_eventCallback = eventCallback;
}
GameUIManager::~GameUIManager() {
@@ -145,6 +144,18 @@ void GameUIManager::setupUIComponents() {
restartButton->setVisible(false); // 初始时隐藏
restartButton->setEnabled(false);
m_buttons.emplace(restartButton->getNameHash(), std::move(restartButton));
auto QuitButton = UIWidgetFactory::createStandardButton(
"QuitButton",
"Quit",
550,
20,
[this](){
m_eventCallback("MainMenuScene");
}
);
m_buttons.emplace(QuitButton->getNameHash(), std::move(QuitButton));
}

View File

@@ -4,7 +4,7 @@
#include <functional>
class GameUIManager : public IUIManager {
public:
GameUIManager(SDL_Renderer* renderer, TextRenderer* textRenderer);
GameUIManager(SceneEventCallback eventCallback);
~GameUIManager();

View File

@@ -1,11 +1,9 @@
#include "MainMenuUIManager.h"
#include "ui/base/UIWidgetFactory.h"
MainMenuUIManager::MainMenuUIManager(SDL_Renderer* renderer,
TextRenderer* textRenderer,
MainMenuUIManager::MainMenuUIManager(
SceneEventCallback eventCallback) {
m_renderer = renderer;
m_textRenderer = textRenderer;
m_eventCallback = eventCallback;
}

View File

@@ -6,9 +6,8 @@ class TextRenderer;
class MainMenuUIManager : public IUIManager {
public:
using SceneEventCallback = std::function<void(const std::string&)>;
MainMenuUIManager(SDL_Renderer* renderer,
TextRenderer* textRenderer,
MainMenuUIManager(
SceneEventCallback eventCallback
);
~MainMenuUIManager();
@@ -24,7 +23,7 @@ public:
void handleClick(int logicalX, int logicalY);
private:
SceneEventCallback m_eventCallback;
};