Hello. I am having a problem, I need to animate a lot of things but even after providing only 2 animations (Walking, and swinging a hoe) my code is getting hard to maintain with variables all over the place.
If you would like to see the animation here is a release of the game. https://www.dropbox.com/sh/cu1rgxprt2pdo48/hDGkZe3cAL
press right control button to swing hoe.
Entity move_hero (Entity hero, ALLEGRO_BITMAP* tileset,vector<vector<Tile>> mv,int height,int width) {
//constants
//tw means tile width.
int tw = 16;
//al_draw_bitmap_region needs tileset, source x, source y, size of x, size of y, where to display on x axis, and where to display on y axis.
if(hero.move_animation==false) {
if(hero.is_swing_hoe == true) {
switch (hero.facing) {
case 'u':
if(hero.sta_frame<=9) {
al_draw_bitmap_region(tileset, 0*tw, 17*tw, tw, tw, 15*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 0*tw, 16*tw, tw, tw, 15*tw, 14*tw, 0);
}
else if(hero.sta_frame<=19) {
al_draw_bitmap_region(tileset, 1*tw, 17*tw, tw, tw, 15*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 1*tw, 16*tw, tw, tw, 15*tw, 14*tw, 0);
}
else if(hero.sta_frame<=29) {
al_draw_bitmap_region(tileset, 2*tw, 17*tw, tw, tw, 15*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 2*tw, 16*tw, tw, tw, 15*tw, 14*tw, 0);
}
else if (hero.sta_frame <= 30) {
al_draw_bitmap_region(tileset, 2*tw, 17*tw, tw, tw, 15*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 2*tw, 16*tw, tw, tw, 15*tw, 14*tw, 0);
hero.is_swing_hoe = false;
}
break;
case 'd' :
if(hero.sta_frame<=9) {
al_draw_bitmap_region(tileset, 0*tw, 13*tw, tw, tw, 15*tw, 14*tw, 0);
al_draw_bitmap_region(tileset, 0*tw, 14*tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.sta_frame<=19) {
al_draw_bitmap_region(tileset, 1*tw, 13*tw, tw, tw, 15*tw, 14*tw, 0);
al_draw_bitmap_region(tileset, 1*tw, 14*tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.sta_frame<=29) {
al_draw_bitmap_region(tileset, 2*tw, 13*tw, tw, tw, 15*tw, 14*tw, 0);
al_draw_bitmap_region(tileset, 2*tw, 14*tw, tw, tw, 15*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 2*tw, 15*tw, tw, tw, 15*tw, tw * tw, 0);
}
else if (hero.sta_frame <= 30) {
al_draw_bitmap_region(tileset, 2*tw, 13*tw, tw, tw, 15*tw, 14*tw, 0);
al_draw_bitmap_region(tileset, 2*tw, 14*tw, tw, tw, 15*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 2*tw, 15*tw, tw, tw, 15*tw, tw * tw, 0);
hero.is_swing_hoe = false;
}
break;
case 'l':
if(hero.sta_frame<=9) {
al_draw_bitmap_region(tileset, 0*tw, 18*tw, tw, tw, 15*tw, 14*tw, 0);
al_draw_bitmap_region(tileset, 0*tw, 19*tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.sta_frame<=19) {
al_draw_bitmap_region(tileset, 1*tw, 18*tw, tw, tw, 14*tw, 14*tw, 0);
al_draw_bitmap_region(tileset, 1*tw, 19*tw, tw, tw, 14*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 2*tw, 18*tw, tw, tw, 15*tw, 14*tw, 0);
al_draw_bitmap_region(tileset, 2*tw, 19*tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.sta_frame<=29) {
al_draw_bitmap_region(tileset, 3*tw, 19*tw, tw, tw, 14*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 4*tw, 19*tw, tw, tw, 15*tw, 15*tw, 0);
}
else if (hero.sta_frame <= 30) {
al_draw_bitmap_region(tileset, 3*tw, 19*tw, tw, tw, 14*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 4*tw, 19*tw, tw, tw, 15*tw, 15*tw, 0);
hero.is_swing_hoe = false;
}
break;
case 'r':
if(hero.sta_frame<=9) {
al_draw_bitmap_region(tileset, 0*tw, 20*tw, tw, tw, 15*tw, 14*tw, 0);
al_draw_bitmap_region(tileset, 0*tw, 21*tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.sta_frame<=19) {
al_draw_bitmap_region(tileset, 1*tw, 20*tw, tw, tw, 15*tw, 14*tw, 0);
al_draw_bitmap_region(tileset, 1*tw, 21*tw, tw, tw, 15*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 2*tw, 20*tw, tw, tw, 16* tw, 14*tw, 0);
al_draw_bitmap_region(tileset, 2*tw, 21*tw, tw, tw, 16* tw, 15*tw, 0);
}
else if(hero.sta_frame<=29) {
al_draw_bitmap_region(tileset, 3*tw, 21*tw, tw, tw, 15*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 4*tw, 21*tw, tw, tw, 16*tw, 15*tw, 0);
}
else if (hero.sta_frame <= 30) {
al_draw_bitmap_region(tileset, 3*tw, 21*tw, tw, tw, 15*tw, 15*tw, 0);
al_draw_bitmap_region(tileset, 4*tw, 21*tw, tw, tw, 16*tw, 15*tw, 0);
hero.is_swing_hoe = false;
}
break;
break;
}
hero.sta_frame++;
}
}
if(hero.is_swing_hoe == false) {
switch (hero.facing) {
case 'u':
if(hero.move_animation==true) {
for(int col=0;col<height;col++) {
for(int row=0;row<width;row++) {
al_draw_bitmap_region(tileset, mv[col][row].sx * tw, mv[col][row].sy * tw, tw, tw, (row*tw - hero.wloc*tw)+15*tw, (col*tw - hero.hloc*tw)+15*tw+hero.frame, 0);
}
}
if (hero.frame<= 7) {
al_draw_bitmap_region(tileset, 1*tw, 3 * tw, tw, tw, 15*tw, 15*tw, 0);
}
else if (hero.frame < 15) {
al_draw_bitmap_region(tileset, 2*tw, 3 * tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.frame == 15) {
al_draw_bitmap_region(tileset, 2*tw, 3 * tw, tw, tw, 15*tw, 15*tw, 0);
hero.move_animation = false;
hero.hloc-=1;
}
hero.frame++;
}
else {
al_draw_bitmap_region(tileset, 0*tw, 3 * tw, tw, tw, 15*tw, 15*tw, 0);
}
break;
case 'd':
if(hero.move_animation==true) {
for(int col=0;col<height;col++) {
for(int row=0;row<width;row++) {
al_draw_bitmap_region(tileset, mv[col][row].sx * tw, mv[col][row].sy * tw, tw, tw, (row*tw - hero.wloc*tw)+15*tw, (col*tw - hero.hloc*tw)+15*tw-hero.frame, 0);
}
}
if(hero.frame <=7) {
al_draw_bitmap_region(tileset, 1*tw, 2*tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.frame <= 14) {
al_draw_bitmap_region(tileset, 2*tw, 2*tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.frame==15) {
al_draw_bitmap_region(tileset, 2*tw, 2*tw, tw, tw, 15*tw, 15*tw, 0);
hero.move_animation = false;
hero.hloc+=1;
}
hero.frame++;
}
else {
al_draw_bitmap_region(tileset, 0*tw, 2*tw, tw, tw, 15*tw, 15*tw, 0);
}
break;
case 'l':
if(hero.move_animation==true) {
for(int col=0;col<height;col++) {
for(int row=0;row<width;row++) {
al_draw_bitmap_region(tileset, mv[col][row].sx * tw, mv[col][row].sy * tw, tw, tw, (row*tw - hero.wloc*tw)+15*tw+hero.frame, (col*tw - hero.hloc*tw)+15*tw, 0);
}
}
if(hero.frame<=7) {
al_draw_bitmap_region(tileset, 1*tw, 4 * tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.frame<=14) {
al_draw_bitmap_region(tileset, 2*tw, 4 * tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.frame==15) {
al_draw_bitmap_region(tileset, 2*tw, 4 * tw, tw, tw, 15*tw, 15*tw, 0);
hero.move_animation = false;
hero.wloc-=1;
}
hero.frame++;
}
else {
al_draw_bitmap_region(tileset, 0*tw, 4 * tw, tw, tw, 15*tw, 15*tw, 0);
}
break;
case 'r':
if(hero.move_animation==true) {
for(int col=0;col<height;col++) {
for(int row=0;row<width;row++) {
al_draw_bitmap_region(tileset, mv[col][row].sx * tw, mv[col][row].sy * tw, tw, tw, (row*tw - hero.wloc*tw)+15*tw-hero.frame, (col*tw - hero.hloc*tw)+15*tw, 0);
}
}
if(hero.frame<=7) {
al_draw_bitmap_region(tileset, 1*tw, 5 * tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.frame<=14) {
al_draw_bitmap_region(tileset, 2*tw, 5 * tw, tw, tw, 15*tw, 15*tw, 0);
}
else if(hero.frame==15) {
al_draw_bitmap_region(tileset, 2*tw, 5 * tw, tw, tw, 15*tw, 15*tw, 0);
hero.move_animation = false;
hero.wloc+=1;
}
hero.frame++;
}
else {
al_draw_bitmap_region(tileset, 0*tw, 5 * tw, tw, tw, 15*tw, 15*tw, 0);
}
break;
}
}
return hero;
}






