Ken's 64bit patches weren't merged over to orange for some reason.
[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         bool    m_useFixedTimeStep;
36         float   m_fixedTimeStep;
37         float   m_currentTime;
38
39 public:
40         ODEPhysicsEnvironment();
41         virtual         ~ODEPhysicsEnvironment();
42         virtual void            beginFrame() {}
43         virtual void            endFrame() {}
44
45
46 // Perform an integration step of duration 'timeStep'.
47         virtual bool            proceedDeltaTime(double  curTime,float timeStep);
48         virtual void            setFixedTimeStep(bool useFixedTimeStep,float fixedTimeStep);
49         virtual float           getFixedTimeStep();
50
51         virtual void            setGravity(float x,float y,float z);
52         virtual int                     createConstraint(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsController* ctrl2,PHY_ConstraintType type,
53                         float pivotX,float pivotY,float pivotZ,
54                         float axisX,float axisY,float axisZ);
55
56         virtual void            removeConstraint(void * constraintid);
57         virtual PHY_IPhysicsController* rayTest(PHY_IPhysicsController* ignoreClient,float fromX,float fromY,float fromZ, float toX,float toY,float toZ, 
58                                                                         float& hitX,float& hitY,float& hitZ,float& normalX,float& normalY,float& normalZ);
59
60
61         //gamelogic callbacks
62         virtual void addSensor(PHY_IPhysicsController* ctrl) {}
63         virtual void removeSensor(PHY_IPhysicsController* ctrl) {}
64         virtual void addTouchCallback(int response_class, PHY_ResponseCallback callback, void *user)
65         {
66         }
67         virtual void requestCollisionCallback(PHY_IPhysicsController* ctrl) {}
68         virtual PHY_IPhysicsController* CreateSphereController(float radius,const PHY__Vector3& position) {return 0;}
69         virtual PHY_IPhysicsController* CreateConeController(float coneradius,float coneheight) { return 0;}
70
71
72
73         struct dxWorld* GetOdeWorld() { return m_OdeWorld;      };
74         struct  dxSpace* GetOdeSpace() { return m_OdeSpace;};
75
76 private:
77
78
79         // ODE physics response
80         struct  dxWorld*                                m_OdeWorld;
81         // ODE collision detection
82         struct  dxSpace*                                m_OdeSpace;
83         void    ClearOdeContactGroup();
84         struct dxJointGroup*            m_OdeContactGroup;
85         struct dxJointGroup*            m_JointGroup;
86
87         static void OdeNearCallback(void *data, struct dxGeom* o1, struct dxGeom* o2);
88         int     GetNumOdeContacts();
89
90 };
91
92 #endif //_ODEPHYSICSENVIRONMENT
93