From 11057903377d534703fa1af795bbd3f8840b3115 Mon Sep 17 00:00:00 2001 From: ThermalSpan Date: Tue, 8 Dec 2015 04:51:10 -0500 Subject: [PATCH] Rebuilt Menu and Buttons so that Menu and Selector are no seperate, and buttons work as a toggle group, and they're prettier and more flexable. --- kdtest/Button.pde | 97 +++++++++++++++++++++++++++++++ kdtest/Camera.pde | 51 +++++++++-------- kdtest/Menu.pde | 129 ++++++++++++++++++++++++------------------ kdtest/Mode.pde | 41 -------------- kdtest/Properties.pde | 8 +++ kdtest/Selector.pde | 14 ++++- kdtest/kdtest.pde | 109 ++++++++++++++--------------------- 7 files changed, 261 insertions(+), 188 deletions(-) create mode 100644 kdtest/Button.pde delete mode 100644 kdtest/Mode.pde diff --git a/kdtest/Button.pde b/kdtest/Button.pde new file mode 100644 index 0000000..18c4c1d --- /dev/null +++ b/kdtest/Button.pde @@ -0,0 +1,97 @@ +class CirSHandler implements ButtonHandler{ + void Selected() { + selector.setSelectMode(1); + useSelector = true; + } +} + +class RectSHandler implements ButtonHandler{ + void Selected() { + selector.setSelectMode(0); + useSelector = true; + } +} +class PanHandler implements ButtonHandler{ + void Selected() { + cam.setMode(0); + useSelector = false; + } +} + +class RotHandler implements ButtonHandler{ + void Selected() { + cam.setMode(1); + useSelector = false; + } +} + +class PlaceHandler implements ButtonHandler{ + void Selected() { + selector.setSelectMode(3); + useSelector = true; + } +} + +interface ButtonHandler { + void Selected (); +} + +class Button { + int _x; + int _y; + int _w; + int _h; + int _r; + boolean _isSel; + String _label; + ArrayList _handlerList; + + Button (int x, int y, String label) { + _x = x; + _y = y; + _w = i_buttonWidth; + _h = i_buttonHeight; + _r = i_buttonRad; + _handlerList = new ArrayList (); + _label = label; + _isSel = false; + } + + boolean isMouseOver() { + return mouseX >= _x && mouseX <= _x + _w && mouseY >= _y && mouseY <= _y + _h; + } + + void Select() { + _isSel = true; + for(ButtonHandler h: _handlerList) { + h.Selected(); + } + } + + void unSelect() { + _isSel = false; + } + + void draw () { + pushStyle(); + stroke(c_buttonStr); + if(_isSel) { + fill(c_buttonSel); + } else { + fill(c_buttonDef); + } + rect(_x, _y, _w, _h, 0, _r, _r, 0); + if(_isSel) { + fill(c_WHITE); + } else { + fill(c_BLACK); + } + textSize(20); + text(_label, _x + 3, _y + _h - 10); + popStyle(); + } + + void addHandler (ButtonHandler h) { + _handlerList.add(h); + } +} diff --git a/kdtest/Camera.pde b/kdtest/Camera.pde index 029fd96..4a34711 100644 --- a/kdtest/Camera.pde +++ b/kdtest/Camera.pde @@ -10,6 +10,8 @@ class Camera { int _initMX; int _initMY; + + int _mode; Camera() { _x = 0.0; @@ -17,6 +19,10 @@ class Camera { _scale = 1.0; _angle = 4 * PI; } + + void setMode(int mode) { + _mode = mode; + } void update() { translate(_x + width/2,_y + height/2); @@ -36,30 +42,29 @@ class Camera { void mouseDragged() { float difX = (float)(mouseX - _initMX); float difY = (float)(mouseY - _initMY); - - switch(G_mode) { - case 1: - difX /= (float)(width); - difY /= (float)(height); - _scale = epsilon + abs((1 - 4*(difX + difY)) * _oldScale); - _x = _oldX * _scale; - _y = _oldY * _scale; - break; - case 2: - difX *= 1.0/_scale; - difY *= 1.0/_scale; -// _x = cos(_angle)*difX - sin(_angle)*difY + _oldX; -// _y = sin(_angle)*difX + cos(_angle)*difY + _oldY; - _x = _oldX + difX; - _y = _oldY + difY; - break; - case 3: - float initAngle = atan((_initMY - height/2)/(epsilon + _initMX - width/2)); - float newAngle = atan((mouseY - height/2)/(epsilon + mouseX - width/2)); - float delta = newAngle - initAngle; - _angle = _oldAngle + delta; - break; + + if(mouseButton == RIGHT) { + difX /= (float)(width); + difY /= (float)(height); + _scale = epsilon + abs((1 - 4*(difX + difY)) * _oldScale); + _x = _oldX * _scale; + _y = _oldY * _scale; + } else { + switch(_mode) { + case 0: + difX *= 1.0/_scale; + difY *= 1.0/_scale; + _x = _oldX + difX; + _y = _oldY + difY; + break; + case 1: + float initAngle = atan((_initMY - height/2)/(epsilon + _initMX - width/2)); + float newAngle = atan((mouseY - height/2)/(epsilon + mouseX - width/2)); + float delta = newAngle - initAngle; + _angle = _oldAngle + delta; + break; } + } } void mouseReleased() { diff --git a/kdtest/Menu.pde b/kdtest/Menu.pde index a47cfc3..98d3235 100644 --- a/kdtest/Menu.pde +++ b/kdtest/Menu.pde @@ -1,72 +1,91 @@ class Menu{ ArrayList