Просмотр исходного кода

Collision objects will no longer act as solid objects to physics objects but will track collisions with them

Ivan Safrin 10 лет назад
Родитель
Сommit
386b346ffd

+ 1 - 1
Modules/Contents/3DPhysics/Include/PolyCollisionScene.h

@@ -114,7 +114,7 @@ struct CollisionResult {
             bool isColliding(Entity *ent1);
         
 			virtual CollisionEntity *addCollisionChild(Entity *newEntity, int type=0, int group=1);
-			CollisionEntity *trackCollision(Entity *newEntity, int type=0, int group=1);
+			virtual CollisionEntity *trackCollision(Entity *newEntity, int type=0, int group=1);
 			void removeCollision(Entity *entity);
 			void adjustForCollision(CollisionEntity *collisionEntity);
 			

+ 1 - 1
Modules/Contents/3DPhysics/Source/PolyCollisionScene.cpp

@@ -246,7 +246,7 @@ CollisionEntity *CollisionScene::trackCollision(Entity *newEntity, int type, int
 //	if(type == CollisionEntity::CHARACTER_CONTROLLER) {
 //		world->addCollisionObject(newCollisionEntity->collisionObject,btBroadphaseProxy::CharacterFilter, btBroadphaseProxy::StaticFilter|btBroadphaseProxy::DefaultFilter);		
 //	} else {
-//		newCollisionEntity->collisionObject->setCollisionFlags(btCollisionObject::CF_NO_CONTACT_RESPONSE);
+		newCollisionEntity->collisionObject->setCollisionFlags(btCollisionObject::CF_NO_CONTACT_RESPONSE);
 		world->addCollisionObject(newCollisionEntity->collisionObject, group);
 //	}
 	

+ 2 - 1
Modules/Contents/3DPhysics/Source/PolyPhysicsScene.cpp

@@ -77,6 +77,7 @@ void PhysicsScene::initPhysicsScene(Vector3 size) {
 	collisionConfiguration = new btDefaultCollisionConfiguration();	
 	btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);	
 	
+    
 	solver = new btSequentialImpulseConstraintSolver();
 	
 	btVector3 worldMin(-size.x * 0.5, -size.y * 0.5, -size.z * 0.5);
@@ -85,7 +86,6 @@ void PhysicsScene::initPhysicsScene(Vector3 size) {
 	
 	broadphase = new btDbvtBroadphase();	
 	physicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfiguration);
-	
     
 //	physicsWorld->getSolverInfo().m_solverMode |= SOLVER_RANDMIZE_ORDER;
 	physicsWorld->setGravity(btVector3(0,-10,0));
@@ -451,3 +451,4 @@ PhysicsEntity *PhysicsScene::addPhysicsChild(Entity *newEntity, int type, Number
 	addEntity(newEntity);	
 	return trackPhysicsChild(newEntity, type, mass, friction, restitution, group, compoundChildren);	
 }
+

+ 3 - 1
Modules/Contents/3DPhysics/Source/PolyPhysicsSceneEntity.cpp

@@ -211,6 +211,9 @@ PhysicsEntity::PhysicsEntity(Entity *entity, int type, Number mass, Number frict
 		rigidBody->setRestitution(restitution);
 		rigidBody->setUserPointer((void*)this);
 	}
+    
+    delete collisionObject;
+    collisionObject = rigidBody;
 }
 
 void PhysicsEntity::setFriction(Number friction) {
@@ -290,6 +293,5 @@ void PhysicsEntity::warpTo(Vector3 position, bool resetRotation) {
 }
 
 PhysicsEntity::~PhysicsEntity() {
-	delete rigidBody;
 	delete myMotionState;	
 }