4 // Copyright (C) 2006 Matthias Braun <matze@braunis.de>
6 // This program is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU General Public License
8 // as published by the Free Software Foundation; either version 2
9 // of the License, or (at your option) any later version.
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 /** This class represents a rectangle.
27 * (Implementation Note) We're using upper left and lower right point instead of
28 * upper left and width/height here, because that makes the collision dectection
29 * a little bit efficienter.
37 Rect(const Vector& np1, const Vector& np2)
42 Rect(float x1, float y1, float x2, float y2)
43 : p1(x1, y1), p2(x2, y2)
45 assert(p1.x <= p2.x && p1.y <= p2.y);
48 float get_left() const
51 float get_right() const
57 float get_bottom() const
60 float get_width() const
61 { return p2.x - p1.x; }
63 float get_height() const
64 { return p2.y - p1.y; }
66 Vector get_middle() const
67 { return Vector((p1.x+p2.x)/2, (p1.y+p2.y)/2); }
69 void set_pos(const Vector& v)
74 void set_height(float height)
78 void set_width(float width)
82 void set_size(float width, float height)
89 return Vector(get_width(), get_height());
92 void move(const Vector& v)
98 bool contains(const Vector& v) const
100 return v.x >= p1.x && v.y >= p1.y && v.x < p2.x && v.y < p2.y;
102 bool contains(const Rect& other) const
104 if(p1.x >= other.p2.x || other.p1.x >= p2.x)
106 if(p1.y >= other.p2.y || other.p1.y >= p2.y)
112 // leave these 2 public to safe the headaches of set/get functions for such