mirror of
https://github.com/zhenyan121/SporeBG-Conid.git
synced 2026-04-10 14:24:10 +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){
|
void GameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer){
|
||||||
m_renderer = renderer;
|
m_renderer = renderer;
|
||||||
m_uiRenderer = uiRenderer;
|
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->init();
|
||||||
m_gameUIManager->setCallback([this]() {
|
m_gameUIManager->setCallback([this]() {
|
||||||
this->restartGame();
|
this->restartGame();
|
||||||
|
|||||||
@@ -9,8 +9,6 @@ void MainMenuScene::onEnter(SDL_Renderer* renderer, int width, int height, UIRen
|
|||||||
m_renderer = renderer;
|
m_renderer = renderer;
|
||||||
m_uiRenderer = uiRenderer;
|
m_uiRenderer = uiRenderer;
|
||||||
m_mainMenuUIManager = std::make_unique<MainMenuUIManager>(
|
m_mainMenuUIManager = std::make_unique<MainMenuUIManager>(
|
||||||
renderer,
|
|
||||||
uiRenderer->getTextRenderer(),
|
|
||||||
[this](const std::string& sceneName) {
|
[this](const std::string& sceneName) {
|
||||||
if (m_eventCallback) {
|
if (m_eventCallback) {
|
||||||
SceneEvent event{SceneEventType::ChangeScene, sceneName};
|
SceneEvent event{SceneEventType::ChangeScene, sceneName};
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
class IUIManager {
|
class IUIManager {
|
||||||
public:
|
public:
|
||||||
|
using SceneEventCallback = std::function<void(const std::string&)>;
|
||||||
virtual ~IUIManager() = default;
|
virtual ~IUIManager() = default;
|
||||||
|
|
||||||
virtual void init() = 0;
|
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<Button>> m_buttons;
|
||||||
std::unordered_map<int, std::unique_ptr<Label>> m_labels;
|
std::unordered_map<int, std::unique_ptr<Label>> m_labels;
|
||||||
UIRenderData m_uiRenderData;
|
UIRenderData m_uiRenderData;
|
||||||
SDL_Renderer* m_renderer = nullptr;
|
|
||||||
TextRenderer* m_textRenderer = nullptr;
|
|
||||||
|
|
||||||
|
SceneEventCallback m_eventCallback;
|
||||||
size_t makeHash(const std::string& name) {
|
size_t makeHash(const std::string& name) {
|
||||||
return std::hash<std::string>{}(name);
|
return std::hash<std::string>{}(name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
#include "GameUIManager.h"
|
#include "GameUIManager.h"
|
||||||
#include "ui/base/UIWidgetFactory.h"
|
#include "ui/base/UIWidgetFactory.h"
|
||||||
GameUIManager::GameUIManager(SDL_Renderer* renderer, TextRenderer* textRenderer)
|
GameUIManager::GameUIManager(SceneEventCallback eventCallback)
|
||||||
{
|
{
|
||||||
m_renderer = renderer;
|
m_eventCallback = eventCallback;
|
||||||
m_textRenderer = textRenderer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GameUIManager::~GameUIManager() {
|
GameUIManager::~GameUIManager() {
|
||||||
@@ -146,6 +145,18 @@ void GameUIManager::setupUIComponents() {
|
|||||||
restartButton->setEnabled(false);
|
restartButton->setEnabled(false);
|
||||||
m_buttons.emplace(restartButton->getNameHash(), std::move(restartButton));
|
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>
|
#include <functional>
|
||||||
class GameUIManager : public IUIManager {
|
class GameUIManager : public IUIManager {
|
||||||
public:
|
public:
|
||||||
GameUIManager(SDL_Renderer* renderer, TextRenderer* textRenderer);
|
GameUIManager(SceneEventCallback eventCallback);
|
||||||
|
|
||||||
~GameUIManager();
|
~GameUIManager();
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
#include "MainMenuUIManager.h"
|
#include "MainMenuUIManager.h"
|
||||||
|
|
||||||
#include "ui/base/UIWidgetFactory.h"
|
#include "ui/base/UIWidgetFactory.h"
|
||||||
MainMenuUIManager::MainMenuUIManager(SDL_Renderer* renderer,
|
MainMenuUIManager::MainMenuUIManager(
|
||||||
TextRenderer* textRenderer,
|
|
||||||
SceneEventCallback eventCallback) {
|
SceneEventCallback eventCallback) {
|
||||||
m_renderer = renderer;
|
|
||||||
m_textRenderer = textRenderer;
|
|
||||||
m_eventCallback = eventCallback;
|
m_eventCallback = eventCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,8 @@ class TextRenderer;
|
|||||||
class MainMenuUIManager : public IUIManager {
|
class MainMenuUIManager : public IUIManager {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
using SceneEventCallback = std::function<void(const std::string&)>;
|
|
||||||
MainMenuUIManager(SDL_Renderer* renderer,
|
MainMenuUIManager(
|
||||||
TextRenderer* textRenderer,
|
|
||||||
SceneEventCallback eventCallback
|
SceneEventCallback eventCallback
|
||||||
);
|
);
|
||||||
~MainMenuUIManager();
|
~MainMenuUIManager();
|
||||||
@@ -24,7 +23,7 @@ public:
|
|||||||
void handleClick(int logicalX, int logicalY);
|
void handleClick(int logicalX, int logicalY);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SceneEventCallback m_eventCallback;
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user