Hitbox adjustment + Collision fix
parent
d9544bc441
commit
c6c879da00
|
@ -59,22 +59,28 @@ void move(struct kinematic_obj *obj, Vector2 acceleration){
|
||||||
if (obj->rect.x + obj->rect.width / 2 < current->obj->rect.x + current->obj->rect.width / 2){
|
if (obj->rect.x + obj->rect.width / 2 < current->obj->rect.x + current->obj->rect.width / 2){
|
||||||
obj->rect.x -= hmove;
|
obj->rect.x -= hmove;
|
||||||
obj->pos.x -= hmove;
|
obj->pos.x -= hmove;
|
||||||
|
if (obj->velocity.x > 0)
|
||||||
|
obj->velocity.x = 0;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
obj->rect.x += hmove;
|
obj->rect.x += hmove;
|
||||||
obj->pos.x += hmove;
|
obj->pos.x += hmove;
|
||||||
|
if (obj->velocity.x < 0)
|
||||||
|
obj->velocity.x = 0;
|
||||||
}
|
}
|
||||||
obj->velocity.x = 0;
|
|
||||||
}else{
|
}else{
|
||||||
if (obj->rect.y + obj->rect.height / 2 < current->obj->rect.y + current->obj->rect.height / 2){
|
if (obj->rect.y + obj->rect.height / 2 < current->obj->rect.y + current->obj->rect.height / 2){
|
||||||
obj->rect.y -= vmove;
|
obj->rect.y -= vmove;
|
||||||
obj->pos.y -= vmove;
|
obj->pos.y -= vmove;
|
||||||
|
if (obj->velocity.y > 0)
|
||||||
|
obj->velocity.y = 0;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
obj->rect.y += vmove;
|
obj->rect.y += vmove;
|
||||||
obj->pos.y += vmove;
|
obj->pos.y += vmove;
|
||||||
|
if (obj->velocity.y < 0)
|
||||||
|
obj->velocity.y = 0;
|
||||||
}
|
}
|
||||||
obj->velocity.y = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iter: current = current->next;
|
iter: current = current->next;
|
||||||
|
|
47
obj/player.c
47
obj/player.c
|
@ -6,7 +6,7 @@
|
||||||
#define RUN_INIT_SPD 230
|
#define RUN_INIT_SPD 230
|
||||||
#define JUMP_SPD 500
|
#define JUMP_SPD 500
|
||||||
#define GRAV 1200
|
#define GRAV 1200
|
||||||
#define DASH_SPD 650
|
#define DASH_SPD 500
|
||||||
|
|
||||||
static bool allow_move = true;
|
static bool allow_move = true;
|
||||||
static bool allow_friction = true;
|
static bool allow_friction = true;
|
||||||
|
@ -22,7 +22,7 @@ static Vector2 dash_vec = (Vector2){0.0, 0.0};
|
||||||
const unsigned int run_start_frames = 10;
|
const unsigned int run_start_frames = 10;
|
||||||
const unsigned int jump_squat_frames = 4;
|
const unsigned int jump_squat_frames = 4;
|
||||||
const unsigned int land_lag_frames = 6;
|
const unsigned int land_lag_frames = 6;
|
||||||
const unsigned int dash_time_frames = 6;
|
const unsigned int dash_time_frames = 8;
|
||||||
|
|
||||||
static unsigned int afterimage_fcounter = 10;
|
static unsigned int afterimage_fcounter = 10;
|
||||||
const unsigned int afterimage_frames = 10;
|
const unsigned int afterimage_frames = 10;
|
||||||
|
@ -139,21 +139,15 @@ void player_input_check(struct player_obj *player){
|
||||||
player->state = JUMPING;
|
player->state = JUMPING;
|
||||||
on_ground = false;
|
on_ground = false;
|
||||||
short_hop = false;
|
short_hop = false;
|
||||||
player->kinematic.set_dim_reduction[1] = 0;
|
|
||||||
player->kinematic.set_dim_reduction[3] = 10;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case JUMPING:
|
case JUMPING:
|
||||||
set_squish_target_offset(player->image, 3, 15);
|
|
||||||
accel.x = AIR_ACCEL*(IsKeyDown(KEY_RIGHT)-IsKeyDown(KEY_LEFT));
|
accel.x = AIR_ACCEL*(IsKeyDown(KEY_RIGHT)-IsKeyDown(KEY_LEFT));
|
||||||
if (player->kinematic.velocity.y >= 0){
|
if (player->kinematic.velocity.y >= 0){
|
||||||
player->state = FALLING;
|
player->state = FALLING;
|
||||||
player->kinematic.set_dim_reduction[3] = 0;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FALLING:
|
case FALLING:
|
||||||
//player->kinematic.set_dim_reduction[3] = -player->kinematic.velocity.y/20;
|
|
||||||
set_squish_target_offset(player->image, 1, 15);
|
|
||||||
accel.x = AIR_ACCEL*(IsKeyDown(KEY_RIGHT)-IsKeyDown(KEY_LEFT));
|
accel.x = AIR_ACCEL*(IsKeyDown(KEY_RIGHT)-IsKeyDown(KEY_LEFT));
|
||||||
if (place_meeting(&player->kinematic, (Vector2){0,1})){
|
if (place_meeting(&player->kinematic, (Vector2){0,1})){
|
||||||
player->state = LANDING;
|
player->state = LANDING;
|
||||||
|
@ -161,13 +155,13 @@ void player_input_check(struct player_obj *player){
|
||||||
player->kinematic.set_dim_reduction[3] = 0;
|
player->kinematic.set_dim_reduction[3] = 0;
|
||||||
player->kinematic.dim_reduction[1] = PLAYER_SIZE;
|
player->kinematic.dim_reduction[1] = PLAYER_SIZE;
|
||||||
player->kinematic.set_dim_reduction[1] = 0;
|
player->kinematic.set_dim_reduction[1] = 0;
|
||||||
|
set_squish_target_offset(player->image, 1, 0);
|
||||||
on_ground = true;
|
on_ground = true;
|
||||||
state_buffer = IDLE;
|
state_buffer = IDLE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LANDING:
|
case LANDING:
|
||||||
dash_count = 1;
|
dash_count = 1;
|
||||||
set_squish_target_offset(player->image, 1, 0);
|
|
||||||
if(frame_counter<land_lag_frames){
|
if(frame_counter<land_lag_frames){
|
||||||
++frame_counter;
|
++frame_counter;
|
||||||
if (IsKeyDown(JUMP))
|
if (IsKeyDown(JUMP))
|
||||||
|
@ -194,8 +188,8 @@ void player_input_check(struct player_obj *player){
|
||||||
player->kinematic.velocity.y = dash_vec.y;
|
player->kinematic.velocity.y = dash_vec.y;
|
||||||
++frame_counter;
|
++frame_counter;
|
||||||
if (frame_counter > dash_time_frames){
|
if (frame_counter > dash_time_frames){
|
||||||
player->kinematic.velocity.x *= 0.6;
|
player->kinematic.velocity.x *= 0.7;
|
||||||
player->kinematic.velocity.y *= 0.6;
|
player->kinematic.velocity.y *= 0.7;
|
||||||
if (!place_meeting(&player->kinematic, (Vector2){0,1})){
|
if (!place_meeting(&player->kinematic, (Vector2){0,1})){
|
||||||
player->state = JUMPING;
|
player->state = JUMPING;
|
||||||
}
|
}
|
||||||
|
@ -211,14 +205,6 @@ void player_input_check(struct player_obj *player){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the hitbox reductions
|
|
||||||
adjust_hitbox(&player->kinematic);
|
|
||||||
if (afterimage_fcounter < afterimage_frames){
|
|
||||||
if(afterimage_fcounter%2 == 0)
|
|
||||||
create_afterimage(player);
|
|
||||||
++afterimage_fcounter;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsKeyPressed(JUMP) && jumps > 0){
|
if (IsKeyPressed(JUMP) && jumps > 0){
|
||||||
player->state = JUMP_SQUAT;
|
player->state = JUMP_SQUAT;
|
||||||
allow_friction = true;
|
allow_friction = true;
|
||||||
|
@ -280,5 +266,28 @@ void player_input_check(struct player_obj *player){
|
||||||
player->state = FALLING;
|
player->state = FALLING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
player->kinematic.set_dim_reduction[1] = 0;
|
||||||
|
player->kinematic.set_dim_reduction[3] = 0;
|
||||||
|
if (on_ground == false){
|
||||||
|
if (player->kinematic.velocity.y < 0)
|
||||||
|
player->kinematic.set_dim_reduction[3] = -player->kinematic.velocity.y / 40;
|
||||||
|
if (player->kinematic.velocity.y > 0)
|
||||||
|
player->kinematic.set_dim_reduction[1] = player->kinematic.velocity.y / 40;
|
||||||
|
|
||||||
|
set_squish_target_offset(player->image, 1, player->kinematic.velocity.y / 30);
|
||||||
|
set_squish_target_offset(player->image, 3, -player->kinematic.velocity.y / 30);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Generate afterimages
|
||||||
|
if (afterimage_fcounter < afterimage_frames){
|
||||||
|
if(afterimage_fcounter%2 == 0)
|
||||||
|
create_afterimage(player);
|
||||||
|
++afterimage_fcounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the hitbox reductions
|
||||||
|
adjust_hitbox(&player->kinematic);
|
||||||
move(&player->kinematic, accel);
|
move(&player->kinematic, accel);
|
||||||
}
|
}
|
Loading…
Reference in New Issue