we can now choose a particular Physical upon which to run physics processing instead of having to run through the entire scene

This commit is contained in:
Josh Wilson 2006-07-13 00:24:48 +00:00
parent f195f3635d
commit 77b18a7c73
2 changed files with 31 additions and 0 deletions

View File

@ -171,6 +171,36 @@ do_physics(float dt) {
} }
} }
////////////////////////////////////////////////////////////////////
// Function : DoPhysics
// Access : Public
// Description : This is the main high-level API call. Performs
// integration on every attached Physical.
////////////////////////////////////////////////////////////////////
void PhysicsManager::
do_physics(float dt, Physical *physical) {
nassertv(physical);
// do linear
//if (_linear_integrator.is_null() == false) {
if (_linear_integrator) {
_linear_integrator->integrate(physical, _linear_forces, dt);
}
// do angular
//if (_angular_integrator.is_null() == false) {
if (_angular_integrator) {
_angular_integrator->integrate(physical, _angular_forces, dt);
}
// if it's an actor node, tell it to update itself.
PhysicalNode *pn = physical->get_physical_node();
if (pn && pn->is_of_type(ActorNode::get_class_type())) {
ActorNode *an = (ActorNode *) pn;
an->update_transform();
}
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function : output // Function : output
// Access : Public // Access : Public

View File

@ -76,6 +76,7 @@ PUBLISHED:
void remove_linear_force(LinearForce *f); void remove_linear_force(LinearForce *f);
void remove_angular_force(AngularForce *f); void remove_angular_force(AngularForce *f);
void do_physics(float dt); void do_physics(float dt);
void do_physics(float dt, Physical *p);
void init_random_seed(); void init_random_seed();
virtual void output(ostream &out) const; virtual void output(ostream &out) const;