Revert "Load audio earlier in the process. Might save us some time"
[supertux.git] / src / math / rect.hpp
index 8848062..beb7b14 100644 (file)
@@ -1,5 +1,5 @@
 //  SuperTux
-//  Copyright (C) 2006 Matthias Braun <matze@braunis.de>
+//  Copyright (C) 2009 Ingo Ruhnke <grumbel@gmail.com>
 //
 //  This program is free software: you can redistribute it and/or modify
 //  it under the terms of the GNU General Public License as published by
 #ifndef HEADER_SUPERTUX_MATH_RECT_HPP
 #define HEADER_SUPERTUX_MATH_RECT_HPP
 
-#include <assert.h>
+#include "math/size.hpp"
 
-#include "math/vector.hpp"
-
-/** This class represents a rectangle.
- * (Implementation Note) We're using upper left and lower right point instead of
- * upper left and width/height here, because that makes the collision detection
- * a little bit more efficient.
- */
 class Rect
 {
 public:
-  Rect() :
-    p1(),
-    p2()
-  { }
-
-  Rect(const Vector& np1, const Vector& np2)
-    : p1(np1), p2(np2)
-  {
-  }
-
-  Rect(float x1, float y1, float x2, float y2)
-    : p1(x1, y1), p2(x2, y2)
-  {
-    assert(p1.x <= p2.x && p1.y <= p2.y);
-  }
-
-  float get_left() const
-  { return p1.x; }
-
-  float get_right() const
-  { return p2.x; }
-
-  float get_top() const
-  { return p1.y; }
-
-  float get_bottom() const
-  { return p2.y; }
-
-  float get_width() const
-  { return p2.x - p1.x; }
-
-  float get_height() const
-  { return p2.y - p1.y; }
+  int left;
+  int top;
+  int right;
+  int bottom;
 
-  Vector get_middle() const
-  { return Vector((p1.x+p2.x)/2, (p1.y+p2.y)/2); }
-
-  void set_pos(const Vector& v)
-  {
-    move(v-p1);
-  }
-
-  void set_height(float height)
-  {
-    p2.y = p1.y + height;
-  }
-  void set_width(float width)
-  {
-    p2.x = p1.x + width;
-  }
-  void set_size(float width, float height)
-  {
-    set_width(width);
-    set_height(height);
-  }
-  Vector get_size()
-  {
-    return Vector(get_width(), get_height());
-  }
-
-  void move(const Vector& v)
-  {
-    p1 += v;
-    p2 += v;
-  }
-
-  bool contains(const Vector& v) const
-  {
-    return v.x >= p1.x && v.y >= p1.y && v.x < p2.x && v.y < p2.y;
-  }
-  bool contains(const Rect& other) const
-  {
-    if(p1.x >= other.p2.x || other.p1.x >= p2.x)
-      return false;
-    if(p1.y >= other.p2.y || other.p1.y >= p2.y)
-      return false;
-
-    return true;
-  }
-
-  // leave these two public to save the headaches of set/get functions for such
-  // simple things :)
-
-  /// upper left edge
-  Vector p1;
-  /// lower right edge
-  Vector p2;
+public:
+  Rect() :
+    left(0),
+    top(0),
+    right(0),
+    bottom(0)
+  {}
+
+  Rect(int left_, int top_, int right_, int bottom_) :
+    left(left_),
+    top(top_),
+    right(right_),
+    bottom(bottom_)
+  {}
+
+  Rect(int left_, int top_, const Size& size) :
+    left(left_),
+    top(top_),
+    right(left_ + size.width),
+    bottom(top_ + size.height)
+  {}
+
+  int get_width()  const { return right - left; }
+  int get_height() const { return bottom - top; }
 };
 
 #endif