mirror of https://git.sr.ht/~kikoodx/momento
parent
b5ccc8536c
commit
e47d3fb4b2
|
@ -13,3 +13,6 @@
|
|||
#define FRC_AIR (ACC_AIR / MAX_HSPD)
|
||||
#define AIR_RES 0.02
|
||||
#define GRAVITY 0.2
|
||||
#define JUMP_SPD -4.0
|
||||
#define JUMP_BUFFER 10
|
||||
#define JUMP_GRACE 10
|
||||
|
|
|
@ -14,6 +14,10 @@ struct Player {
|
|||
float spd_y;
|
||||
float rem_x;
|
||||
float rem_y;
|
||||
/* keys and buffering */
|
||||
int k_jump_previous;
|
||||
int jump_buffer;
|
||||
int jump_grace;
|
||||
};
|
||||
|
||||
/* used for collisions */
|
||||
|
|
|
@ -8,10 +8,5 @@ extern bopti_image_t bimg_player;
|
|||
|
||||
void player_draw(struct Player player)
|
||||
{
|
||||
Tile collisions[COLLIDE_POINTS];
|
||||
int i;
|
||||
player_collide(collisions, player.x, player.y);
|
||||
for (i = 0; i < COLLIDE_POINTS; i += 1)
|
||||
dprint(0, i * 20, C_WHITE, "%d: %d", i, collisions[i]);
|
||||
dimage(player.x, player.y, &bimg_player);
|
||||
}
|
||||
|
|
|
@ -17,6 +17,9 @@ struct Player player_init(void)
|
|||
.spd_y = 0.0,
|
||||
.rem_x = 0.0,
|
||||
.rem_y = 0.0,
|
||||
.k_jump_previous = 0,
|
||||
.jump_buffer = 0,
|
||||
.jump_grace = 0,
|
||||
};
|
||||
|
||||
/* find spawn position in level */
|
||||
|
|
|
@ -16,6 +16,9 @@ void player_update(struct Player *player)
|
|||
/* process input */
|
||||
const int dir_x = keydown(KEY_RIGHT) - keydown(KEY_LEFT);
|
||||
/* const int dir_y = keydown(KEY_DOWN) - keydown(KEY_UP); */
|
||||
const int k_jump = keydown(KEY_SHIFT);
|
||||
const int kp_jump = k_jump && (!player->k_jump_previous);
|
||||
player->k_jump_previous = k_jump;
|
||||
|
||||
/* horizontal friction/acceleration */
|
||||
player->spd_x *= (on_ground) ? (1 - FRC_GND) : (1 - FRC_AIR);
|
||||
|
@ -38,6 +41,24 @@ void player_update(struct Player *player)
|
|||
player->spd_y += GRAVITY * factor;
|
||||
}
|
||||
|
||||
/* input buffer */
|
||||
if (kp_jump)
|
||||
player->jump_buffer = JUMP_BUFFER;
|
||||
else if (player->jump_buffer)
|
||||
player->jump_buffer -= 1;
|
||||
/* grace frames */
|
||||
if (on_ground)
|
||||
player->jump_grace = JUMP_GRACE;
|
||||
else if (player->jump_grace)
|
||||
player->jump_grace -= 1;
|
||||
|
||||
/* jump (youhou) */
|
||||
if (k_jump && player->jump_buffer && player->jump_grace) {
|
||||
player->spd_y = JUMP_SPD;
|
||||
player->jump_buffer = 0;
|
||||
player->jump_grace = 0;
|
||||
}
|
||||
|
||||
/* speed reminder */
|
||||
const float spd_n_rem_x = player->spd_x + player->rem_x;
|
||||
const int spd_x = (int)spd_n_rem_x;
|
||||
|
|
Loading…
Reference in New Issue