source: trunk/test/Physics/LolPhysics.h @ 1608

Last change on this file since 1608 was 1608, checked in by sam, 8 years ago

test: use 0 instead of NULL to fix the X360 build.

File size: 2.7 KB
Line 
1//
2// LolPhysics
3//
4// Copyright: (c) 2009-2012 Benjamin Huet <huet.benjamin@gmail.com>
5//            (c) 2012 Sam Hocevar <sam@hocevar.net>
6//
7
8#if !defined __LOLPHYSICS_H__
9#define __LOLPHYSICS_H__
10
11#ifdef HAVE_PHYS_USE_BULLET
12#include <bullet/btBulletDynamicsCommon.h>
13#include <bullet/btBulletCollisionCommon.h>
14#include "LolBtPhysicsIntegration.h"
15#include "EasyPhysics.h"
16#endif
17
18namespace lol
19{
20
21namespace phys
22{
23
24class Simulation
25{
26public:
27        Simulation() :
28                m_broadphase(0),
29                m_collision_configuration(0),
30                m_dispatcher(0),
31                m_solver(0),
32                m_dynamics_world(0)
33        {
34        }
35        ~Simulation()
36        {
37                ExitContext();
38        }
39
40        char const *GetName() { return "<Simulation>"; }
41
42#ifdef HAVE_PHYS_USE_BULLET
43        void InitContext()
44        {
45                // Build the broadphase
46                m_broadphase = new btDbvtBroadphase();
47 
48                // Set up the collision configuration and dispatcher
49                m_collision_configuration = new btDefaultCollisionConfiguration();
50                m_dispatcher = new btCollisionDispatcher(m_collision_configuration);
51 
52                // The actual physics solver
53                m_solver = new btSequentialImpulseConstraintSolver;
54 
55                // The world.
56                m_dynamics_world = new btDiscreteDynamicsWorld(m_dispatcher, m_broadphase, m_solver, m_collision_configuration);
57        }
58
59        void SetGravity(vec3 &NewGravity)
60        {
61                if (m_dynamics_world)
62                        m_dynamics_world->setGravity(LOL2BT_VEC3(NewGravity));
63        }
64
65        void TickContext(float seconds)
66        {
67                //step the simulation
68                if (m_dynamics_world)
69                {
70                        int steps = (int)(seconds / 0.005f);
71                        for (int i = 0; i < steps; i++)
72                                m_dynamics_world->stepSimulation(seconds / steps);
73                }
74        }
75
76        void ExitContext()
77        {
78                delete m_dynamics_world;
79                delete m_solver;
80                delete m_dispatcher;
81                delete m_collision_configuration;
82                delete m_broadphase;
83        }
84
85        btDiscreteDynamicsWorld* GetWorld()
86        {
87                return m_dynamics_world;
88        }
89        void AddToDynamic(EasyPhysics* dynamic_EP)
90        {
91                m_dynamic_list << dynamic_EP;
92        }
93        void AddToStatic(EasyPhysics* static_EP)
94        {
95                m_static_list << static_EP;
96        }
97
98private:
99
100        //broadphase
101        btBroadphaseInterface*                                  m_broadphase;
102        // Set up the collision configuration and dispatc
103        btDefaultCollisionConfiguration*                m_collision_configuration;
104        btCollisionDispatcher*                                  m_dispatcher;
105        // The actual physics solver
106        btSequentialImpulseConstraintSolver*    m_solver;
107        // The world.
108        btDiscreteDynamicsWorld*                                m_dynamics_world;
109
110        //Easy Physics body List
111        Array<EasyPhysics*>                                             m_dynamic_list;
112        Array<EasyPhysics*>                                             m_static_list;
113#else
114        void InitContext() { }
115        void TickContext(float seconds) { }
116        void ExitContext() { }
117#endif //HAVE_PHYS_USE_BULLET
118};
119
120} /* namespace phys */
121
122} /* namespace lol */
123
124#endif // __LOLPHYSICS_H__
125
Note: See TracBrowser for help on using the repository browser.