22 #ifndef __ND_CONTACT_H__
23 #define __ND_CONTACT_H__
25 #include "ndCollisionStdafx.h"
26 #include "ndConstraint.h"
27 #include "ndContactNotify.h"
28 #include "ndContactSolver.h"
33 #define D_MAX_CONTATCS 128
34 #define D_CONSTRAINT_MAX_ROWS (3 * 16)
35 #define D_RESTING_CONTACT_PENETRATION (D_PENETRATION_TOL + ndFloat32 (1.0f / 1024.0f))
49 ndFloat32 m_penetration;
50 } D_GCC_NEWTON_ALIGN_32;
57 :m_dir0(ndVector::m_zero)
58 ,m_dir1(ndVector::m_zero)
63 m_normal_Force.Clear();
66 void OverrideFriction0Accel(ndFloat32 accel)
68 m_dir0_Force.m_force = accel;
69 m_material.m_flags = m_material.m_flags | m_override0Accel;
72 void OverrideFriction1Accel(ndFloat32 accel)
74 m_dir1_Force.m_force = accel;
75 m_material.m_flags = m_material.m_flags | m_override1Accel;
84 } D_GCC_NEWTON_ALIGN_32;
105 D_COLLISION_API
void AttachToBodies();
106 D_COLLISION_API
void DetachFromBodies();
109 virtual ndUnsigned32 GetRowsCount()
const;
118 bool IsSkeletonSelftCollision()
const;
119 bool IsSkeletonIntraCollision()
const;
133 ndFloat32 m_timeOfImpact;
134 ndFloat32 m_separationDistance;
135 ndUnsigned32 m_maxDOF;
136 ndUnsigned32 m_sceneLru;
137 ndUnsigned32 m_isDead : 1;
138 ndUnsigned32 m_isAttached : 1;
139 ndUnsigned32 m_isIntersetionTestOnly : 1;
140 ndUnsigned32 m_skeletonIntraCollision : 1;
141 ndUnsigned32 m_skeletonSelftCollision : 1;
142 static ndVector m_initialSeparatingVector;
152 } D_GCC_NEWTON_ALIGN_32 ;
154 inline ndContact* ndContact::GetAsContact()
159 inline const ndMaterial* ndContact::GetMaterial()
const
164 inline ndUnsigned32 ndContact::GetRowsCount()
const
181 return m_contacPointsList;
186 return m_contacPointsList;
194 inline bool ndContact::IsSkeletonSelftCollision()
const
196 return m_skeletonSelftCollision ? true :
false;;
199 inline bool ndContact::IsSkeletonIntraCollision()
const
201 return m_skeletonIntraCollision ? true :
false;