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
1 changed files with 113 additions and 39 deletions

View File

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