add fly animation by Yudhaikeledai

This commit is contained in:
Sebastian Krzyszkowiak 2012-05-08 13:22:56 +02:00
parent 27ab9eaad8
commit 896b9d57aa
2 changed files with 30 additions and 12 deletions

View file

@ -39,8 +39,13 @@ void SelectDerpySpritesheet(struct Game *game, char* name) {
game->level.derpy_sheet = &(tmp->bitmap); game->level.derpy_sheet = &(tmp->bitmap);
game->level.sheet_rows = tmp->rows; game->level.sheet_rows = tmp->rows;
game->level.sheet_cols = tmp->cols; game->level.sheet_cols = tmp->cols;
game->level.sheet_blanks = tmp->blanks;
game->level.sheet_speed_modifier = tmp->speed; game->level.sheet_speed_modifier = tmp->speed;
game->level.sheet_pos = 0; game->level.sheet_pos = 0;
al_destroy_bitmap(game->level.derpy);
/*int w = al_get_bitmap_width(tmp->bitmap)/tmp->cols;
int h = al_get_bitmap_height(tmp->bitmap)/tmp->rows;*/
game->level.derpy = al_create_bitmap(al_get_display_height(game->display)*0.25*tmp->aspect*tmp->scale, al_get_display_height(game->display)*0.25*tmp->scale);
return; return;
} }
tmp = tmp->next; tmp = tmp->next;
@ -59,7 +64,10 @@ void RegisterDerpySpritesheet(struct Game *game, char* name) {
s->bitmap = NULL; s->bitmap = NULL;
s->cols = atoi(al_get_config_value(config, "", "cols")); s->cols = atoi(al_get_config_value(config, "", "cols"));
s->rows = atoi(al_get_config_value(config, "", "rows")); s->rows = atoi(al_get_config_value(config, "", "rows"));
s->blanks = atoi(al_get_config_value(config, "", "blanks"));
s->speed = atof(al_get_config_value(config, "", "speed")); s->speed = atof(al_get_config_value(config, "", "speed"));
s->aspect = atof(al_get_config_value(config, "", "aspect"));
s->scale = atof(al_get_config_value(config, "", "scale"));
s->next = game->level.derpy_sheets; s->next = game->level.derpy_sheets;
game->level.derpy_sheets = s; game->level.derpy_sheets = s;
al_destroy_config(config); al_destroy_config(config);
@ -108,7 +116,7 @@ bool Move(struct Game *game, struct TM_Action *action, enum TM_ActionState state
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_INIT) action->arguments = NULL; if (state == TM_ACTIONSTATE_INIT) action->arguments = NULL;
if (state != TM_ACTIONSTATE_RUNNING) return false; if (state != TM_ACTIONSTATE_RUNNING) return false;
if (!(action->arguments)) SelectDerpySpritesheet(game, "fly"); if (!(action->arguments)) { SelectDerpySpritesheet(game, "fly"); game->level.flying = true; }
action->arguments++; action->arguments++;
game->level.derpy_y-=tps(game, 60*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;
@ -213,9 +221,17 @@ void Level_Draw(struct Game *game) {
game->level.derpy_y += tps(game, 60*0.005); game->level.derpy_y += tps(game, 60*0.005);
/*PrintConsole(game, "Derpy Y position: %f", game->level.derpy_y);*/ /*PrintConsole(game, "Derpy Y position: %f", game->level.derpy_y);*/
} }
if ((game->level.derpy_y > 0.5) && (!game->level.sheet_speed)) { SelectDerpySpritesheet(game, "run"); } if ((game->level.derpy_y > 0.5) && (game->level.flying)) {
else if ((game->level.derpy_y <= 0.5) && (game->level.sheet_speed)) { SelectDerpySpritesheet(game, "fly"); game->level.sheet_speed=0; } SelectDerpySpritesheet(game, "run");
if (game->level.derpy_y > 0.5) game->level.sheet_speed = tps(game, 60*0.0020/game->level.speed); game->level.flying = false;
game->level.sheet_speed = tps(game, 60*0.0020/game->level.speed);
}
else if ((game->level.derpy_y <= 0.5) && (!game->level.flying)) {
SelectDerpySpritesheet(game, "fly");
game->level.flying = true;
game->level.sheet_speed = tps(game, 60*2.4);
}
if (!game->level.flying) game->level.sheet_speed = tps(game, 60*0.0020/game->level.speed);
if (game->level.derpy_y < 0) game->level.derpy_y=0; if (game->level.derpy_y < 0) game->level.derpy_y=0;
else if (game->level.derpy_y > 0.75) game->level.derpy_y=0.75; else if (game->level.derpy_y > 0.75) game->level.derpy_y=0.75;
} }
@ -273,12 +289,12 @@ void Level_Draw(struct Game *game) {
game->level.sheet_pos++; game->level.sheet_pos++;
game->level.sheet_tmp = 0; game->level.sheet_tmp = 0;
} }
if (game->level.sheet_pos>=game->level.sheet_cols*game->level.sheet_rows) game->level.sheet_pos=0; if (game->level.sheet_pos>=game->level.sheet_cols*game->level.sheet_rows-game->level.sheet_blanks) game->level.sheet_pos=0;
} }
al_set_target_bitmap(al_get_backbuffer(game->display)); al_set_target_bitmap(al_get_backbuffer(game->display));
al_hold_bitmap_drawing(true); al_hold_bitmap_drawing(true);
al_draw_tinted_bitmap(game->level.derpy, al_map_rgba(255,255-colision*255,255-colision*255,255), derpyx, derpyy, 0); al_draw_tinted_bitmap(game->level.derpy, al_map_rgba(255,255-colision*255,255-colision*255,255), derpyx+al_get_display_width(game->display)*0.1953125-al_get_bitmap_width(game->level.derpy), derpyy, 0);
al_draw_bitmap(game->level.foreground, (-game->level.fg_pos)*al_get_bitmap_width(game->level.foreground), 0 ,0); al_draw_bitmap(game->level.foreground, (-game->level.fg_pos)*al_get_bitmap_width(game->level.foreground), 0 ,0);
al_draw_bitmap(game->level.foreground, (1+(-game->level.fg_pos))*al_get_bitmap_width(game->level.foreground), 0 ,0); al_draw_bitmap(game->level.foreground, (1+(-game->level.fg_pos))*al_get_bitmap_width(game->level.foreground), 0 ,0);
@ -409,10 +425,11 @@ void Level_Load(struct Game *game) {
game->level.derpy_x = -0.2; game->level.derpy_x = -0.2;
game->level.derpy_y = 0.6; game->level.derpy_y = 0.6;
SelectDerpySpritesheet(game, "stand"); SelectDerpySpritesheet(game, "stand");
game->level.sheet_speed = 2.4; game->level.sheet_speed = tps(game, 60*2.4);
game->level.sheet_tmp = 0; game->level.sheet_tmp = 0;
game->level.handle_input = false; game->level.handle_input = false;
game->level.obstracles = NULL; game->level.obstracles = NULL;
game->level.flying = false;
al_clear_to_color(al_map_rgb(0,0,0)); al_clear_to_color(al_map_rgb(0,0,0));
if (game->level.current_level!=1) Moonwalk_Load(game); if (game->level.current_level!=1) Moonwalk_Load(game);
else { else {
@ -546,7 +563,7 @@ void Level_PreloadBitmaps(struct Game *game) {
while (tmp) { while (tmp) {
char filename[255] = { }; char filename[255] = { };
sprintf(filename, "levels/derpy/%s.png", tmp->name); sprintf(filename, "levels/derpy/%s.png", tmp->name);
tmp->bitmap = LoadScaledBitmap(filename, al_get_display_width(game->display)*0.1953125*tmp->cols, al_get_display_height(game->display)*0.25*tmp->rows); tmp->bitmap = LoadScaledBitmap(filename, al_get_display_height(game->display)*0.25*tmp->aspect*tmp->cols*tmp->scale, al_get_display_height(game->display)*0.25*tmp->rows*tmp->scale);
tmp = tmp->next; tmp = tmp->next;
} }

View file

@ -64,8 +64,8 @@ struct Obstracle {
struct Spritesheet { struct Spritesheet {
char* name; char* name;
ALLEGRO_BITMAP* bitmap; ALLEGRO_BITMAP* bitmap;
int rows, cols; int rows, cols, blanks;
float speed; float speed, aspect, scale;
struct Spritesheet* next; struct Spritesheet* next;
}; };
@ -76,7 +76,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; bool flying;
int sheet_rows, sheet_cols, sheet_pos, sheet_blanks;
float sheet_tmp, sheet_speed, sheet_speed_modifier; float sheet_tmp, sheet_speed, sheet_speed_modifier;
ALLEGRO_SAMPLE *sample; /*!< Sample with background music. */ ALLEGRO_SAMPLE *sample; /*!< Sample with background music. */
ALLEGRO_SAMPLE_INSTANCE *music; /*!< Sample instance with background music. */ ALLEGRO_SAMPLE_INSTANCE *music; /*!< Sample instance with background music. */