e37fa8afc1b69c3aecdc1fd91db10f43493c1845
[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 public:
53   AATriangle() :
54     p1(),
55     p2(),
56     dir(SOUTHWEST)
57   {
58   }
59   AATriangle(const Vector& v1, const Vector& v2, int newdir) :
60     p1(v1),
61     p2(v2),
62     dir(newdir)
63   {
64   }
65
66   float get_width() const
67   {
68     return p2.x - p1.x; 
69   }
70
71   float get_height() const
72   { 
73     return p2.y - p1.y; 
74   }
75
76 public:
77   Vector p1;
78   Vector p2;
79   int dir;
80 };
81
82 #endif
83
84 /* EOF */