83 lines
2.2 KiB
C
83 lines
2.2 KiB
C
#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
|