4 * Created on: Apr 25, 2012
11 #include "../shape/Shape.h"
15 namespace app { class Timer; }
22 friend std::ostream &operator <<(std::ostream &, const Entity &);
25 typedef shape::Shape::Scalar Scalar;
26 typedef shape::Shape::Vector Vector;
27 typedef shape::Shape::Ray Ray;
30 static void CollisionResponse(Entity &a, const Entity::Ray &na, Entity &b);
33 explicit Entity(shape::Shape *s, Scalar mass = 1.0) : shape(s), mass(mass) { };
34 virtual ~Entity(void) { };
37 void Update(const app::Timer &);
38 bool CheckCollision(const Entity &, Ray &);
41 virtual void Collide(Entity &other, const Ray &) { };
42 virtual void Render(SDL_Surface *dest) const { };
45 const Vector &Origin(void) const { return translation; };
46 const Vector &LinearVelocity(void) const { return linearVelocity; };
47 Scalar Angle(void) const { return rotation; };
48 Scalar AngularVelocity(void) const { return angularVelocity; };
49 Vector VelocityAt(const Vector &p) const;
50 const Scalar Mass(void) const { return mass; };
54 void Translate(const Vector &);
55 void Accelerate(const Vector &linear, Scalar angular = 0);
58 static void InfInfCollisionResponse(Entity &a, const Entity::Ray &na, Entity &b);
62 Vector translation, linearVelocity;
63 Scalar rotation, angularVelocity, mass;
68 inline std::ostream &operator <<(std::ostream &out, const Entity &e) {
69 return out << *e.shape;
74 #endif /* GAME_ENTITY_H_ */