]> git.localhorst.tv Git - sdl-test8.git/blob - src/shape/Shape.h
some comments
[sdl-test8.git] / src / shape / Shape.h
1 /*
2  * Shape.h
3  *
4  *  Created on: Apr 29, 2012
5  *      Author: holy
6  */
7
8 #ifndef SHAPE_SHAPE_H_
9 #define SHAPE_SHAPE_H_
10
11 #include "../geometry/Ray2D.h"
12 #include "../geometry/Vector2D.h"
13
14 #include <ostream>
15
16
17 namespace shape {
18
19 class AABB;
20 class Circle;
21
22 /// Base class for all "shapes" (i.e. collision primitives).
23 /// This serves as an interface for game::Entity to double dispatch the
24 /// collision detection algorithms.
25 class Shape {
26
27         public:
28                 typedef float Scalar;
29                 typedef geometry::Vector2D<Scalar> Vector;
30                 typedef geometry::Ray2D<Scalar> Ray;
31
32         public:
33                 virtual ~Shape(void) { };
34
35         public:
36                 /// Move the shape by given delta.
37                 virtual void Translate(const Vector &delta) = 0;
38                 /// Rotate the shape by given delta (in radians).
39                 virtual void Rotate(Scalar delta) = 0;
40
41         public:
42                 /// Check if this shape overlaps the given and, if it does, write the
43                 /// surface normal into given vector.
44                 /// All shapes must override this method to dispatch to the specialized
45                 /// version of CheckCollision().
46                 /// See AABB::CheckCollision(const Shape &, Ray &) const for details.
47                 virtual bool CheckCollision(const Shape &, Ray &) const = 0;
48                 virtual bool CheckCollision(const AABB &, Ray &) const = 0;
49                 virtual bool CheckCollision(const Circle &, Ray &) const = 0;
50
51         public:
52                 virtual std::ostream &Write(std::ostream &) const = 0;
53
54 };
55
56
57 inline std::ostream &operator <<(std::ostream &out, const Shape &s) {
58         return s.Write(out);
59 };
60
61 }
62
63 #endif /* SHAPE_SHAPE_H_ */