The Game Engine  1
CollisionObject.h
Go to the documentation of this file.
1 #ifndef __COLLISIONOBJECT_H__
2 #define __COLLISIONOBJECT_H__
3 #include "fns.h"
4 #include <vector>
5 #include <string>
6 #include "WorldObject.h"
7 
8 using std::vector;
9 using std::string;
10 
11 // predeclared for build
12 class WorldObject;
13 
21 {
22 public:
23  CollisionObject(string n):mPos(0.0,0.0),color(0xFF00FF00),name(n) { };
24  Point2D mPos;
25 
34  };
35 
44  bool checkCollisions(const vector<CollisionObject*>& c, const Point2D cPos, const Point2D pos, vector<string> names = vector<string>());
45 
53  virtual pair<WorldObject*, CollisionObject*> collision(const CollisionObject *c, WorldObject* wo, WorldObject* mObj) const = 0;
54 
55  virtual void draw(const Point2D& pos) = 0;
60  virtual CollisionObjectType getType() const = 0;
61 protected:
62  string name;
63  Uint32 color;
64 };
65 
76 {
77 public:
78  CollisionRectangle(string n = ""):CollisionObject(n),width(1.0),height(1.0) {};
79  CollisionRectangle(string n, Point2D pt, double w, double h):CollisionObject(n),width(w),height(h) { mPos = pt;}
80  double width;
81  double height;
86  double getLeft();
90  double getRight();
94  double getTop();
98  double getBottom();
99 
107  virtual pair<WorldObject*, CollisionObject*> collision(const CollisionObject *c, WorldObject* wo, WorldObject* mObj) const;
108  virtual void draw(const Point2D& pos);
113  virtual CollisionObjectType getType() const { return COLLISIONRECTANGLE; }
114 };
115 
126 {
127 public:
129  CollisionCircle(string n, Point2D pt, double r):CollisionObject(n), radius(r) { mPos = pt; }
130  double radius;
138  pair<WorldObject*, CollisionObject*> collision(const CollisionRectangle *c, WorldObject* wo, WorldObject* mObj) const;
139 
147  virtual pair<WorldObject*, CollisionObject*> collision(const CollisionObject *c, WorldObject* wo, WorldObject* mObj) const;
148 
149  virtual void draw(const Point2D& pos);
154  virtual CollisionObjectType getType() const { return COLLISIONCIRCLE; }
155 };
156 
167 {
168 public:
170  CollisionSegment(string n, Point2D s, Point2D e):CollisionObject(n), end(e) { mPos = s; calcNormal(); }
173 
175  double distance;
176 
179 
181  bool twoWay;
182 
186  void calcNormal();
187 
195  pair<WorldObject*, CollisionObject*> collision(const CollisionRectangle* c, WorldObject* wo, WorldObject* mObj) const;
196 
204  pair<WorldObject*, CollisionObject*> collision(const CollisionCircle* c, WorldObject* wo, WorldObject* mObj) const;
205 
213  virtual pair<WorldObject*, CollisionObject*> collision(const CollisionObject *c, WorldObject* wo, WorldObject* mObj) const;
214 
215  virtual void draw(const Point2D& pos);
220  virtual CollisionObjectType getType() const { return COLLISIONSEGMENT; }
221 };
222 #endif