#ifndef GJK_H #define GJK_H #define GJK_DEBUG RTC #if GJK_DEBUG extern u32 gjk_debug_steps; #endif struct gjk_menkowski_point { struct v2 p0; /* Support point of first shape in dir */ struct v2 p1; /* Support point of second shape in -dir */ struct v2 p; /* Menkowski difference point */ }; struct gjk_simplex { u32 len; struct gjk_menkowski_point a, b, c; }; /* Returns simple true or false indicating shape collision */ b32 gjk_boolean(struct v2_array shape0, struct v2_array shape1); struct gjk_contact_pair { struct v2 p0, p1; }; struct gjk_prototype { struct v2 points[64]; u32 len; }; struct gjk_contact_points_result { struct gjk_contact_pair pairs[2]; u32 num_pairs; /* For debugging */ b32 solved; struct gjk_simplex simplex; struct gjk_prototype prototype; }; struct gjk_contact_points_result gjk_contact_points(struct v2_array shape0, struct v2_array shape1); struct v2_array menkowski(struct arena *arena, struct v2_array poly0, struct v2_array poly1); struct v2_array cloud(struct arena *arena, struct v2_array poly0, struct v2_array poly1); #if 0 struct gjk_extended_result { b32 colliding; struct v2 p0, p1; /* Closest points (or penetrating points if colliding) on each shape */ /* For debugging */ b32 solved; struct gjk_simplex simplex; struct gjk_prototype prototype; }; /* Returns whether shapes are colliding well as closest / penetrating points on each shape. */ struct gjk_extended_result gjk_extended(struct v2_array shape0, struct v2_array shape1); #endif #if 0 struct gjk_extended_result { b32 colliding; struct v2 p0, p1; /* Closest points on each shape */ /* For debugging */ struct gjk_simplex simplex; b32 velocity_intersects; b32 solved; struct gjk_prototype prototype; }; struct gjk_extended_result gjk_extended(struct v2_array shape0, struct v2_array shape1, struct v2 linear_velocity); struct v2_array menkowski(struct arena *arena, struct v2_array poly0, struct v2_array poly1, struct v2 linear_velocity); struct v2_array cloud(struct arena *arena, struct v2_array poly0, struct v2_array poly1, struct v2 linear_velocity); #endif #endif