Bubba-3D  0.9.0
Awesome game engine!
InsideRoundedSquareChecker.cpp
1 /*
2  * This file is part of Bubba-3D.
3  *
4  * Bubba-3D is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser 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  * Bubba-3D 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 Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with Bubba-3D. If not, see http://www.gnu.org/licenses/.
16  */
17 #include "InsideRoundedSquareChecker.h"
18 #include "GLSquare.h"
19 #include "HUDGraphic.h"
20 
21 InsideRoundedSquareChecker::InsideRoundedSquareChecker(int x, int y, int width, int height,
22  int rctl, int rctr, int rcbr, int rcbl)
23  : InsideSquareChecker(x, y, width, height),
24  rctl(rctl), rctr(rctr),
25  rcbr(rcbr), rcbl(rcbl)
26 {
27 }
28 
29 bool InsideRoundedSquareChecker::isInside(int x, int y) {
30  if (!InsideSquareChecker::isInside(x,y)) {
31  return false;
32  }
33 
34  int corner;
35  x -= this->x;
36  y -= this->y;
37 
38  if (x > width / 2) { //right half
39  x = width - x;
40  if (y > height / 2) { // lower half
41  y = height - y;
42  corner = rcbr;
43 
44  } else {// upper half
45  corner = rctr;
46  }
47  } else { // left half
48  if (y > height/2) { // lower half
49  y = height - y;
50  corner = rcbl;
51  } else {// upper half
52  corner = rctl;
53  }
54  }
55  if (x > corner || y > corner) {
56  return true;
57  }
58 
59  chag::SmallVector2<int> vecFromCenter = chag::make_vector(x,y) - chag::make_vector(corner,corner);
60  float fromCenterOfRoundedCorner = length(vecFromCenter);
61  return fromCenterOfRoundedCorner <= corner;
62 }