package com.codefixia.ui; import processing.core.PApplet; import processing.core.PConstants; import android.R.color; import com.codefixia.drumcloud.DrumCloud; import com.codefixia.utils.FontAdjuster; public class PressZones extends Clickable { private int touchId=-1; private int lastZoneSelected=-1; float animationTime=0.25f; private String subZoneTexts[]; private boolean showOtherZones=true; private boolean dragReEnterEnabled=true; private int startGrid=-1; float subZoneHeight; String text=""; private int showTime; public PressZones(float tempX, float tempY, float tempW, float tempH) { super(tempX, tempY, tempW, tempH); setOffsetY(0); } public int getStartGrid() { return startGrid; } public void resetStartGrid() { startGrid=-1; } public int getLastZoneSelected() { //PApplet.println("lastZoneSelected:"+lastZoneSelected); return lastZoneSelected; } public void setLastZoneSelected(int lastZoneSelected) { this.lastZoneSelected = lastZoneSelected; } public float normalizedValue(){ if(clicked){ return PApplet.map(getOffsetY(),0,h,1,0); } else return 0.0f; } public void draw() { DrumCloud.X.fill(DrumCloud.X.red(fillColor), DrumCloud.X.green(fillColor), DrumCloud.X.blue(fillColor), 100); DrumCloud.X.rect(x, y, w, h); } public void drawCommonContent() { //println("x:"+x+" y:"+y+" w:"+w+" h:"+h); DrumCloud.X.textSize(FontAdjuster.getSize(20)); DrumCloud.X.textAlign(PConstants.CENTER); DrumCloud.X.fill(200); DrumCloud.X.text(text, x+(w*0.5f), y+(h*0.7f)); if(showOtherZones) drawSubZones(); } public void drawClicked(){ drawNormal(); DrumCloud.X.ellipseMode(PConstants.CENTER); DrumCloud.X.stroke(200); DrumCloud.X.noFill(); DrumCloud.X.ellipse(x+getOffsetX(), y+getOffsetY(), DrumCloud.X.width*0.1f, DrumCloud.X.width*0.1f); } public void drawNormal(){ DrumCloud.X.stroke(getStrokeColor()); DrumCloud.X.fill(DrumCloud.X.red(getFillColor()),DrumCloud.X.green(getFillColor()),DrumCloud.X.blue(getFillColor()),200); DrumCloud.X.rect(getX(),getY(),getW(),getH()); drawCommonContent(); DrumCloud.X.strokeWeight(5); DrumCloud.X.stroke(255,200); DrumCloud.X.fill(200,100); //DrumCloud.X.line(x+getOffsetX()-DrumCloud.X.width*0.02f, y+getOffsetY(), x+getOffsetX()+DrumCloud.X.width*0.02f,y+getOffsetY()); //DrumCloud.X.line(x+getOffsetX(), y+getOffsetY()-DrumCloud.X.width*0.02f, x+getOffsetX(),y+getOffsetY()+DrumCloud.X.width*0.02f); DrumCloud.X.ellipse(x+getOffsetX(), y+getOffsetY(), DrumCloud.X.width*0.05f, DrumCloud.X.width*0.05f); } public void drawOvered(){ drawNormal(); } public void setSubZoneTexts(String[] texts) { if (texts.length>0) { subZoneTexts=texts; subZoneHeight=h/(float)texts.length; } } void setSubZoneColors(color[] colors) { if (subZoneTexts.length>0) { for (int i=0;i<subZoneTexts.length;i++) { } } } void drawSubZones(){ DrumCloud.X.stroke(getStrokeColor()); DrumCloud.X.textSize(FontAdjuster.getSize(30)); DrumCloud.X.textAlign(PConstants.CENTER); for (int i=0;i<subZoneTexts.length;i++) { DrumCloud.X.fill(150); if(i!=0) DrumCloud.X.line(x,y+i*subZoneHeight,x+w,y+i*subZoneHeight); DrumCloud.X.fill(200); DrumCloud.X.text(subZoneTexts[i],x+w*0.5f,y+(i*subZoneHeight+(subZoneHeight*0.6f))); } } public int isZoneSelected(int id,int mx, int my) { if(touchId!=id){ return -1; } else{ if(clicked){ //println("isOver(mx, my):"+isOver(mx, my)); if (false && !isOver(mx, my)){ clicked=false; PApplet.println("Moved out of zone"); return 0; }else{ //PApplet.println("Updating presszone position"); setOffsetX(PApplet.constrain(mx-x, 0, w)); setOffsetY(PApplet.constrain(my-y, 0, h)); lastZoneSelected=(int) (offsetY/((h+0.001f)/(float)subZoneTexts.length)); return lastZoneSelected; } }else{ if(touchId==id && dragReEnterEnabled && isOver(mx, my)){ clicked=true; } } lastZoneSelected=-1; return lastZoneSelected; } } public boolean isClickStarted(int id,int mx, int my,int gridPos) { if (isOver(mx, my)) { if(!clicked){ clicked = true; setOffsetX(PApplet.constrain(mx-x, 0, w)); setOffsetY(PApplet.constrain(my-y, 0, h)); touchId=id; startGrid=gridPos; showTime=DrumCloud.X.millis(); return true; } return false; } else { clicked =false; } return clicked; } public boolean isClickStopped(int id){ if(touchId!=id) return false; else{ touchId=-1; if(clicked){ clicked=false; return true; }else{ clicked=false; return false; } } } }