reworked overlap range so that it now detects 'inverse' collisions

This commit is contained in:
Sara 2023-11-01 22:59:12 +01:00
parent f5a9b3e8c6
commit 22709234cd
2 changed files with 5 additions and 2 deletions

View file

@ -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;
}
}

View file

@ -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