//import processing.opengl.*; //PTablet tablet; boolean tabletPressed=false; penStroke ps=new penStroke(); penStroke lastps=new penStroke(); penStroke simplified=new penStroke(); float lastpsFade=1; SVGImage imgDummy; creature clist[]=new creature[0]; boolean paused=false; boolean useSmooth=true; float timer; void setup() { size(500,500,P3D); // if(useSmooth) // smooth(); framerate(30); // tablet = new PTablet(); // tablet.startTablet(); // tablet.readTablet(); ellipseMode(CENTER); uiFont=loadFont("Scala-Regular-25.vlw"); loadImages(); createFlowField(); } float kp=0; float zoom=0; void draw() { background(255); manageTablet(); manageFlowField(); manageCreatures(); drawUI(); // println(tablet.pressure); } void recordTablet() { vec pm=nv(pmouseX,pmouseY); vec mp=nv(mouseX,mouseY); if(dist(pm,mp)>.5) ps.addPoint(); } void drawSimplified() { if(!displayUI) return; simplified=simplify(ps); if(simplified!=null) { for(int i=0;i0) line(simplified.points[i-1].p,simplified.points[i].p); } } } void manageCreatures() { if(clist==null||clist.length<1) return; if(!paused) { // float st=millis(); for(int i=0;i=60&&ps.totalLength<280) {//armor creature temp[]=new creature[clist.length+1]; System.arraycopy(clist,0,temp,0,clist.length); temp[clist.length]=new armor(ps); clist=temp; return; } if(ps.totalLength>=280&&ps.totalLength<1200) {//snakey creature temp[]=new creature[clist.length+1]; System.arraycopy(clist,0,temp,0,clist.length); temp[clist.length]=new snakey(ps); clist=temp; return; } break; case 3: break; } } void manageTablet() { // tablet.readTablet(); curGesture=interpretStroke(ps); drawTabletStroke(ps,curGesture,1); drawTabletStroke(lastps,0,lastpsFade); // penStroke simp=simplify(ps); // drawTabletStroke(simp,1); lastpsFade*=.97; if(lastpsFade<.01) lastps=null; vec tabletTilt=new vec(); float tabletTiltTotal=0; if(mousePressed) {//tabletPressed if(tabletTiltTotal<100) {//with tip recordTablet(); if(lastGesture!=3) lastps=null; tabletPressed=true; } else {//with eraser vec vf=findFlowVec(nv(mouseX,mouseY)); vec pm=new vec(pmouseX,pmouseY); vec mp=new vec(mouseX,mouseY); vec mv=new vec(pm,mp); mv.mul(2); flowField[int(vf.x)][int(vf.y)].add(mv); } } else { if(tabletPressed) {//tabletReleased if(tabletTiltTotal<100) {//with tip newCreature(ps,curGesture); } else {//with eraser } } //------------tablet not pressed lastGesture=curGesture; if(lastps==null) { lastps=new penStroke(ps); lastpsFade=1; } ps=new penStroke(); tabletPressed=false; } if(curGesture==3) { lastGesture=curGesture; curGesture=0; //create creature 3 "flora" creature temp[]=new creature[clist.length+1]; System.arraycopy(clist,0,temp,0,clist.length); temp[clist.length]=new flotsam(ps); clist=temp; lastps=new penStroke(ps); lastpsFade=1; ps=new penStroke(); } }