mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-01 11:06:44 +01:00
allow player to change Derpy speed with arrows
This commit is contained in:
parent
f3c57cbbbb
commit
5a846cea24
2 changed files with 32 additions and 7 deletions
38
src/level.c
38
src/level.c
|
@ -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)) {
|
||||
|
|
|
@ -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. */
|
||||
|
|
Loading…
Reference in a new issue