package com.codefixia.ui;
import com.codefixia.drumcloud.DrumCloud;
import com.codefixia.utils.FontAdjuster;
import processing.core.PApplet;
import processing.core.PConstants;
public class BeatKnob extends Knob{
int[] beatValues={1,2,4,8,16,32};
public BeatKnob(float x, float y, float w, float h) {
super(x,y,w,h);
fakeValue=maxY-(maxY-minY)*0.6f;
minValue=beatValues[0];
maxValue=beatValues[beatValues.length-1];
}
public int beatValue(){
float incValue=1.001f/beatValues.length;
int pos=PApplet.floor(normalizedValue()/incValue);
//println("Beat knob at:"+pos+" incValue:"+incValue);
return beatValues[pos];
}
public void setBeatValuePosition(int position){
if(position>0 && position<beatValues.length){
fakeValue=maxY-((maxY-minY)/beatValues.length)*position;
}
}
public void draw() {
DrumCloud.X.stroke(150,255);
DrumCloud.X.fill(150,255);
DrumCloud.X.strokeWeight(outStroke);
DrumCloud.X.arc(x,y,w,h,PApplet.radians(75),PApplet.radians(105),PConstants.PIE);
DrumCloud.X.stroke(200);
if (dragging) DrumCloud.X.fill (50,180);
else if (overed) DrumCloud.X.fill(140,180);
else DrumCloud.X.fill(100,180);
DrumCloud.X.arc(x,y,w,h,PApplet.radians(115),PApplet.radians(425),PConstants.PIE);
angleValue=PApplet.map(normalizedValue(),0,1,0,310);
DrumCloud.X.fill(fillColor);
//stroke(100,255);
DrumCloud.X.arc(x,y,w,h,PApplet.radians(65-angleValue),PApplet.radians(65),PConstants.PIE);
if(innerRadius>0){
DrumCloud.X.fill(backColor);
//DrumCloud.X.arc(x,y,w*innerRadius,h*innerRadius,PApplet.radians(115),PApplet.radians(425),PConstants.OPEN);
DrumCloud.X.ellipse(x,y,w*innerRadius,h*innerRadius);
}
drawTextIndicators();
}
private void drawTextIndicators() {
float posY=y+h*.63f;
DrumCloud.X.fill(200);
DrumCloud.X.textSize(FontAdjuster.getSize(20));
DrumCloud.X.textSize(FontAdjuster.getSize(15));
DrumCloud.X.textAlign(PConstants.CENTER);
if(textOnCenter){
DrumCloud.X.fill(100);
DrumCloud.X.textSize(FontAdjuster.getSize(18));
DrumCloud.X.text(PApplet.round(beatValue()),x,y+h*0.11f);
DrumCloud.X.fill(200);
}else{
DrumCloud.X.text(PApplet.round(beatValue()),x,y-h*0.29f);
}
DrumCloud.X.textSize(FontAdjuster.getSize(12));
DrumCloud.X.textAlign(PConstants.LEFT);
DrumCloud.X.text(PApplet.round(minValue),x+w*.2f,posY);
DrumCloud.X.textAlign(PConstants.RIGHT);
DrumCloud.X.text(PApplet.round(maxValue),x-w*.2f,posY);
DrumCloud.X.text(text,x+w*.5f,y+h*.5f);
}
}