summaryrefslogtreecommitdiff
path: root/gui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui.cpp')
-rw-r--r--gui.cpp250
1 files changed, 250 insertions, 0 deletions
diff --git a/gui.cpp b/gui.cpp
new file mode 100644
index 0000000..30889b9
--- /dev/null
+++ b/gui.cpp
@@ -0,0 +1,250 @@
+#include "gui.h"
+hitbox::hitbox() {
+ return;
+}
+int hitbox::add(int x, int y, int w, int h) {
+ SDL_Rect rr;
+ rr.x = x;
+ rr.y = y;
+ rr.w = w;
+ rr.h = h;
+ rs.resize(rs.size()+1);
+ rs[rs.size() - 1] = rr;
+ return 0;
+}
+int hitbox::check(int x, int y) {
+ int i = 0;
+ while (i < rs.size()) {
+ if ((rs[i].x <= x) && (x <= (rs[i].x + rs[i].w))) {
+ if ((rs[i].y <= y) && (y <= (rs[i].y + rs[i].h))) {
+ return i;
+ }
+ }
+ i++;
+ }
+ return -1;
+}
+SDL_Rect hitbox::get(int index) {
+ if ((index >= 0) && (index < rs.size())) {
+ return rs[index];
+ } else {
+ //if properly managed should never happen
+ SDL_Rect r;
+ r.x = -10000;
+ return r;
+ }
+}
+butt::butt() {
+ return;
+}
+int butt::add(int x, int y, int w, int h, std::string name) {
+ boxes.add(x, y, w, h);
+ names.resize(names.size() + 1);
+ names[names.size() - 1] = name;
+ states.resize(states.size() + 1);
+ //zero means not toggled and not hovered
+ states[states.size() - 1] = 0;
+ return 0;
+}
+int butt::hover(int x, int y) {
+ int i = 0;
+ while (i < states.size()) {
+ //sets hover bit to 0 by AND'ing with the opposite
+ states[i] = states[i] & (~HOVER);
+ i++;
+ }
+ int c = boxes.check(x, y);
+ if (c != -1) {
+ states[c] = states[c] | HOVER;
+ }
+ return 0;
+}
+int butt::press(int x, int y) {
+ int c = boxes.check(x, y);
+ if (c != -1) {
+ states[c] = states[c] ^ TOGGLE;
+ }
+ return 0;
+}
+//doesn't do anything for now because just press will do the trick
+int butt::unpress(int index) {
+ states[index] = states[index] & (~TOGGLE);
+}
+int butt::drawbutt() {
+ int i = 0;
+ while (i < states.size()) {
+ SDL_Rect r = boxes.get(i);
+ SDL_Color c;
+ switch (states[i]) {
+ case TOGGLE :
+ drawrect(r.x,r.y,r.w,r.h,140,140,140,255);
+ c.r = 255;
+ c.g = 255;
+ c.b = 255;
+ c.a = 255;
+ drawtext(r.x, r.y, names[i].c_str(),c);
+ break;
+ case HOVER :
+ drawrect(r.x,r.y,r.w,r.h,140,140,140,255);
+ c.r = 255;
+ c.g = 255;
+ c.b = 255;
+ c.a = 255;
+ drawtext(r.x, r.y, names[i].c_str(),c);
+ break;
+ case TOGGLE | HOVER :
+ drawrect(r.x,r.y,r.w,r.h,140,140,140,255);
+ c.r = 255;
+ c.g = 255;
+ c.b = 255;
+ c.a = 255;
+ drawtext(r.x, r.y, names[i].c_str(),c);
+ break;
+ default :
+ drawrect(r.x,r.y,r.w,r.h,140,140,140,255);
+ c.r = 0;
+ c.g = 0;
+ c.b = 0;
+ c.a = 255;
+ drawtext(r.x, r.y, names[i].c_str(),c);
+ break;
+ }
+ i++;
+ }
+ return 0;
+}
+
+int butt::state(int index){
+ if ((index >= 0) && (index < states.size())) {
+ return states[index];
+ } else {
+ return -1;
+ }
+}
+int butt::size() {
+ return states.size();
+}
+//---=[TBUFF]=---
+//
+//
+//
+tbuff::tbuff() {
+ return;
+}
+int tbuff::add(int x, int y, int w, int h) {
+ boxes.add(x, y, w, h);
+ buffs.resize(buffs.size() + 1);
+ buffs[buffs.size() - 1] = "";
+ states.resize(states.size() + 1);
+ //zero means not toggled and not hovered
+ states[states.size() - 1] = 0;
+ return 0;
+}
+int tbuff::hover(int x, int y) {
+ int i = 0;
+ while (i < states.size()) {
+ //sets hover bit to 0 by AND'ing with the opposite
+ states[i] = states[i] & (~HOVER);
+ i++;
+ }
+ int c = boxes.check(x, y);
+ if (c != -1) {
+ states[c] = states[c] | HOVER;
+ }
+ return 0;
+}
+int tbuff::press(int x, int y) {
+ int i = 0;
+ while (i < states.size()) {
+ //sets hover bit to 0 by AND'ing with the opposite
+ states[i] = states[i] & (~TOGGLE);
+ i++;
+ }
+ int c = boxes.check(x, y);
+
+ if (c != -1) {
+ states[c] = states[c] ^ TOGGLE;
+ SDL_Rect r = boxes.get(c);
+ SDL_StartTextInput();
+ SDL_SetTextInputRect(&r);
+ } else {
+ SDL_StopTextInput();
+ }
+ return 0;
+}
+//doesn't do anything for now because just press will do the trick
+int tbuff::unpress(int index) {
+ states[index] = states[index] & (~TOGGLE);
+ SDL_StopTextInput();
+}
+int tbuff::drawtbuff() {
+ int i = 0;
+ while (i < states.size()) {
+ SDL_Rect r = boxes.get(i);
+ SDL_Color c;
+ switch (states[i]) {
+ case TOGGLE :
+ drawrect(r.x,r.y,r.w,r.h,140,140,140,255);
+ c.r = 255;
+ c.g = 255;
+ c.b = 255;
+ c.a = 255;
+ drawtext(r.x, r.y, buffs[i].c_str(),c);
+ break;
+ case HOVER :
+ drawrect(r.x,r.y,r.w,r.h,180,180,180,255);
+ c.r = 0;
+ c.g = 0;
+ c.b = 0;
+ c.a = 0;
+ drawtext(r.x, r.y, buffs[i].c_str(),c);
+ break;
+ case TOGGLE | HOVER :
+ drawrect(r.x,r.y,r.w,r.h,180,180,180,255);
+ c.r = 0;
+ c.g = 0;
+ c.b = 0;
+ c.a = 0;
+ drawtext(r.x, r.y, buffs[i].c_str(),c);
+ break;
+ default :
+ drawrect(r.x,r.y,r.w,r.h,140,140,140,255);
+ c.r = 0;
+ c.g = 0;
+ c.b = 0;
+ c.a = 255;
+ drawtext(r.x, r.y, buffs[i].c_str(),c);
+ break;
+ }
+ i++;
+ }
+ return 0;
+}
+int tbuff::reset() {
+ int i = 0;
+ while (i < buffs.size()) {
+ buffs[i] = "";
+ i++;
+ }
+ return 0;
+}
+int tbuff::charin(const char *text) {
+ int i = 0;
+ while (i < states.size()) {
+ if (states[i] & TOGGLE) {
+ buffs[i] = buffs[i] + text;
+ }
+ i++;
+ }
+ return 0;
+}
+int tbuff::state(int index){
+ if ((index >= 0) && (index < states.size())) {
+ return states[index];
+ } else {
+ return -1;
+ }
+}
+int tbuff::size() {
+ return states.size();
+}