mirror of
https://github.com/zhenyan121/SporeBG-Conid.git
synced 2026-04-10 14:24:10 +08:00
feat: add round display
This commit is contained in:
7
src/core/CoreData.h
Normal file
7
src/core/CoreData.h
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "ui/managers/debug/DebugData.h"
|
||||||
|
|
||||||
|
struct CoreData {
|
||||||
|
DebugData debugData;
|
||||||
|
};
|
||||||
@@ -5,12 +5,14 @@ DebugManager::DebugManager(
|
|||||||
const SDL_Renderer* renderer,
|
const SDL_Renderer* renderer,
|
||||||
const SDL_Window* window,
|
const SDL_Window* window,
|
||||||
//const InputState& inputState,
|
//const InputState& inputState,
|
||||||
UIRenderer* uiRenderer
|
UIRenderer* uiRenderer,
|
||||||
|
DebugData& debugData
|
||||||
):
|
):
|
||||||
m_renderer(renderer),
|
m_renderer(renderer),
|
||||||
m_window(window),
|
m_window(window),
|
||||||
//m_inputState(inputState),
|
//m_inputState(inputState),
|
||||||
m_uiRenderer(uiRenderer)
|
m_uiRenderer(uiRenderer),
|
||||||
|
m_debugData(debugData)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ public:
|
|||||||
const SDL_Renderer* renderer,
|
const SDL_Renderer* renderer,
|
||||||
const SDL_Window* window,
|
const SDL_Window* window,
|
||||||
//const InputState& inputState,
|
//const InputState& inputState,
|
||||||
UIRenderer* uiRenderer
|
UIRenderer* uiRenderer,
|
||||||
|
DebugData& debugData
|
||||||
);
|
);
|
||||||
~DebugManager();
|
~DebugManager();
|
||||||
|
|
||||||
@@ -22,9 +23,13 @@ public:
|
|||||||
void updateMousePos(int logicalX, int logicalY, const InputState& inputState);
|
void updateMousePos(int logicalX, int logicalY, const InputState& inputState);
|
||||||
void updateDebugInfo();
|
void updateDebugInfo();
|
||||||
|
|
||||||
|
DebugData& getDebugData() {
|
||||||
|
return m_debugData;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<DebugOverlay> m_debugOverlay;
|
std::unique_ptr<DebugOverlay> m_debugOverlay;
|
||||||
DebugData m_debugData;
|
DebugData& m_debugData;
|
||||||
const SDL_Renderer* m_renderer = nullptr;
|
const SDL_Renderer* m_renderer = nullptr;
|
||||||
const SDL_Window* m_window = nullptr;
|
const SDL_Window* m_window = nullptr;
|
||||||
//const InputState& m_inputState;
|
//const InputState& m_inputState;
|
||||||
|
|||||||
@@ -50,14 +50,15 @@ bool GameApplication::initialize() {
|
|||||||
m_windowManager->GetRenderer(),
|
m_windowManager->GetRenderer(),
|
||||||
m_windowManager->GetWindow(),
|
m_windowManager->GetWindow(),
|
||||||
//m_inputManager->GetInputState(),
|
//m_inputManager->GetInputState(),
|
||||||
m_uiRenderer.get()
|
m_uiRenderer.get(),
|
||||||
|
m_coreData.debugData
|
||||||
);
|
);
|
||||||
m_debugManager->initialize();
|
m_debugManager->initialize();
|
||||||
// 材质管理
|
// 材质管理
|
||||||
m_textureManager = std::make_unique<TextureManager>(m_windowManager->GetRenderer());
|
m_textureManager = std::make_unique<TextureManager>(m_windowManager->GetRenderer());
|
||||||
|
|
||||||
// 场景管理,传入窗口句柄以便 SceneManager 能获取窗口尺寸
|
// 场景管理,传入窗口句柄以便 SceneManager 能获取窗口尺寸
|
||||||
m_sceneManager = std::make_unique<SceneManager>(m_windowManager->GetRenderer(), m_uiRenderer.get(), m_windowManager->GetWindow(), m_textureManager.get());
|
m_sceneManager = std::make_unique<SceneManager>(m_windowManager->GetRenderer(), m_uiRenderer.get(), m_windowManager->GetWindow(), m_textureManager.get(), m_coreData);
|
||||||
if (!m_sceneManager->initialize()) {
|
if (!m_sceneManager->initialize()) {
|
||||||
SDL_Log("SceneManager 初始化失败!");
|
SDL_Log("SceneManager 初始化失败!");
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
#include "graphics/font/FontManager.h"
|
#include "graphics/font/FontManager.h"
|
||||||
#include "core/DebugManager.h"
|
#include "core/DebugManager.h"
|
||||||
#include "graphics/texture/TextureManager.h"
|
#include "graphics/texture/TextureManager.h"
|
||||||
|
#include "CoreData.h"
|
||||||
|
|
||||||
class GameApplication {
|
class GameApplication {
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@@ -26,6 +28,8 @@ private:
|
|||||||
Config m_config;
|
Config m_config;
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
|
||||||
|
CoreData m_coreData;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GameApplication();
|
GameApplication();
|
||||||
~GameApplication();
|
~GameApplication();
|
||||||
|
|||||||
@@ -159,8 +159,8 @@ void GameSession::nextTurn() {
|
|||||||
|
|
||||||
m_currentActionType = ActionType::GROW;
|
m_currentActionType = ActionType::GROW;
|
||||||
if (m_currentPlayer == PlayerID::P1) {
|
if (m_currentPlayer == PlayerID::P1) {
|
||||||
GameRounds++;
|
m_gameRound++;
|
||||||
std::cout << "GameSession: Current Round is " << GameRounds << "\n";
|
std::cout << "GameSession: Current Round is " << m_gameRound << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 回合结束增加生命值
|
// 回合结束增加生命值
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ private:
|
|||||||
|
|
||||||
GamePieceEventCallback m_gamePieceEventCallback;
|
GamePieceEventCallback m_gamePieceEventCallback;
|
||||||
|
|
||||||
int GameRounds = 1;
|
int m_gameRound = 1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -70,6 +70,8 @@ public:
|
|||||||
m_gamePieceEventCallback = callback;
|
m_gamePieceEventCallback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int getRound() {
|
||||||
|
return m_gameRound;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "graphics/ui/UIRenderer.h"
|
#include "graphics/ui/UIRenderer.h"
|
||||||
#include "scenes/base/SceneEvent.h"
|
#include "scenes/base/SceneEvent.h"
|
||||||
#include "graphics/texture/TextureManager.h"
|
#include "graphics/texture/TextureManager.h"
|
||||||
|
#include "core/CoreData.h"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
/**
|
/**
|
||||||
* @class Scene
|
* @class Scene
|
||||||
@@ -31,7 +32,7 @@ public:
|
|||||||
* @param height 窗口高度
|
* @param height 窗口高度
|
||||||
* @param uiRenderer UI 渲染器指针
|
* @param uiRenderer UI 渲染器指针
|
||||||
*/
|
*/
|
||||||
virtual void onEnter(SDL_Renderer* renderer, int width, int height, UIRenderer* uiRenderer, TextureManager* textureManager){};
|
virtual void onEnter(SDL_Renderer* renderer, int width, int height, UIRenderer* uiRenderer, TextureManager* textureManager, CoreData* CoreData){};
|
||||||
/**
|
/**
|
||||||
* @brief 场景退出
|
* @brief 场景退出
|
||||||
*/
|
*/
|
||||||
@@ -67,7 +68,7 @@ protected:
|
|||||||
SDL_Renderer* m_renderer; ///< SDL 渲染器指针
|
SDL_Renderer* m_renderer; ///< SDL 渲染器指针
|
||||||
TextureManager* m_textureManager;
|
TextureManager* m_textureManager;
|
||||||
EventCallback m_eventCallback; ///< 场景事件回调函数
|
EventCallback m_eventCallback; ///< 场景事件回调函数
|
||||||
|
CoreData* m_coreData;
|
||||||
/*void beginFrame() {
|
/*void beginFrame() {
|
||||||
if (!m_renderer) {
|
if (!m_renderer) {
|
||||||
SDL_Log("Renderer is null in beginFrame!");
|
SDL_Log("Renderer is null in beginFrame!");
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
#include "SceneManager.h"
|
#include "SceneManager.h"
|
||||||
#include "utils/Config.h"
|
#include "utils/Config.h"
|
||||||
SceneManager::SceneManager(SDL_Renderer* renderer, UIRenderer* uiRenderer, SDL_Window* window, TextureManager* textureManager) :
|
SceneManager::SceneManager(SDL_Renderer* renderer, UIRenderer* uiRenderer, SDL_Window* window, TextureManager* textureManager, CoreData& coreData) :
|
||||||
m_renderer(renderer),
|
m_renderer(renderer),
|
||||||
m_uiRenderer(uiRenderer),
|
m_uiRenderer(uiRenderer),
|
||||||
m_window(window),
|
m_window(window),
|
||||||
m_textureManager(textureManager)
|
m_textureManager(textureManager),
|
||||||
|
m_coreData(coreData)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -99,7 +100,7 @@ void SceneManager::pushScene(const std::string& sceneName) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_scene->onEnter(m_renderer, UI::LogicalWidth, UI::LogicalHeight, m_uiRenderer, m_textureManager);
|
m_scene->onEnter(m_renderer, UI::LogicalWidth, UI::LogicalHeight, m_uiRenderer, m_textureManager, &m_coreData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -116,7 +117,7 @@ void SceneManager::popScene() {
|
|||||||
m_scenes.pop();
|
m_scenes.pop();
|
||||||
|
|
||||||
if (m_scene) {
|
if (m_scene) {
|
||||||
m_scene->onEnter(m_renderer, UI::LogicalWidth, UI::LogicalHeight, m_uiRenderer, m_textureManager);
|
m_scene->onEnter(m_renderer, UI::LogicalWidth, UI::LogicalHeight, m_uiRenderer, m_textureManager, &m_coreData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -157,7 +158,7 @@ void SceneManager::changeScene(const std::string& sceneName) {
|
|||||||
m_scene = target;
|
m_scene = target;
|
||||||
|
|
||||||
|
|
||||||
m_scene->onEnter(m_renderer, UI::LogicalWidth, UI::LogicalHeight, m_uiRenderer, m_textureManager);
|
m_scene->onEnter(m_renderer, UI::LogicalWidth, UI::LogicalHeight, m_uiRenderer, m_textureManager, &m_coreData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include "scenes/gameplay/GameScene.h"
|
#include "scenes/gameplay/GameScene.h"
|
||||||
#include "scenes/menu/MainMenuScene.h"
|
#include "scenes/menu/MainMenuScene.h"
|
||||||
#include "scenes/gameplay/OnlineGameScene.h"
|
#include "scenes/gameplay/OnlineGameScene.h"
|
||||||
|
#include "core/CoreData.h"
|
||||||
#include <SDL3/SDL.h>
|
#include <SDL3/SDL.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
@@ -31,7 +32,7 @@ public:
|
|||||||
* @param uiRenderer UI 渲染器指针,用于传递给场景进行 UI 渲染
|
* @param uiRenderer UI 渲染器指针,用于传递给场景进行 UI 渲染
|
||||||
* @param window SDL 窗口指针,用于获取窗口尺寸
|
* @param window SDL 窗口指针,用于获取窗口尺寸
|
||||||
*/
|
*/
|
||||||
SceneManager(SDL_Renderer* renderer, UIRenderer* uiRenderer, SDL_Window* window, TextureManager* textureManager);
|
SceneManager(SDL_Renderer* renderer, UIRenderer* uiRenderer, SDL_Window* window, TextureManager* textureManager, CoreData& coreData);
|
||||||
/**
|
/**
|
||||||
* @brief 析构函数
|
* @brief 析构函数
|
||||||
* @details 清理场景栈和缓存,释放资源
|
* @details 清理场景栈和缓存,释放资源
|
||||||
@@ -138,4 +139,6 @@ private:
|
|||||||
*/
|
*/
|
||||||
//std::pair<int, int> getWindowDimensions() const;
|
//std::pair<int, int> getWindowDimensions() const;
|
||||||
|
|
||||||
|
CoreData& m_coreData;
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -53,10 +53,10 @@ void GameScene::handleBoardClick(int row, int col) {
|
|||||||
m_gameSession->printBoard();
|
m_gameSession->printBoard();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer, TextureManager* textureManager){
|
void GameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer, TextureManager* textureManager, CoreData* coreData){
|
||||||
m_renderer = renderer;
|
m_renderer = renderer;
|
||||||
m_uiRenderer = uiRenderer;
|
m_uiRenderer = uiRenderer;
|
||||||
|
m_coreData = coreData;
|
||||||
// 使用工厂方法创建UIManager
|
// 使用工厂方法创建UIManager
|
||||||
m_gameUIManager = createUIManager();
|
m_gameUIManager = createUIManager();
|
||||||
m_gameUIManager->init();
|
m_gameUIManager->init();
|
||||||
@@ -129,6 +129,7 @@ void GameScene::handleClick(int logicalX, int logicalY) {
|
|||||||
} else {
|
} else {
|
||||||
SDL_Log("invail cilck aera!");
|
SDL_Log("invail cilck aera!");
|
||||||
}
|
}
|
||||||
|
m_coreData->debugData.round = m_gameSession->getRound();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ public:
|
|||||||
GameScene();
|
GameScene();
|
||||||
~GameScene();
|
~GameScene();
|
||||||
|
|
||||||
void onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer, TextureManager* textureManager) override;
|
void onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer, TextureManager* textureManager, CoreData* coreData) override;
|
||||||
|
|
||||||
void update() override;
|
void update() override;
|
||||||
void renderWorld() override; // 逻辑世界
|
void renderWorld() override; // 逻辑世界
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ std::unique_ptr<GameUIManager> OnlineGameScene::createUIManager() {
|
|||||||
return onlineUIManager;
|
return onlineUIManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnlineGameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer, TextureManager* textureManager) {
|
void OnlineGameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer, TextureManager* textureManager, CoreData* coreData) {
|
||||||
// 先创建网络管理器
|
// 先创建网络管理器
|
||||||
m_networkManager = std::make_unique<NetworkManager>();
|
m_networkManager = std::make_unique<NetworkManager>();
|
||||||
m_networkManager->setClickEventCallback(
|
m_networkManager->setClickEventCallback(
|
||||||
@@ -58,7 +58,7 @@ void OnlineGameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIR
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
// 调用父类的onEnter(会调用我们重写的createUIManager)
|
// 调用父类的onEnter(会调用我们重写的createUIManager)
|
||||||
GameScene::onEnter(renderer, WIDTH, HEIGHT, uiRenderer, textureManager);
|
GameScene::onEnter(renderer, WIDTH, HEIGHT, uiRenderer, textureManager, coreData);
|
||||||
|
|
||||||
m_gameUIManager->setButton("ActionButton", false); // 初始禁用行动按钮,等待游戏开始
|
m_gameUIManager->setButton("ActionButton", false); // 初始禁用行动按钮,等待游戏开始
|
||||||
m_gameUIManager->setLabel("PlayerLabel", false); // 初始隐藏玩家回合标签
|
m_gameUIManager->setLabel("PlayerLabel", false); // 初始隐藏玩家回合标签
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
class OnlineGameScene : public GameScene {
|
class OnlineGameScene : public GameScene {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer, TextureManager* textureManager) override;
|
void onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer, TextureManager* textureManager, CoreData* coreData) override;
|
||||||
|
|
||||||
void renderWorld() override;
|
void renderWorld() override;
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,11 @@ MainMenuScene::MainMenuScene() {
|
|||||||
// 构造函数实现
|
// 构造函数实现
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainMenuScene::onEnter(SDL_Renderer* renderer, int width, int height, UIRenderer* uiRenderer, TextureManager* textureManager) {
|
void MainMenuScene::onEnter(SDL_Renderer* renderer, int width, int height, UIRenderer* uiRenderer, TextureManager* textureManager, CoreData* coreData) {
|
||||||
// 进入场景时的初始化逻辑
|
// 进入场景时的初始化逻辑
|
||||||
m_renderer = renderer;
|
m_renderer = renderer;
|
||||||
m_uiRenderer = uiRenderer;
|
m_uiRenderer = uiRenderer;
|
||||||
|
m_coreData = coreData;
|
||||||
m_mainMenuUIManager = std::make_unique<MainMenuUIManager>(
|
m_mainMenuUIManager = std::make_unique<MainMenuUIManager>(
|
||||||
[this](const std::string& sceneName) {
|
[this](const std::string& sceneName) {
|
||||||
if (m_eventCallback) {
|
if (m_eventCallback) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public:
|
|||||||
~MainMenuScene() override = default;
|
~MainMenuScene() override = default;
|
||||||
|
|
||||||
// 实现 Scene 接口
|
// 实现 Scene 接口
|
||||||
void onEnter(SDL_Renderer* renderer, int width, int height, UIRenderer* uiRenderer, TextureManager* textureManager) override;
|
void onEnter(SDL_Renderer* renderer, int width, int height, UIRenderer* uiRenderer, TextureManager* textureManager, CoreData* coreData) override;
|
||||||
void onExit() override;
|
void onExit() override;
|
||||||
|
|
||||||
void update() override;
|
void update() override;
|
||||||
|
|||||||
@@ -9,5 +9,6 @@ struct DebugData {
|
|||||||
std::pair<int, int> mousePosition = {0, 0};
|
std::pair<int, int> mousePosition = {0, 0};
|
||||||
std::pair<int, int> mouseLogicalPostion = {0, 0};
|
std::pair<int, int> mouseLogicalPostion = {0, 0};
|
||||||
int currentFPS = 0;
|
int currentFPS = 0;
|
||||||
|
int round = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -34,6 +34,14 @@ void DebugOverlay::initialize() {
|
|||||||
80
|
80
|
||||||
);
|
);
|
||||||
m_labels.emplace(mouseLogicalPos->getNameHash(), std::move(mouseLogicalPos));
|
m_labels.emplace(mouseLogicalPos->getNameHash(), std::move(mouseLogicalPos));
|
||||||
|
|
||||||
|
auto roundLabel = UIWidgetFactory::createStandardLabel(
|
||||||
|
"RoundLabel",
|
||||||
|
"Round: 0",
|
||||||
|
0,
|
||||||
|
120
|
||||||
|
);
|
||||||
|
m_labels.emplace(roundLabel->getNameHash(), std::move(roundLabel));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -125,4 +133,12 @@ void DebugOverlay::updateDebugInfo() {
|
|||||||
} else {
|
} else {
|
||||||
std::cerr << "Mouse LogicalPosition Label not found!\n";
|
std::cerr << "Mouse LogicalPosition Label not found!\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto roundLabelKey = makeHash("RoundLabel");
|
||||||
|
auto roundLabel = m_labels.find(roundLabelKey);
|
||||||
|
if (roundLabel != m_labels.end()) {
|
||||||
|
roundLabel->second->setText("Round: " + std::to_string(m_debugData.round));
|
||||||
|
} else {
|
||||||
|
std::cerr << "Round Label not found!\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user