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 "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) {
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) {
if (state != TM_ACTIONSTATE_RUNNING) return false;
game->level.speed+=0.000005;
if (game->level.speed<0.0020) return false;
game->level.speed+=tps(game, 0.000005*60);
if (game->level.speed<tps(game, 0.0020*60)) return false;
return true;
}
bool Walk(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
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;
return true;
}
bool Move(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
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;
return true;
}
bool Fly(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
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;
game->level.handle_input=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_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) {
game->level.sheet_tmp++;
if (game->level.sheet_speed==1) game->level.sheet_pos++;
if (game->level.sheet_tmp%game->level.sheet_speed) game->level.sheet_pos++;
//int i;
//for (i = 0; i < tps(game, 60); i++ ) {
game->level.sheet_tmp+=tps(game, 60);
//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));
@ -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.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();
}
}
@ -234,7 +241,7 @@ void Level_Load(struct Game *game) {
game->level.sheet_rows = 4;
game->level.sheet_cols = 6;
game->level.sheet_pos = 0;
game->level.sheet_speed = 2;
game->level.sheet_speed = 2.5;
game->level.sheet_tmp = 0;
game->level.handle_input = false;
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 derpy_x, derpy_y;
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 *welcome;
ALLEGRO_BITMAP *derpy_walkcycle; /*!< Derpy walk cycle spritesheet. */