some work on spritesheed speed

This commit is contained in:
Sebastian Krzyszkowiak 2012-04-09 13:31:14 +02:00
parent cf2bc20b68
commit 754f88facf
2 changed files with 21 additions and 13 deletions

View file

@ -25,7 +25,7 @@
#include "level.h" #include "level.h"
#include "timeline.h" #include "timeline.h"
// TODO: fix speeds to not depend on FPS // TODO: fix spritesheet speed to not depend on FPS
void Level_Passed(struct Game *game) { void Level_Passed(struct Game *game) {
if (game->level.current_level<6) { if (game->level.current_level<6) {
@ -45,28 +45,28 @@ void Level_Passed(struct Game *game) {
bool Accelerate(struct Game *game, struct TM_Action *action, enum TM_ActionState state) { bool Accelerate(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
if (state != TM_ACTIONSTATE_RUNNING) return false; if (state != TM_ACTIONSTATE_RUNNING) return false;
game->level.speed+=0.000005; game->level.speed+=tps(game, 0.000005*60);
if (game->level.speed<0.0020) return false; if (game->level.speed<tps(game, 0.0020*60)) return false;
return true; return true;
} }
bool Walk(struct Game *game, struct TM_Action *action, enum TM_ActionState state) { bool Walk(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
if (state != TM_ACTIONSTATE_RUNNING) return false; if (state != TM_ACTIONSTATE_RUNNING) return false;
game->level.derpy_x+=0.001; game->level.derpy_x+=tps(game, 60*0.001);
if (game->level.derpy_x<0.05) return false; if (game->level.derpy_x<0.05) return false;
return true; return true;
} }
bool Move(struct Game *game, struct TM_Action *action, enum TM_ActionState state) { bool Move(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
if (state != TM_ACTIONSTATE_RUNNING) return false; if (state != TM_ACTIONSTATE_RUNNING) return false;
game->level.speed=0.00035; game->level.speed=tps(game, 60*0.00035);
if (game->level.st_pos<0.275) return false; if (game->level.st_pos<0.275) return false;
return true; return true;
} }
bool Fly(struct Game *game, struct TM_Action *action, enum TM_ActionState state) { bool Fly(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
if (state != TM_ACTIONSTATE_RUNNING) return false; if (state != TM_ACTIONSTATE_RUNNING) return false;
game->level.derpy_y-=0.004; game->level.derpy_y-=tps(game, 60*0.004);
if (game->level.derpy_y>0.2) return false; if (game->level.derpy_y>0.2) return false;
game->level.handle_input=true; game->level.handle_input=true;
return true; return true;
@ -96,10 +96,17 @@ void Level_Draw(struct Game *game) {
al_clear_to_color(al_map_rgba(0,0,0,0)); al_clear_to_color(al_map_rgba(0,0,0,0));
al_draw_bitmap_region(game->level.derpy_walkcycle,al_get_bitmap_width(game->level.derpy)*(game->level.sheet_pos%game->level.sheet_cols),al_get_bitmap_height(game->level.derpy)*(game->level.sheet_pos/game->level.sheet_cols),al_get_bitmap_width(game->level.derpy), al_get_bitmap_height(game->level.derpy),0,0,0); al_draw_bitmap_region(game->level.derpy_walkcycle,al_get_bitmap_width(game->level.derpy)*(game->level.sheet_pos%game->level.sheet_cols),al_get_bitmap_height(game->level.derpy)*(game->level.sheet_pos/game->level.sheet_cols),al_get_bitmap_width(game->level.derpy), al_get_bitmap_height(game->level.derpy),0,0,0);
if (game->level.sheet_speed) { if (game->level.sheet_speed) {
game->level.sheet_tmp++; //int i;
if (game->level.sheet_speed==1) game->level.sheet_pos++; //for (i = 0; i < tps(game, 60); i++ ) {
if (game->level.sheet_tmp%game->level.sheet_speed) game->level.sheet_pos++; game->level.sheet_tmp+=tps(game, 60);
if (game->level.sheet_pos>=game->level.sheet_cols*game->level.sheet_rows) game->level.sheet_pos=0; //if (game->level.sheet_speed==1) game->level.sheet_pos++;
if (game->level.sheet_tmp >= game->level.sheet_speed) {
game->level.sheet_pos++;
game->level.sheet_tmp = 0;
//game->level.sheet_tmp -= game->level.sheet_speed;
}
if (game->level.sheet_pos>=game->level.sheet_cols*game->level.sheet_rows) game->level.sheet_pos=0;
//}
} }
al_set_target_bitmap(al_get_backbuffer(game->display)); al_set_target_bitmap(al_get_backbuffer(game->display));
@ -117,7 +124,7 @@ void Level_Draw(struct Game *game) {
if (game->level.st_pos >= 1) game->level.st_pos=1-game->level.st_pos; if (game->level.st_pos >= 1) game->level.st_pos=1-game->level.st_pos;
if (game->level.fg_pos >= 1) game->level.fg_pos=1-game->level.fg_pos; if (game->level.fg_pos >= 1) game->level.fg_pos=1-game->level.fg_pos;
} }
game->level.cl_pos += 0.0001; game->level.cl_pos += tps(game, 60*0.0001);
TM_Process(); TM_Process();
} }
} }
@ -234,7 +241,7 @@ void Level_Load(struct Game *game) {
game->level.sheet_rows = 4; game->level.sheet_rows = 4;
game->level.sheet_cols = 6; game->level.sheet_cols = 6;
game->level.sheet_pos = 0; game->level.sheet_pos = 0;
game->level.sheet_speed = 2; game->level.sheet_speed = 2.5;
game->level.sheet_tmp = 0; game->level.sheet_tmp = 0;
game->level.handle_input = false; game->level.handle_input = false;
al_clear_to_color(al_map_rgb(0,0,0)); al_clear_to_color(al_map_rgb(0,0,0));

View file

@ -61,7 +61,8 @@ struct Level {
float bg_pos, st_pos, fg_pos, cl_pos; float bg_pos, st_pos, fg_pos, cl_pos;
float derpy_x, derpy_y; float derpy_x, derpy_y;
bool handle_input; bool handle_input;
int sheet_rows, sheet_cols, sheet_pos, sheet_tmp, sheet_speed; int sheet_rows, sheet_cols, sheet_pos;
float sheet_tmp, sheet_speed;
ALLEGRO_BITMAP *background, *stage, *foreground, *clouds; ALLEGRO_BITMAP *background, *stage, *foreground, *clouds;
ALLEGRO_BITMAP *welcome; ALLEGRO_BITMAP *welcome;
ALLEGRO_BITMAP *derpy_walkcycle; /*!< Derpy walk cycle spritesheet. */ ALLEGRO_BITMAP *derpy_walkcycle; /*!< Derpy walk cycle spritesheet. */