Move faster when there are more tiles to animate so animations don't take as long

This commit is contained in:
Jeremy Rand 2014-07-25 14:25:32 -05:00
parent f77826ed09
commit ae7930ddf1

View File

@ -193,6 +193,10 @@ void performAnimationsLeft(void)
tPos x; tPos x;
tPos y; tPos y;
bool firstFrame = true; bool firstFrame = true;
uint8_t speed = 1;
if (gNumAnims > BOARD_SIZE)
speed = 2;
do { do {
animInProgress = false; animInProgress = false;
@ -207,31 +211,57 @@ void performAnimationsLeft(void)
y = tileAnim->fromY; y = tileAnim->fromY;
if (!firstFrame) { if (!firstFrame) {
switch (x % TILE_WIDTH) { if (speed == 1) {
case 0: switch (x % TILE_WIDTH) {
break; case 0:
case 1: break;
textframexy(((x / TILE_WIDTH) + 1) * TILE_WIDTH, y, case 1:
TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE); textframexy(((x / TILE_WIDTH) + 1) * TILE_WIDTH, y,
break; TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
default: break;
x += TILE_WIDTH - 1; default:
cputcxy(x, y + 1, ' '); x += TILE_WIDTH - 1;
cputcxy(x, y + 2, ' '); cputcxy(x, y + 1, ' ');
cputcxy(x, y + 3, ' '); cputcxy(x, y + 2, ' ');
x -= TILE_WIDTH - 1; cputcxy(x, y + 3, ' ');
break; x -= TILE_WIDTH - 1;
break;
}
} else {
switch (x % TILE_WIDTH) {
case 0:
break;
case 1:
case 2:
x += TILE_WIDTH - 1;
cputcxy(x, y + 1, ' ');
cputcxy(x, y + 2, ' ');
cputcxy(x, y + 3, ' ');
x -= TILE_WIDTH - 1;
textframexy(((x / TILE_WIDTH) + 1) * TILE_WIDTH, y,
TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
break;
default:
x += TILE_WIDTH - 2;
cputsxy(x, y + 1, " ");
cputsxy(x, y + 2, " ");
cputsxy(x, y + 3, " ");
x -= TILE_WIDTH - 2;
break;
}
} }
} }
x--; x -= speed;
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
if (x == tileAnim->toX) { if (x <= tileAnim->toX) {
x = tileAnim->toX;
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
tileAnim->tileString = NULL; tileAnim->tileString = NULL;
printValueAt(x, y, tileAnim->endTileString); printValueAt(x, y, tileAnim->endTileString);
} else { } else {
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
tileAnim->fromX = x; tileAnim->fromX = x;
animInProgress = true; animInProgress = true;
printValueAt(x, y, tileAnim->tileString); printValueAt(x, y, tileAnim->tileString);
@ -252,6 +282,10 @@ void performAnimationsRight(void)
tPos x; tPos x;
tPos y; tPos y;
bool firstFrame = true; bool firstFrame = true;
uint8_t speed = 1;
if (gNumAnims > BOARD_SIZE)
speed = 2;
do { do {
animInProgress = false; animInProgress = false;
@ -266,29 +300,51 @@ void performAnimationsRight(void)
y = tileAnim->fromY; y = tileAnim->fromY;
if (!firstFrame) { if (!firstFrame) {
switch (x % TILE_WIDTH) { if (speed == 1) {
case 0: switch (x % TILE_WIDTH) {
break; case 0:
case (TILE_WIDTH - 1): break;
textframexy((x / TILE_WIDTH) * TILE_WIDTH, y, case (TILE_WIDTH - 1):
TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE); textframexy((x / TILE_WIDTH) * TILE_WIDTH, y,
break; TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
default: break;
cputcxy(x, y + 1, ' '); default:
cputcxy(x, y + 2, ' '); cputcxy(x, y + 1, ' ');
cputcxy(x, y + 3, ' '); cputcxy(x, y + 2, ' ');
break; cputcxy(x, y + 3, ' ');
break;
}
} else {
switch (x % TILE_WIDTH) {
case 0:
break;
case (TILE_WIDTH - 1):
case (TILE_WIDTH - 2):
textframexy((x / TILE_WIDTH) * TILE_WIDTH, y,
TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
cputcxy(x, y + 1, ' ');
cputcxy(x, y + 2, ' ');
cputcxy(x, y + 3, ' ');
break;
default:
cputsxy(x, y + 1, " ");
cputsxy(x, y + 2, " ");
cputsxy(x, y + 3, " ");
break;
}
} }
} }
x++; x += speed;
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
if (x == tileAnim->toX) { if (x >= tileAnim->toX) {
x = tileAnim->toX;
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
tileAnim->tileString = NULL; tileAnim->tileString = NULL;
printValueAt(x, y, tileAnim->endTileString); printValueAt(x, y, tileAnim->endTileString);
} else { } else {
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
tileAnim->fromX = x; tileAnim->fromX = x;
animInProgress = true; animInProgress = true;
printValueAt(x, y, tileAnim->tileString); printValueAt(x, y, tileAnim->tileString);
@ -309,6 +365,10 @@ void performAnimationsUp(void)
tPos x; tPos x;
tPos y; tPos y;
bool firstFrame = true; bool firstFrame = true;
uint8_t speed = 1;
if (gNumAnims > BOARD_SIZE)
speed = 2;
do { do {
animInProgress = false; animInProgress = false;
@ -328,20 +388,26 @@ void performAnimationsUp(void)
break; break;
default: default:
cputsxy(x + 1, y + TILE_HEIGHT - 1, " "); cputsxy(x + 1, y + TILE_HEIGHT - 1, " ");
if (speed > 1)
cputsxy(x + 1, y + TILE_HEIGHT - 1, " ");
textframexy(x, ((y / TILE_HEIGHT) + 1) * TILE_HEIGHT, textframexy(x, ((y / TILE_HEIGHT) + 1) * TILE_HEIGHT,
TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE); TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
break; break;
} }
} }
y--; if (y < speed)
y = 0;
else
y -= speed;;
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE); if (y <= tileAnim->toY) {
y = tileAnim->toY;
if (y == tileAnim->toY) { textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
tileAnim->tileString = NULL; tileAnim->tileString = NULL;
printValueAt(x, y, tileAnim->endTileString); printValueAt(x, y, tileAnim->endTileString);
} else { } else {
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
tileAnim->fromY = y; tileAnim->fromY = y;
animInProgress = true; animInProgress = true;
printValueAt(x, y, tileAnim->tileString); printValueAt(x, y, tileAnim->tileString);
@ -362,6 +428,10 @@ void performAnimationsDown(void)
tPos x; tPos x;
tPos y; tPos y;
bool firstFrame = true; bool firstFrame = true;
uint8_t speed = 1;
if (gNumAnims > BOARD_SIZE)
speed = 2;
do { do {
animInProgress = false; animInProgress = false;
@ -381,20 +451,24 @@ void performAnimationsDown(void)
break; break;
default: default:
cputsxy(x + 1, y, " "); cputsxy(x + 1, y, " ");
if (speed > 1)
cputsxy(x + 1, y + 1, " ");
textframexy(x, (y / TILE_HEIGHT) * TILE_HEIGHT, textframexy(x, (y / TILE_HEIGHT) * TILE_HEIGHT,
TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE); TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
break; break;
} }
} }
y++; y += speed;
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
if (y == tileAnim->toY) { if (y >= tileAnim->toY) {
y = tileAnim->toY;
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
tileAnim->tileString = NULL; tileAnim->tileString = NULL;
printValueAt(x, y, tileAnim->endTileString); printValueAt(x, y, tileAnim->endTileString);
} else { } else {
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
tileAnim->fromY = y; tileAnim->fromY = y;
animInProgress = true; animInProgress = true;
printValueAt(x, y, tileAnim->tileString); printValueAt(x, y, tileAnim->tileString);