mirror of
https://github.com/zhenyan121/SporeBG-Conid.git
synced 2026-04-10 06:14:08 +08:00
fix: rendering selected piece
This commit is contained in:
@@ -61,8 +61,9 @@ bool GameSession::executeAction(int toRow, int toCol) {
|
|||||||
auto [fromRow, fromCol] = *m_seletedPiece;
|
auto [fromRow, fromCol] = *m_seletedPiece;
|
||||||
if (m_currentActionType == ActionType::GROW) {
|
if (m_currentActionType == ActionType::GROW) {
|
||||||
if (Rule::canGrow(m_board.get(), fromRow, fromCol, toRow, toCol, m_currentPlayer)) {
|
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_gamePieceEventCallback(GamePieceEvent::PLACE_PIECE, toRow, toCol, -1, -1);
|
||||||
|
m_board->placePieceAt(toRow, toCol, m_currentPlayer);
|
||||||
|
|
||||||
// 如果执行了操作就擦除
|
// 如果执行了操作就擦除
|
||||||
markComponentAsUsed(getOldComponentID(fromRow, fromCol));
|
markComponentAsUsed(getOldComponentID(fromRow, fromCol));
|
||||||
return true;
|
return true;
|
||||||
@@ -70,23 +71,27 @@ bool GameSession::executeAction(int toRow, int toCol) {
|
|||||||
}
|
}
|
||||||
if (m_currentActionType == ActionType::MOVE) {
|
if (m_currentActionType == ActionType::MOVE) {
|
||||||
if (Rule::canMove(m_board.get(), fromRow, fromCol, toRow, toCol, m_currentPlayer)) {
|
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_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::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_board->placePieceAt(toRow, toCol, m_currentPlayer);
|
||||||
|
|
||||||
m_gamePieceEventCallback(GamePieceEvent::MOVE_PIECE, fromRow, fromCol, toRow, toCol);
|
|
||||||
markComponentAsUsed(getOldComponentID(fromRow, fromCol));
|
markComponentAsUsed(getOldComponentID(fromRow, fromCol));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (m_currentActionType == ActionType::SPORE) {
|
if (m_currentActionType == ActionType::SPORE) {
|
||||||
if (Rule::canSpore(m_board.get(), fromRow, fromCol, toRow, toCol, m_currentPlayer)) {
|
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_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_gamePieceEventCallback(GamePieceEvent::PLACE_PIECE, toRow, toCol, -1, -1);
|
||||||
|
m_board->removePieceAt(fromRow, fromCol);
|
||||||
|
m_board->placePieceAt(toRow, toCol, m_currentPlayer);
|
||||||
|
|
||||||
markComponentAsUsed(getOldComponentID(fromRow, fromCol));
|
markComponentAsUsed(getOldComponentID(fromRow, fromCol));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ void BoardRenderer::drawPiece(std::optional<std::pair<int, int>> selectedPiece)
|
|||||||
};
|
};
|
||||||
|
|
||||||
//SDL_RenderFillRect(m_renderer, &rect);
|
//SDL_RenderFillRect(m_renderer, &rect);
|
||||||
bool isRenderered = false;
|
|
||||||
auto texture = m_textureManager->createTextureFromRect(rect, color);
|
auto texture = m_textureManager->createTextureFromRect(rect, color);
|
||||||
//SDL_FRect srect = {0, 0, rect.w, rect.h};
|
//SDL_FRect srect = {0, 0, rect.w, rect.h};
|
||||||
if (isSelected) {
|
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);
|
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) {
|
if (m_pieceMoveStatus.isAnimating && col == m_pieceMoveStatus.toCol && row == m_pieceMoveStatus.toRow) {
|
||||||
//SDL_Log("rendering..\n");
|
//SDL_Log("rendering..\n");
|
||||||
m_pieceMoveStatus.currentTime += Time::deltaTime();
|
m_pieceMoveStatus.currentTime += Time::deltaTime();
|
||||||
@@ -165,7 +165,7 @@ void BoardRenderer::drawPiece(std::optional<std::pair<int, int>> selectedPiece)
|
|||||||
} else {
|
} else {
|
||||||
SDL_RenderTexture(m_renderer, texture, nullptr, &rect);
|
SDL_RenderTexture(m_renderer, texture, nullptr, &rect);
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user