680 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			680 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Bullet Continuous Collision Detection and Physics Library
							 | 
						||
| 
								 | 
							
								Copyright (c) 2003-2006 Erwin Coumans  http://continuousphysics.com/Bullet/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This software is provided 'as-is', without any express or implied warranty.
							 | 
						||
| 
								 | 
							
								In no event will the authors be held liable for any damages arising from the use of this software.
							 | 
						||
| 
								 | 
							
								Permission is granted to anyone to use this software for any purpose, 
							 | 
						||
| 
								 | 
							
								including commercial applications, and to alter it and redistribute it freely, 
							 | 
						||
| 
								 | 
							
								subject to the following restrictions:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
							 | 
						||
| 
								 | 
							
								2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
							 | 
						||
| 
								 | 
							
								3. This notice may not be removed or altered from any source distribution.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BT_COLLISION_OBJECT_H
							 | 
						||
| 
								 | 
							
								#define BT_COLLISION_OBJECT_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "LinearMath/btTransform.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//island management, m_activationState1
							 | 
						||
| 
								 | 
							
								#define ACTIVE_TAG 1
							 | 
						||
| 
								 | 
							
								#define ISLAND_SLEEPING 2
							 | 
						||
| 
								 | 
							
								#define WANTS_DEACTIVATION 3
							 | 
						||
| 
								 | 
							
								#define DISABLE_DEACTIVATION 4
							 | 
						||
| 
								 | 
							
								#define DISABLE_SIMULATION 5
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct	btBroadphaseProxy;
							 | 
						||
| 
								 | 
							
								class	btCollisionShape;
							 | 
						||
| 
								 | 
							
								struct btCollisionShapeData;
							 | 
						||
| 
								 | 
							
								#include "LinearMath/btMotionState.h"
							 | 
						||
| 
								 | 
							
								#include "LinearMath/btAlignedAllocator.h"
							 | 
						||
| 
								 | 
							
								#include "LinearMath/btAlignedObjectArray.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef btAlignedObjectArray<class btCollisionObject*> btCollisionObjectArray;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef BT_USE_DOUBLE_PRECISION
							 | 
						||
| 
								 | 
							
								#define btCollisionObjectData btCollisionObjectDoubleData
							 | 
						||
| 
								 | 
							
								#define btCollisionObjectDataName "btCollisionObjectDoubleData"
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								#define btCollisionObjectData btCollisionObjectFloatData
							 | 
						||
| 
								 | 
							
								#define btCollisionObjectDataName "btCollisionObjectFloatData"
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// btCollisionObject can be used to manage collision detection objects. 
							 | 
						||
| 
								 | 
							
								/// btCollisionObject maintains all information that is needed for a collision detection: Shape, Transform and AABB proxy.
							 | 
						||
| 
								 | 
							
								/// They can be added to the btCollisionWorld.
							 | 
						||
| 
								 | 
							
								ATTRIBUTE_ALIGNED16(class)	btCollisionObject
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btTransform	m_worldTransform;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///m_interpolationWorldTransform is used for CCD and interpolation
							 | 
						||
| 
								 | 
							
									///it can be either previous or future (predicted) transform
							 | 
						||
| 
								 | 
							
									btTransform	m_interpolationWorldTransform;
							 | 
						||
| 
								 | 
							
									//those two are experimental: just added for bullet time effect, so you can still apply impulses (directly modifying velocities) 
							 | 
						||
| 
								 | 
							
									//without destroying the continuous interpolated motion (which uses this interpolation velocities)
							 | 
						||
| 
								 | 
							
									btVector3	m_interpolationLinearVelocity;
							 | 
						||
| 
								 | 
							
									btVector3	m_interpolationAngularVelocity;
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									btVector3	m_anisotropicFriction;
							 | 
						||
| 
								 | 
							
									int			m_hasAnisotropicFriction;
							 | 
						||
| 
								 | 
							
									btScalar	m_contactProcessingThreshold;	
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btBroadphaseProxy*		m_broadphaseHandle;
							 | 
						||
| 
								 | 
							
									btCollisionShape*		m_collisionShape;
							 | 
						||
| 
								 | 
							
									///m_extensionPointer is used by some internal low-level Bullet extensions.
							 | 
						||
