|
/* |
|
* us p5.js to draw a clock on a 960x500 canvas |
|
*/ |
|
function draw_clock(hour, minute, second, millis, alarm) { |
|
textSize(80); |
|
background(169, 201, 209); |
|
|
|
//////to make clouds and other thing move smoother (for every second) |
|
// if (hour == 23 && minute ==59 ){ |
|
// hour2 = hour +(minute/59); |
|
// } |
|
hour2 = hour + (minute / 60) + (second/(60*60)); |
|
//////background change depending on time |
|
var posOpacity; |
|
//////optionA background getting light at 6am |
|
// if (hour2 > 6 ){ |
|
// posOpacity= map(hour2, 6, 7, 255, 0); |
|
// } |
|
// if (hour2 > 18 ){ |
|
// posOpacity= map(hour2, 18, 19, 0, 255); |
|
// } |
|
//////optionB background getting light from midnight |
|
if (hour2 < 12){ |
|
posOpacity= map(hour2, 0, 11, 255, 0); |
|
} |
|
else { |
|
posOpacity= map(hour2, 12, 24, 0, 255); |
|
} |
|
background(14,15,52, posOpacity); |
|
//////for position of clouds moving from left to right |
|
var posXC; |
|
if (hour2 > 6) { |
|
posXC = map(hour2, 6, 17, 960, -1200); |
|
} |
|
else { |
|
posXC = 1250; |
|
} |
|
fill(252,243,229); |
|
//////clouds |
|
clouds(posXC,-10); |
|
clouds(posXC+800, 0); |
|
|
|
//////stars appear from 20:00 -> 22:00 |
|
var opacityStars; |
|
if (hour2 > 20) { |
|
opacityStars = map(hour2, 20, 22, 0, 255); |
|
} |
|
//////stars go away from 4:00 ->6:00 |
|
else if (hour2 >4) { |
|
opacityStars = map(hour2, 4, 6, 255, 0); |
|
} |
|
stars(opacityStars); |
|
|
|
//////Battery |
|
noStroke(); |
|
fill(255); |
|
var shakeX=random(-10,10); |
|
var shakeY=random(-10,10); |
|
|
|
//if alarm is going off, battery shakes and flashes red |
|
if (alarm == 0) { |
|
translate(shakeX, shakeY); |
|
if (second % 2 == 0) { |
|
fill(255,54,51, 255); |
|
} |
|
} |
|
//alarm build up shake |
|
if (alarm > 0) { |
|
if (alarm < 15.0) { |
|
var shakeX = map(alarm, 0, 15, 10, 0); |
|
var shakeY = map(alarm, 0, 15, 10, 0); |
|
var buildShakeX = random(shakeX); |
|
var buildShakeY = random(shakeY); |
|
translate(buildShakeX, buildShakeY); |
|
}} |
|
|
|
//////verySmallRectangle (makes battery) |
|
rect(900, 195, 33, 110, 15, 15); |
|
|
|
//////batteryBar |
|
if (alarm == 0) { |
|
//flashes transparent red |
|
if (second % 2 == 0) { |
|
fill(255,54,51, 100); |
|
} |
|
} |
|
////battery getting bigger from 00:00 -> 12:00 and smaller from 12:00 -> 00:00 |
|
var pos; |
|
if (hour2 > 12 ) { |
|
pos = map(hour2, 12, 24, 430, 0); |
|
} |
|
else { |
|
pos = map(hour2, 0, 12, 0, 430); |
|
} |
|
print(hour2); |
|
rect(460, 165, pos, 170, 10, 10); |
|
|
|
//////bigRectOnlyStroke (edge of battery) |
|
stroke(255); |
|
fill(0,0); |
|
strokeWeight(13); |
|
//flashes red on alarm |
|
if (alarm == 0) { |
|
if (second % 2 == 0) {stroke(255,54,51, 255);} |
|
} |
|
rect(445, 150, 460, 200, 15, 15); |
|
noStroke(); |
|
|
|
//////lightning bolt flashes when charging from 00:00 -> 12:00 |
|
if (second % 2== 0) { |
|
if (hour2 < 12) { |
|
fill(255,248,205); |
|
beginShape(); |
|
vertex(660, 180); |
|
vertex(660, 240); |
|
vertex(560, 220); |
|
vertex(700, 320); |
|
vertex(700, 260); |
|
vertex(790, 280); |
|
endShape(CLOSE); |
|
} |
|
} |
|
|
|
//////digitalclock |
|
fill(255, 207, 0); |
|
if (alarm == 0){ |
|
textStyle(BOLD); |
|
} |
|
else{ |
|
textStyle(NORMAL); |
|
} |
|
textAlign(LEFT); |
|
var sec_string = ""; |
|
if(second < 10) { |
|
sec_string = "0"; |
|
} |
|
var min_string = ""; |
|
if(minute < 10) { |
|
min_string = "0"; |
|
} |
|
var hour_string = ""; |
|
if(hour < 10) { |
|
hour_string = "0"; |
|
} |
|
sec_string = sec_string + second; |
|
min_string = min_string + minute; |
|
hour_string = hour_string + hour; |
|
text(hour_string + ':' + min_string + ':' + sec_string, 514, 278); |
|
|
|
//////percentage sign |
|
textStyle(NORMAL); |
|
fill(255); |
|
// changes to red on alarm |
|
if (alarm == 0) { |
|
if (second % 2 == 0) { |
|
fill(255,54,51, 255); |
|
} |
|
} |
|
//percentage going up to 100 from 00:00 -> 12:00 then goes down to 0 from 12:00 ->24:00 |
|
var posPercentage; |
|
if (hour2 < 12) { |
|
posPercentage = map(hour2, 0, 12, 0, 100); |
|
} |
|
else { |
|
posPercentage = map(hour2, 12, 24, 100, 0); |
|
} |
|
textSize(150); |
|
textAlign(RIGHT); |
|
text(int(posPercentage) + '%', 413, 305); |
|
} |
|
|
|
|
|
function stars(opacityStars){ |
|
fill(255, 235, 147, opacityStars); |
|
var starX = [349,458,626,532,606,396,422,758,793,217,578,142,490,76,64,734,873,1,836,362,156,613,161,36,78,441,40,190,315,120,7,63,83,740,155] |
|
var starY = [311,95,461,176,45,242,105,421,121,492,111,462,427,180,297,5,439,243,106,164,276,44,411,89,229,349,103,171,190,398,77,28,262,451,73] |
|
for (var n = 0; n < 36; n++) { |
|
ellipse(starX[n], starY[n], random(0,2), random(0,10)); |
|
ellipse(starX[n], starY[n], random(0,10), random(0,2)); |
|
ellipse(starX[n]+50, starY[n]+50, random(0,2), random(0,1)); |
|
ellipse(starX[n]+50, starY[n]+50, random(0,1), random(0,2)); |
|
ellipse(starX[n]+200, starY[n]+100, random(0,2), random(0,1)); |
|
ellipse(starX[n]+200, starY[n]+100, random(0,1), random(0,2)); |
|
ellipse(starX[n], starY[n]+100, random(0,2), random(0,1)); |
|
ellipse(starX[n], starY[n]+100, random(0,1), random(0,2)); |
|
ellipse(starX[n]+250, starY[n], random(0, 2), random(0,15)); |
|
ellipse(starX[n]+250, starY[n], random(0, 15), random(0,2)); |
|
ellipse(starX[n]+820, starY[n], random(0, 2), random(0,5)); |
|
ellipse(starX[n]+820, starY[n], random(0, 5), random(0,2)); |
|
ellipse(starX[n], starY[n]+300, random(0, 2), random(0,5)); |
|
ellipse(starX[n], starY[n]+300, random(0, 5), random(0,2)); |
|
} |
|
} |
|
function clouds(posX,y){ |
|
for (var i = 0; i < 8; i++) { |
|
var cloudX = [100,125,125,155,155,178,186] |
|
var cloudY = [100,80,118,85,125,93,115] |
|
var cloudW = [50,40,65,60,60,60,60] |
|
var cloudH = [50,65,60,60,60,60,40] |
|
var cloudW2 = [80,60,68,62,62,80,70] |
|
var cloudH2 = [60,52,68,66,42,42,42] |
|
var cloudW3 = [100,80,80,85,60,80,80] |
|
var cloudH3 = [70,72,90,94,90,60,50] |
|
ellipse(cloudX[i] -posX, cloudY[i]+y, cloudW[i], cloudH[i]); |
|
ellipse(cloudX[i] -posX +500, cloudY[i]+200 +y, cloudW[i], cloudH[i]); |
|
ellipse(cloudX[i] -posX +300, cloudY[i]+370 +y, cloudW3[i], cloudH3[i]); |
|
ellipse(cloudX[i] -posX +700, cloudY[i]+100 +y, cloudW2[i], cloudH2[i]); |
|
ellipse(cloudX[i] -posX +420, cloudY[i]+30 +y, cloudW2[i], cloudH2[i]); |
|
ellipse(cloudX[i] -posX +90, cloudY[i]+170 +y, cloudW[i], cloudH[i]); |
|
} |
|
} |
|
|
|
|