X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fcollision.hpp;h=a31878c88e8553dd808796598401d49b7005c093;hb=f406067af6cbeb0a638078fe1d386d092583909c;hp=62f2145df414567058280585d0e51521082196cf;hpb=07ddaed2a657e4d2a3d038fed223fc5827159caf;p=supertux.git diff --git a/src/collision.hpp b/src/collision.hpp index 62f2145df..a31878c88 100644 --- a/src/collision.hpp +++ b/src/collision.hpp @@ -20,29 +20,54 @@ #ifndef __COLLISION_H__ #define __COLLISION_H__ +#include +#include "collision_hit.hpp" +#include + class Vector; class Rect; class AATriangle; -class CollisionHit; -class Collision +namespace collision +{ + +class Constraints { public: - /** checks if 2 rectangle intersect each other */ - static bool intersects(const Rect& r1, const Rect& r2); - - /** does collision detection between 2 rectangles. Returns true in case of - * collision and fills in the hit structure then. - */ - static bool rectangle_rectangle(CollisionHit& hit, const Rect& r1, - const Vector& movement, const Rect& r2); - - /** does collision detection between a rectangle and an axis aligned triangle - * Returns true in case of a collision and fills in the hit structure then. - */ - static bool rectangle_aatriangle(CollisionHit& hit, const Rect& rect, - const Vector& movement, const AATriangle& triangle); + Constraints() { + float infinity = (std::numeric_limits::has_infinity ? std::numeric_limits::infinity() : std::numeric_limits::max()); + left = -infinity; + right = infinity; + top = -infinity; + bottom = infinity; + } + + bool has_constraints() const { + float infinity = (std::numeric_limits::has_infinity ? std::numeric_limits::infinity() : std::numeric_limits::max()); + return left > -infinity || right < infinity + || top > -infinity || bottom < infinity; + } + + float left; + float right; + float top; + float bottom; + Vector ground_movement; + CollisionHit hit; }; -#endif +/** checks if 2 rectangle intersect each other */ +bool intersects(const Rect& r1, const Rect& r2); + +/** does collision detection between a rectangle and an axis aligned triangle + * Returns true in case of a collision and fills in the hit structure then. + */ +bool rectangle_aatriangle(Constraints* constraints, const Rect& rect, + const AATriangle& triangle, const Vector& addl_ground_movement = Vector(0,0)); + +void set_rectangle_rectangle_constraints(Constraints* constraints, + const Rect& r1, const Rect& r2, const Vector& addl_ground_movement = Vector(0,0)); +} + +#endif