refactor: replace pair with vec2

This commit is contained in:
2026-02-07 09:13:40 +08:00
parent fedef3dd1d
commit 6e71397940
13 changed files with 44 additions and 28 deletions

View File

@@ -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<int>(inputState.mouseCurrentPosition.first),
static_cast<int>(inputState.mouseCurrentPosition.second)
static_cast<int>(inputState.mouseCurrentPosition.x),
static_cast<int>(inputState.mouseCurrentPosition.y)
};
m_debugData.mouseLogicalPostion = {logicalX, logicalY};
m_debugData.mouseLogicalPostion = logicalPos;
}

View File

@@ -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() {

View File

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

View File

@@ -29,6 +29,15 @@ void BoardRenderer::setBoard(const Board* board) {
m_board = board;
}
void BoardRenderer::update() {
}
void BoardRenderer::drawBackground() {
}

View File

@@ -108,6 +108,8 @@ public:
void renderBlackOverlay();
void handleGamePieceEvent(GamePieceEvent event, int fromRow, int fromCol, int toRow = -1, int toCol = -1);
void update();
};

View File

@@ -1,10 +1,11 @@
#pragma once
#include <utility>
#include <glm/glm.hpp>
struct InputState
{
std::pair<float, float> mouseCilckOn;
glm::vec2 mouseCilckOn;
bool leftMouseDown = false;
std::pair<float, float> mouseCurrentPosition;
std::pair<int, int> mouseCurrentLogicalPosition;
glm::vec2 mouseCurrentPosition;
glm::ivec2 mouseCurrentLogicalPosition;
bool isFullscreen = false;
};

View File

@@ -11,6 +11,7 @@
#include "graphics/texture/TextureManager.h"
#include "core/CoreData.h"
#include <functional>
#include <glm/glm.hpp>
/**
* @class Scene
* @brief 场景基类

View File

@@ -163,8 +163,9 @@ void SceneManager::changeScene(const std::string& sceneName) {
void SceneManager::handleClickCurrent(std::pair<int, int> 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);
}

View File

@@ -92,7 +92,7 @@ public:
* @param clickOn 点击位置坐标对 {x, y}
* @details 将点击事件转发给当前场景的 handleClick() 方法进行处理
*/
void handleClickCurrent(std::pair<int, int> clickOn);
void handleClickCurrent(glm::ivec2 clickOn);

View File

@@ -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) {

View File

@@ -2,12 +2,12 @@
#include <string>
#include <utility>
#include <glm/glm.hpp>
struct DebugData {
bool showFPS = true;
bool showMousePosition = true;
std::pair<int, int> mousePosition = {0, 0};
std::pair<int, int> mouseLogicalPostion = {0, 0};
glm::ivec2 mousePosition = {0, 0};
glm::ivec2 mouseLogicalPostion = {0, 0};
int currentFPS = 0;
int round = 0;

View File

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

View File

@@ -2,20 +2,21 @@
#include <utility>
#include "Config.h"
#include <cmath>
#include <glm/glm.hpp>
static inline float easeInOutSine(float t) {
return -(cos(M_PI * t) - 1) / 2.0f;
}
namespace Tools {
inline std::pair<int, int> physicalToLogical(float physicalX, float physicalY, const Viewport& viewport) {
std::pair<int, int> 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<int>(normalizedX * viewport.logicalWidth);
logicalPoint.second = static_cast<int>(normalizedY * viewport.logicalHeight);
logicalPoint.x = static_cast<int>(normalizedX * viewport.logicalWidth);
logicalPoint.y = static_cast<int>(normalizedY * viewport.logicalHeight);
return logicalPoint;
}