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

Added apply force to 3d physics

Ivan Safrin 13 лет назад
Родитель
Сommit
d6d1a38e55

+ 2 - 0
Modules/Contents/3DPhysics/Include/PolyPhysicsScene.h

@@ -105,6 +105,8 @@ namespace Polycode {
 		void setVelocity(SceneEntity *entity, Vector3 velocity);
 		void warpEntity(SceneEntity *entity, Vector3 position, bool resetRotation = false);
 		
+		void applyImpulse(SceneEntity *entity, Vector3 force, Vector3 point);
+		
 		PhysicsVehicle *addVehicleChild(SceneEntity *newEntity, Number mass, Number friction, int group  = 1);
 		
 		void setGravity(Vector3 gravity);

+ 2 - 0
Modules/Contents/3DPhysics/Include/PolyPhysicsSceneEntity.h

@@ -52,6 +52,8 @@ namespace Polycode {
 		
 			void setVelocity(Vector3 velocity);
 			void warpTo(Vector3 position, bool resetRotation);
+			
+			void applyImpulse(Vector3 direction, Vector3 point);
 			//@}
 			// ----------------------------------------------------------------------------------------------------------------
 			

+ 9 - 0
Modules/Contents/3DPhysics/Source/PolyPhysicsScene.cpp

@@ -169,10 +169,19 @@ void PhysicsScene::setVelocity(SceneEntity *entity, Vector3 velocity) {
 void PhysicsScene::warpEntity(SceneEntity *entity, Vector3 position, bool resetRotation) {
 	PhysicsSceneEntity *physicsEntity = getPhysicsEntityBySceneEntity(entity);
 	if(physicsEntity) {
+		physicsEntity->rigidBody->setActivationState(DISABLE_DEACTIVATION);	
 		physicsEntity->warpTo(position, resetRotation);
 	}
 }
 
+void PhysicsScene::applyImpulse(SceneEntity *entity, Vector3 force, Vector3 point) {
+	PhysicsSceneEntity *physicsEntity = getPhysicsEntityBySceneEntity(entity);	
+	if(physicsEntity) {
+		physicsEntity->rigidBody->setActivationState(DISABLE_DEACTIVATION);		
+		physicsEntity->applyImpulse(force, point);
+	}
+}
+
 PhysicsCharacter *PhysicsScene::addCharacterChild(SceneEntity *newEntity,Number mass, Number friction, Number stepSize, int group) {
 	addEntity(newEntity);	
 	PhysicsCharacter *newPhysicsEntity = new PhysicsCharacter(newEntity, mass, friction, stepSize);

+ 7 - 0
Modules/Contents/3DPhysics/Source/PolyPhysicsSceneEntity.cpp

@@ -244,6 +244,13 @@ void PhysicsSceneEntity::setVelocity(Vector3 velocity) {
 //	rigidBody->applyForce(btVector3(velocity.x, velocity.y, velocity.z), btVector3(0,0,0));
 }
 
+void PhysicsSceneEntity::applyImpulse(Vector3 direction, Vector3 point) {
+	btVector3 imp = btVector3(direction.x, direction.y, direction.z);
+	btVector3 pos = btVector3(point.x, point.y, point.z);
+		 
+	rigidBody->applyImpulse(imp, pos);
+}
+
 void PhysicsSceneEntity::warpTo(Vector3 position, bool resetRotation) {
 	btTransform transform;
 	transform.setIdentity();