mirror of
https://github.com/zhenyan121/SporeBG-Conid.git
synced 2026-04-10 06:14:08 +08:00
Added QuitButton
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <functional>
|
||||
class GameUIManager : public IUIManager {
|
||||
public:
|
||||
GameUIManager(SDL_Renderer* renderer, TextRenderer* textRenderer);
|
||||
GameUIManager(SceneEventCallback eventCallback);
|
||||
|
||||
~GameUIManager();
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user