fix bug with spritesheets derped when toggling fullscreen

This commit is contained in:
Sebastian Krzyszkowiak 2012-05-10 12:21:53 +02:00
parent 8b1b60ebde
commit 3e36e0c264
3 changed files with 12 additions and 10 deletions

2
TODO
View file

@ -1,5 +1,5 @@
- obstracles/bonuses - obstracles/bonuses
- HUD - moar love for HUD
- some love for about screen - some love for about screen
- voice manager - voice manager
- night map - night map

View file

@ -42,9 +42,8 @@ void SelectDerpySpritesheet(struct Game *game, char* name) {
game->level.sheet_blanks = tmp->blanks; 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); game->level.sheet_scale = tmp->scale;
/*int w = al_get_bitmap_width(tmp->bitmap)/tmp->cols; if (game->level.derpy) al_destroy_bitmap(game->level.derpy);
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); 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;
} }
@ -235,19 +234,19 @@ 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.flying)) { if ((game->level.derpy_y > 0.6) && (game->level.flying)) {
SelectDerpySpritesheet(game, "run"); SelectDerpySpritesheet(game, "run");
game->level.flying = false; game->level.flying = false;
game->level.sheet_speed = tps(game, 60*0.0020/game->level.speed); game->level.sheet_speed = tps(game, 60*0.0020/game->level.speed);
} }
else if ((game->level.derpy_y <= 0.5) && (!game->level.flying)) { else if ((game->level.derpy_y <= 0.6) && (!game->level.flying)) {
SelectDerpySpritesheet(game, "fly"); SelectDerpySpritesheet(game, "fly");
game->level.flying = true; game->level.flying = true;
game->level.sheet_speed = tps(game, 60*2.4); 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.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.8) game->level.derpy_y=0.8;
} }
al_hold_bitmap_drawing(true); al_hold_bitmap_drawing(true);
@ -445,7 +444,6 @@ void Level_Load(struct Game *game) {
game->level.speed = 0; game->level.speed = 0;
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");
game->level.sheet_speed = tps(game, 60*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;
@ -516,6 +514,7 @@ void Level_ProcessLogic(struct Game *game, ALLEGRO_EVENT *ev) {
void Level_Preload(struct Game *game) { void Level_Preload(struct Game *game) {
game->level.derpy_sheets = NULL; game->level.derpy_sheets = NULL;
game->level.derpy = NULL;
Pause_Preload(game); Pause_Preload(game);
RegisterDerpySpritesheet(game, "walk"); RegisterDerpySpritesheet(game, "walk");
RegisterDerpySpritesheet(game, "fly"); RegisterDerpySpritesheet(game, "fly");
@ -591,7 +590,10 @@ void Level_PreloadBitmaps(struct Game *game) {
tmp = tmp->next; tmp = tmp->next;
} }
game->level.derpy = al_create_bitmap(al_get_display_width(game->display)*0.1953125, al_get_display_height(game->display)*0.25); if (!game->level.derpy) SelectDerpySpritesheet(game, "stand");
game->level.derpy = al_create_bitmap(al_get_bitmap_width(*(game->level.derpy_sheet))/game->level.sheet_cols, al_get_bitmap_height(*(game->level.derpy_sheet))/game->level.sheet_rows);
if (game->level.current_level!=1) Moonwalk_PreloadBitmaps(game); if (game->level.current_level!=1) Moonwalk_PreloadBitmaps(game);
else { else {
/* TODO: handle strange display aspects */ /* TODO: handle strange display aspects */

View file

@ -80,7 +80,7 @@ struct Level {
bool flying; bool flying;
float meter_alpha; float meter_alpha;
int sheet_rows, sheet_cols, sheet_pos, sheet_blanks; 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, sheet_scale;
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. */
unsigned int music_pos; /*!< Position of sample instance. Used when pausing game. */ unsigned int music_pos; /*!< Position of sample instance. Used when pausing game. */