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

@@ -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;
};