input buffering for 8 frames
This commit is contained in:
parent
4b835efb83
commit
953634b967
77
src/main.cpp
77
src/main.cpp
|
@ -41,6 +41,9 @@ int play_level(int level_id)
|
|||
player->frame = 0;
|
||||
player->energy_percent = 0.0;
|
||||
|
||||
/* Input buffering */
|
||||
struct { int left, right, up, shift; } keybuffer = {};
|
||||
|
||||
/* FPS regulation setup */
|
||||
int volatile need_frame = 1;
|
||||
int last_frame_us = 0;
|
||||
|
@ -144,6 +147,7 @@ int play_level(int level_id)
|
|||
//======= Input =======//
|
||||
|
||||
key_event_t ev;
|
||||
|
||||
while((ev = pollevent()).type != KEYEV_NONE) {
|
||||
if(ev.type == KEYEV_UP || ev.type == KEYEV_HOLD)
|
||||
continue;
|
||||
|
@ -153,46 +157,47 @@ int play_level(int level_id)
|
|||
game_run = false;
|
||||
if(key == KEY_OPTN)
|
||||
game.debug.footer = !game.debug.footer;
|
||||
if(key == KEY_F1) {
|
||||
game.level = level_create(1);
|
||||
level_update(&game.level, game.player.z);
|
||||
}
|
||||
if(key == KEY_F2) {
|
||||
game.level = level_create(2);
|
||||
level_update(&game.level, game.player.z);
|
||||
}
|
||||
if(key == KEY_F3) {
|
||||
game.level = level_create(3);
|
||||
level_update(&game.level, game.player.z);
|
||||
}
|
||||
if(key == KEY_LEFT && !player->airborne()) {
|
||||
player->stance = player::Jumping;
|
||||
player->jump_dir = -1;
|
||||
player->jump_t = 0.0;
|
||||
player->jump_key = key;
|
||||
player->vheight = JUMP_THRUST;
|
||||
player->frame = 0;
|
||||
}
|
||||
if((key == KEY_UP || key == KEY_SHIFT) && !player->airborne()) {
|
||||
player->stance = player::Jumping;
|
||||
player->jump_dir = 0;
|
||||
player->jump_t = 0.0;
|
||||
player->jump_key = key;
|
||||
player->vheight = JUMP_THRUST;
|
||||
player->frame = 0;
|
||||
}
|
||||
if(key == KEY_RIGHT && !player->airborne()) {
|
||||
player->stance = player::Jumping;
|
||||
player->jump_dir = +1;
|
||||
player->jump_t = 0.0;
|
||||
player->jump_key = key;
|
||||
player->vheight = JUMP_THRUST;
|
||||
player->frame = 0;
|
||||
}
|
||||
|
||||
if(key == KEY_LEFT)
|
||||
keybuffer.left = 8;
|
||||
if(key == KEY_RIGHT)
|
||||
keybuffer.right = 8;
|
||||
if(key == KEY_UP)
|
||||
keybuffer.up = 8;
|
||||
if(key == KEY_SHIFT)
|
||||
keybuffer.shift = 8;
|
||||
}
|
||||
|
||||
if(!game_run) break;
|
||||
|
||||
int key = keybuffer.left ? KEY_LEFT :
|
||||
keybuffer.right ? KEY_RIGHT :
|
||||
keybuffer.up ? KEY_UP :
|
||||
keybuffer.shift ? KEY_SHIFT : 0;
|
||||
|
||||
if(key && !player->airborne()) {
|
||||
player->stance = player::Jumping;
|
||||
player->jump_dir = (key == KEY_RIGHT) - (key == KEY_LEFT);
|
||||
player->jump_t = 0.0;
|
||||
player->jump_key = key;
|
||||
player->vheight = JUMP_THRUST;
|
||||
player->frame = 0;
|
||||
|
||||
keybuffer.left = 0;
|
||||
keybuffer.right = 0;
|
||||
keybuffer.up = 0;
|
||||
keybuffer.shift = 0;
|
||||
}
|
||||
|
||||
if(keybuffer.left > 0)
|
||||
keybuffer.left--;
|
||||
if(keybuffer.right > 0)
|
||||
keybuffer.right--;
|
||||
if(keybuffer.up > 0)
|
||||
keybuffer.up--;
|
||||
if(keybuffer.shift > 0)
|
||||
keybuffer.shift--;
|
||||
|
||||
//======= Simulation =======//
|
||||
|
||||
num vz = player->vz * (num(1) + player->energy_percent / 200);
|
||||
|
|
Loading…
Reference in New Issue