fixed spacing in the headers to get rid of some warnings and some other
[blender.git] / source / gameengine / Physics / Sumo / Fuzzics / include / SM_Scene.h
1 /**
2  * $Id$
3  * Copyright (C) 2001 NaN Technologies B.V.
4  * The physics scene.
5  */
6
7 #ifndef SM_SCENE_H
8 #define SM_SCENE_H
9
10 #pragma warning (disable : 4786)
11
12 #include <vector>
13 #include <set>
14 #include <utility> //needed for pair
15
16 #include "solid.h"
17
18 #include "MT_Vector3.h"
19 #include "MT_Point3.h"
20
21 class SM_Object;
22
23 class SM_Scene {
24 public:
25     SM_Scene() : 
26                 m_scene(DT_CreateScene()),
27                 m_respTable(DT_CreateRespTable()),
28                 m_secondaryRespTable(0),
29                 m_forceField(0.0, 0.0, 0.0)
30                 {}
31         
32     ~SM_Scene() { 
33                 DT_DeleteRespTable(m_respTable);
34                 DT_DeleteScene(m_scene);
35         }
36
37         DT_RespTableHandle getRespTableHandle() const {
38                 return m_respTable;
39         }
40         
41         const MT_Vector3& getForceField() const {
42                 return m_forceField;
43         }
44
45         MT_Vector3& getForceField() {
46                 return m_forceField;
47         }
48
49         void setForceField(const MT_Vector3& forceField) {
50                 m_forceField = forceField;
51         }
52
53     void add(SM_Object& object);
54     void remove(SM_Object& object);
55
56         void addPair(SM_Object *obj1, SM_Object *obj2) {
57                 m_pairList.insert(std::make_pair(obj1, obj2));
58         }
59
60         void clearPairs() {
61                 m_pairList.clear();
62         }
63
64         void setSecondaryRespTable(DT_RespTableHandle secondaryRespTable) {
65                 m_secondaryRespTable = secondaryRespTable;
66         }
67
68
69         // Perform an integration step of duration 'timeStep'.
70         // 'subSampling' is the maximum duration of a substep, i.e.,
71         // The maximum time interval between two collision checks.
72         // 'subSampling' can be used to control aliasing effects
73         // (fast moving objects traversing through walls and such). 
74         void proceed(MT_Scalar timeStep, MT_Scalar subSampling);
75
76         /**
77          * Test whether any objects lie on the line defined by from and
78          * to. The search returns the first such bject starting at from,
79          * or NULL if there was none.
80          * @returns A reference to the object, or NULL if there was none.
81          * @param ignore_client Do not look for collisions with this
82          *        object. This can be useful to avoid self-hits if
83          *        starting from the location of an object.
84          * @param from The start point, in world coordinates, of the search.
85          * @param to The end point, in world coordinates, of the search.
86          * @param result A store to return the point where intersection
87          *        took place (if there was an intersection).
88          * @param normal A store to return the normal of the hit object on
89          *        the location of the intersection, if it took place.
90          */
91         SM_Object *rayTest(void *ignore_client,
92                                            const MT_Point3& from, const MT_Point3& to, 
93                                            MT_Point3& result, MT_Vector3& normal) const;
94
95 private:
96
97         // Clear the user set velocities.
98         void clearObjectCombinedVelocities();
99
100         /** internal type */
101         typedef std::vector<SM_Object *> T_ObjectList;
102         /** internal type */
103         typedef std::set<std::pair<SM_Object *, SM_Object *> > T_PairList;
104
105         /** Handle to the scene in SOLID */
106         DT_SceneHandle      m_scene;
107         /** Following response table contains the callbacks for the dynmics */
108         DT_RespTableHandle  m_respTable;
109         /**
110          * Following response table contains callbacks for the client (=
111          * game engine) */
112         DT_RespTableHandle  m_secondaryRespTable;  // Handle 
113
114         /** The acceleration from the force field */
115         MT_Vector3          m_forceField;
116
117         /**
118          * The list of objects that receive motion updates and do
119          * collision tests. */
120         T_ObjectList        m_objectList;
121
122         /**
123          * A list with pairs of objects that collided the previous
124          * timestep. The list is built during the proceed(). During that
125          * time, it is not valid. */
126         T_PairList          m_pairList;
127 };
128
129 #endif
130