00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef PHYSICSMANAGER_H
00016 #define PHYSICSMANAGER_H
00017
00018 #include "pandabase.h"
00019 #include "pointerTo.h"
00020
00021 #include "physical.h"
00022 #include "linearForce.h"
00023 #include "angularForce.h"
00024 #include "linearIntegrator.h"
00025 #include "angularIntegrator.h"
00026 #include "physicalNode.h"
00027
00028 #include "plist.h"
00029 #include "pvector.h"
00030
00031 #include "configVariableInt.h"
00032
00033
00034
00035
00036
00037
00038
00039 class EXPCL_PANDAPHYSICS PhysicsManager {
00040 public:
00041
00042
00043
00044
00045
00046
00047
00048 typedef pvector<Physical *> PhysicalsVector;
00049 typedef pvector<PT(LinearForce)> LinearForceVector;
00050 typedef pvector<PT(AngularForce)> AngularForceVector;
00051
00052 PUBLISHED:
00053 PhysicsManager();
00054 virtual ~PhysicsManager();
00055
00056 INLINE void attach_linear_integrator(LinearIntegrator *i);
00057 INLINE void attach_angular_integrator(AngularIntegrator *i);
00058 INLINE void attach_physical(Physical *p);
00059 INLINE void attach_physicalnode(PhysicalNode *p);
00060 INLINE void attach_physical_node(PhysicalNode *p);
00061 INLINE void add_linear_force(LinearForce *f);
00062 INLINE void add_angular_force(AngularForce *f);
00063 INLINE void clear_linear_forces();
00064 INLINE void clear_angular_forces();
00065 INLINE void clear_physicals();
00066
00067 INLINE void set_viscosity(PN_stdfloat viscosity);
00068 INLINE PN_stdfloat get_viscosity() const;
00069
00070 void remove_physical(Physical *p);
00071 void remove_physical_node(PhysicalNode *p);
00072 void remove_linear_force(LinearForce *f);
00073 void remove_angular_force(AngularForce *f);
00074 void do_physics(PN_stdfloat dt);
00075 void do_physics(PN_stdfloat dt, Physical *p);
00076 void init_random_seed();
00077
00078 virtual void output(ostream &out) const;
00079 virtual void write_physicals(ostream &out, unsigned int indent=0) const;
00080 virtual void write_linear_forces(ostream &out, unsigned int indent=0) const;
00081 virtual void write_angular_forces(ostream &out, unsigned int indent=0) const;
00082 virtual void write(ostream &out, unsigned int indent=0) const;
00083
00084 virtual void debug_output(ostream &out, unsigned int indent=0) const;
00085
00086 public:
00087 friend class Physical;
00088 static ConfigVariableInt _random_seed;
00089
00090 private:
00091 PN_stdfloat _viscosity;
00092 PhysicalsVector _physicals;
00093 LinearForceVector _linear_forces;
00094 AngularForceVector _angular_forces;
00095
00096 PT(LinearIntegrator) _linear_integrator;
00097 PT(AngularIntegrator) _angular_integrator;
00098 };
00099
00100 #include "physicsManager.I"
00101
00102 #endif // PHYSICSMANAGER_H