forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			190 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			190 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /*
 | ||
|  | Bullet Continuous Collision Detection and Physics Library | ||
|  | Copyright (c) 2003-2014 Erwin Coumans  http://bulletphysics.org
 | ||
|  | 
 | ||
|  | 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_WORLD_IMPORTER_H
 | ||
|  | #define BT_COLLISION_WORLD_IMPORTER_H
 | ||
|  | 
 | ||
|  | #include "LinearMath/btTransform.h"
 | ||
|  | #include "LinearMath/btVector3.h"
 | ||
|  | #include "LinearMath/btAlignedObjectArray.h"
 | ||
|  | #include "LinearMath/btHashMap.h"
 | ||
|  | 
 | ||
|  | class btCollisionShape; | ||
|  | class btCollisionObject; | ||
|  | struct btBulletSerializedArrays; | ||
|  | 
 | ||
|  | 
 | ||
|  | struct ConstraintInput; | ||
|  | class btCollisionWorld; | ||
|  | struct btCollisionShapeData; | ||
|  | class btTriangleIndexVertexArray; | ||
|  | class btStridingMeshInterface; | ||
|  | struct btStridingMeshInterfaceData; | ||
|  | class btGImpactMeshShape; | ||
|  | class btOptimizedBvh; | ||
|  | struct btTriangleInfoMap; | ||
|  | class btBvhTriangleMeshShape; | ||
|  | class btPoint2PointConstraint; | ||
|  | class btHingeConstraint; | ||
|  | class btConeTwistConstraint; | ||
|  | class btGeneric6DofConstraint; | ||
|  | class btGeneric6DofSpringConstraint; | ||
|  | class btSliderConstraint; | ||
|  | class btGearConstraint; | ||
|  | struct btContactSolverInfo; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class btCollisionWorldImporter | ||
|  | { | ||
|  | protected: | ||
|  | 	btCollisionWorld* m_collisionWorld; | ||
|  | 
 | ||
|  | 	int m_verboseMode; | ||
|  | 
 | ||
|  | 	btAlignedObjectArray<btCollisionShape*>  m_allocatedCollisionShapes; | ||
|  | 	btAlignedObjectArray<btCollisionObject*> m_allocatedRigidBodies; | ||
|  | 
 | ||
|  | 	btAlignedObjectArray<btOptimizedBvh*>	 m_allocatedBvhs; | ||
|  | 	btAlignedObjectArray<btTriangleInfoMap*> m_allocatedTriangleInfoMaps; | ||
|  | 	btAlignedObjectArray<btTriangleIndexVertexArray*> m_allocatedTriangleIndexArrays; | ||
|  | 	btAlignedObjectArray<btStridingMeshInterfaceData*> m_allocatedbtStridingMeshInterfaceDatas; | ||
|  | 	btAlignedObjectArray<btCollisionObject*> m_allocatedCollisionObjects; | ||
|  | 
 | ||
|  | 
 | ||
|  | 	btAlignedObjectArray<char*>				m_allocatedNames; | ||
|  | 
 | ||
|  | 	btAlignedObjectArray<int*>				m_indexArrays; | ||
|  | 	btAlignedObjectArray<short int*>		m_shortIndexArrays; | ||
|  | 	btAlignedObjectArray<unsigned char*>	m_charIndexArrays; | ||
|  | 
 | ||
|  | 	btAlignedObjectArray<btVector3FloatData*>	m_floatVertexArrays; | ||
|  | 	btAlignedObjectArray<btVector3DoubleData*>	m_doubleVertexArrays; | ||
|  | 
 | ||
|  | 
 | ||
|  | 	btHashMap<btHashPtr,btOptimizedBvh*>	m_bvhMap; | ||
|  | 	btHashMap<btHashPtr,btTriangleInfoMap*>	m_timMap; | ||
|  | 
 | ||
|  | 	btHashMap<btHashString,btCollisionShape*>	m_nameShapeMap; | ||
|  | 	btHashMap<btHashString,btCollisionObject*>	m_nameColObjMap; | ||
|  | 
 | ||
|  | 	btHashMap<btHashPtr,const char*>	m_objectNameMap; | ||
|  | 
 | ||
|  | 	btHashMap<btHashPtr,btCollisionShape*>	m_shapeMap; | ||
|  | 	btHashMap<btHashPtr,btCollisionObject*>	m_bodyMap; | ||
|  | 
 | ||
|  | 
 | ||
|  | 	//methods
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	char*	duplicateName(const char* name); | ||
|  | 
 | ||
|  | 	btCollisionShape* convertCollisionShape(  btCollisionShapeData* shapeData  ); | ||
|  | 
 | ||
|  | 
 | ||
|  | public: | ||
|  | 
 | ||
|  | 	btCollisionWorldImporter(btCollisionWorld* world); | ||
|  | 
 | ||
|  | 	virtual ~btCollisionWorldImporter(); | ||
|  | 
 | ||
|  |     bool	convertAllObjects( btBulletSerializedArrays* arrays); | ||
|  | 
 | ||
|  | 		///delete all memory collision shapes, rigid bodies, constraints etc. allocated during the load.
 | ||
|  | 	///make sure you don't use the dynamics world containing objects after you call this method
 | ||
|  | 	virtual void deleteAllData(); | ||
|  | 
 | ||
|  | 	void	setVerboseMode(int verboseMode) | ||
|  | 	{ | ||
|  | 		m_verboseMode = verboseMode; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	int getVerboseMode() const | ||
|  | 	{ | ||
|  | 		return m_verboseMode; | ||
|  | 	} | ||
|  | 
 | ||
|  | 		// query for data
 | ||
|  | 	int	getNumCollisionShapes() const; | ||
|  | 	btCollisionShape* getCollisionShapeByIndex(int index); | ||
|  | 	int getNumRigidBodies() const; | ||
|  | 	btCollisionObject* getRigidBodyByIndex(int index) const; | ||
|  | 
 | ||
|  | 	int getNumBvhs() const; | ||
|  | 	btOptimizedBvh*  getBvhByIndex(int index) const; | ||
|  | 	int getNumTriangleInfoMaps() const; | ||
|  | 	btTriangleInfoMap* getTriangleInfoMapByIndex(int index) const; | ||
|  | 
 | ||
|  | 	// queris involving named objects
 | ||
|  | 	btCollisionShape* getCollisionShapeByName(const char* name); | ||
|  | 	btCollisionObject* getCollisionObjectByName(const char* name); | ||
|  | 
 | ||
|  | 
 | ||
|  | 	const char*	getNameForPointer(const void* ptr) const; | ||
|  | 
 | ||
|  | 	///those virtuals are called by load and can be overridden by the user
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 	//bodies
 | ||
|  | 
 | ||
|  | 	virtual btCollisionObject*  createCollisionObject(	const btTransform& startTransform,	btCollisionShape* shape,const char* bodyName); | ||
|  | 
 | ||
|  | 	///shapes
 | ||
|  | 
 | ||
|  | 	virtual btCollisionShape* createPlaneShape(const btVector3& planeNormal,btScalar planeConstant); | ||
|  | 	virtual btCollisionShape* createBoxShape(const btVector3& halfExtents); | ||
|  | 	virtual btCollisionShape* createSphereShape(btScalar radius); | ||
|  | 	virtual btCollisionShape* createCapsuleShapeX(btScalar radius, btScalar height); | ||
|  | 	virtual btCollisionShape* createCapsuleShapeY(btScalar radius, btScalar height); | ||
|  | 	virtual btCollisionShape* createCapsuleShapeZ(btScalar radius, btScalar height); | ||
|  | 
 | ||
|  | 	virtual btCollisionShape* createCylinderShapeX(btScalar radius,btScalar height); | ||
|  | 	virtual btCollisionShape* createCylinderShapeY(btScalar radius,btScalar height); | ||
|  | 	virtual btCollisionShape* createCylinderShapeZ(btScalar radius,btScalar height); | ||
|  | 	virtual btCollisionShape* createConeShapeX(btScalar radius,btScalar height); | ||
|  | 	virtual btCollisionShape* createConeShapeY(btScalar radius,btScalar height); | ||
|  | 	virtual btCollisionShape* createConeShapeZ(btScalar radius,btScalar height); | ||
|  | 	virtual class btTriangleIndexVertexArray*	createTriangleMeshContainer(); | ||
|  | 	virtual	btBvhTriangleMeshShape* createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh); | ||
|  | 	virtual btCollisionShape* createConvexTriangleMeshShape(btStridingMeshInterface* trimesh); | ||
|  | #ifdef SUPPORT_GIMPACT_SHAPE_IMPORT
 | ||
|  | 	virtual btGImpactMeshShape* createGimpactShape(btStridingMeshInterface* trimesh); | ||
|  | #endif //SUPPORT_GIMPACT_SHAPE_IMPORT
 | ||
|  | 	virtual btStridingMeshInterfaceData* createStridingMeshInterfaceData(btStridingMeshInterfaceData* interfaceData); | ||
|  | 
 | ||
|  | 	virtual class btConvexHullShape* createConvexHullShape(); | ||
|  | 	virtual class btCompoundShape* createCompoundShape(); | ||
|  | 	virtual class btScaledBvhTriangleMeshShape* createScaledTrangleMeshShape(btBvhTriangleMeshShape* meshShape,const btVector3& localScalingbtBvhTriangleMeshShape); | ||
|  | 
 | ||
|  | 	virtual class btMultiSphereShape* createMultiSphereShape(const btVector3* positions,const btScalar* radi,int numSpheres); | ||
|  | 
 | ||
|  | 	virtual btTriangleIndexVertexArray* createMeshInterface(btStridingMeshInterfaceData& meshData); | ||
|  | 
 | ||
|  | 	///acceleration and connectivity structures
 | ||
|  | 	virtual btOptimizedBvh*	createOptimizedBvh(); | ||
|  | 	virtual btTriangleInfoMap* createTriangleInfoMap(); | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | #endif //BT_WORLD_IMPORTER_H
 |