diff options
author | Stephen Enders <smenders@gmail.com> | 2022-02-12 12:41:19 -0500 |
---|---|---|
committer | Stephen Enders <smenders@gmail.com> | 2022-02-12 12:41:19 -0500 |
commit | 523f70eb9eddacd5f008e746a88c2fc4e4171697 (patch) | |
tree | b1cc4acf2fff94ca921de928fe19861b07f255a4 | |
parent | 88c364d3bbcc5c3ea78abb7051c161eb87c00bb3 (diff) |
Prevent piece capture on illegal move
You could capture a piece on a move that was shorter/longer than a valid
placement.
For example: if you rolled a 2 and there was an enemy piece 1 space
away. You could place your token in space 1, remove the enemy piece, but
your move wouldn't count as valid and you'd snap back to your original
position. By placing the catpure method after the "in_place" we ensure
we only remove the enemy piece if its fully valid.
-rw-r--r-- | src/ur.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
@@ -369,17 +369,6 @@ main() pieces, enemyPieces, takenPieceId)) { - // did we take a piece - if (takenPieceId >= 0) { - for (auto& ep : (*enemyPieces)) { - if (ep.id == takenPieceId) { - Log::debug("Captured piece " + Log::str(takenPieceId) + - " returning to board side"); - ep.sprite.setPosition(ep.origin); - ep.position = -1; - } - } - } grabbed_piece->sprite.setPosition(s.getPosition()); if (bp.position == (grabbed_piece->position + turn_roll)) { @@ -387,6 +376,19 @@ main() Log::str(bp.position)); grabbed_piece->position = bp.position; in_place = true; + + // did we take a piece + if (takenPieceId >= 0) { + for (auto& ep : (*enemyPieces)) { + if (ep.id == takenPieceId) { + Log::debug("Captured piece " + + Log::str(takenPieceId) + + " returning to board side"); + ep.sprite.setPosition(ep.origin); + ep.position = -1; + } + } + } } break; } |