Add new broad phase collision response to Solid: this will let us hook (and potentially reject) the detail phase.

This commit is contained in:
Kester Maddock
2004-11-06 04:56:05 +00:00
parent ce4b232f8c
commit b3395edd2a
4 changed files with 21 additions and 3 deletions

View File

@@ -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.
*/

View File

@@ -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.
*/

View File

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

View File

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