Fixed implementation of rounded rectangles for hiliting the active PC in combat

This commit is contained in:
2014-04-15 17:03:20 -04:00
parent ed212d5f6b
commit 1cd0b09749

View File

@@ -841,7 +841,7 @@ public:
} }
sf::Vector2f getPoint(unsigned int i) const override { sf::Vector2f getPoint(unsigned int i) const override {
int t = i * divSz; float t = i * divSz;
return sf::Vector2f(a + a*sin(t), b + b*cos(t)); return sf::Vector2f(a + a*sin(t), b + b*cos(t));
} }
@@ -857,7 +857,7 @@ public:
w = size.x; w = size.x;
h = size.y; h = size.y;
r = cornerRadius; r = cornerRadius;
divSz = 0.5 * pi<float>() / points; divSz = 2 * pi<float>() / points;
update(); update();
} }
@@ -866,20 +866,22 @@ public:
} }
sf::Vector2f getPoint(unsigned int i) const override { sf::Vector2f getPoint(unsigned int i) const override {
int t = i * divSz; const float pi = ::pi<float>();
const float half_pi = 0.5 * pi;
float t = i * divSz;
switch(i / points) { switch(i / points) {
case 0: case 0: // top left corner
return sf::Vector2f(r*sin(t), r*cos(t)); return {r + r*sin(t + pi), r + r*cos(t + pi)};
case 1: case 1: // bottom left corner
return sf::Vector2f(w + r*sin(t), r*cos(t)); return {r + r*cos(t + half_pi), h - r + r*sin(t - half_pi)};
case 2: case 2: // bottom right corner
return sf::Vector2f(w + r*sin(t), h + r*cos(t)); return {w - r + r*cos(t + half_pi), h - r - r*sin(t + half_pi)};
case 3: case 3: // top right corner
return sf::Vector2f(r*sin(t), h + r*cos(t)); return {w - r - r*cos(t - half_pi), r + r*sin(t - half_pi)};
} }
// Unreachable // Unreachable
printf("Whoops, rounded rectangle had bad point!"); printf("Whoops, rounded rectangle had bad point!");
return sf::Vector2f(); return {0,0};
} }
// TODO: Additional functions? // TODO: Additional functions?