hook part 3 -- happy ending
This commit is contained in:
parent
d553ec9bb1
commit
c4c4f6d760
49
src/player.c
49
src/player.c
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue