From b16b908003ecc694023d3be65c92c502dcb5ee68 Mon Sep 17 00:00:00 2001 From: Christian Kroll Date: Wed, 15 Dec 2010 21:51:59 +0000 Subject: [PATCH] minor acceleration of the predictNextRow function --- games/tetris/bucket.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/games/tetris/bucket.c b/games/tetris/bucket.c index 19130ea..9a2b78c 100644 --- a/games/tetris/bucket.c +++ b/games/tetris/bucket.c @@ -465,22 +465,20 @@ uint16_t* tetris_bucket_predictBottomRow(tetris_bucket_iterator_t *pIt, pIt->nCurrentRow = pBucket->nHeight - 1; pIt->nRowBuffer = 0; - // determine sane start and stop values for the piece's row indices - pIt->nPieceHighestRow = nRow; - pIt->nPieceLowestRow = ((pIt->nPieceHighestRow + 3) < pBucket->nHeight) ? - (pIt->nPieceHighestRow + 3) : pBucket->nHeight - 1; - - // prepare piece bitmap for faster detection of complete lines pIt->nPieceMap = tetris_piece_getBitmap(pPiece); - if ((nRow + 3) >= pBucket->nHeight) - { - pIt->nPieceMap <<= (nRow + 4 - pBucket->nHeight) * 4; - } + + // determine sane start and stop values for the piece's row indices + pIt->nPieceHighestRow = nRow + tetris_piece_getTopRow(pIt->nPieceMap); + int8_t nBottomOffset = tetris_piece_getBottomOffset(pIt->nPieceMap); + pIt->nPieceLowestRow = (nRow + nBottomOffset) < pBucket->nHeight ? + nRow + nBottomOffset : pBucket->nHeight - 1; + // accelerate detection of full rows + pIt->nPieceMap <<= (nRow + 3 - pIt->nPieceLowestRow) * 4; pIt->nShift = nColumn - 12; // don't return any trailing rows which are empty, so we look for a stop row - pIt->nStopRow = pBucket->nFirstTaintedRow < nRow ? - pBucket->nFirstTaintedRow : nRow; + pIt->nStopRow = pBucket->nFirstTaintedRow < pIt->nPieceHighestRow ? + pBucket->nFirstTaintedRow : pIt->nPieceHighestRow; pIt->nStopRow = pIt->nStopRow < 0 ? 0 : pIt->nStopRow; return tetris_bucket_predictNextRow(pIt);