Ciao 访客, welcome back to old school! :p
PGraphics pg; View[] views = new View[9]; PImage slide1, slide2, slide3, slide4;PVector translation = new PVector(-400, -100);PVector vTranslation = new PVector(0, 0);boolean moving;int movingCounter;float rotation;int stepCounter;PFont font;CheckPoint publicCheckPoint;CheckPoint[] localCheckPoints = new CheckPoint[10];int triggeredCheckPoint;boolean publicMove;void setup() { size(displayWidth, displayHeight); pg = createGraphics(width, height); pg.smooth(); pg.noStroke(); pg.fill(100, 150, 255); smooth(); noStroke(); views[0] = new View(new PVector(400, 100, 0)); views[1] = new View(new PVector(200, 500, HALF_PI)); views[2] = new View(new PVector(1800, 400, TWO_PI)); views[3] = new View(new PVector(1100, 100, 0)); views[4] = new View(new PVector(1100, 400, 0)); views[5] = new View(new PVector(1100, 700, 0)); views[6] = new View(new PVector(400, -400, 0)); views[7] = new View(new PVector(-600, -200, 0)); views[8] = new View(new PVector(-1000, 600, 0)); font = createFont("Arial-Black", 60); pg.textFont(font); pg.textAlign(CENTER); publicCheckPoint = new CheckPoint(true, new PVector(width-200, height-60), 60); localCheckPoints[0] = new CheckPoint(false, new PVector((views[0].position.x+views[1].position.x)/2, (views[0].position.y+views[1].position.y)/2), 60, 1); localCheckPoints[1] = new CheckPoint(false, new PVector((views[0].position.x+views[2].position.x)/2+60, (views[0].position.y+views[2].position.y)/2-50), 60, 2); localCheckPoints[2] = new CheckPoint(false, new PVector((views[0].position.x+views[6].position.x)/2, (views[0].position.y+views[6].position.y)/2+50), 60, 6); localCheckPoints[3] = new CheckPoint(false, new PVector((views[0].position.x+views[7].position.x)/2, (views[0].position.y+views[7].position.y)/2), 60, 7); localCheckPoints[4] = new CheckPoint(false, new PVector((views[0].position.x+views[6].position.x)/2, (views[0].position.y+views[6].position.y)/2+50), 60, 0); localCheckPoints[5] = new CheckPoint(false, new PVector((views[0].position.x+views[7].position.x)/2, (views[0].position.y+views[7].position.y)/2), 60, 0); localCheckPoints[6] = new CheckPoint(false, new PVector((views[0].position.x+views[1].position.x)/2, (views[0].position.y+views[1].position.y)/2), 60, 0); localCheckPoints[7] = new CheckPoint(false, new PVector((views[0].position.x+views[2].position.x)/2+60, (views[0].position.y+views[2].position.y)/2-50), 60, 0); localCheckPoints[8] = new CheckPoint(false, new PVector((views[0].position.x+views[3].position.x)/2+150, (views[0].position.y+views[3].position.y)/2), 60, 3); localCheckPoints[9] = new CheckPoint(false, new PVector((views[0].position.x+views[3].position.x)/2+150, (views[0].position.y+views[3].position.y)/2), 60, 0);}void draw() { for (int i=0; i<views.length; i++) { views[i].update(); } pg.beginDraw(); pg.background(0); pg.translate(width/2+translation.x, height/2+translation.y); if (publicMove) { if (moving && movingCounter<views.length-1) { slowTranslate(new PVector(-views[movingCounter].position.x, -views[movingCounter].position.y), new PVector(-views[movingCounter+1].position.x, -views[movingCounter+1].position.y)); } else if (moving && movingCounter == views.length-1) { slowTranslate(new PVector(-views[movingCounter].position.x, -views[movingCounter].position.y), new PVector(-views[0].position.x, -views[0].position.y)); } } else { if (moving) { slowTranslate(new PVector(-views[movingCounter].position.x, -views[movingCounter].position.y), new PVector(-localCheckPoints[triggeredCheckPoint].viewN.position.x, -localCheckPoints[triggeredCheckPoint].viewN.position.y)); } } translation.x += vTranslation.x; translation.y += vTranslation.y; //===================================================================================================================== // Draw stuff on views //public style pg.textFont(font); pg.noStroke(); //views[0]========================================================== pg.pushStyle(); pg.fill(0, 200, 255); pg.rect(views[0].position.x-330, views[0].position.y-160,700,380); pg.fill(255); pg.textSize(30); pg.text("Name: ZHOU Shaocong", views[0].position.x-300, views[0].position.y-120); pg.text("Current:Lenovo R&T", views[0].position.x-300, views[0].position.y-80); pg.text("Previous:Motorola", views[0].position.x-300, views[0].position.y-40); pg.text("Working scope:creative coding/prototype design", views[0].position.x-300, views[0].position.y); pg.text("Experience:processing 4 years", views[0].position.x-300, views[0].position.y+40); pg.text("Experience:2 workshop and several speeches", views[0].position.x-300, views[0].position.y+80); pg.text("My part:introduction, android mode, NUI", views[0].position.x-300, views[0].position.y+120); pg.text("Zkyscraper@gmail.com", views[0].position.x-300, views[0].position.y+160); pg.text("Demo_Monkeys @WEIBO", views[0].position.x-300, views[0].position.y+200); pg.popStyle(); //views[1]======================================================== pg.pushStyle(); pg.fill(255, 206, 9); pg.rect(views[1].position.x-350, views[1].position.y-180,740,340); pg.fill(255); pg.textSize(30); pg.text("Download: Processing.org", views[1].position.x-300, views[1].position.y-120); pg.text("Download: Java.com", views[1].position.x-300, views[1].position.y-80); pg.text("Sketch folder", views[1].position.x-300, views[1].position.y-40); pg.text("Library folder", views[1].position.x-300, views[1].position.y); pg.text("Prefrence.txt", views[1].position.x-300, views[1].position.y+40); pg.text("Online reference", views[1].position.x-300, views[1].position.y+80); pg.text("Great examples", views[1].position.x-300, views[1].position.y+120); pg.popStyle(); //views[2]===================================================================================================== pg.pushStyle(); pg.fill(0, 174, 151); pg.rect(views[2].position.x-330, views[2].position.y-160,700,300); pg.fill(255); pg.textSize(60); pg.text("Variables", views[2].position.x-300, views[2].position.y-90); pg.text("int, float, string, color", views[2].position.x-300, views[2].position.y-20); pg.text("Local vs Public", views[2].position.x-300, views[2].position.y+50); pg.popStyle(); //views[3]===================================================================================================== pg.pushStyle(); pg.fill(20, 119, 80); pg.rect(views[3].position.x-330, views[3].position.y-160,1100,300); pg.fill(255, 119, 80); pg.rect(views[3].position.x-330, views[3].position.y-160,900,300); pg.fill(255); pg.textSize(60); pg.text("void setup() { }", views[3].position.x-300, views[3].position.y-90); pg.text("size(), smooth(), frameRate(), loop()", views[3].position.x-300, views[3].position.y-20); pg.text("setup() is not necessary!", views[3].position.x-300, views[3].position.y+50); pg.popStyle(); //views[4]===================================================================================================== pg.pushStyle(); pg.fill(255, 52, 132); pg.rect(views[4].position.x-330, views[4].position.y-160,500,300); pg.fill(255); pg.textSize(100); pg.text("Why P5?", views[4].position.x-300, views[4].position.y); pg.popStyle(); //views[5]===================================================================================================== pg.pushStyle(); pg.fill(255, 228, 0); pg.rect(views[5].position.x-330, views[5].position.y-160,900,300); pg.fill(255); pg.textSize(60); pg.text("Career position:", views[5].position.x-300, views[5].position.y-90); pg.text("design --> prototype --> decision", views[5].position.x-300, views[5].position.y-20); pg.text("design ---> demo ---> funding", views[5].position.x-300, views[5].position.y+50); pg.popStyle(); //views[6]===================================================================================================== pg.pushStyle(); pg.fill(255, 206, 9); pg.rect(views[6].position.x-330, views[6].position.y-160,700,300); pg.fill(255); pg.textSize(30); pg.text("Applications:", views[6].position.x-300, views[6].position.y-120); pg.text("Desk top software demo,JAVA", views[6].position.x-300, views[6].position.y-80); pg.text("Browser side service demo, JavaScript", views[6].position.x-300, views[6].position.y-40); pg.text("Smart device side APP demo, Android", views[6].position.x-300, views[6].position.y); pg.text("Data visualization", views[6].position.x-300, views[6].position.y+40); pg.text("Media art and installation", views[6].position.x-300, views[6].position.y+80); pg.text("Nature User Interface", views[6].position.x-300, views[6].position.y+120); pg.popStyle(); //views[7]===================================================================================================== pg.pushStyle(); pg.fill(234, 18, 175); pg.rect(views[7].position.x-330, views[7].position.y-160,900,300); pg.fill(255); pg.textSize(60); pg.text("Let's show the movie here", views[7].position.x-300, views[7].position.y-20); pg.popStyle(); //views[8]===================================================================================================== pg.pushStyle(); pg.fill(0, 200, 255); pg.textSize(100); pg.text("[ Thanks! ]", views[8].position.x, views[8].position.y); pg.popStyle(); // Draw ends //===================================================================================================================== for (int i=0; i<localCheckPoints.length; i++) { if (movingCounter!=localCheckPoints[i].viewNumber) { localCheckPoints[i].update(); localCheckPoints[i].display(pg); } } pg.endDraw(); //Display stuff on first layer background(0); image(pg,0,0); checkCheckPoints(); publicCheckPoint.update(); publicCheckPoint.display(g);}void slowTranslate(PVector current, PVector next) { print("Counter = "+movingCounter); print(" Start = "+views[movingCounter].position.x+","+views[movingCounter].position.y); print(" End = "+next.x+","+next.y); print(" v= "+vTranslation.x+","+vTranslation.y); println (" trans= "+translation.x+","+translation.y); vTranslation.x = (next.x - current.x)/50; vTranslation.y = (next.y - current.y)/50; if (dist(translation.x, translation.y, next.x, next.y)<=10) { moving =false; if (!publicMove) movingCounter = localCheckPoints[triggeredCheckPoint].viewNumber; else { movingCounter +=1; // if(movingCounter ==views.length) movingCounter =0; } if (movingCounter==views.length) movingCounter =0; vTranslation.x = 0; vTranslation.y = 0; translation.x = next.x; translation.y = next.y; }}void keyPressed() { moving= true;}void checkCheckPoints() { if (publicCheckPoint.triggered) { moving =true; publicCheckPoint.triggered =false; } for (int i = 0; i<localCheckPoints.length; i++) { if (localCheckPoints[i].triggered) { triggeredCheckPoint = i; moving =true; localCheckPoints[i].triggered =false; } }}class View { PVector position, onScreenPosition; boolean on; float rotation; View(PVector _pos) { position = new PVector(_pos.x, _pos.y, _pos.z); onScreenPosition = new PVector(_pos.x, _pos.y); on = true; } void update() { onScreenPosition.x = translation.x+width/2 + position.x; onScreenPosition.y = translation.y+height/2 + position.y; // rotate(translation.z); }}class CheckPoint { boolean publicCheckPoint; PVector position, onScreenPosition; int counter; boolean triggered, mouseOut, renewed; int diameter, steps; float angleViews; int viewNumber; View viewC, viewN; CheckPoint(boolean _cp, PVector _p, int _d) { publicCheckPoint = _cp; position = new PVector(_p.x, _p.y); onScreenPosition = new PVector(_p.x, _p.y); diameter = _d; steps =30; } CheckPoint(boolean _cp, PVector _p, int _d, int _n) { publicCheckPoint = _cp; position = new PVector(_p.x, _p.y); onScreenPosition = new PVector(position.x, position.y); diameter = _d; steps =30; viewNumber = _n; viewN = views[_n]; } void update() { if (!publicCheckPoint) { onScreenPosition.x = translation.x+width/2 + position.x; onScreenPosition.y = translation.y+height/2 + position.y; angleViews = atan2(viewN.position.y-views[movingCounter].position.y, viewN.position.x-views[movingCounter].position.x ); } if (!moving && dist(mouseX, mouseY, onScreenPosition.x, onScreenPosition.y)<diameter/2) { counter++; } else { } if (counter>steps) { triggered =true; if (publicCheckPoint) publicMove =true; else publicMove =false; counter = 0; } } void display(PGraphics _p) { if (!publicCheckPoint) { // _p.beginDraw(); _p.fill(255, 100); _p.noStroke(); _p.ellipse(position.x, position.y, diameter, diameter); _p.fill(0, 200, 255); _p.arc(position.x, position.y, diameter, diameter, 0, TWO_PI*counter/steps); _p.fill(0,100); _p.ellipse(position.x, position.y, diameter*0.8, diameter*0.8); _p.fill(0, 200, 255, 150); if (!moving) { // _p.ellipse(position.x, position.y, diameter*0.3,diameter*0.3); _p.pushMatrix(); _p.translate(position.x, position.y); _p.rotate(angleViews); _p.rect(0, 2, diameter/2, -4); // _p.rect(0,2,-diameter/2,-4); _p.popMatrix(); } else { _p.rect(position.x-10, position.y-10, 5, 20); _p.rect(position.x+5, position.y-10, 5, 20); } // _p.endDraw(); // image(_p,0,0); } else { fill(255, 100); noStroke(); ellipse(position.x, position.y, diameter, diameter); fill(0, 200, 255); arc(position.x, position.y, diameter, diameter, 0, TWO_PI*counter/steps); fill(0); ellipse(position.x, position.y, diameter*0.8, diameter*0.8); fill(0, 200, 255); if (!moving) { triangle(position.x-7, position.y+12, position.x-7, position.y-12, position.x+12, position.y); } else { rect(position.x-10, position.y-10, 5, 20); rect(position.x+5, position.y-10, 5, 20); } } }}
import com.onformative.leap.LeapMotionP5;import com.leapmotion.leap.Finger;import com.leapmotion.leap.Gesture.State;import com.leapmotion.leap.Gesture.Type;import com.leapmotion.leap.Hand;import com.leapmotion.leap.SwipeGesture;import processing.video.*;Movie movie1,movie2,movie3;LeapMotionP5 leap;PGraphics pg; View[] views = new View[9]; PImage slide1, slide2, slide3, slide4;PVector translation = new PVector(-400, -100);PVector vTranslation = new PVector(0, 0);boolean moving;int movingCounter;float rotation;int stepCounter;PFont font;CheckPoint publicCheckPoint;CheckPoint[] localCheckPoints = new CheckPoint[10];int triggeredCheckPoint;boolean publicMove;PVector[] fingerPosition = new PVector[20];PVector indexPosition;int fingerCounter;void setup() { size(displayWidth, displayHeight); pg = createGraphics(width, height); pg.smooth(); pg.noStroke(); pg.fill(100, 150, 255); movie1 = new Movie(this, "01.mov"); movie2 = new Movie(this, "02.mov"); leap = new LeapMotionP5(this); leap.enableGesture(Type.TYPE_SWIPE); indexPosition = new PVector(0,0,0); smooth(); noStroke(); noCursor(); views[0] = new View(new PVector(400, 100, 0)); views[1] = new View(new PVector(200, 500, HALF_PI)); views[2] = new View(new PVector(1800, 400, TWO_PI)); views[3] = new View(new PVector(1100, 100, 0)); views[4] = new View(new PVector(1100, 400, 0)); views[5] = new View(new PVector(1100, 700, 0)); views[6] = new View(new PVector(400, -400, 0)); views[7] = new View(new PVector(-600, -200, 0)); views[8] = new View(new PVector(-1000, 600, 0)); font = createFont("Arial-Black", 60); pg.textFont(font); pg.textAlign(CENTER); publicCheckPoint = new CheckPoint(true, new PVector(width-200, height-60), 60); localCheckPoints[0] = new CheckPoint(false, new PVector((views[0].position.x+views[1].position.x)/2, (views[0].position.y+views[1].position.y)/2), 60, 1); localCheckPoints[1] = new CheckPoint(false, new PVector((views[0].position.x+views[2].position.x)/2+60, (views[0].position.y+views[2].position.y)/2-50), 60, 2); localCheckPoints[2] = new CheckPoint(false, new PVector((views[0].position.x+views[6].position.x)/2, (views[0].position.y+views[6].position.y)/2+50), 60, 6); localCheckPoints[3] = new CheckPoint(false, new PVector((views[0].position.x+views[7].position.x)/2, (views[0].position.y+views[7].position.y)/2), 60, 7); localCheckPoints[4] = new CheckPoint(false, new PVector((views[0].position.x+views[6].position.x)/2, (views[0].position.y+views[6].position.y)/2+50), 60, 0); localCheckPoints[5] = new CheckPoint(false, new PVector((views[0].position.x+views[7].position.x)/2, (views[0].position.y+views[7].position.y)/2), 60, 0); localCheckPoints[6] = new CheckPoint(false, new PVector((views[0].position.x+views[1].position.x)/2, (views[0].position.y+views[1].position.y)/2), 60, 0); localCheckPoints[7] = new CheckPoint(false, new PVector((views[0].position.x+views[2].position.x)/2+60, (views[0].position.y+views[2].position.y)/2-50), 60, 0); localCheckPoints[8] = new CheckPoint(false, new PVector((views[0].position.x+views[3].position.x)/2+150, (views[0].position.y+views[3].position.y)/2), 60, 3); localCheckPoints[9] = new CheckPoint(false, new PVector((views[0].position.x+views[3].position.x)/2+150, (views[0].position.y+views[3].position.y)/2), 60, 0);}void draw() { for (int i =0; i<fingerCounter; i++) { ellipse(fingerPosition[i].x, fingerPosition[i].y, 10, 10); } for (int i=0; i<views.length; i++) { views[i].update(); } pg.beginDraw(); pg.background(0); pg.translate(width/2+translation.x, height/2+translation.y); if (publicMove) { if (moving && movingCounter<views.length-1) { slowTranslate(new PVector(-views[movingCounter].position.x, -views[movingCounter].position.y), new PVector(-views[movingCounter+1].position.x, -views[movingCounter+1].position.y)); } else if (moving && movingCounter == views.length-1) { slowTranslate(new PVector(-views[movingCounter].position.x, -views[movingCounter].position.y), new PVector(-views[0].position.x, -views[0].position.y)); } } else { if (moving) { slowTranslate(new PVector(-views[movingCounter].position.x, -views[movingCounter].position.y), new PVector(-localCheckPoints[triggeredCheckPoint].viewN.position.x, -localCheckPoints[triggeredCheckPoint].viewN.position.y)); } } translation.x += vTranslation.x; translation.y += vTranslation.y; //===================================================================================================================== // Draw stuff on views //public style pg.textFont(font); pg.noStroke(); //views[0]========================================================== pg.pushStyle(); pg.fill(0, 200, 255); pg.rect(views[0].position.x-330, views[0].position.y-160,700,380); pg.fill(255); pg.textSize(30); pg.text("Name: ZHOU Shaocong", views[0].position.x-300, views[0].position.y-120); pg.text("Current:Lenovo R&T", views[0].position.x-300, views[0].position.y-80); pg.text("Previous:Motorola", views[0].position.x-300, views[0].position.y-40); pg.text("Working scope:creative coding/prototype design", views[0].position.x-300, views[0].position.y); pg.text("Experience:processing 4 years", views[0].position.x-300, views[0].position.y+40); pg.text("Experience:2 workshop and several speeches", views[0].position.x-300, views[0].position.y+80); pg.text("My part:introduction, android mode, NUI", views[0].position.x-300, views[0].position.y+120); pg.text("Zkyscraper@gmail.com", views[0].position.x-300, views[0].position.y+160); pg.text("Demo_Monkeys @WEIBO", views[0].position.x-300, views[0].position.y+200); pg.popStyle(); //views[1]======================================================== pg.pushStyle(); pg.fill(255, 206, 9); pg.rect(views[1].position.x-350, views[1].position.y-180,740,340); pg.fill(255); pg.textSize(30); pg.text("Download: Processing.org", views[1].position.x-300, views[1].position.y-120); pg.text("Download: Java.com", views[1].position.x-300, views[1].position.y-80); pg.text("Sketch folder", views[1].position.x-300, views[1].position.y-40); pg.text("Library folder", views[1].position.x-300, views[1].position.y); pg.text("Prefrence.txt", views[1].position.x-300, views[1].position.y+40); pg.text("Online reference", views[1].position.x-300, views[1].position.y+80); pg.text("Great examples", views[1].position.x-300, views[1].position.y+120); pg.popStyle(); //views[2]===================================================================================================== pg.pushStyle(); pg.fill(0, 174, 151); pg.rect(views[2].position.x-330, views[2].position.y-160,700,300); pg.fill(255); pg.textSize(60); pg.text("Variables", views[2].position.x-300, views[2].position.y-90); pg.text("int, float, string, color", views[2].position.x-300, views[2].position.y-20); pg.text("Local vs Public", views[2].position.x-300, views[2].position.y+50); pg.popStyle(); //views[3]===================================================================================================== pg.pushStyle(); pg.fill(20, 119, 80); pg.rect(views[3].position.x-330, views[3].position.y-160,1100,300); pg.fill(255, 119, 80); pg.rect(views[3].position.x-330, views[3].position.y-160,900,300); pg.fill(255); pg.textSize(60); pg.text("void setup() { }", views[3].position.x-300, views[3].position.y-90); pg.text("size(), smooth(), frameRate(), loop()", views[3].position.x-300, views[3].position.y-20); pg.text("setup() is not necessary!", views[3].position.x-300, views[3].position.y+50); pg.popStyle(); //views[4]===================================================================================================== pg.pushStyle(); pg.fill(255, 52, 132); pg.rect(views[4].position.x-330, views[4].position.y-160,500,300); pg.fill(255); pg.textSize(100); pg.text("Why P5?", views[4].position.x-300, views[4].position.y); pg.popStyle(); //views[5]===================================================================================================== pg.pushStyle(); pg.fill(255, 228, 0); pg.rect(views[5].position.x-330, views[5].position.y-160,900,300); pg.fill(255); pg.textSize(60); pg.text("Career position:", views[5].position.x-300, views[5].position.y-90); pg.text("design --> prototype --> decision", views[5].position.x-300, views[5].position.y-20); pg.text("design ---> demo ---> funding", views[5].position.x-300, views[5].position.y+50); pg.popStyle(); //views[7]===================================================================================================== pg.pushStyle(); pg.fill(234, 18, 175); pg.rect(views[7].position.x-430, views[7].position.y-160,1050,360); pg.fill(255); pg.textSize(60); pg.text("Let's show the movie here", views[7].position.x-300, views[7].position.y-20); pg.image(movie1, views[7].position.x-400, views[7].position.y-120); pg.image(movie2, views[7].position.x+100, views[7].position.y-120); if(movingCounter == 7) { movie1.loop(); movie2.loop(); } else { movie1.stop(); movie2.stop(); } pg.popStyle(); //views[6]===================================================================================================== pg.pushStyle(); pg.pushMatrix(); pg.translate(0,-100);// pg.fill(255, 206, 9);// pg.rect(views[6].position.x-330, views[6].position.y-160,700,300);//// pg.fill(255);// pg.textSize(30);//// pg.text("Applications:", views[6].position.x-300, views[6].position.y-120);// pg.text("Desk top software demo,JAVA", views[6].position.x-300, views[6].position.y-80);// pg.text("Browser side service demo, JavaScript", views[6].position.x-300, views[6].position.y-40);// pg.text("Smart device side APP demo, Android", views[6].position.x-300, views[6].position.y);// pg.text("Data visualization", views[6].position.x-300, views[6].position.y+40);// pg.text("Media art and installation", views[6].position.x-300, views[6].position.y+80);// pg.text("Nature User Interface", views[6].position.x-300, views[6].position.y+120); if (dist(indexPosition.x,indexPosition.y, views[6].onScreenPosition.x, views[6].onScreenPosition.y)<120) views[6].on =true; else views[6].on =false; int spreadSize = views[6].on? 500:240;pg.fill(0, 200, 255); pg.ellipse(views[6].position.x, views[6].position.y, spreadSize, spreadSize); if (views[6].on) { pg.pushMatrix(); pg.translate(views[6].position.x, views[6].position.y); pg.rotate(-0.05*TWO_PI); pg.translate(260,0); pg.textSize(20); pg.text("Desk top software demo,JAVA", 0, 0); pg.popMatrix(); } pg.fill(0, 255, 0); pg.arc(views[6].position.x, views[6].position.y, spreadSize, spreadSize, 0, 0.48*TWO_PI); if (views[6].on) { pg.pushMatrix(); pg.translate(views[6].position.x, views[6].position.y); pg.rotate(0.42*TWO_PI); pg.translate(260,0); pg.rotate(PI); pg.textSize(20); pg.text("Smart device side APP demo, Android", -260, 0); pg.popMatrix(); } pg.fill(255, 200, 0); pg.arc(views[6].position.x, views[6].position.y, spreadSize, spreadSize, 0, 0.27*TWO_PI); if (views[6].on) { pg.pushMatrix(); pg.translate(views[6].position.x, views[6].position.y); pg.rotate(0.15*TWO_PI); pg.translate(260,0); pg.textSize(20); pg.text("Browser side service demo, JavaScript", 0, 0); pg.popMatrix(); } pg.fill(255, 50, 0); pg.arc(views[6].position.x, views[6].position.y, spreadSize, spreadSize, 0, 0.12*TWO_PI); if (views[6].on) { pg.pushMatrix(); pg.translate(views[6].position.x, views[6].position.y); pg.rotate(0.1*TWO_PI); pg.translate(260,0); pg.textSize(20); pg.text("Data visualization", 0, 0); pg.popMatrix(); } pg.fill(155, 150, 250); pg.arc(views[6].position.x, views[6].position.y, spreadSize, spreadSize, 0, 0.08*TWO_PI); if (views[6].on) { pg.pushMatrix(); pg.translate(views[6].position.x, views[6].position.y); pg.rotate(0.04*TWO_PI); pg.translate(260,0); pg.textSize(20); pg.text("Media art and installation", 0, 0); pg.popMatrix(); } pg.fill(0); pg.ellipse(views[6].position.x, views[6].position.y, 180, 180); if (views[6].on) pg.fill(255); else pg.fill(0, 200, 255); pg.textSize(90); pg.text("AP", views[6].position.x-55, views[6].position.y+35);pg.popMatrix(); pg.popStyle(); //views[8]===================================================================================================== pg.pushStyle(); pg.fill(0, 200, 255); pg.textSize(100); pg.text("[ Thanks! ]", views[8].position.x, views[8].position.y); pg.popStyle(); // Draw ends //===================================================================================================================== for (int i=0; i<localCheckPoints.length; i++) { if (movingCounter!=localCheckPoints[i].viewNumber) { localCheckPoints[i].update(); localCheckPoints[i].display(pg); } } pg.endDraw(); //Display stuff on first layer background(0); image(pg,0,0); checkCheckPoints(); publicCheckPoint.update(); publicCheckPoint.display(g); //======================================================================// The leap motion part//====================================================================== fill(255, 20); fingerCounter =0; for (Finger finger : leap.getFingerList()) { PVector fingerPos = leap.getTip(finger); fingerPosition[fingerCounter] = new PVector(fingerPos.x, fingerPos.y, fingerPos.z); fingerCounter++; // ellipse(fingerPos.x, fingerPos.y, 10, 10); } if (fingerPosition[0]!=null && fingerCounter <=2) { indexPosition.x = fingerPosition[0].x; indexPosition.y = fingerPosition[0].y; indexPosition.z = fingerPosition[0].z; } else { indexPosition.x = -100; indexPosition.y = -100; indexPosition.z = -100; } fill(255, 0, 0, 100); for (int i =0; i<fingerCounter; i++) { ellipse(fingerPosition[i].x, fingerPosition[i].y, 10, 10); }}void slowTranslate(PVector current, PVector next) { print("Counter = "+movingCounter); print(" Start = "+views[movingCounter].position.x+","+views[movingCounter].position.y); print(" End = "+next.x+","+next.y); print(" v= "+vTranslation.x+","+vTranslation.y); println (" trans= "+translation.x+","+translation.y); vTranslation.x = (next.x - current.x)/50; vTranslation.y = (next.y - current.y)/50; if (dist(translation.x, translation.y, next.x, next.y)<=10) { moving =false; if (!publicMove) movingCounter = localCheckPoints[triggeredCheckPoint].viewNumber; else { movingCounter +=1; // if(movingCounter ==views.length) movingCounter =0; } if (movingCounter==views.length) movingCounter =0; vTranslation.x = 0; vTranslation.y = 0; translation.x = next.x; translation.y = next.y; }}void keyPressed() { moving= true;}void checkCheckPoints() { if (publicCheckPoint.triggered) { moving =true; publicCheckPoint.triggered =false; } for (int i = 0; i<localCheckPoints.length; i++) { if (localCheckPoints[i].triggered) { triggeredCheckPoint = i; moving =true; localCheckPoints[i].triggered =false; } }}class View { PVector position, onScreenPosition; boolean on; float rotation; View(PVector _pos) { position = new PVector(_pos.x, _pos.y, _pos.z); onScreenPosition = new PVector(_pos.x, _pos.y);// on = true; } void update() { onScreenPosition.x = translation.x+width/2 + position.x; onScreenPosition.y = translation.y+height/2 + position.y; // rotate(translation.z); }}class CheckPoint { boolean publicCheckPoint; PVector position, onScreenPosition; int counter; boolean triggered, mouseOut, renewed; int diameter, steps; float angleViews; int viewNumber; View viewC, viewN; CheckPoint(boolean _cp, PVector _p, int _d) { publicCheckPoint = _cp; position = new PVector(_p.x, _p.y); onScreenPosition = new PVector(_p.x, _p.y); diameter = _d; steps =30; } CheckPoint(boolean _cp, PVector _p, int _d, int _n) { publicCheckPoint = _cp; position = new PVector(_p.x, _p.y); onScreenPosition = new PVector(position.x, position.y); diameter = _d; steps =30; viewNumber = _n; viewN = views[_n]; } void update() { if (!publicCheckPoint) { onScreenPosition.x = translation.x+width/2 + position.x; onScreenPosition.y = translation.y+height/2 + position.y; angleViews = atan2(viewN.position.y-views[movingCounter].position.y, viewN.position.x-views[movingCounter].position.x ); } if (!moving && dist(indexPosition.x,indexPosition.y, onScreenPosition.x, onScreenPosition.y)<diameter/2) { counter++; } else { } if (counter>steps) { triggered =true; if (publicCheckPoint) publicMove =true; else publicMove =false; counter = 0; } } void display(PGraphics _p) { if (!publicCheckPoint) { // _p.beginDraw(); _p.fill(255, 100); _p.noStroke(); _p.ellipse(position.x, position.y, diameter, diameter); _p.fill(0, 200, 255); _p.arc(position.x, position.y, diameter, diameter, 0, TWO_PI*counter/steps); _p.fill(0,100); _p.ellipse(position.x, position.y, diameter*0.8, diameter*0.8); _p.fill(0, 200, 255, 150); if (!moving) { // _p.ellipse(position.x, position.y, diameter*0.3,diameter*0.3); _p.pushMatrix(); _p.translate(position.x, position.y); _p.rotate(angleViews); _p.rect(0, 2, diameter/2, -4); // _p.rect(0,2,-diameter/2,-4); _p.popMatrix(); } else { _p.rect(position.x-10, position.y-10, 5, 20); _p.rect(position.x+5, position.y-10, 5, 20); } // _p.endDraw(); // image(_p,0,0); } else { fill(255, 100); noStroke(); ellipse(position.x, position.y, diameter, diameter); fill(0, 200, 255); arc(position.x, position.y, diameter, diameter, 0, TWO_PI*counter/steps); fill(0); ellipse(position.x, position.y, diameter*0.8, diameter*0.8); fill(0, 200, 255); if (!moving) { triangle(position.x-7, position.y+12, position.x-7, position.y-12, position.x+12, position.y); } else { rect(position.x-10, position.y-10, 5, 20); rect(position.x+5, position.y-10, 5, 20); } } }}void movieEvent(Movie m) { m.read();}void mouseClicked() { publicMove =true; moving= true;}public void swipeGestureRecognized(SwipeGesture gesture) { if (gesture.state() == State.STATE_STOP) { publicMove =true; moving= true; } else if (gesture.state() == State.STATE_START) { } else if (gesture.state() == State.STATE_UPDATE) { }}public void stop() { leap.stop();}