Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/collision_reaction/collision.h @ 10712

Last change on this file since 10712 was 10013, checked in by patrick, 18 years ago

merged the collision reaction branche back to trunk

File size: 4.0 KB
Line 
1/*!
2 * @file collision.h
3 *  Definition of a collision relation of two WorldEntities
4 *
5 *  Is shared between two WorldEntity's CollisionHandles if both are subscribed to this event. In this case only one
6 *  of the two CollisionHandles will calculate the CollisionReaction and the bDispatched flag will be set afterwards
7 *  to signal that it's already cared about and should be ignored.
8 *
9 *  The collisions itself are saved in this container (CollisionEvent). Since there can be multiple collision events
10 *  for one collision. Imagine: two objects are intersecting (this throws a Collision): many collision boxes will fire
11 *  each of this boxes will "create" a CollisionEvent.
12 */
13
14#ifndef _COLLISION_H
15#define _COLLISION_H
16
17#include "vector.h"
18#include <vector>
19
20
21
22class WorldEntity;
23class BoundingVolume;
24
25namespace CoRe
26{
27
28  class CollisionEvent;
29
30  //! A class representing a simple collision
31  class Collision
32  {
33
34    typedef std::vector<CollisionEvent*>                  CollisionVector;  //!< the vector containing all collision events
35    typedef std::vector<CollisionEvent*>::iterator        Iterator;         //!< iterator definition
36    typedef std::vector<CollisionEvent*>::const_iterator  ConstIterator;   //!< constant iterator definition
37
38
39  public:
40
41    Collision();
42    virtual ~Collision();
43
44    /** collides two WorldEntities @param entityA world entity A, @param entityB world entity B, @param bvA volume A @param bvB volumeB */
45    inline void collide(WorldEntity* entityA, WorldEntity* entityB) { this->_entityA = entityA; this->_entityB = entityB; }
46
47
48    /* list stuff */
49  public:
50
51    /** registers a @param event CollisionEvent to take place */
52    inline void registerCollisionEvent(CollisionEvent* event) { this->_collisionEvents.push_back(event); }
53
54    void reset();
55
56
57    /** @returns iterator pointing to the beginning of the collision event vector */
58    inline Iterator       begin()        { return this->_collisionEvents.begin(); }
59    /** @returns const iterator pointing to the beginning of the collision event vector */
60    inline ConstIterator  begin() const  { return this->_collisionEvents.begin(); }
61    /** @returns iterator pointing to the end of the collision event vector */
62    inline Iterator       end()          { return this->_collisionEvents.end(); }
63    /** @returns const iterator pointing to the end of the collision event vector */
64    inline ConstIterator  end() const    { return this->_collisionEvents.end(); }
65
66
67    /* misc interface functions */
68  public:
69    /** @return Collision WorldEntity A */
70    inline WorldEntity* getEntityA() const { return this->_entityA; }
71    /** @return Collision WorldEntity B */
72    inline WorldEntity* getEntityB() const { return this->_entityB; }
73    inline bool same(const WorldEntity& entityA, WorldEntity& entityB) const {
74      return ((this->_entityA == &entityA && this->_entityB == &entityB) || (this->_entityA == &entityB && this->_entityB == &entityA)); }
75
76    /** @return true if Entity A collides */
77    inline bool isEntityACollide() const { return this->_entityACollide; }
78    /** sets the flag if it reacts @param flag true if it should react on entityA*/
79    inline void setEntityACollide(bool flag) { this->_entityACollide = flag; }
80    /** @return true if Entity B collides */
81    inline bool isEntityBCollide() const { return this->_entityBCollide; }
82    /** sets the flag if it reacts @param flag true if it should react on entityB*/
83    inline void setEntityBCollide(bool flag) { this->_entityBCollide = flag; }
84
85
86  private:
87    WorldEntity*                 _entityA;                       //!< the collision body A
88    WorldEntity*                 _entityB;                       //!< the collision body B
89    bool                         _entityACollide;                //!< true if entity A is subscribed for collision reaction
90    bool                         _entityBCollide;                //!< true if entity B is subscribed for collision reaction
91
92    CollisionVector              _collisionEvents;               //!< the collision event list
93
94  };
95}
96
97#endif /* _COLLISION_H */
Note: See TracBrowser for help on using the repository browser.