#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; } return -1; } //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(); }