| 
								 | 
							
									void*					m_extensionPointer;
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									///m_rootCollisionShape is temporarily used to store the original collision shape
							 | 
						||
| 
								 | 
							
									///The m_collisionShape might be temporarily replaced by a child collision shape during collision detection purposes
							 | 
						||
| 
								 | 
							
									///If it is NULL, the m_collisionShape is not temporarily replaced.
							 | 
						||
| 
								 | 
							
									btCollisionShape*		m_rootCollisionShape;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int				m_collisionFlags;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int				m_islandTag1;
							 | 
						||
| 
								 | 
							
									int				m_companionId;
							 | 
						||
| 
								 | 
							
								    int             m_worldArrayIndex;  // index of object in world's collisionObjects array
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									mutable int				m_activationState1;
							 | 
						||
| 
								 | 
							
									mutable btScalar			m_deactivationTime;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btScalar		m_friction;
							 | 
						||
| 
								 | 
							
									btScalar		m_restitution;
							 | 
						||
| 
								 | 
							
									btScalar		m_rollingFriction;//torsional friction orthogonal to contact normal (useful to stop spheres rolling forever)
							 | 
						||
| 
								 | 
							
								    btScalar        m_spinningFriction; // torsional friction around the contact normal (useful for grasping)
							 | 
						||
| 
								 | 
							
									btScalar		m_contactDamping;
							 | 
						||
| 
								 | 
							
									btScalar		m_contactStiffness;
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///m_internalType is reserved to distinguish Bullet's btCollisionObject, btRigidBody, btSoftBody, btGhostObject etc.
							 | 
						||
| 
								 | 
							
									///do not assign your own m_internalType unless you write a new dynamics object class.
							 | 
						||
| 
								 | 
							
									int				m_internalType;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///users can point to their objects, m_userPointer is not used by Bullet, see setUserPointer/getUserPointer
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void*			m_userObjectPointer;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int				m_userIndex2;
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								    int	m_userIndex;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///time of impact calculation
							 | 
						||
| 
								 | 
							
									btScalar		m_hitFraction; 
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									///Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
							 | 
						||
| 
								 | 
							
									btScalar		m_ccdSweptSphereRadius;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/// Don't do continuous collision detection if the motion (in one step) is less then m_ccdMotionThreshold
							 | 
						||
| 
								 | 
							
									btScalar		m_ccdMotionThreshold;
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									/// If some object should have elaborate collision filtering by sub-classes
							 | 
						||
| 
								 | 
							
									int			m_checkCollideWith;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btAlignedObjectArray<const btCollisionObject*> m_objectsWithoutCollisionCheck;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///internal update revision number. It will be increased when the object changes. This allows some subsystems to perform lazy evaluation.
							 | 
						||
| 
								 | 
							
									int			m_updateRevision;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btVector3	m_customDebugColorRGB;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									BT_DECLARE_ALIGNED_ALLOCATOR();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									enum CollisionFlags
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										CF_STATIC_OBJECT= 1,
							 | 
						||
| 
								 | 
							
										CF_KINEMATIC_OBJECT= 2,
							 | 
						||
| 
								 | 
							
										CF_NO_CONTACT_RESPONSE = 4,
							 | 
						||
| 
								 | 
							
										CF_CUSTOM_MATERIAL_CALLBACK = 8,//this allows per-triangle material (friction/restitution)
							 | 
						||
| 
								 | 
							
										CF_CHARACTER_OBJECT = 16,
							 | 
						||
| 
								 | 
							
										CF_DISABLE_VISUALIZE_OBJECT = 32, //disable debug drawing
							 | 
						||
| 
								 | 
							
										CF_DISABLE_SPU_COLLISION_PROCESSING = 64,//disable parallel/SPU processing
							 | 
						||
| 
								 | 
							
										CF_HAS_CONTACT_STIFFNESS_DAMPING = 128,
							 | 
						||
| 
								 | 
							
										CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR = 256,
							 | 
						||
| 
								 | 
							
										CF_HAS_FRICTION_ANCHOR = 512,
							 | 
						||
| 
								 | 
							
										CF_HAS_COLLISION_SOUND_TRIGGER = 1024
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									enum	CollisionObjectTypes
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										CO_COLLISION_OBJECT =1,
							 | 
						||
