diff --git a/src/game/GameSession.cpp b/src/game/GameSession.cpp index b50b9c9..7c07a18 100644 --- a/src/game/GameSession.cpp +++ b/src/game/GameSession.cpp @@ -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; } diff --git a/src/graphics/game/BoardRenderer.cpp b/src/graphics/game/BoardRenderer.cpp index 85e0515..4690f74 100644 --- a/src/graphics/game/BoardRenderer.cpp +++ b/src/graphics/game/BoardRenderer.cpp @@ -101,7 +101,7 @@ void BoardRenderer::drawPiece(std::optional> 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> 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> selectedPiece) } else { SDL_RenderTexture(m_renderer, texture, nullptr, &rect); } - //} + }