var formattedTime = "00:00:00";
var insText = 'Particle Clock';
font = loadFont('AvenirNextLTPro-Demi.otf');
var bounds = font.textBounds(formattedTime, 0, 0, 192);
var posx = width / 2 - bounds.w / 2;
var posy = height / 2 + bounds.h / 2;
var points = font.textToPoints(formattedTime, posx, posy, 192, {
for (var i = 0; i < points.length; i++) {
var vehicle = new Vehicle(pt.x, pt.y);
var boundsIns = font.textBounds(insText, 0, 0, 30);
var posxIns = width / 2 - boundsIns.w / 2;
var posyIns = height / 6 + boundsIns.h / 2;
var insAr = split(insText, ' ');
for (var i = 0; i < insAr.length; i++) {
var bounds2 = font.textBounds(insAr[i], 0, 0, 30);
posxIns += bounds2.w + 10;
var points2 = font.textToPoints(insAr[i], posx2, posy2, 30, {
for (var j = 0; j < points2.length; j++) {
var v = new Vehicle(pt.x, pt.y, 3);
for (var i = 0; i < instructions.length; i++) {
for (var i = 0; i < vehicles.length; i++) {
minutes = nf(minutes, 2, 0);
seconds = nf(seconds, 2, 0);
updateText(hours + ":" + minutes + ":" + seconds);
function updateText(newText) {
var bounds = font.textBounds(formattedTime, 0, 0, 192);
var posx = width / 2 - bounds.w / 2;
var posy = height / 2 + bounds.h / 2;
var points = font.textToPoints(formattedTime, posx, posy, 192, {
if (points.length < vehicles.length) {
var toSplice = vehicles.length - points.length;
vehicles.splice(points.length - 1, toSplice);
for (var i = 0; i < points.length; i++) {
vehicles[i].target.x = points[i].x;
vehicles[i].target.y = points[i].y;
var force = p5.Vector.random2D();
force.mult(random(maxChangeForce));
vehicles[i].applyForce(force);
} else if (points.length > vehicles.length) {
for (var i = vehicles.length; i < points.length; i++) {
var v = vehicles[i - 1].clone();
for (var i = 0; i < points.length; i++) {
vehicles[i].target.x = points[i].x;
vehicles[i].target.y = points[i].y;
var force = p5.Vector.random2D();
force.mult(random(maxChangeForce));
vehicles[i].applyForce(force);
for (var i = 0; i < points.length; i++) {
vehicles[i].target.x = points[i].x;
vehicles[i].target.y = points[i].y;
var force = p5.Vector.random2D();
force.mult(random(maxChangeForce));
vehicles[i].applyForce(force);