diff options
author | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2011-01-09 12:09:01 +0100 |
---|---|---|
committer | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2011-01-09 12:09:01 +0100 |
commit | 8ff3e6674c1d4fc05fc1ba87f42484689fca0879 (patch) | |
tree | 0c05e984fe61d9e28e9bf014d6b4a70645d27a7e /src/utils | |
parent | 57701ac70f2b81e11eedb4c01f680e46c1abadb2 (diff) | |
download | manaserv-8ff3e6674c1d4fc05fc1ba87f42484689fca0879.tar.gz manaserv-8ff3e6674c1d4fc05fc1ba87f42484689fca0879.tar.bz2 manaserv-8ff3e6674c1d4fc05fc1ba87f42484689fca0879.tar.xz manaserv-8ff3e6674c1d4fc05fc1ba87f42484689fca0879.zip |
Removed the superfluous point struct.
It was too close from the Position class and it leads to
making the server handle one or another type through the
code. Still bugged me many times while making changes.
Reviewed-by: Jaxad.
Diffstat (limited to 'src/utils')
-rw-r--r-- | src/utils/point.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/utils/point.h b/src/utils/point.h new file mode 100644 index 00000000..0ebc37c0 --- /dev/null +++ b/src/utils/point.h @@ -0,0 +1,90 @@ +/* + * The Mana Server + * Copyright (C) 2004-2010 The Mana World Development Team + * + * This file is part of The Mana Server. + * + * The Mana Server is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * The Mana Server is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with The Mana Server. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef POINT_H +#define POINT_H + +#include <algorithm> + +/** + * A point in positive space. Usually represents pixel coordinates on a map. + */ +class Point +{ + public: + Point(): + x(0), y(0) + {} + + Point(int X, int Y): + x(X), y(Y) + {} + + int x; /**< x coordinate */ + int y; /**< y coordinate */ + + /** + * Check whether the given point is within range of this point. + */ + bool inRangeOf(const Point &p, int radius) const + { + return std::abs(x - p.x) <= radius && + std::abs(y - p.y) <= radius; + } + + bool operator== (const Point &other) const + { + return (x == other.x && y == other.y); + } + + bool operator!= (const Point &other) const + { + return (x != other.x || y != other.y); + } +}; + +/** + * A rectangle in positive space. Usually represents a pixel-based zone on a + * map. + */ +class Rectangle +{ + public: + int x; /**< x coordinate */ + int y; /**< y coordinate */ + int w; /**< width */ + int h; /**< height */ + + bool contains(const Point &p) const + { + return (p.x - x) < w && + (p.y - y) < h; + } + + bool intersects(const Rectangle &r) const + { + return x < (r.x + r.w) && + y < (r.y + r.h) && + x + w > r.x && + y + h > r.y; + } +}; + +#endif // POINT_H |