Add new broad phase collision response to Solid: this will let us hook (and potentially reject) the detail phase.
This commit is contained in:
5
extern/solid/SOLID/SOLID.h
vendored
5
extern/solid/SOLID/SOLID.h
vendored
@@ -40,7 +40,8 @@ extern "C" {
|
||||
typedef unsigned int DT_ResponseClass;
|
||||
|
||||
typedef enum DT_ResponseType {
|
||||
DT_NO_RESPONSE, /* No response (obsolete) */
|
||||
DT_NO_RESPONSE, /* No response (obsolete) */
|
||||
DT_BROAD_RESPONSE,
|
||||
DT_SIMPLE_RESPONSE, /* No collision data */
|
||||
DT_WITNESSED_RESPONSE, /* A point common to both objects
|
||||
is returned as collision data
|
||||
@@ -146,6 +147,8 @@ extern "C" {
|
||||
extern DECLSPEC void DT_GetBBox(DT_ObjectHandle object, DT_Vector3 min, DT_Vector3 max);
|
||||
|
||||
|
||||
extern DECLSPEC DT_Bool DT_GetIntersect(DT_ObjectHandle object1, DT_ObjectHandle object2,
|
||||
DT_Vector3 v);
|
||||
/* This next command returns the distance between the objects. De returned
|
||||
closest points are given in world coordinates.
|
||||
*/
|
||||
|
||||
7
extern/solid/include/SOLID.h
vendored
7
extern/solid/include/SOLID.h
vendored
@@ -40,7 +40,8 @@ extern "C" {
|
||||
typedef unsigned int DT_ResponseClass;
|
||||
|
||||
typedef enum DT_ResponseType {
|
||||
DT_NO_RESPONSE, /* No response (obsolete) */
|
||||
DT_NO_RESPONSE, /* No response (obsolete) */
|
||||
DT_BROAD_RESPONSE, /* Broad phase response is returned. */
|
||||
DT_SIMPLE_RESPONSE, /* No collision data */
|
||||
DT_WITNESSED_RESPONSE, /* A point common to both objects
|
||||
is returned as collision data
|
||||
@@ -145,7 +146,9 @@ extern "C" {
|
||||
|
||||
extern DECLSPEC void DT_GetBBox(DT_ObjectHandle object, DT_Vector3 min, DT_Vector3 max);
|
||||
|
||||
|
||||
|
||||
extern DECLSPEC DT_Bool DT_GetIntersect(DT_ObjectHandle object1, DT_ObjectHandle object2,
|
||||
DT_Vector3 v);
|
||||
/* This next command returns the distance between the objects. De returned
|
||||
closest points are given in world coordinates.
|
||||
*/
|
||||
|
||||
8
extern/solid/src/DT_C-api.cpp
vendored
8
extern/solid/src/DT_C-api.cpp
vendored
@@ -372,6 +372,14 @@ void DT_GetBBox(DT_ObjectHandle object, DT_Vector3 min, DT_Vector3 max)
|
||||
bbox.getMax().getValue(max);
|
||||
}
|
||||
|
||||
DT_Bool DT_GetIntersect(DT_ObjectHandle object1, DT_ObjectHandle object2, DT_Vector3 vec)
|
||||
{
|
||||
MT_Vector3 v;
|
||||
DT_Bool result = intersect(*(DT_Object*)object1, *(DT_Object*)object2, v);
|
||||
v.getValue(vec);
|
||||
return result;
|
||||
}
|
||||
|
||||
DT_Scalar DT_GetClosestPair(DT_ObjectHandle object1, DT_ObjectHandle object2,
|
||||
DT_Vector3 point1, DT_Vector3 point2)
|
||||
{
|
||||
|
||||
4
extern/solid/src/DT_Encounter.cpp
vendored
4
extern/solid/src/DT_Encounter.cpp
vendored
@@ -32,6 +32,10 @@ DT_Bool DT_Encounter::exactTest(const DT_RespTable *respTable, int& count) const
|
||||
|
||||
switch (responseList.getType())
|
||||
{
|
||||
case DT_BROAD_RESPONSE:
|
||||
return (respTable->getResponseClass(m_obj_ptr1) < respTable->getResponseClass(m_obj_ptr2)) ?
|
||||
responseList(m_obj_ptr1->getClientObject(), m_obj_ptr2->getClientObject(), 0) :
|
||||
responseList(m_obj_ptr2->getClientObject(), m_obj_ptr1->getClientObject(), 0);
|
||||
case DT_SIMPLE_RESPONSE:
|
||||
if (intersect(*m_obj_ptr1, *m_obj_ptr2, m_sep_axis))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user