Browse Source

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

Josh Wilson 19 years ago
parent
commit
77b18a7c73
2 changed files with 31 additions and 0 deletions
  1. 30 0
      panda/src/physics/physicsManager.cxx
  2. 1 0
      panda/src/physics/physicsManager.h

+ 30 - 0
panda/src/physics/physicsManager.cxx

@@ -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
 //       Access : Public

+ 1 - 0
panda/src/physics/physicsManager.h

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