| 
								 | 
							
										CO_RIGID_BODY=2,
							 | 
						||
| 
								 | 
							
										///CO_GHOST_OBJECT keeps track of all objects overlapping its AABB and that pass its collision filter
							 | 
						||
| 
								 | 
							
										///It is useful for collision sensors, explosion objects, character controller etc.
							 | 
						||
| 
								 | 
							
										CO_GHOST_OBJECT=4,
							 | 
						||
| 
								 | 
							
										CO_SOFT_BODY=8,
							 | 
						||
| 
								 | 
							
										CO_HF_FLUID=16,
							 | 
						||
| 
								 | 
							
										CO_USER_TYPE=32,
							 | 
						||
| 
								 | 
							
										CO_FEATHERSTONE_LINK=64
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									enum AnisotropicFrictionFlags
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										CF_ANISOTROPIC_FRICTION_DISABLED=0,
							 | 
						||
| 
								 | 
							
										CF_ANISOTROPIC_FRICTION = 1,
							 | 
						||
| 
								 | 
							
										CF_ANISOTROPIC_ROLLING_FRICTION = 2
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE bool mergesSimulationIslands() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										///static objects, kinematic and object without contact response don't merge islands
							 | 
						||
| 
								 | 
							
										return  ((m_collisionFlags & (CF_STATIC_OBJECT | CF_KINEMATIC_OBJECT | CF_NO_CONTACT_RESPONSE) )==0);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const btVector3& getAnisotropicFriction() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_anisotropicFriction;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									void	setAnisotropicFriction(const btVector3& anisotropicFriction, int frictionMode = CF_ANISOTROPIC_FRICTION)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_anisotropicFriction = anisotropicFriction;
							 | 
						||
| 
								 | 
							
										bool isUnity = (anisotropicFriction[0]!=1.f) || (anisotropicFriction[1]!=1.f) || (anisotropicFriction[2]!=1.f);
							 | 
						||
| 
								 | 
							
										m_hasAnisotropicFriction = isUnity?frictionMode : 0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									bool	hasAnisotropicFriction(int frictionMode = CF_ANISOTROPIC_FRICTION) const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (m_hasAnisotropicFriction&frictionMode)!=0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///the constraint solver can discard solving contacts, if the distance is above this threshold. 0 by default.
							 | 
						||
| 
								 | 
							
									///Note that using contacts with positive distance can improve stability. It increases, however, the chance of colliding with degerate contacts, such as 'interior' triangle edges
							 | 
						||
