diff --git a/src/collision.c b/src/collision.c index 3a55471..8bcaec2 100644 --- a/src/collision.c +++ b/src/collision.c @@ -42,11 +42,13 @@ Vector _internal_collision_overlap_on_axis(PhysicsEntity self, PhysicsEntity oth if(a_range.min <= b_range.max && a_range.min <= b_range.max) { const float overlap_left = a_range.max - b_range.min; const float overlap_right = b_range.min - a_range.max; + const float overlap_left = a_range.max - b_range.min; + const float overlap_right = b_range.min - a_range.max; + *out_point = fabsf(overlap_right) <= fabsf(overlap_left) ? a_range.maxpoint : a_range.minpoint; + if(a_range.min <= b_range.max && b_range.min <= a_range.max) { const float shortest = fminf(overlap_left, overlap_right); - *out_point = overlap_right < overlap_left ? a_range.maxpoint : a_range.minpoint; return vmulff(axis, shortest); } else { - *out_point = InfinityVector; return ZeroVector; } } diff --git a/src/collision.h b/src/collision.h index bc295eb..188e8e0 100644 --- a/src/collision.h +++ b/src/collision.h @@ -18,6 +18,7 @@ typedef struct Collision { Vector edge_right; } Collision; +extern Collision collision_invert(Collision src, PhysicsEntity new_other); extern int collision_check(PhysicsEntity a, PhysicsEntity b, Collision* out_a, Collision* out_b); #endif // !_fencer_collision_h