From 6e7139794055404cca718717af55307ebf5ebb4e Mon Sep 17 00:00:00 2001 From: zhenyan121 <3367366583@qq.com> Date: Sat, 7 Feb 2026 09:13:40 +0800 Subject: [PATCH] refactor: replace pair with vec2 --- src/core/DebugManager.cpp | 8 ++++---- src/core/DebugManager.h | 2 +- src/core/GameApplication.cpp | 6 +++--- src/graphics/game/BoardRenderer.cpp | 9 +++++++++ src/graphics/game/BoardRenderer.h | 2 ++ src/input/InputState.h | 7 ++++--- src/scenes/base/Scene.h | 1 + src/scenes/base/SceneManager.cpp | 5 +++-- src/scenes/base/SceneManager.h | 2 +- src/scenes/gameplay/GameScene.cpp | 3 ++- src/ui/managers/debug/DebugData.h | 6 +++--- src/ui/managers/debug/DebugOverlay.cpp | 8 ++++---- src/utils/Tools.h | 13 +++++++------ 13 files changed, 44 insertions(+), 28 deletions(-) diff --git a/src/core/DebugManager.cpp b/src/core/DebugManager.cpp index ca544d6..b5aa096 100644 --- a/src/core/DebugManager.cpp +++ b/src/core/DebugManager.cpp @@ -27,12 +27,12 @@ void DebugManager::initialize() { m_isDebugInfoVisible = true; } -void DebugManager::updateMousePos(int logicalX, int logicalY, const InputState& inputState) { +void DebugManager::updateMousePos(glm::ivec2 logicalPos, const InputState& inputState) { m_debugData.mousePosition = { - static_cast(inputState.mouseCurrentPosition.first), - static_cast(inputState.mouseCurrentPosition.second) + static_cast(inputState.mouseCurrentPosition.x), + static_cast(inputState.mouseCurrentPosition.y) }; - m_debugData.mouseLogicalPostion = {logicalX, logicalY}; + m_debugData.mouseLogicalPostion = logicalPos; } diff --git a/src/core/DebugManager.h b/src/core/DebugManager.h index fc4fbf3..76b8de8 100644 --- a/src/core/DebugManager.h +++ b/src/core/DebugManager.h @@ -20,7 +20,7 @@ public: void showDebugInfo(); - void updateMousePos(int logicalX, int logicalY, const InputState& inputState); + void updateMousePos(glm::ivec2 logicalPos, const InputState& inputState); void updateDebugInfo(); DebugData& getDebugData() { diff --git a/src/core/GameApplication.cpp b/src/core/GameApplication.cpp index 396dc08..365a1e2 100644 --- a/src/core/GameApplication.cpp +++ b/src/core/GameApplication.cpp @@ -74,14 +74,14 @@ SDL_AppResult GameApplication::handleInputEvent(SDL_Event* event) { InputState input = m_inputManager->GetInputState(); if (event->type == SDL_EVENT_MOUSE_BUTTON_DOWN && event->button.button == SDL_BUTTON_LEFT) { - auto pos = Tools::physicalToLogical(input.mouseCilckOn.first, input.mouseCilckOn.second, m_windowManager->getViewport()); + auto pos = Tools::physicalToLogical(input.mouseCilckOn, m_windowManager->getViewport()); m_sceneManager->handleClickCurrent(pos); } - auto pos = Tools::physicalToLogical(input.mouseCurrentPosition.first, input.mouseCurrentPosition.second, m_windowManager->getViewport()); + auto pos = Tools::physicalToLogical(input.mouseCurrentPosition, m_windowManager->getViewport()); m_coreData.inputState.mouseCurrentLogicalPosition = pos; - m_debugManager->updateMousePos(pos.first, pos.second, input); + m_debugManager->updateMousePos(pos, input); m_windowManager->setFullscreen(input.isFullscreen); diff --git a/src/graphics/game/BoardRenderer.cpp b/src/graphics/game/BoardRenderer.cpp index 43b4897..b3b7dd7 100644 --- a/src/graphics/game/BoardRenderer.cpp +++ b/src/graphics/game/BoardRenderer.cpp @@ -29,6 +29,15 @@ void BoardRenderer::setBoard(const Board* board) { m_board = board; } + +void BoardRenderer::update() { + + + +} + + + void BoardRenderer::drawBackground() { } diff --git a/src/graphics/game/BoardRenderer.h b/src/graphics/game/BoardRenderer.h index 7dea013..d1ae507 100644 --- a/src/graphics/game/BoardRenderer.h +++ b/src/graphics/game/BoardRenderer.h @@ -108,6 +108,8 @@ public: void renderBlackOverlay(); void handleGamePieceEvent(GamePieceEvent event, int fromRow, int fromCol, int toRow = -1, int toCol = -1); + + void update(); }; diff --git a/src/input/InputState.h b/src/input/InputState.h index c796718..73f6a52 100644 --- a/src/input/InputState.h +++ b/src/input/InputState.h @@ -1,10 +1,11 @@ #pragma once #include +#include struct InputState { - std::pair mouseCilckOn; + glm::vec2 mouseCilckOn; bool leftMouseDown = false; - std::pair mouseCurrentPosition; - std::pair mouseCurrentLogicalPosition; + glm::vec2 mouseCurrentPosition; + glm::ivec2 mouseCurrentLogicalPosition; bool isFullscreen = false; }; diff --git a/src/scenes/base/Scene.h b/src/scenes/base/Scene.h index 85e7223..19ec549 100644 --- a/src/scenes/base/Scene.h +++ b/src/scenes/base/Scene.h @@ -11,6 +11,7 @@ #include "graphics/texture/TextureManager.h" #include "core/CoreData.h" #include +#include /** * @class Scene * @brief 场景基类 diff --git a/src/scenes/base/SceneManager.cpp b/src/scenes/base/SceneManager.cpp index dbd7b85..310c13d 100644 --- a/src/scenes/base/SceneManager.cpp +++ b/src/scenes/base/SceneManager.cpp @@ -163,8 +163,9 @@ void SceneManager::changeScene(const std::string& sceneName) { -void SceneManager::handleClickCurrent(std::pair clickOn) { - auto [logicalX, logicalY] = clickOn; +void SceneManager::handleClickCurrent(glm::ivec2 clickOn) { + int logicalX = clickOn.x; + int logicalY = clickOn.y; if (m_scene) m_scene->handleClick(logicalX, logicalY); } diff --git a/src/scenes/base/SceneManager.h b/src/scenes/base/SceneManager.h index 3583328..5bb2dba 100644 --- a/src/scenes/base/SceneManager.h +++ b/src/scenes/base/SceneManager.h @@ -92,7 +92,7 @@ public: * @param clickOn 点击位置坐标对 {x, y} * @details 将点击事件转发给当前场景的 handleClick() 方法进行处理 */ - void handleClickCurrent(std::pair clickOn); + void handleClickCurrent(glm::ivec2 clickOn); diff --git a/src/scenes/gameplay/GameScene.cpp b/src/scenes/gameplay/GameScene.cpp index 351cf21..9109353 100644 --- a/src/scenes/gameplay/GameScene.cpp +++ b/src/scenes/gameplay/GameScene.cpp @@ -152,7 +152,8 @@ void GameScene::restartGame() { } void GameScene::updatePieceInfo() { - auto [mouseX, mouseY] = m_coreData->inputState.mouseCurrentLogicalPosition; + int mouseX = m_coreData->inputState.mouseCurrentLogicalPosition.x; + int mouseY = m_coreData->inputState.mouseCurrentLogicalPosition.y; auto click = m_CoordinateConverter->ScreenToBoard(mouseX, mouseY, m_boardRenderer->getBoardArea()); if (click == std::nullopt) { diff --git a/src/ui/managers/debug/DebugData.h b/src/ui/managers/debug/DebugData.h index 0d144b1..e5882b9 100644 --- a/src/ui/managers/debug/DebugData.h +++ b/src/ui/managers/debug/DebugData.h @@ -2,12 +2,12 @@ #include #include - +#include struct DebugData { bool showFPS = true; bool showMousePosition = true; - std::pair mousePosition = {0, 0}; - std::pair mouseLogicalPostion = {0, 0}; + glm::ivec2 mousePosition = {0, 0}; + glm::ivec2 mouseLogicalPostion = {0, 0}; int currentFPS = 0; int round = 0; diff --git a/src/ui/managers/debug/DebugOverlay.cpp b/src/ui/managers/debug/DebugOverlay.cpp index 214d686..6dc6d8a 100644 --- a/src/ui/managers/debug/DebugOverlay.cpp +++ b/src/ui/managers/debug/DebugOverlay.cpp @@ -96,8 +96,8 @@ void DebugOverlay::updateDebugInfo() { } mousePosLabel->setText( "PhyscialPos: " + - std::to_string(m_debugData.mousePosition.first) + ", " + - std::to_string(m_debugData.mousePosition.second) + std::to_string(m_debugData.mousePosition.x) + ", " + + std::to_string(m_debugData.mousePosition.y) ); mousePosLabel->setVisible(true); @@ -121,8 +121,8 @@ void DebugOverlay::updateDebugInfo() { } mouseLogicalPosLabel->setText( "LogicalPos: " + - std::to_string(m_debugData.mouseLogicalPostion.first) + ", " + - std::to_string(m_debugData.mouseLogicalPostion.second) + std::to_string(m_debugData.mouseLogicalPostion.x) + ", " + + std::to_string(m_debugData.mouseLogicalPostion.y) ); mouseLogicalPosLabel->setVisible(true); diff --git a/src/utils/Tools.h b/src/utils/Tools.h index f97b057..7a05481 100644 --- a/src/utils/Tools.h +++ b/src/utils/Tools.h @@ -2,20 +2,21 @@ #include #include "Config.h" #include +#include static inline float easeInOutSine(float t) { return -(cos(M_PI * t) - 1) / 2.0f; } namespace Tools { - inline std::pair physicalToLogical(float physicalX, float physicalY, const Viewport& viewport) { - std::pair logicalPoint = {0 , 0}; + inline glm::ivec2 physicalToLogical(glm::vec2 physicalPos, const Viewport& viewport) { + glm::ivec2 logicalPoint = {0 , 0}; // 计算相对于目标矩形的坐标 - float normalizedX = (physicalX - viewport.dst.x) / viewport.dst.w; - float normalizedY = (physicalY - viewport.dst.y) / viewport.dst.h; + float normalizedX = (physicalPos.x - viewport.dst.x) / viewport.dst.w; + float normalizedY = (physicalPos.y - viewport.dst.y) / viewport.dst.h; // 转换为逻辑坐标 - logicalPoint.first = static_cast(normalizedX * viewport.logicalWidth); - logicalPoint.second = static_cast(normalizedY * viewport.logicalHeight); + logicalPoint.x = static_cast(normalizedX * viewport.logicalWidth); + logicalPoint.y = static_cast(normalizedY * viewport.logicalHeight); return logicalPoint; }