boolean debug = false; float step = 0.05; PImage[] hourImages = null; PImage[] minuteImages = null; PImage bgImage = null; float displayedHour = 0; float displayedMinute = 0; void setup() { size(800,435); background(0); smooth(); loadBackground(); preloadHours(); preloadMinutes(); } void draw() { float distance = getDistanceToMove(); adjustTime(distance); debugPrint(" "+displayedHour+":"+displayedMinute); drawHours(); drawMinutes(); drawFlipLines(); if (distance < 0.1) { drawSeconds(); } debugPrint("\n"); } void debugPrint(String s) { if (debug) print(s); } void loadBackground() { bgImage = loadImage("background.jpg"); image(bgImage,0,0,800,435); } void preloadHours() { hourImages = new PImage[24]; hourImages[0] = loadImage("hour12.jpg"); for (int i=1; i<=12; i++) { hourImages[i] = loadImage("hour" + i + ".jpg"); if (i<12) { hourImages[i+12] = hourImages[i]; } } } void preloadMinutes() { minuteImages = new PImage[60]; for (int i=0; i<60; i++) { minuteImages[i] = loadImage("min" + i + ".jpg"); } } void drawHours() { int hour = int(displayedHour); debugPrint(" hour=" + hour); PImage hourImage = hourImages[hour]; //image(hourImage, 40, 180); image(hourImage, 174, 130, 160, 160); } void drawMinutes() { PImage minuteImage = minuteImages[int(displayedMinute)]; //stroke(255,0,0); //rect(405,130,320*0.65,240*0.65); image(minuteImage, 420, 130, 200, 160); } void drawFlipLines() { fill(0); stroke(0); //rect(0,299,800,3); rect(150,214,195,3); rect(415,214,195,3); } void drawSeconds() { if (second()%2==0) { fill(255); stroke(255); ellipse(380,217-30,20,20); ellipse(380,217+30,20,20); } else { fill(0); stroke(0); rect(365,217-45,30,90); } } float getMinutesSinceMidnight(float hours, float minutes) { return hours * 60.0 + minutes; } float getDistanceToMove() { float now = getMinutesSinceMidnight(hour(),minute()); float cur = getMinutesSinceMidnight(displayedHour, displayedMinute); debugPrint(" now="+now+" cur="+cur); float result = (now-cur)*step; return result; } void adjustTime(float distance) { debugPrint(" dist="+distance); if (distance != 0) { displayedMinute += distance; while (displayedMinute > 59) { displayedMinute -= 60; displayedHour++; if (displayedHour > 23) { displayedHour -= 24; } } while (displayedMinute < 0) { displayedMinute += 60; displayedHour--; if (displayedHour < 0) { displayedHour += 24; } } } else { displayedHour = int(hour()); displayedMinute = int(minute()); } }