Remove bogus assert
[supertux.git] / src / math / rectf.hpp
index f34bb43..cdff094 100644 (file)
 
 #include <assert.h>
 
+#include "math/sizef.hpp"
 #include "math/vector.hpp"
+#include "object/anchor_point.hpp"
+
+class Sizef;
 
 /** This class represents a rectangle.
  * (Implementation Note) We're using upper left and lower right point instead of
@@ -34,17 +38,19 @@ public:
     p2()
   { }
 
-  Rectf(const Vector& np1, const Vector& np2)
-    p1(np1), p2(np2)
+  Rectf(const Vector& np1, const Vector& np2) :
+    p1(np1), p2(np2)
   {
   }
 
-  Rectf(float x1, float y1, float x2, float y2)
-    p1(x1, y1), p2(x2, y2)
+  Rectf(float x1, float y1, float x2, float y2) :
+    p1(x1, y1), p2(x2, y2)
   {
     assert(p1.x <= p2.x && p1.y <= p2.y);
   }
 
+  Rectf(const Vector& p1_, const Sizef& size);
+
   float get_left() const
   { return p1.x; }
 
@@ -84,9 +90,9 @@ public:
     set_width(width);
     set_height(height);
   }
-  Vector get_size()
+  Sizef get_size() const
   {
-    return Vector(get_width(), get_height());
+    return Sizef(get_width(), get_height());
   }
 
   void move(const Vector& v)
@@ -109,6 +115,26 @@ public:
     return true;
   }
 
+  float distance (const Vector& other, AnchorPoint ap = ANCHOR_MIDDLE) const
+  {
+    Vector v = get_anchor_pos (*this, ap);
+    return ((v - other).norm ());
+  }
+
+  float distance (const Rectf& other, AnchorPoint ap = ANCHOR_MIDDLE) const
+  {
+    Vector v1 = get_anchor_pos (*this, ap);
+    Vector v2 = get_anchor_pos (other, ap);
+
+    return ((v1 - v2).norm ());
+  }
+
+  Rectf grown(float border) const
+  {
+    return Rectf(p1.x - border, p1.y - border,
+                 p2.x + border, p2.y + border);
+  }
+
   // leave these two public to save the headaches of set/get functions for such
   // simple things :)