allow player to change Derpy speed with arrows

This commit is contained in:
Sebastian Krzyszkowiak 2012-05-19 22:38:13 +02:00
parent f3c57cbbbb
commit 5a846cea24
2 changed files with 32 additions and 7 deletions

View file

@ -305,7 +305,7 @@ void Level_Draw(struct Game *game) {
if (game->level.debug_show_sprite_frames) al_draw_rectangle(x, y, x+w, y+h, al_map_rgba(255,0,0,255), 3);
if (tmp->hit) colision = true;
tmp->x -= tps(game, game->level.speed*60)*310;
tmp->x -= tps(game, game->level.speed*game->level.speed_modifier*60)*310;
if (tmp->callback) tmp->callback(game, tmp);
tmp = tmp->next;
} else {
@ -327,7 +327,7 @@ void Level_Draw(struct Game *game) {
al_draw_bitmap_region(*(game->level.derpy_sheet),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_speed_modifier)) {
game->level.sheet_tmp+=tps(game, 60);
if (game->level.sheet_tmp >= game->level.sheet_speed/game->level.sheet_speed_modifier) {
if (game->level.sheet_tmp >= (game->level.sheet_speed/game->level.speed_modifier)/game->level.sheet_speed_modifier) {
game->level.sheet_pos++;
game->level.sheet_tmp = 0;
}
@ -349,10 +349,10 @@ void Level_Draw(struct Game *game) {
al_draw_bitmap(game->level.foreground, (1+(-game->level.fg_pos))*al_get_bitmap_width(game->level.foreground), 0 ,0);
if (game->level.speed > 0) {
game->level.cl_pos += tps(game, 60*game->level.speed) * 0.2;
game->level.bg_pos += tps(game, 60*game->level.speed) * 0.6;
game->level.st_pos += tps(game, 60*game->level.speed) * 1;
game->level.fg_pos += tps(game, 60*game->level.speed) * 1.75;
game->level.cl_pos += tps(game, 60*game->level.speed*game->level.speed_modifier) * 0.2;
game->level.bg_pos += tps(game, 60*game->level.speed*game->level.speed_modifier) * 0.6;
game->level.st_pos += tps(game, 60*game->level.speed*game->level.speed_modifier) * 1;
game->level.fg_pos += tps(game, 60*game->level.speed*game->level.speed_modifier) * 1.75;
if (game->level.bg_pos >= 1) game->level.bg_pos=game->level.bg_pos-1;
if (game->level.st_pos >= 1) game->level.st_pos=game->level.st_pos-1;
if (game->level.fg_pos >= 1) game->level.fg_pos=game->level.fg_pos-1;
@ -483,6 +483,7 @@ void Level_Load(struct Game *game) {
game->level.fg_pos=0.2;
game->level.st_pos=0.1;
game->level.speed = 0;
game->level.speed_modifier = 1;
game->level.derpy_x = -0.2;
game->level.derpy_y = 0.6;
game->level.sheet_speed = tps(game, 60*2.4);
@ -548,6 +549,13 @@ int Level_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
game->level.debug_show_sprite_frames = !game->level.debug_show_sprite_frames;
}
if (game->level.current_level!=1) Moonwalk_Keydown(game, ev);
else if (game->level.handle_input) {
if (ev->keyboard.keycode==ALLEGRO_KEY_LEFT) {
game->level.speed_modifier = 0.75;
} else if (ev->keyboard.keycode==ALLEGRO_KEY_RIGHT) {
game->level.speed_modifier = 1.3;
}
}
if (ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) {
game->gamestate = GAMESTATE_PAUSE;
game->loadstate = GAMESTATE_LEVEL;
@ -557,8 +565,24 @@ int Level_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
}
void Level_ProcessLogic(struct Game *game, ALLEGRO_EVENT *ev) {
if (game->level.handle_input) {
if ((ev->type==ALLEGRO_EVENT_KEY_UP) && (ev->keyboard.keycode==ALLEGRO_KEY_LEFT)) {
game->level.speed_modifier = 1;
struct ALLEGRO_KEYBOARD_STATE keyboard;
al_get_keyboard_state(&keyboard);
if (al_key_down(&keyboard, ALLEGRO_KEY_RIGHT)) {
game->level.speed_modifier = 1.3;
}
} else if ((ev->type==ALLEGRO_EVENT_KEY_UP) && (ev->keyboard.keycode==ALLEGRO_KEY_RIGHT)) {
game->level.speed_modifier = 1;
struct ALLEGRO_KEYBOARD_STATE keyboard;
al_get_keyboard_state(&keyboard);
if (al_key_down(&keyboard, ALLEGRO_KEY_LEFT)) {
game->level.speed_modifier = 0.75;
}
}
}
if (game->level.current_level==1) TM_HandleEvent(ev);
}
void Level_Preload(struct Game *game, void (*progress)(struct Game*, float)) {

View file

@ -91,6 +91,7 @@ struct Spritesheet {
struct Level {
int current_level; /*!< Level number. */
float speed; /*!< Speed of the player. */
float speed_modifier; /*!< Modifier of the speed of the player. */
float bg_pos; /*!< Position of the background layer of the scene. */
float st_pos; /*!< Position of the stage layer of the scene. */
float fg_pos; /*!< Position of the foreground layer of the scene. */