hook part 3 -- happy ending

This commit is contained in:
Masséna Fezard | Nounouille 2022-01-09 15:17:53 +01:00
parent d553ec9bb1
commit c4c4f6d760
1 changed files with 37 additions and 12 deletions

View File

@ -54,8 +54,10 @@ player_update(void)
player.locked = 0;
}
player.spd.x *= (1 - PLAYER_FRIC);
player.spd.x += dir * PLAYER_ACC;
if (!player.hooking) {
player.spd.x *= (1 - PLAYER_FRIC);
player.spd.x += dir * PLAYER_ACC;
}
player.spd.y +=
GRAVITY + GRAVITY * (player.airbreak && !player.hooking);
@ -70,26 +72,49 @@ player_update(void)
void
player_hook(void)
{
struct Vec2 player_middle = {player.pos.x + PLAYER_S / 2,
player.pos.y + PLAYER_S / 2};
/* get the nearest hook */
if (!player.locked) {
player.hook_pos = hook_closest(&player.pos);
player.hook_pos = hook_closest(&player_middle);
}
const float dist = length(player.pos.x, player.pos.y, player.hook_pos.x,
player.hook_pos.y);
const float dist = length(player_middle.x, player_middle.y,
player.hook_pos.x, player.hook_pos.y);
if (dist < 100 && player.pos.y > player.hook_pos.y) {
if (dist < 100 && player_middle.y > player.hook_pos.y) {
player.hooking = 1;
player.locked = 1;
player.jumping = 1;
}
if (player.hooking && dist) {
const float dist_x = player.hook_pos.x - player.pos.x;
const float dist_y = player.hook_pos.y - player.pos.y;
if (abs(player.spd.x) < 5) {
player.spd.x += dist_x * (0.5f / dist);
float dist_x = player.hook_pos.x - player_middle.x;
float dist_y = player.hook_pos.y - player_middle.y;
/*if (abs(dist_x) < 1) {
dist_x = 1 * sign(dist_x);
}
if (abs(player.spd.y) < 5) {
player.spd.y += dist_y * (1.0f / dist);
if (abs(dist_y) < 1) {
dist_y = 1 * sign(dist_y);
}*/
struct FVec2 force = {};
if (dist_x) {
force.x = dist_x / dist;
}
if (dist_y) {
force.y = dist_y / dist;
}
player.spd.x += force.x;
player.spd.y += force.y;
if (abs(player.spd.x) > 16) {
player.spd.x = 8 * sign(player.spd.x);
}
if (abs(player.spd.y) > 8) {
player.spd.y = 8 * sign(player.spd.y);
}
}
}