瀏覽代碼

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 年之前
父節點
當前提交
77b18a7c73
共有 2 個文件被更改,包括 31 次插入0 次删除
  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
 //     Function : output
 //       Access : Public
 //       Access : Public

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

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