summaryrefslogtreecommitdiffstats
path: root/src/utils/point.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/point.h')
-rw-r--r--src/utils/point.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/utils/point.h b/src/utils/point.h
new file mode 100644
index 0000000..0ebc37c
--- /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