Explorar o código

Added automatically set velocity when rigid is kinematic

Andrea Catania %!s(int64=7) %!d(string=hai) anos
pai
achega
0a2c154c8e
Modificáronse 1 ficheiros con 4 adicións e 1 borrados
  1. 4 1
      modules/bullet/rigid_body_bullet.cpp

+ 4 - 1
modules/bullet/rigid_body_bullet.cpp

@@ -351,7 +351,7 @@ void RigidBodyBullet::set_space(SpaceBullet *p_space) {
 
 
 void RigidBodyBullet::dispatch_callbacks() {
 void RigidBodyBullet::dispatch_callbacks() {
 	/// The check isTransformChanged is necessary in order to call integrated forces only when the first transform is sent
 	/// The check isTransformChanged is necessary in order to call integrated forces only when the first transform is sent
-	if ((btBody->isActive() || previousActiveState != btBody->isActive()) && force_integration_callback && isTransformChanged) {
+	if ((btBody->isKinematicObject() || btBody->isActive() || previousActiveState != btBody->isActive()) && force_integration_callback && isTransformChanged) {
 
 
 		if (omit_forces_integration)
 		if (omit_forces_integration)
 			btBody->clearForces();
 			btBody->clearForces();
@@ -774,10 +774,13 @@ Vector3 RigidBodyBullet::get_angular_velocity() const {
 
 
 void RigidBodyBullet::set_transform__bullet(const btTransform &p_global_transform) {
 void RigidBodyBullet::set_transform__bullet(const btTransform &p_global_transform) {
 	if (mode == PhysicsServer::BODY_MODE_KINEMATIC) {
 	if (mode == PhysicsServer::BODY_MODE_KINEMATIC) {
+		if (space)
+			btBody->setLinearVelocity((p_global_transform.getOrigin() - btBody->getWorldTransform().getOrigin()) / space->get_delta_time());
 		// The kinematic use MotionState class
 		// The kinematic use MotionState class
 		godotMotionState->moveBody(p_global_transform);
 		godotMotionState->moveBody(p_global_transform);
 	}
 	}
 	btBody->setWorldTransform(p_global_transform);
 	btBody->setWorldTransform(p_global_transform);
+	scratch();
 }
 }
 
 
 const btTransform &RigidBodyBullet::get_transform__bullet() const {
 const btTransform &RigidBodyBullet::get_transform__bullet() const {