Anyway I'm kinda stumped now, Im having problems with my timer (its a turn based combat system, based on the variable newTime reaching a certain value).
My timer seems to keep everything connected. Looking at the code here,could anyone give me some tips on how to implement a seperate timer for drawCombatBar() and drawCombatSprites(). So my animation, and player turn are not tied together ?
Id like to have say, the player hit SPACE_BAR, this starts a timer, for animation of the player attacking the enemy.[/font]
When this timer reaches the end(ie of animation), the combatBar counter would kick back in, until the user is ready to make a move. When it reaches its end, you are allowed to press Space_Bar(make a move).
However while the space bar isnt pressed, I'd also like a seperate timer for animating idle player/enemy.
Sorry for the rubbish code, I am still learning..
And I probably didn't explain myself well =[
If needed I can post the entire code, I just dont want to give you all headaches
//window.h
void startTimer() // ev
{
start = SDL_GetTicks();
}
//window.h
int getTicks()
{
newTime = SDL_GetTicks() - start;
return newTime;
}
//window.h
void drawCombatBar() // uses newTime
{
if(newTime >= 0 && newTime <= 500) // ie while, just not infinite, ft that
{
apply_surface(b_counter_x,b_counter_y,tile[10], screen, NULL);
}
if(newTime >= 500 && newTime <= 1000)
{
apply_surface(b_counter_x,b_counter_y,tile[10], screen, NULL);
}
if(newTime >= 1000 && newTime <= 1500)
{
apply_surface(b_counter_x,b_counter_y,tile[10], screen, NULL);
apply_surface(b_counter_x+32, b_counter_y, tile[10], screen, NULL);
}
if(newTime >= 1500 && newTime <= 2000)
{
apply_surface(b_counter_x, b_counter_y, tile[10], screen, NULL);
apply_surface(b_counter_x+32, b_counter_y, tile[10], screen, NULL);
}
if(newTime >= 2000 && newTime <= 2500 )
{
apply_surface(b_counter_x, b_counter_y, tile[10], screen, NULL);
apply_surface(b_counter_x+32, b_counter_y, tile[10], screen, NULL);
apply_surface(b_counter_x+64, b_counter_y, tile[10], screen, NULL);
}
if(newTime >= 2500 && newTime <= 3000 )
{
apply_surface(b_counter_x, b_counter_y, tile[10], screen, NULL);
apply_surface(b_counter_x+32, b_counter_y, tile[10], screen, NULL);
apply_surface(b_counter_x+64, b_counter_y, tile[10], screen, NULL);
}
if(newTime >= 3000 && newTime <= 3500 )
{
apply_surface(b_counter_x, b_counter_y, tile[10], screen, NULL);
apply_surface(b_counter_x+32, b_counter_y, tile[10], screen, NULL);
apply_surface(b_counter_x+64, b_counter_y, tile[10], screen, NULL);
apply_surface(b_counter_x+96, b_counter_y, tile[10], screen, NULL);
}
if(newTime >= 3500)
{
apply_surface(b_counter_x, b_counter_y, tile[10], screen, NULL);
apply_surface(b_counter_x+32, b_counter_y, tile[10], screen, NULL);
apply_surface(b_counter_x+64, b_counter_y, tile[10], screen, NULL);
apply_surface(b_counter_x+96, b_counter_y, tile[10], screen, NULL);
pause = true;
}
}
//window.h
void drawCombatSprites() // uses newTime
{
switch(enemy){
case 1: // 1st enemy
if(newTime >= 0 && newTime <= 500) // ie while, just not infinite, ft that
{
apply_surface(100,200, enemy1bSpriteSheet, screen, &e2b_clip[0]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[0]);
}
if(newTime >= 500 && newTime <= 1000)
{
apply_surface(100,200, enemy1bSpriteSheet, screen, &e2b_clip[1]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[1]);
}
if(newTime >= 1000 && newTime <= 1500)
{
apply_surface(100,200, enemy1bSpriteSheet, screen, &e2b_clip[2]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[2]);
}
if(newTime >= 1500 && newTime <= 2000)
{
apply_surface(100,200, enemy1bSpriteSheet, screen, &e2b_clip[3]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[3]);
}
if(newTime >= 2000 && newTime <= 2500 )
{
apply_surface(100,200, enemy1bSpriteSheet, screen, &e2b_clip[0]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[0]);
}
if(newTime >= 2500 && newTime <= 3000 )
{
apply_surface(100,200, enemy1bSpriteSheet, screen, &e2b_clip[1]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[1]);
}
if(newTime >= 3000 && newTime <= 3500 )
{
apply_surface(100,200, enemy1bSpriteSheet, screen, &e2b_clip[2]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[2]);
}
if(newTime >= 3500)
{
apply_surface(100,200, enemy1bSpriteSheet, screen, &e2b_clip[3]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[3]);
}
break;
case 2:// second enemy
if(newTime >= 0 && newTime <= 500) // ie while, just not infinite, ft that
{
apply_surface(100,200, enemy2bSpriteSheet, screen, &e2b_clip[0]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[0]);
}
if(newTime >= 500 && newTime <= 1000)
{
apply_surface(100,200, enemy2bSpriteSheet, screen, &e2b_clip[1]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[1]);
}
if(newTime >= 1000 && newTime <= 1500)
{
apply_surface(100,200, enemy2bSpriteSheet, screen, &e2b_clip[2]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[2]);
}
if(newTime >= 1500 && newTime <= 2000)
{
apply_surface(100,200, enemy2bSpriteSheet, screen, &e2b_clip[3]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[3]);
}
if(newTime >= 2000 && newTime <= 2500 )
{
apply_surface(100,200, enemy2bSpriteSheet, screen, &e2b_clip[0]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[0]);
}
if(newTime >= 2500 && newTime <= 3000 )
{
apply_surface(100,200, enemy2bSpriteSheet, screen, &e2b_clip[1]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[1]);
}
if(newTime >= 3000 && newTime <= 3500 )
{
apply_surface(100,200, enemy2bSpriteSheet, screen, &e2b_clip[2]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[2]);
}
if(newTime >= 3500)
{
apply_surface(100,200, enemy2bSpriteSheet, screen, &e2b_clip[3]);
apply_surface(450,200, playerbSpriteSheet, screen, &pb_clip[3]);
}
break;
case 3: // third enemy
break;
}//end case enemy
}
//window.h
void updateTimer() // getTicks() + drawCombatSprites(), also determines allow move
{
getTicks();
drawCombatBar();
drawCombatSprites();
if(newTime <= 3999){allow_move = false;}
if(newTime >= 4000){allow_move = true;}
if(newTime >= 4000 && unpause == true){
newTime = 0;
startTimer();
unpause = false;
}
}