The Game Engine  1
Collision.h
Go to the documentation of this file.
1 #ifndef __COLLISION_H__
2 #define __COLLISION_H__
3 #include "fns.h"
4 #include "WorldObject.h"
5 #include "CollisionObject.h"
6 #include <vector>
7 #include <string>
8 #include <map>
9 #include <tuple>
10 
11 using std::vector;
12 using std::string;
13 using std::map;
14 
25 class Collision
26 {
27 public:
30  clear();
31  delete m_instance;
32  }
33  vector< vector< WorldObject* > > CollisionLists;
34  vector< map< Point2D, vector< WorldObject* > > > Buckets;
35  map< pair< WorldObject*, WorldObject* >, vector< tuple< WorldObject*, CollisionObject*, WorldObject*, CollisionObject* > >* > Collisions;
36  unsigned int CellWidth;
37  unsigned int CellHeight;
39 
43  static Collision* collider() {
44  if(!m_instance)
45  m_instance = new Collision;
46  return m_instance;
47  }
48 
55  bool collided(WorldObject* a, WorldObject* b){ return Collisions.find(make_pair(a,b))!=Collisions.end(); }
56 
62  bool collided(pair< WorldObject*, WorldObject* > key){ return Collisions.find(key)!=Collisions.end(); }
63 
68  vector< tuple< WorldObject*, CollisionObject*, WorldObject*, CollisionObject* > >* vec;
69  pair< WorldObject*, WorldObject* > key = make_pair(a,b);
70  if(Collisions.find(make_pair(a,b))!=Collisions.end())
71  vec = new vector< tuple< WorldObject*, CollisionObject*, WorldObject*, CollisionObject* > >();
72  else
73  vec = Collisions[key];
74  vec->push_back(make_tuple(a, ac, b, bc));
75  }
76 
83  vector< tuple< WorldObject*, CollisionObject*, WorldObject*, CollisionObject* > >* getCollisions(WorldObject* a, WorldObject* b){
84  pair< WorldObject*, WorldObject* > key = make_pair(a,b);
85  if(collided(key))
86  return Collisions[key];
87  else
88  return NULL;
89  }
90 
94  void clear(){
95  Buckets.clear();
96  foritr(val,Collisions)
97  delete val->second;
98  Collisions.clear();
99  }
100 };
101 #endif