Browse Source

sleeping property now should work properly, fixes #1892

Juan Linietsky 10 years ago
parent
commit
bbe9a37f1d

+ 2 - 0
servers/physics/body_sw.cpp

@@ -257,6 +257,8 @@ void BodySW::set_state(PhysicsServer::BodyState p_state, const Variant& p_varian
 				Transform t = p_variant;
 				t.orthonormalize();
 				new_transform=get_transform(); //used as old to compute motion
+				if (new_transform==t)
+					break;
 				_set_transform(t);
 				_set_inv_transform(get_transform().inverse());
 

+ 1 - 1
servers/physics/body_sw.h

@@ -201,7 +201,7 @@ public:
 	_FORCE_INLINE_ bool is_active() const { return active; }
 
 	_FORCE_INLINE_ void wakeup() {
-		if ((get_space() && active) || mode==PhysicsServer::BODY_MODE_STATIC || mode==PhysicsServer::BODY_MODE_KINEMATIC)
+		if ((!get_space()) || mode==PhysicsServer::BODY_MODE_STATIC || mode==PhysicsServer::BODY_MODE_KINEMATIC)
 			return;
 		set_active(true);
 	}

+ 2 - 0
servers/physics_2d/body_2d_sw.cpp

@@ -275,6 +275,8 @@ void Body2DSW::set_state(Physics2DServer::BodyState p_state, const Variant& p_va
 				Matrix32 t = p_variant;
 				t.orthonormalize();
 				new_transform=get_transform(); //used as old to compute motion
+				if (t==new_transform)
+					break;
 				_set_transform(t);
 				_set_inv_transform(get_transform().inverse());
 

+ 1 - 1
servers/physics_2d/body_2d_sw.h

@@ -203,7 +203,7 @@ public:
 	_FORCE_INLINE_ bool is_active() const { return active; }
 
 	_FORCE_INLINE_ void wakeup() {
-		if ((get_space() && active) || mode==Physics2DServer::BODY_MODE_STATIC || mode==Physics2DServer::BODY_MODE_KINEMATIC)
+		if ((!get_space()) || mode==Physics2DServer::BODY_MODE_STATIC || mode==Physics2DServer::BODY_MODE_KINEMATIC)
 			return;
 		set_active(true);
 	}