class Controller { int x, y,w; int ctrlX, ctrlY; color inner, outer; boolean onInner, onOuter; int outerSize; float r; Controller ( int inX, int inY, int inW, int inR) { x = inX; y = inY; w = inW; r = inR; ctrlX = inX; ctrlY = inY; inner = color(110); outer = color(200); outerSize = 5; onOuter = false; onInner = false; } void run() { drawPanel(); checkPanel(); innerControl(); outerControl(); } void innerControl() { if (controllerOver == true && onOuter == false) { if (overCircle(ctrlX,ctrlY,r) == true) { onInner = true; inner = color(150); if (mousePressed == true) { ctrlX = mouseX; ctrlY = mouseY; } } else { inner = color(110); onInner = false; } } nIncr = map(ctrlX,x-w/2,x+w/2,.001,.03); amp = map(ctrlY,y+w/2,y-w/2,1,10); } void outerControl() { if (controllerOver == true) { if (overCircle(ctrlX,ctrlY,r) == false && overCircle(ctrlX,ctrlY,r+outerSize) == true) { outer = color(225); if (mousePressed == true) { onOuter = true; } } } else { outer = color(160); } if (onOuter == true) { if (mousePressed == true) { r = constrain(2*dist(ctrlX,ctrlY,mouseX,mouseY), 10, w); } else { onOuter = false; } } xoffset = map(r,0,w,1,10); } void drawPanel() { rectMode(CENTER); fill(255,30); stroke(255,80); ellipse(x,y,w,w); line(x,y-w/2,x,y+w/2); line(x-w/2,y,x+w/2,y); fill(outer); ellipse(ctrlX,ctrlY,r+outerSize,r+outerSize); fill(inner); ellipse(ctrlX,ctrlY,r,r); } void checkPanel() { if ( overCircle(x,y,w+10) == true) { controllerOver = true; } else { controllerOver = false; } } boolean overCircle(float x, float y, float diameter) { float disX = x - mouseX; float disY = y - mouseY; if(sqrt(sq(disX) + sq(disY)) < diameter/2 ) { return true; } else { return false; } } }