jump buffer & jump grace

This commit is contained in:
KikooDX 2021-12-17 14:25:26 +01:00
parent 77a5ea75f0
commit a1858119be
3 changed files with 18 additions and 1 deletions

View File

@ -13,3 +13,5 @@
#define GRAVITY 0.3f
#define JUMP_SPEED -6.0f
#define JUMP_BREAK 3
#define JUMP_BUFFER 12
#define JUMP_GRACE 6

View File

@ -7,6 +7,7 @@ struct Player {
struct Vec pos;
struct VecF spd, rem;
enum AirState air_state;
int jump_buffer, jump_grace;
};
void player_init(struct Player *);

View File

@ -19,6 +19,8 @@ player_init(struct Player *p)
p->pos.y = TILE_SIZE;
reset_speed(p, 1, 1);
p->air_state = AS_NEUTRAL;
p->jump_buffer = 0;
p->jump_grace = 0;
}
void
@ -57,10 +59,22 @@ player_update(struct Player *p)
break;
}
/* jump buffer */
if (kp_jump)
p->jump_buffer = JUMP_BUFFER;
else if (p->jump_buffer)
p->jump_buffer--;
/* jump grace */
if (on_ground)
p->jump_grace = JUMP_GRACE;
else if (p->jump_grace)
p->jump_grace--;
/* jump */
if (on_ground && kp_jump) {
if (p->jump_grace && p->jump_buffer && k_jump) {
p->spd.y = JUMP_SPEED;
p->air_state = AS_RISING;
p->jump_buffer = 0;
p->jump_grace = 0;
}
player_move(p, update_rem(p));