From f183d901cbeadcd1cf021c4edd66fe8d7e68535e Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 13 May 2019 13:31:36 +0200 Subject: [PATCH] bullet: sync rigid body transform when node is reparented Reparenting a node will change its net transform, so it should cause a transform sync. Fixes #629 --- panda/src/bullet/bulletRigidBodyNode.cxx | 14 ++++++++++++++ panda/src/bullet/bulletRigidBodyNode.h | 1 + 2 files changed, 15 insertions(+) diff --git a/panda/src/bullet/bulletRigidBodyNode.cxx b/panda/src/bullet/bulletRigidBodyNode.cxx index b97f768d1b..acd7e96e79 100644 --- a/panda/src/bullet/bulletRigidBodyNode.cxx +++ b/panda/src/bullet/bulletRigidBodyNode.cxx @@ -359,6 +359,20 @@ do_transform_changed() { } } +/** + * + */ +void BulletRigidBodyNode:: +parents_changed() { + + if (_motion.sync_disabled()) return; + + if (get_num_parents() > 0) { + LightMutexHolder holder(BulletWorld::get_global_lock()); + do_transform_changed(); + } +} + /** * */ diff --git a/panda/src/bullet/bulletRigidBodyNode.h b/panda/src/bullet/bulletRigidBodyNode.h index d0e11da6cf..246dec3e6c 100644 --- a/panda/src/bullet/bulletRigidBodyNode.h +++ b/panda/src/bullet/bulletRigidBodyNode.h @@ -112,6 +112,7 @@ public: void do_sync_b2p(); protected: + virtual void parents_changed(); virtual void transform_changed(); private: