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,6 +211,7 @@ void performAnimationsLeft(void)
y = tileAnim->fromY; y = tileAnim->fromY;
if (!firstFrame) { if (!firstFrame) {
if (speed == 1) {
switch (x % TILE_WIDTH) { switch (x % TILE_WIDTH) {
case 0: case 0:
break; break;
@ -222,16 +227,41 @@ void performAnimationsLeft(void)
x -= TILE_WIDTH - 1; x -= TILE_WIDTH - 1;
break; 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;
if (x <= tileAnim->toX) {
x = tileAnim->toX;
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE); textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
if (x == tileAnim->toX) {
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,6 +300,7 @@ void performAnimationsRight(void)
y = tileAnim->fromY; y = tileAnim->fromY;
if (!firstFrame) { if (!firstFrame) {
if (speed == 1) {
switch (x % TILE_WIDTH) { switch (x % TILE_WIDTH) {
case 0: case 0:
break; break;
@ -279,16 +314,37 @@ void performAnimationsRight(void)
cputcxy(x, y + 3, ' '); cputcxy(x, y + 3, ' ');
break; 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;
if (x >= tileAnim->toX) {
x = tileAnim->toX;
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE); textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
if (x == tileAnim->toX) {
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;;
if (y <= tileAnim->toY) {
y = tileAnim->toY;
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE); textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
if (y == tileAnim->toY) {
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;
if (y >= tileAnim->toY) {
y = tileAnim->toY;
textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE); textframexy(x, y, TILE_WIDTH, TILE_HEIGHT, TEXTFRAME_WIDE);
if (y == tileAnim->toY) {
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);