25 #include "ndCollisionStdafx.h"
26 #include "ndShapeInstance.h"
45 D_CLASS_REFLECTION(
ndBody);
48 D_COLLISION_API
virtual ~
ndBody();
50 virtual ndBody* GetAsBody() {
return this;}
60 ndUnsigned32 GetId()
const;
63 virtual ndFloat32 GetInvMass()
const;
66 const ndVector& GetCentreOfMass()
const;
67 D_COLLISION_API
virtual void SetCentreOfMass(
const ndVector& com);
76 ndVector GetGlobalGetCentreOfMass()
const;
78 D_COLLISION_API
virtual void SetNotifyCallback(
ndBodyNotify*
const notify);
79 D_COLLISION_API
virtual void SetOmega(
const ndVector& veloc);
80 D_COLLISION_API
virtual void SetVelocity(
const ndVector& veloc);
81 D_COLLISION_API
virtual void SetMatrix(
const ndMatrix& matrix);
86 D_COLLISION_API
void SetOmegaNoSleep(
const ndVector& veloc);
87 D_COLLISION_API
void SetVelocityNoSleep(
const ndVector& veloc);
88 D_COLLISION_API
void SetMatrixNoSleep(
const ndMatrix& matrix);
89 D_COLLISION_API
void SetMatrixAndCentreOfMass(
const ndQuaternion& rotation,
const ndVector& globalcom);
94 virtual void AttachContact(
ndContact*
const) {}
95 virtual void DetachContact(
ndContact*
const) {}
96 virtual ndContact* FindContact(
const ndBody*
const)
const {
return nullptr; }
108 ndUnsigned32 m_uniqueId;
111 ndUnsigned32 m_flags;
114 ndUnsigned32 m_isDynamics : 1;
115 ndUnsigned32 m_skeletonMark : 1;
116 ndUnsigned32 m_skeletonMark0 : 1;
117 ndUnsigned32 m_skeletonMark1 : 1;
118 ndUnsigned32 m_contactTestOnly : 1;
119 ndUnsigned32 m_transformIsDirty : 1;
120 ndUnsigned32 m_equilibriumOverride : 1;
124 ndUnsigned8 m_isStatic;
125 ndUnsigned8 m_autoSleep;
126 ndUnsigned8 m_equilibrium;
127 ndUnsigned8 m_equilibrium0;
128 ndUnsigned8 m_isJointFence0;
129 ndUnsigned8 m_isJointFence1;
130 ndUnsigned8 m_isConstrained;
131 ndUnsigned8 m_sceneForceUpdate;
132 ndUnsigned8 m_sceneEquilibrium;
133 ndUnsigned8 m_markedForRemoved;
135 D_COLLISION_API
static ndUnsigned32 m_uniqueIdCount;
141 } D_GCC_NEWTON_ALIGN_32;
143 inline ndUnsigned32 ndBody::GetId()
const
150 return m_notifyCallback;
153 inline ndMatrix ndBody::GetMatrix()
const
158 inline ndVector ndBody::GetPosition()
const
160 return m_matrix.m_posit;
168 inline ndVector ndBody::GetGlobalGetCentreOfMass()
const
170 return m_globalCentreOfMass;
173 inline ndVector ndBody::GetVelocity()
const
178 inline ndVector ndBody::GetOmega()
const
189 inline const ndVector& ndBody::GetCentreOfMass()
const
191 return m_localCentreOfMass;
196 return m_veloc + m_omega.CrossProduct(point - m_globalCentreOfMass);
199 inline ndFloat32 ndBody::GetInvMass()
const
201 return ndFloat32(0.0f);