f7600cc2fe0dcfd6ef1a4f579b693ddf2fb4e8f1
[blender-staging.git] / source / gameengine / Physics / BlOde / OdePhysicsEnvironment.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * The contents of this file may be used under the terms of either the GNU
7  * General Public License Version 2 or later (the "GPL", see
8  * http://www.gnu.org/licenses/gpl.html ), or the Blender License 1.0 or
9  * later (the "BL", see http://www.blender.org/BL/ ) which has to be
10  * bought from the Blender Foundation to become active, in which case the
11  * above mentioned GPL option does not apply.
12  *
13  * The Original Code is Copyright (C) 2002 by NaN Holding BV.
14  * All rights reserved.
15  *
16  * The Original Code is: all of this file.
17  *
18  * Contributor(s): none yet.
19  *
20  * ***** END GPL/BL DUAL LICENSE BLOCK *****
21  */
22 #ifndef _ODEPHYSICSENVIRONMENT
23 #define _ODEPHYSICSENVIRONMENT
24
25
26 #include "PHY_IPhysicsEnvironment.h"
27
28 /**
29 *       Physics Environment takes care of stepping the simulation and is a container for physics entities (rigidbodies,constraints, materials etc.)
30 *       A derived class may be able to 'construct' entities by loading and/or converting
31 */
32 class ODEPhysicsEnvironment : public PHY_IPhysicsEnvironment
33 {
34
35 public:
36         ODEPhysicsEnvironment();
37         virtual         ~ODEPhysicsEnvironment();
38 // Perform an integration step of duration 'timeStep'.
39         virtual void            proceed(double  timeStep);
40         virtual void            setGravity(float x,float y,float z);
41         virtual int                     createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
42                         float pivotX,float pivotY,float pivotZ,
43                         float axisX,float axisY,float axisZ);
44
45         virtual void            removeConstraint(int constraintid);
46         virtual PHY_IPhysicsController* rayTest(void* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ, 
47                                                                         float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ);
48
49         struct dxWorld* GetOdeWorld() { return m_OdeWorld;      };
50         struct  dxSpace* GetOdeSpace() { return m_OdeSpace;};
51
52 private:
53
54
55         // ODE physics response
56         struct  dxWorld*                                m_OdeWorld;
57         // ODE collision detection
58         struct  dxSpace*                                m_OdeSpace;
59         void    ClearOdeContactGroup();
60         struct dxJointGroup*            m_OdeContactGroup;
61         struct dxJointGroup*            m_JointGroup;
62
63         static void OdeNearCallback(void *data, struct dxGeom* o1, struct dxGeom* o2);
64         int     GetNumOdeContacts();
65
66 };
67
68 #endif //_ODEPHYSICSENVIRONMENT
69