src/math/aatriangle.cpp: Added forgotten new file.
[supertux.git] / src / math / aatriangle.hpp
1 //  SuperTux
2 //  Copyright (C) 2006 Matthias Braun <matze@braunis.de>
3 //
4 //  This program is free software: you can redistribute it and/or modify
5 //  it under the terms of the GNU General Public License as published by
6 //  the Free Software Foundation, either version 3 of the License, or
7 //  (at your option) any later version.
8 //
9 //  This program is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 //  GNU General Public License for more details.
13 //
14 //  You should have received a copy of the GNU General Public License
15 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 #ifndef HEADER_SUPERTUX_MATH_AATRIANGLE_HPP
18 #define HEADER_SUPERTUX_MATH_AATRIANGLE_HPP
19
20 #include "math/vector.hpp"
21
22 /**
23  * An axis-aligned triangle (ie. a triangle where 2 sides are parallel to the x-
24  * and y-axis.
25  */
26 class AATriangle
27 {
28 public:
29   /** Directions:
30    *
31    *    SOUTHEWEST    NORTHEAST   SOUTHEAST    NORTHWEST
32    *    *      or      *---*   or      *    or *---*
33    *    | \             \  |         / |       |  /
34    *    |  \             \ |        /  |       | /
35    *    *---*              *       *---*       *
36    *
37    * Deform flags: (see docs/aatriangletypes.png for details)
38    */
39   enum Direction {
40     SOUTHWEST = 0,
41     NORTHEAST,
42     SOUTHEAST,
43     NORTHWEST,
44     DIRECTION_MASK = 0x0003,
45     DEFORM1 = 0x0010,
46     DEFORM2 = 0x0020,
47     DEFORM3 = 0x0030,
48     DEFORM4 = 0x0040,
49     DEFORM_MASK = 0x0070
50   };
51
52   static int vertical_flip(int dir);
53
54 public:
55   AATriangle() :
56     p1(),
57     p2(),
58     dir(SOUTHWEST)
59   {
60   }
61   AATriangle(const Vector& v1, const Vector& v2, int newdir) :
62     p1(v1),
63     p2(v2),
64     dir(newdir)
65   {
66   }
67
68   float get_width() const
69   {
70     return p2.x - p1.x; 
71   }
72
73   float get_height() const
74   { 
75     return p2.y - p1.y; 
76   }
77
78 public:
79   Vector p1;
80   Vector p2;
81   int dir;
82 };
83
84 #endif
85
86 /* EOF */