16#ifndef BT_COLLISION_OBJECT_H
17#define BT_COLLISION_OBJECT_H
23#define ISLAND_SLEEPING 2
24#define WANTS_DEACTIVATION 3
25#define DISABLE_DEACTIVATION 4
26#define DISABLE_SIMULATION 5
27#define FIXED_BASE_MULTI_BODY 6
38#ifdef BT_USE_DOUBLE_PRECISION
39#define btCollisionObjectData btCollisionObjectDoubleData
40#define btCollisionObjectDataName "btCollisionObjectDoubleData"
42#define btCollisionObjectData btCollisionObjectFloatData
43#define btCollisionObjectDataName "btCollisionObjectFloatData"
131 CF_DYNAMIC_OBJECT = 0,
132 CF_STATIC_OBJECT = 1,
133 CF_KINEMATIC_OBJECT = 2,
134 CF_NO_CONTACT_RESPONSE = 4,
135 CF_CUSTOM_MATERIAL_CALLBACK = 8,
136 CF_CHARACTER_OBJECT = 16,
137 CF_DISABLE_VISUALIZE_OBJECT = 32,
138 CF_DISABLE_SPU_COLLISION_PROCESSING = 64,
139 CF_HAS_CONTACT_STIFFNESS_DAMPING = 128,
140 CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR = 256,
141 CF_HAS_FRICTION_ANCHOR = 512,
142 CF_HAS_COLLISION_SOUND_TRIGGER = 1024
147 CO_COLLISION_OBJECT = 1,
155 CO_FEATHERSTONE_LINK = 64
160 CF_ANISOTROPIC_FRICTION_DISABLED = 0,
161 CF_ANISOTROPIC_FRICTION = 1,
162 CF_ANISOTROPIC_ROLLING_FRICTION = 2
168 return ((m_collisionFlags & (CF_STATIC_OBJECT | CF_KINEMATIC_OBJECT | CF_NO_CONTACT_RESPONSE)) == 0);
173 return m_anisotropicFriction;
177 m_anisotropicFriction = anisotropicFriction;
178 bool isUnity = (anisotropicFriction[0] != 1.f) || (anisotropicFriction[1] != 1.f) || (anisotropicFriction[2] != 1.f);
179 m_hasAnisotropicFriction = isUnity ? frictionMode : 0;
183 return (m_hasAnisotropicFriction & frictionMode) != 0;
190 m_contactProcessingThreshold = contactProcessingThreshold;
194 return m_contactProcessingThreshold;
199 return (m_collisionFlags & CF_STATIC_OBJECT) != 0;
204 return (m_collisionFlags & CF_KINEMATIC_OBJECT) != 0;
209 return (m_collisionFlags & (CF_KINEMATIC_OBJECT | CF_STATIC_OBJECT)) != 0;
214 return (m_collisionFlags & CF_NO_CONTACT_RESPONSE) == 0;
224 m_collisionShape = collisionShape;
225 m_rootCollisionShape = collisionShape;
230 return m_collisionShape;
235 return m_collisionShape;
240 if (ignoreCollisionCheck)
246 m_objectsWithoutCollisionCheck.
push_back(co);
251 m_objectsWithoutCollisionCheck.
remove(co);
253 m_checkCollideWith = m_objectsWithoutCollisionCheck.
size() > 0;
258 return m_objectsWithoutCollisionCheck.
size();
263 return m_objectsWithoutCollisionCheck[index];
269 if (index < m_objectsWithoutCollisionCheck.
size())
280 return m_extensionPointer;
286 m_extensionPointer = pointer;
291 void setActivationState(
int newState)
const;
295 m_deactivationTime = time;
299 return m_deactivationTime;
302 void forceActivationState(
int newState)
const;
304 void activate(
bool forceActivation =
false)
const;
314 m_restitution = rest;
318 return m_restitution;
333 m_rollingFriction = frict;
337 return m_rollingFriction;
342 m_spinningFriction = frict;
346 return m_spinningFriction;
351 m_contactStiffness = stiffness;
352 m_contactDamping = damping;
354 m_collisionFlags |= CF_HAS_CONTACT_STIFFNESS_DAMPING;
365 return m_contactStiffness;
370 return m_contactDamping;
376 return m_internalType;
381 return m_worldTransform;
386 return m_worldTransform;
392 m_worldTransform = worldTrans;
397 return m_broadphaseHandle;
402 return m_broadphaseHandle;
407 m_broadphaseHandle = handle;
412 return m_interpolationWorldTransform;
417 return m_interpolationWorldTransform;
423 m_interpolationWorldTransform = trans;
429 m_interpolationLinearVelocity = linvel;
435 m_interpolationAngularVelocity = angvel;
440 return m_interpolationLinearVelocity;
445 return m_interpolationAngularVelocity;
460 return m_companionId;
470 return m_worldArrayIndex;
476 m_worldArrayIndex = ix;
481 return m_hitFraction;
486 m_hitFraction = hitFraction;
491 return m_collisionFlags;
496 m_collisionFlags = flags;
502 return m_ccdSweptSphereRadius;
508 m_ccdSweptSphereRadius = radius;
513 return m_ccdMotionThreshold;
518 return m_ccdMotionThreshold * m_ccdMotionThreshold;
524 m_ccdMotionThreshold = ccdMotionThreshold;
530 return m_userObjectPointer;
551 m_userObjectPointer = userPointer;
562 m_userIndex2 = index;
567 m_userIndex3 = index;
572 return m_updateRevision;
577 m_customDebugColorRGB = colorRGB;
578 m_collisionFlags |= CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR;
583 m_collisionFlags &= ~CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR;
588 bool hasCustomColor = (0 != (m_collisionFlags & CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR));
591 colorRGB = m_customDebugColorRGB;
593 return hasCustomColor;
598 if (m_checkCollideWith)
599 return checkCollideWithOverride(co);
604 virtual int calculateSerializeBufferSize()
const;
607 virtual const char* serialize(
void* dataBuffer,
class btSerializer* serializer)
const;
609 virtual void serializeSingleObject(
class btSerializer * serializer)
const;
#define btCollisionObjectData
#define FIXED_BASE_MULTI_BODY
btAlignedObjectArray< class btCollisionObject * > btCollisionObjectArray
#define DISABLE_SIMULATION
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
#define ATTRIBUTE_ALIGNED16(a)
#define SIMD_FORCE_INLINE
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
int size() const
return the number of elements in the array
int findLinearSearch(const T &key) const
void remove(const T &key)
void push_back(const T &_Val)
btCollisionObject can be used to manage collision detection objects.
btScalar getContactStiffness() const
const btBroadphaseProxy * getBroadphaseHandle() const
void setRestitution(btScalar rest)
int m_updateRevision
internal update revision number. It will be increased when the object changes. This allows some subsy...
virtual bool checkCollideWithOverride(const btCollisionObject *co) const
void setSpinningFriction(btScalar frict)
const btTransform & getWorldTransform() const
bool isStaticOrKinematicObject() const
btScalar getHitFraction() const
void setAnisotropicFriction(const btVector3 &anisotropicFriction, int frictionMode=CF_ANISOTROPIC_FRICTION)
void setWorldArrayIndex(int ix)
void setCollisionFlags(int flags)
btTransform & getWorldTransform()
int m_checkCollideWith
If some object should have elaborate collision filtering by sub-classes.
void removeCustomDebugColor()
btBroadphaseProxy * getBroadphaseHandle()
int getUserIndex3() const
const btVector3 & getAnisotropicFriction() const
btTransform m_worldTransform
btCollisionShape * m_collisionShape
int getUserIndex2() const
void setUserPointer(void *userPointer)
users can point to their objects, userPointer is not used by Bullet
int getInternalType() const
reserved for Bullet internal usage
virtual void setCollisionShape(btCollisionShape *collisionShape)
btScalar getDeactivationTime() const
bool hasContactResponse() const
btVector3 m_interpolationLinearVelocity
void setIgnoreCollisionCheck(const btCollisionObject *co, bool ignoreCollisionCheck)
btScalar getSpinningFriction() const
void * getUserPointer() const
users can point to their objects, userPointer is not used by Bullet
bool isStaticObject() const
void setContactProcessingThreshold(btScalar contactProcessingThreshold)
the constraint solver can discard solving contacts, if the distance is above this threshold.
btCollisionShape * m_rootCollisionShape
m_rootCollisionShape is temporarily used to store the original collision shape The m_collisionShape m...
void * m_extensionPointer
m_extensionPointer is used by some internal low-level Bullet extensions.
btTransform & getInterpolationWorldTransform()
bool checkCollideWith(const btCollisionObject *co) const
btVector3 m_interpolationAngularVelocity
bool getCustomDebugColor(btVector3 &colorRGB) const
int m_internalType
m_internalType is reserved to distinguish Bullet's btCollisionObject, btRigidBody,...
void setWorldTransform(const btTransform &worldTrans)
void * m_userObjectPointer
users can point to their objects, m_userPointer is not used by Bullet, see setUserPointer/getUserPoin...
void setCustomDebugColor(const btVector3 &colorRGB)
btScalar getFriction() const
btVector3 m_anisotropicFriction
btScalar getContactProcessingThreshold() const
int getWorldArrayIndex() const
btCollisionShape * getCollisionShape()
void setCcdMotionThreshold(btScalar ccdMotionThreshold)
Don't do continuous collision detection if the motion (in one step) is less then m_ccdMotionThreshold...
btScalar m_ccdSweptSphereRadius
Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
bool hasAnisotropicFriction(int frictionMode=CF_ANISOTROPIC_FRICTION) const
virtual int calculateSerializeBufferSize() const
btTransform m_interpolationWorldTransform
m_interpolationWorldTransform is used for CCD and interpolation it can be either previous or future (...
void setCompanionId(int id)
int getNumObjectsWithoutCollision() const
bool isKinematicObject() const
btScalar m_deactivationTime
const btTransform & getInterpolationWorldTransform() const
btScalar getContactDamping() const
const btCollisionShape * getCollisionShape() const
int getCompanionId() const
void setUserIndex2(int index)
void setFriction(btScalar frict)
void internalSetExtensionPointer(void *pointer)
Avoid using this internal API call, the extension pointer is used by some Bullet extensions If you ne...
btAlignedObjectArray< const btCollisionObject * > m_objectsWithoutCollisionCheck
void setCcdSweptSphereRadius(btScalar radius)
Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
void setContactStiffnessAndDamping(btScalar stiffness, btScalar damping)
void setDeactivationTime(btScalar time)
bool mergesSimulationIslands() const
btScalar m_ccdMotionThreshold
Don't do continuous collision detection if the motion (in one step) is less then m_ccdMotionThreshold...
btScalar m_contactProcessingThreshold
void setRollingFriction(btScalar frict)
btScalar m_contactDamping
void setIslandTag(int tag)
void setBroadphaseHandle(btBroadphaseProxy *handle)
BT_DECLARE_ALIGNED_ALLOCATOR()
btScalar m_spinningFriction
btBroadphaseProxy * m_broadphaseHandle
const btCollisionObject * getObjectWithoutCollision(int index)
int m_hasAnisotropicFriction
int getCollisionFlags() const
void setInterpolationAngularVelocity(const btVector3 &angvel)
const btVector3 & getInterpolationAngularVelocity() const
btScalar getCcdMotionThreshold() const
void setHitFraction(btScalar hitFraction)
btScalar m_rollingFriction
btVector3 m_customDebugColorRGB
void * internalGetExtensionPointer() const
Avoid using this internal API call, the extension pointer is used by some Bullet extensions.
void setInterpolationLinearVelocity(const btVector3 &linvel)
btScalar m_hitFraction
time of impact calculation
int getUpdateRevisionInternal() const
void setUserIndex(int index)
users can point to their objects, userPointer is not used by Bullet
btScalar getRestitution() const
int getActivationState() const
btScalar getRollingFriction() const
btScalar getCcdSquareMotionThreshold() const
void setInterpolationWorldTransform(const btTransform &trans)
btScalar m_contactStiffness
void setUserIndex3(int index)
const btVector3 & getInterpolationLinearVelocity() const
btScalar getCcdSweptSphereRadius() const
Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
btVector3 can be used to represent 3D points and vectors.
The btBroadphaseProxy is the main class that can be used with the Bullet broadphases.
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
btVector3DoubleData m_anisotropicFriction
btVector3DoubleData m_interpolationLinearVelocity
int m_collisionFilterMask
double m_deactivationTime
double m_contactProcessingThreshold
int m_hasAnisotropicFriction
double m_ccdSweptSphereRadius
btTransformDoubleData m_interpolationWorldTransform
int m_collisionFilterGroup
btTransformDoubleData m_worldTransform
void * m_broadphaseHandle
double m_contactStiffness
btVector3DoubleData m_interpolationAngularVelocity
btCollisionShapeData * m_rootCollisionShape
double m_ccdMotionThreshold
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
btVector3FloatData m_interpolationLinearVelocity
float m_ccdSweptSphereRadius
btVector3FloatData m_anisotropicFriction
float m_contactProcessingThreshold
int m_collisionFilterMask
btTransformFloatData m_interpolationWorldTransform
float m_ccdMotionThreshold
btVector3FloatData m_interpolationAngularVelocity
btTransformFloatData m_worldTransform
int m_collisionFilterGroup
int m_hasAnisotropicFriction
btCollisionShapeData * m_rootCollisionShape
void * m_broadphaseHandle
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64