//starting click time in millis int startTime; //top and bottom of hourglass int TP = 20; int BT = TP+240; //degree of angle spin for button box float spin; //set size seed timer void setup(){ size(200,300); startTime = millis() ;//- (70*1000); } void loop(){ //get difference in time from start in seconds int sec = (millis() - startTime ) / 1000; //next line for debugging end behavior //sec += 57; sec--; //usually grey, but we flash white 3 times after... if(sec < 60 - 1) { background(128); stroke(255); } else { if(sec < 64 && sec %2 == 1 ){ background(255); stroke(128); } else { background(128); stroke(255); } } for(int i = 0; i < 60; i++){ //for hourglass "bend in" int sideoffset = 3 * constrain((i/2) - 15,0,60); if(i > sec){ //draw at top -- grain not down yet int baseline = TP+((i/2) *4); if(i % 2 == 0){ line(50 + sideoffset,baseline,98,baseline); line(50 + sideoffset,baseline+1,98,baseline+1); } else { line(150 - sideoffset,baseline,102,baseline); line(150 - sideoffset,baseline+1,102,baseline+1); } } else { //draw at bottom int baseline = BT-((i/2) *4); if(i % 2 == 1){ line(50 + sideoffset,baseline,98,baseline); line(50 + sideoffset,baseline+1,98,baseline+1); } else { line(150 - sideoffset,baseline,102,baseline); line(150 - sideoffset,baseline+1,102,baseline+1); } } } //do wireframe button box noFill(); translate(180,280); rotateX(spin); rotateY(spin); rotateZ(spin); box(10); //spin box if time is up, just for fun... if(sec >= 60 - 1) {spin += .01;} } void mouseReleased(){ //fudge to see if mouse was clicked in lower corner (where button box is...) // if(mouseX > 165 && mouseY > 265){ startTime = millis(); // } }