Implemented tick callback for BulletWorld.

This commit is contained in:
enn0x 2013-11-30 13:25:08 +00:00
parent 56334e73e8
commit cc79e24c6c
2 changed files with 11 additions and 6 deletions

View File

@ -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<BulletWorld *>(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;

View File

@ -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;