cAnimation::cAnimation()
{
direction = NORTH;
curframe = 0;
f_count = 0;
f_delay = 10;
}
void cAnimation::animate_cycle()
{
if (f_count++ > f_delay)
{
f_count = 0;
switch (direction)
{
case NORTH:
{
curframe++;
if (curframe < 0)
curframe = 7;
if (curframe > 7)
curframe = 0;
}break;
case EAST:
{
curframe++;
if (curframe < 8)
curframe = 15;
if (curframe > 15)
curframe = 8;
}break;
case SOUTH:
{
curframe++;
if (curframe < 16)
curframe = 23;
if (curframe > 23)
curframe = 16;
}break;
case WEST:
{
curframe++;
if (curframe < 24)
curframe = 31;
if (curframe > 31)
curframe = 24;
}break;
case NORTHWEST:
{
curframe++;
if (curframe < 32)
curframe = 39;
if (curframe > 39)
curframe = 32;
}break;
case NORTHEAST:
{
curframe++;
if (curframe < 40)
curframe = 47;
if (curframe > 47)
curframe = 40;
}break;
case SOUTHEAST:
{
curframe++;
if (curframe < 48)
curframe = 55;
if (curframe > 55)
curframe = 48;
}break;
case SOUTHWEST:
{
curframe++;
if (curframe < 56)
curframe = 63;
if (curframe > 63)
curframe = 56;
}break;
}
}
}
void cAnimation::animate_half_cycle()
{
if (f_count++ > f_delay)
{
f_count = 0;
switch (direction)
{
case NORTH:
{
curframe++;
if (curframe < 0)
curframe = 3;
if (curframe > 3)
curframe = 0;
}break;
case EAST:
{
curframe++;
if (curframe < 4)
curframe = 7;
if (curframe > 7)
curframe = 4;
}break;
case SOUTH:
{
curframe++;
if (curframe < 8)
curframe = 11;
if (curframe > 11)
curframe = 8;
}break;
case WEST:
{
curframe++;
if (curframe < 12)
curframe = 15;
if (curframe > 15)
curframe = 12;
}break;
case NORTHWEST:
{
curframe++;
if (curframe < 16)
curframe = 19;
if (curframe > 19)
curframe = 16;
}break;
case NORTHEAST:
{
curframe++;
if (curframe < 20)
curframe = 23;
if (curframe > 23)
curframe = 20;
}break;
case SOUTHEAST:
{
curframe++;
if (curframe < 24)
curframe = 27;
if (curframe > 27)
curframe = 24;
}break;
case SOUTHWEST:
{
curframe++;
if (curframe < 28)
curframe = 31;
if (curframe > 31)
curframe = 28;
}break;
}
}
}
void cAnimation::animate_misc()
{
if (f_count++ > f_delay)
{
f_count = 0;
switch (direction)
{
case NORTH:
{
curframe++;
if (curframe < 0)
curframe = 3;
}break;
case EAST:
{
curframe++;
if (curframe < 4)
curframe = 7;
}break;
case SOUTH:
{
curframe++;
if (curframe < 8)
curframe = 11;
}break;
case WEST:
{
curframe++;
if (curframe < 12)
curframe = 15;
}break;
case NORTHWEST:
{
curframe++;
if (curframe < 16)
curframe = 19;
}break;
case NORTHEAST:
{
curframe++;
if (curframe < 20)
curframe = 23;
}break;
case SOUTHEAST:
{
curframe++;
if (curframe < 24)
curframe = 27;
}break;
case SOUTHWEST:
{
curframe++;
if (curframe < 28)
curframe = 31;
}break;
}
}
}
Basically, animate_cycle() would be used for walking or idling, so outside the class I could go:
void cPlayer::idle()
{
draw_action = IDLE; // Drawing is done in a function elsewhere.
animate_cycle();
}
Then animate_half_cycle() would be used for actions a player can do that doesn't use as many frames, like sitting or swimming. And finally, animate_misc() animates the attack of a player or monster, but it could also be used for other things, like maybe having an animation of drinking a potion or something.
Any suggestions on how I could greatly improve this code?