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/rectf.hpp"
21
22/**
23 * An axis-aligned triangle (ie. a triangle where 2 sides are parallel to the x-
24 * and y-axis.
25 */
26class AATriangle final
27{
28public:
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 DEFORM_BOTTOM = 0x0010,
46 DEFORM_TOP = 0x0020,
47 DEFORM_LEFT = 0x0030,
48 DEFORM_RIGHT = 0x0040,
49 DEFORM_MASK = 0x0070
50 };
51
52 static int vertical_flip(int dir);
53
54public:
55 AATriangle() :
56 bbox(),
57 dir(SOUTHWEST)
58 {
59 }
60 AATriangle(const Rectf& newbbox, int newdir) :
61 bbox(newbbox),
62 dir(newdir)
63 {
64 }
65
66public:
67 Rectf bbox;
68 int dir;
69};
70
71#endif
72
73/* EOF */
74