From bbe9a37f1d0bae1b26b9f53b216c29d16e76b039 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Sat, 16 May 2015 17:54:36 -0300 Subject: [PATCH] sleeping property now should work properly, fixes #1892 --- servers/physics/body_sw.cpp | 2 ++ servers/physics/body_sw.h | 2 +- servers/physics_2d/body_2d_sw.cpp | 2 ++ servers/physics_2d/body_2d_sw.h | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/servers/physics/body_sw.cpp b/servers/physics/body_sw.cpp index 43c20d211f1..1cc0b763a44 100644 --- a/servers/physics/body_sw.cpp +++ b/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()); diff --git a/servers/physics/body_sw.h b/servers/physics/body_sw.h index f15fd9b831c..6491ba8f18c 100644 --- a/servers/physics/body_sw.h +++ b/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); } diff --git a/servers/physics_2d/body_2d_sw.cpp b/servers/physics_2d/body_2d_sw.cpp index 0ba661b4c41..ccce058f136 100644 --- a/servers/physics_2d/body_2d_sw.cpp +++ b/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()); diff --git a/servers/physics_2d/body_2d_sw.h b/servers/physics_2d/body_2d_sw.h index e34686f3acd..c86bb51f1d8 100644 --- a/servers/physics_2d/body_2d_sw.h +++ b/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); }