1 #ifndef CCDPHYSICSENVIRONMENT
2 #define CCDPHYSICSENVIRONMENT
4 #include "PHY_IPhysicsEnvironment.h"
6 class CcdPhysicsController;
7 #include "SimdVector3.h"
11 class Point2PointConstraint;
12 class CollisionDispatcher;
14 //#include "BroadphaseInterface.h"
16 //switch on/off new vehicle support
17 //#define NEW_BULLET_VEHICLE_SUPPORT 1
19 #include "ConstraintSolver/ContactSolverInfo.h"
22 class PersistentManifold;
23 class BroadphaseInterface;
26 /// Physics Environment takes care of stepping the simulation and is a container for physics entities.
27 /// It stores rigidbodies,constraints, materials etc.
28 /// A derived class may be able to 'construct' entities by loading and/or converting
29 class CcdPhysicsEnvironment : public PHY_IPhysicsEnvironment
31 SimdVector3 m_gravity;
33 IDebugDraw* m_debugDrawer;
38 ContactSolverInfo m_solverInfo;
41 CcdPhysicsEnvironment(CollisionDispatcher* dispatcher=0, BroadphaseInterface* broadphase=0);
43 virtual ~CcdPhysicsEnvironment();
45 /////////////////////////////////////
46 //PHY_IPhysicsEnvironment interface
47 /////////////////////////////////////
49 /// Perform an integration step of duration 'timeStep'.
51 virtual void setDebugDrawer(IDebugDraw* debugDrawer)
53 m_debugDrawer = debugDrawer;
56 virtual void setNumIterations(int numIter);
57 virtual void setDeactivationTime(float dTime);
58 virtual void setDeactivationLinearTreshold(float linTresh) ;
59 virtual void setDeactivationAngularTreshold(float angTresh) ;
60 virtual void setContactBreakingTreshold(float contactBreakingTreshold) ;
61 virtual void setCcdMode(int ccdMode);
62 virtual void setSolverType(int solverType);
63 virtual void setSolverSorConstant(float sor);
64 virtual void setSolverTau(float tau);
65 virtual void setSolverDamping(float damping);
66 virtual void setLinearAirDamping(float damping);
67 virtual void setUseEpa(bool epa) ;
69 virtual void beginFrame();
70 virtual void endFrame() {};
71 /// Perform an integration step of duration 'timeStep'.
72 virtual bool proceedDeltaTime(double curTime,float timeStep);
73 bool proceedDeltaTimeOneStep(float timeStep);
75 virtual void setFixedTimeStep(bool useFixedTimeStep,float fixedTimeStep){};
76 //returns 0.f if no fixed timestep is used
78 virtual float getFixedTimeStep(){ return 0.f;};
80 virtual void setDebugMode(int debugMode);
82 virtual void setGravity(float x,float y,float z);
84 virtual int createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
85 float pivotX,float pivotY,float pivotZ,
86 float axisX,float axisY,float axisZ);
87 virtual void removeConstraint(int constraintid);
89 #ifdef NEW_BULLET_VEHICLE_SUPPORT
90 //complex constraint for vehicles
91 virtual PHY_IVehicle* getVehicleConstraint(int constraintId);
93 virtual class PHY_IVehicle* getVehicleConstraint(int constraintId)
97 #endif //NEW_BULLET_VEHICLE_SUPPORT
99 Point2PointConstraint* getPoint2PointConstraint(int constraintId);
101 virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient, float fromX,float fromY,float fromZ, float toX,float toY,float toZ,
102 float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ);
105 //Methods for gamelogic collision/physics callbacks
107 virtual void addSensor(PHY_IPhysicsController* ctrl) {};
108 virtual void removeSensor(PHY_IPhysicsController* ctrl){};
109 virtual void addTouchCallback(int response_class, PHY_ResponseCallback callback, void *user){};
110 virtual void requestCollisionCallback(PHY_IPhysicsController* ctrl){};
111 virtual PHY_IPhysicsController* CreateSphereController(float radius,const PHY__Vector3& position) {return 0;};
112 virtual PHY_IPhysicsController* CreateConeController(float coneradius,float coneheight){ return 0;};
115 virtual int getNumContactPoints();
117 virtual void getContactPoint(int i,float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ);
119 //////////////////////
120 //CcdPhysicsEnvironment interface
121 ////////////////////////
123 void addCcdPhysicsController(CcdPhysicsController* ctrl);
125 void removeCcdPhysicsController(CcdPhysicsController* ctrl);
127 BroadphaseInterface* GetBroadphase();
129 CollisionDispatcher* GetDispatcher();
131 const CollisionDispatcher* GetDispatcher() const;
134 int GetNumControllers();
136 CcdPhysicsController* GetPhysicsController( int index);
138 int GetNumManifolds() const;
140 const PersistentManifold* GetManifold(int index) const;
145 void SyncMotionStates(float timeStep);
147 std::vector<CcdPhysicsController*> m_controllers;
149 std::vector<Point2PointConstraint*> m_p2pConstraints;
151 std::vector<WrapperVehicle*> m_wrapperVehicles;
153 class CollisionWorld* m_collisionWorld;
155 class ConstraintSolver* m_solver;
157 bool m_scalingPropagated;
162 #endif //CCDPHYSICSENVIRONMENT