Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/coll_rect/src/lib/collision_reaction/cr_engine.h @ 9985

Last change on this file since 9985 was 9985, checked in by patrick, 17 years ago

giving the crengine the ability to check for collisions itself, collision tube only used as container

File size: 3.9 KB
Line 
1/*!
2 * @file cr_engine.h
3 * @brief The collision reaction engine, defining generic collision reactions to collision events
4 *
5 * some parts of this module are tuned for efficiency. They are probably not self-explenatory anymore :D
6 *  - Collision/ CollisionEvent objects recycling: This class contains a class of precached objects of these types
7 *      they are used for fast registration of collision events: These objects can be get by the interface functions and
8 *      are returned after one cycle automaticly by reseting the cached lists to its initial state. So do not wonder :D
9 */
10
11#ifndef _CR_ENGINE_
12#define _CR_ENGINE_
13
14#include "base_object.h"
15
16#include <vector>
17
18class WorldEntity;
19
20
21namespace CoRe
22{
23  class Collision;
24  class CollisionEvent;
25
26  //! A default singleton class.
27  class CREngine : public BaseObject
28  {
29    ObjectListDeclaration(CREngine);
30
31    typedef std::vector<Collision*>::iterator        CollisionIterator;
32    typedef std::vector<CollisionEvent*>::iterator   CollisionEventIterator;
33
34
35  public:
36    typedef enum ReactionType {
37      CR_PHYSICS_MOMENTUM   = 0,           //!< physical reaction: conservervation of momentum
38      CR_PHYSICS_STEP_BACK,                //!< physical reaction: just go to the last position without collisions
39      CR_PHYSICS_GROUND_WALK,              //!< physical reaction: stand on the ground, no movement: simple normal force away from the gravity force
40      CR_PHYSICS_FULL_WALK,                //!< physical reaction: walking on the ground (inkl. hills etc)
41      CR_PHYSICS_DAMAGE,                   //!< physical reaction: daling damage according to the object energy and their structural stability
42
43      CR_OBJECT_DAMAGE,                    //!< object raction: deals damage according to the objects specific damage potential (like weapons, nukes, etc.)
44      CR_OBJECT_PICKUP,                    //!< object rection: calling the objects pickup functions, let them handle the collision (once!)
45
46      CR_VERTEX_TRAFO,                     //!< vertex trafo: transforming the vertex according to the damage
47
48      CR_SPECIAL_CALLBACK,                 //!< special: call a callback function
49
50      CR_NUMBER
51    };
52
53    typedef enum CollisionType {
54      CR_COLLISION_TYPE_AXIS_X       = 0,  //!< collision on x axis
55      CR_COLLISION_TYPE_AXIS_X_NEG,        //!< collision on negative x axis
56      CR_COLLISION_TYPE_AXIS_Y,            //!< collision on y axis
57      CR_COLLISION_TYPE_AXIS_Y_NEG,        //!< collision on negative y axis
58      CR_COLLISION_TYPE_AXIS_Z,            //!< collision on z axis
59      CR_COLLISION_TYPE_AXIS_Z_NEG,        //!< collision on negative z axis
60      CR_COLLISION_TYPE_OBB,               //!< object aligned bounding box collide
61
62      CR_COLLISION_TYPE_NUMBER
63    };
64
65
66    virtual ~CREngine(void);
67
68    /** @returns a Pointer to the only object of this Class */
69    inline static CREngine* getInstance() { if (!singletonRef) singletonRef = new CREngine();  return singletonRef; };
70
71
72    Collision* popCollisionObject();
73    CollisionEvent* popCollisionEventObject();
74
75    void handleCollisions();
76
77    void debug();
78
79
80  private:
81    CREngine();
82    void init();
83
84    void flushCollisions();
85
86
87  private:
88    static CREngine*                    singletonRef;             //!< the reference to the CREngine object (singleton)
89
90    std::vector<Collision*>             collisionsUsed;           //!< a list of used, cached collisions
91    std::vector<Collision*>             collisionsUnused;         //!< a list of unused, cached collisions
92
93    std::vector<CollisionEvent*>        collisionEventsUsed;      //!< a list of used, cached collision events
94    std::vector<CollisionEvent*>        collisionEventsUnused;    //!< a list of unused, cached collision events
95
96    CollisionReaction*                  _reactionList[CREngine::CR_NUMBER];  //!< the collision reaction list containing all reactions types
97
98
99  };
100
101}
102#endif /* _CR_ENGINE_ */
Note: See TracBrowser for help on using the repository browser.