From cc79e24c6c0ecf5f792663163206afc0393fffce Mon Sep 17 00:00:00 2001 From: enn0x Date: Sat, 30 Nov 2013 13:25:08 +0000 Subject: [PATCH] Implemented tick callback for BulletWorld. --- panda/src/bullet/bulletWorld.cxx | 13 +++++++++---- panda/src/bullet/bulletWorld.h | 4 ++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/panda/src/bullet/bulletWorld.cxx b/panda/src/bullet/bulletWorld.cxx index 0fc0671207..c570ff1e18 100644 --- a/panda/src/bullet/bulletWorld.cxx +++ b/panda/src/bullet/bulletWorld.cxx @@ -852,10 +852,11 @@ clear_contact_added_callback() { // Description: //////////////////////////////////////////////////////////////////// void BulletWorld:: -set_tick_callback(CallbackObject *obj) { +set_tick_callback(CallbackObject *obj, bool is_pretick) { nassertv(obj != NULL); _tick_callback_obj = obj; + _world->setInternalTickCallback(&BulletWorld::tick_callback, this, is_pretick); } //////////////////////////////////////////////////////////////////// @@ -867,6 +868,7 @@ void BulletWorld:: clear_tick_callback() { _tick_callback_obj = NULL; + _world->setInternalTickCallback(NULL); } /////////////////////////////////////////////////////////////////// @@ -880,8 +882,11 @@ tick_callback(btDynamicsWorld *world, btScalar timestep) { nassertv(world->getWorldUserInfo()); BulletWorld *w = static_cast(world->getWorldUserInfo()); - BulletTickCallbackData cbdata(timestep); - w->_tick_callback_obj->do_callback(&cbdata); + CallbackObject *obj = w->_tick_callback_obj; + if (obj) { + BulletTickCallbackData cbdata(timestep); + obj->do_callback(&cbdata); + } } //////////////////////////////////////////////////////////////////// @@ -895,7 +900,7 @@ set_filter_callback(CallbackObject *obj) { nassertv(obj != NULL); if (bullet_filter_algorithm != FA_callback) { - bullet_cat.warning() << "filter algorithm is not 'python-callback'" << endl; + bullet_cat.warning() << "filter algorithm is not 'callback'" << endl; } _filter_cb3._filter_callback_obj = obj; diff --git a/panda/src/bullet/bulletWorld.h b/panda/src/bullet/bulletWorld.h index d670a5786f..3ebfe59ce0 100644 --- a/panda/src/bullet/bulletWorld.h +++ b/panda/src/bullet/bulletWorld.h @@ -139,7 +139,7 @@ PUBLISHED: void set_contact_added_callback(CallbackObject *obj); void clear_contact_added_callback(); - void set_tick_callback(CallbackObject *obj); + void set_tick_callback(CallbackObject *obj, bool is_pretick=false); void clear_tick_callback(); void set_filter_callback(CallbackObject *obj); @@ -184,7 +184,7 @@ private: void sync_p2b(PN_stdfloat dt, int num_substeps); void sync_b2p(); - void tick_callback(btDynamicsWorld *world, btScalar timestep); + static void tick_callback(btDynamicsWorld *world, btScalar timestep); typedef PTA(PT(BulletRigidBodyNode)) BulletRigidBodies; typedef PTA(PT(BulletSoftBodyNode)) BulletSoftBodies;