fix: rendering selected piece

This commit is contained in:
2026-01-16 20:13:08 +08:00
parent 26408b35b9
commit df3699c791
2 changed files with 16 additions and 11 deletions

View File

@@ -61,8 +61,9 @@ bool GameSession::executeAction(int toRow, int toCol) {
auto [fromRow, fromCol] = *m_seletedPiece;
if (m_currentActionType == ActionType::GROW) {
if (Rule::canGrow(m_board.get(), fromRow, fromCol, toRow, toCol, m_currentPlayer)) {
m_board->placePieceAt(toRow, toCol, m_currentPlayer);
m_gamePieceEventCallback(GamePieceEvent::PLACE_PIECE, toRow, toCol, -1, -1);
m_board->placePieceAt(toRow, toCol, m_currentPlayer);
// 如果执行了操作就擦除
markComponentAsUsed(getOldComponentID(fromRow, fromCol));
return true;
@@ -70,23 +71,27 @@ bool GameSession::executeAction(int toRow, int toCol) {
}
if (m_currentActionType == ActionType::MOVE) {
if (Rule::canMove(m_board.get(), fromRow, fromCol, toRow, toCol, m_currentPlayer)) {
m_board->removePieceAt(fromRow, fromCol);
m_gamePieceEventCallback(GamePieceEvent::REMOVE_PIECE, fromRow, fromCol, -1, -1);
m_board->removePieceAt(toRow, toCol);
m_gamePieceEventCallback(GamePieceEvent::REMOVE_PIECE, toRow, toCol, -1, -1);
m_gamePieceEventCallback(GamePieceEvent::MOVE_PIECE, fromRow, fromCol, toRow, toCol);
m_board->removePieceAt(fromRow, fromCol);
m_board->removePieceAt(toRow, toCol);
m_board->placePieceAt(toRow, toCol, m_currentPlayer);
m_gamePieceEventCallback(GamePieceEvent::MOVE_PIECE, fromRow, fromCol, toRow, toCol);
markComponentAsUsed(getOldComponentID(fromRow, fromCol));
return true;
}
}
if (m_currentActionType == ActionType::SPORE) {
if (Rule::canSpore(m_board.get(), fromRow, fromCol, toRow, toCol, m_currentPlayer)) {
m_board->removePieceAt(fromRow, fromCol);
m_gamePieceEventCallback(GamePieceEvent::REMOVE_PIECE, fromRow, fromCol, -1, -1);
m_board->placePieceAt(toRow, toCol, m_currentPlayer);
m_gamePieceEventCallback(GamePieceEvent::PLACE_PIECE, toRow, toCol, -1, -1);
m_board->removePieceAt(fromRow, fromCol);
m_board->placePieceAt(toRow, toCol, m_currentPlayer);
markComponentAsUsed(getOldComponentID(fromRow, fromCol));
return true;
}

View File

@@ -101,7 +101,7 @@ void BoardRenderer::drawPiece(std::optional<std::pair<int, int>> selectedPiece)
};
//SDL_RenderFillRect(m_renderer, &rect);
bool isRenderered = false;
auto texture = m_textureManager->createTextureFromRect(rect, color);
//SDL_FRect srect = {0, 0, rect.w, rect.h};
if (isSelected) {
@@ -146,10 +146,10 @@ void BoardRenderer::drawPiece(std::optional<std::pair<int, int>> selectedPiece)
}
SDL_RenderTextureRotated(m_renderer, texture, nullptr, &renderRect, rotatedAngel, nullptr, SDL_FLIP_NONE);
isRenderered = true;
//return;
continue;
}
//if (!isRenderered) {
if (m_pieceMoveStatus.isAnimating && col == m_pieceMoveStatus.toCol && row == m_pieceMoveStatus.toRow) {
//SDL_Log("rendering..\n");
m_pieceMoveStatus.currentTime += Time::deltaTime();
@@ -165,7 +165,7 @@ void BoardRenderer::drawPiece(std::optional<std::pair<int, int>> selectedPiece)
} else {
SDL_RenderTexture(m_renderer, texture, nullptr, &rect);
}
//}
}