| 
								 | 
							
									void	setContactProcessingThreshold( btScalar contactProcessingThreshold)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_contactProcessingThreshold = contactProcessingThreshold;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									btScalar	getContactProcessingThreshold() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_contactProcessingThreshold;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE bool		isStaticObject() const {
							 | 
						||
| 
								 | 
							
										return (m_collisionFlags & CF_STATIC_OBJECT) != 0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE bool		isKinematicObject() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (m_collisionFlags & CF_KINEMATIC_OBJECT) != 0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE bool		isStaticOrKinematicObject() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return (m_collisionFlags & (CF_KINEMATIC_OBJECT | CF_STATIC_OBJECT)) != 0 ;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE bool		hasContactResponse() const {
							 | 
						||
| 
								 | 
							
										return (m_collisionFlags & CF_NO_CONTACT_RESPONSE)==0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									btCollisionObject();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual ~btCollisionObject();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual void	setCollisionShape(btCollisionShape* collisionShape)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_updateRevision++;
							 | 
						||
| 
								 | 
							
										m_collisionShape = collisionShape;
							 | 
						||
| 
								 | 
							
										m_rootCollisionShape = collisionShape;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE const btCollisionShape*	getCollisionShape() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_collisionShape;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE btCollisionShape*	getCollisionShape()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_collisionShape;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setIgnoreCollisionCheck(const btCollisionObject* co, bool ignoreCollisionCheck)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (ignoreCollisionCheck)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											//We don't check for duplicates. Is it ok to leave that up to the user of this API?
							 | 
						||
| 
								 | 
							
											//int index = m_objectsWithoutCollisionCheck.findLinearSearch(co);
							 | 
						||
| 
								 | 
							
											//if (index == m_objectsWithoutCollisionCheck.size())
							 | 
						||
| 
								 | 
							
											//{
							 | 
						||
| 
								 | 
							
											m_objectsWithoutCollisionCheck.push_back(co);
							 | 
						||
| 
								 | 
							
											//}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										else
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											m_objectsWithoutCollisionCheck.remove(co);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										m_checkCollideWith = m_objectsWithoutCollisionCheck.size() > 0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual bool	checkCollideWithOverride(const btCollisionObject*  co) const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										int index = m_objectsWithoutCollisionCheck.findLinearSearch(co);
							 | 
						||
| 
								 | 
							
										if (index < m_objectsWithoutCollisionCheck.size())
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											return false;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return true;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///Avoid using this internal API call, the extension pointer is used by some Bullet extensions. 
							 | 
						||
| 
								 | 
							
									///If you need to store your own user pointer, use 'setUserPointer/getUserPointer' instead.
							 | 
						||
| 
								 | 
							
									void*		internalGetExtensionPointer() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_extensionPointer;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									///Avoid using this internal API call, the extension pointer is used by some Bullet extensions
							 | 
						||
| 
								 | 
							
									///If you need to store your own user pointer, use 'setUserPointer/getUserPointer' instead.
							 | 
						||
| 
								 | 
							
									void	internalSetExtensionPointer(void* pointer)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_extensionPointer = pointer;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE	int	getActivationState() const { return m_activationState1;}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									void setActivationState(int newState) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setDeactivationTime(btScalar time)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_deactivationTime = time;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									btScalar	getDeactivationTime() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_deactivationTime;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void forceActivationState(int newState) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	activate(bool forceActivation = false) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE bool isActive() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return ((getActivationState() != ISLAND_SLEEPING) && (getActivationState() != DISABLE_SIMULATION));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setRestitution(btScalar rest)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_updateRevision++;
							 | 
						||
| 
								 | 
							
										m_restitution = rest;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									btScalar	getRestitution() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_restitution;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									void	setFriction(btScalar frict)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_updateRevision++;
							 | 
						||
| 
								 | 
							
										m_friction = frict;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									btScalar	getFriction() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_friction;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setRollingFriction(btScalar frict)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_updateRevision++;
							 | 
						||
| 
								 | 
							
										m_rollingFriction = frict;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									btScalar	getRollingFriction() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_rollingFriction;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								    void	setSpinningFriction(btScalar frict)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        m_updateRevision++;
							 | 
						||
| 
								 | 
							
								        m_spinningFriction = frict;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    btScalar	getSpinningFriction() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return m_spinningFriction;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    void	setContactStiffnessAndDamping(btScalar stiffness, btScalar damping)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_updateRevision++;
							 | 
						||
| 
								 | 
							
										m_contactStiffness = stiffness;
							 | 
						||
| 
								 | 
							
										m_contactDamping = damping;
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										m_collisionFlags |=CF_HAS_CONTACT_STIFFNESS_DAMPING;
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
								        //avoid divisions by zero...
							 | 
						||
| 
								 | 
							
										if (m_contactStiffness< SIMD_EPSILON)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            m_contactStiffness = SIMD_EPSILON;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									btScalar	getContactStiffness() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_contactStiffness;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									btScalar	getContactDamping() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_contactDamping;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
									///reserved for Bullet internal usage
							 | 
						||
| 
								 | 
							
									int	getInternalType() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_internalType;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btTransform&	getWorldTransform()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_worldTransform;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const btTransform&	getWorldTransform() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_worldTransform;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setWorldTransform(const btTransform& worldTrans)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_updateRevision++;
							 | 
						||
| 
								 | 
							
										m_worldTransform = worldTrans;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE btBroadphaseProxy*	getBroadphaseHandle()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_broadphaseHandle;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE const btBroadphaseProxy*	getBroadphaseHandle() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_broadphaseHandle;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setBroadphaseHandle(btBroadphaseProxy* handle)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_broadphaseHandle = handle;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const btTransform&	getInterpolationWorldTransform() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_interpolationWorldTransform;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btTransform&	getInterpolationWorldTransform()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_interpolationWorldTransform;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setInterpolationWorldTransform(const btTransform&	trans)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_updateRevision++;
							 | 
						||
| 
								 | 
							
										m_interpolationWorldTransform = trans;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setInterpolationLinearVelocity(const btVector3& linvel)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_updateRevision++;
							 | 
						||
| 
								 | 
							
										m_interpolationLinearVelocity = linvel;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setInterpolationAngularVelocity(const btVector3& angvel)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_updateRevision++;
							 | 
						||
| 
								 | 
							
										m_interpolationAngularVelocity = angvel;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const btVector3&	getInterpolationLinearVelocity() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_interpolationLinearVelocity;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const btVector3&	getInterpolationAngularVelocity() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_interpolationAngularVelocity;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE int getIslandTag() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return	m_islandTag1;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setIslandTag(int tag)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_islandTag1 = tag;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE int getCompanionId() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return	m_companionId;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setCompanionId(int id)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_companionId = id;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    SIMD_FORCE_INLINE int getWorldArrayIndex() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return	m_worldArrayIndex;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // only should be called by CollisionWorld
							 | 
						||
| 
								 | 
							
								    void setWorldArrayIndex(int ix)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        m_worldArrayIndex = ix;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    SIMD_FORCE_INLINE btScalar			getHitFraction() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_hitFraction; 
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setHitFraction(btScalar hitFraction)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_hitFraction = hitFraction;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									SIMD_FORCE_INLINE int	getCollisionFlags() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_collisionFlags;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setCollisionFlags(int flags)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_collisionFlags = flags;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									///Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
							 | 
						||
| 
								 | 
							
									btScalar			getCcdSweptSphereRadius() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_ccdSweptSphereRadius;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
							 | 
						||
| 
								 | 
							
									void	setCcdSweptSphereRadius(btScalar radius)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_ccdSweptSphereRadius = radius;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btScalar 	getCcdMotionThreshold() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_ccdMotionThreshold;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btScalar 	getCcdSquareMotionThreshold() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_ccdMotionThreshold*m_ccdMotionThreshold;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/// Don't do continuous collision detection if the motion (in one step) is less then m_ccdMotionThreshold
							 | 
						||
| 
								 | 
							
									void	setCcdMotionThreshold(btScalar ccdMotionThreshold)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_ccdMotionThreshold = ccdMotionThreshold;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///users can point to their objects, userPointer is not used by Bullet
							 | 
						||
| 
								 | 
							
									void*	getUserPointer() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_userObjectPointer;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int	getUserIndex() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_userIndex;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									int	getUserIndex2() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_userIndex2;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									///users can point to their objects, userPointer is not used by Bullet
							 | 
						||
| 
								 | 
							
									void	setUserPointer(void* userPointer)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_userObjectPointer = userPointer;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///users can point to their objects, userPointer is not used by Bullet
							 | 
						||
| 
								 | 
							
									void	setUserIndex(int index)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_userIndex = index;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									void	setUserIndex2(int index)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_userIndex2 = index;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int	getUpdateRevisionInternal() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_updateRevision;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	setCustomDebugColor(const btVector3& colorRGB)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_customDebugColorRGB = colorRGB;
							 | 
						||
| 
								 | 
							
										m_collisionFlags |= CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void	removeCustomDebugColor()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_collisionFlags &= ~CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									bool getCustomDebugColor(btVector3& colorRGB) const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										bool hasCustomColor = (0!=(m_collisionFlags&CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR));
							 | 
						||
| 
								 | 
							
										if (hasCustomColor)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											colorRGB = m_customDebugColorRGB;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return hasCustomColor;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									inline bool checkCollideWith(const btCollisionObject* co) const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (m_checkCollideWith)
							 | 
						||
| 
								 | 
							
											return checkCollideWithOverride(co);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return true;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual	int	calculateSerializeBufferSize()	const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									///fills the dataBuffer and returns the struct name (and 0 on failure)
							 | 
						||
| 
								 | 
							
									virtual	const char*	serialize(void* dataBuffer, class btSerializer* serializer) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									virtual void serializeSingleObject(class btSerializer* serializer) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
							 | 
						||
| 
								 | 
							
								struct	btCollisionObjectDoubleData
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									void					*m_broadphaseHandle;
							 | 
						||
| 
								 | 
							
									void					*m_collisionShape;
							 | 
						||
| 
								 | 
							
									btCollisionShapeData	*m_rootCollisionShape;
							 | 
						||
| 
								 | 
							
									char					*m_name;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btTransformDoubleData	m_worldTransform;
							 | 
						||
| 
								 | 
							
									btTransformDoubleData	m_interpolationWorldTransform;
							 | 
						||
| 
								 | 
							
									btVector3DoubleData		m_interpolationLinearVelocity;
							 | 
						||
| 
								 | 
							
									btVector3DoubleData		m_interpolationAngularVelocity;
							 | 
						||
| 
								 | 
							
									btVector3DoubleData		m_anisotropicFriction;
							 | 
						||
| 
								 | 
							
									double					m_contactProcessingThreshold;	
							 | 
						||
| 
								 | 
							
									double					m_deactivationTime;
							 | 
						||
| 
								 | 
							
									double					m_friction;
							 | 
						||
| 
								 | 
							
									double					m_rollingFriction;
							 | 
						||
| 
								 | 
							
									double                  m_contactDamping;
							 | 
						||
| 
								 | 
							
									double                  m_contactStiffness;
							 | 
						||
| 
								 | 
							
									double					m_restitution;
							 | 
						||
| 
								 | 
							
									double					m_hitFraction; 
							 | 
						||
| 
								 | 
							
									double					m_ccdSweptSphereRadius;
							 | 
						||
| 
								 | 
							
									double					m_ccdMotionThreshold;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int						m_hasAnisotropicFriction;
							 | 
						||
| 
								 | 
							
									int						m_collisionFlags;
							 | 
						||
| 
								 | 
							
									int						m_islandTag1;
							 | 
						||
| 
								 | 
							
									int						m_companionId;
							 | 
						||
| 
								 | 
							
									int						m_activationState1;
							 | 
						||
| 
								 | 
							
									int						m_internalType;
							 | 
						||
| 
								 | 
							
									int						m_checkCollideWith;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									char	m_padding[4];
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
							 | 
						||
| 
								 | 
							
								struct	btCollisionObjectFloatData
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									void					*m_broadphaseHandle;
							 | 
						||
| 
								 | 
							
									void					*m_collisionShape;
							 | 
						||
| 
								 | 
							
									btCollisionShapeData	*m_rootCollisionShape;
							 | 
						||
| 
								 | 
							
									char					*m_name;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									btTransformFloatData	m_worldTransform;
							 | 
						||
| 
								 | 
							
									btTransformFloatData	m_interpolationWorldTransform;
							 | 
						||
| 
								 | 
							
									btVector3FloatData		m_interpolationLinearVelocity;
							 | 
						||
| 
								 | 
							
									btVector3FloatData		m_interpolationAngularVelocity;
							 | 
						||
| 
								 | 
							
									btVector3FloatData		m_anisotropicFriction;
							 | 
						||
| 
								 | 
							
									float					m_contactProcessingThreshold;	
							 | 
						||
| 
								 | 
							
									float					m_deactivationTime;
							 | 
						||
| 
								 | 
							
									float					m_friction;
							 | 
						||
| 
								 | 
							
									float					m_rollingFriction;
							 | 
						||
| 
								 | 
							
								    float                   m_contactDamping;
							 | 
						||
| 
								 | 
							
								    float                   m_contactStiffness;
							 | 
						||
| 
								 | 
							
									float					m_restitution;
							 | 
						||
| 
								 | 
							
									float					m_hitFraction; 
							 | 
						||
| 
								 | 
							
									float					m_ccdSweptSphereRadius;
							 | 
						||
| 
								 | 
							
									float					m_ccdMotionThreshold;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									int						m_hasAnisotropicFriction;
							 | 
						||
| 
								 | 
							
									int						m_collisionFlags;
							 | 
						||
| 
								 | 
							
									int						m_islandTag1;
							 | 
						||
| 
								 | 
							
									int						m_companionId;
							 | 
						||
| 
								 | 
							
									int						m_activationState1;
							 | 
						||
| 
								 | 
							
									int						m_internalType;
							 | 
						||
| 
								 | 
							
									int						m_checkCollideWith;
							 | 
						||
| 
								 | 
							
									char					m_padding[4];
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SIMD_FORCE_INLINE	int	btCollisionObject::calculateSerializeBufferSize() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return sizeof(btCollisionObjectData);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif //BT_COLLISION_OBJECT_H
							 |