xxxxxxxxxx
var layerCount=3;
var layers = []; //contain gears[]
function setup() {
cnv=createCanvas(4*windowHeight/3,windowHeight);
//cnv.mouseClicked(onClick);
background(0);
frameRate(120);
rectMode(CENTER);
angleMode(DEGREES);
background(0);
for(let i=0;i<layerCount;i++){
layers.push([]);
let newG=new Gear(0,width/2,height/2, 8, '#f88');
if(i>0)
newG.fixGear(layers[i-1][0]);
layers[i].push(newG);
generateGears(i,0);
layers[i][0].fit(0,0);
}
// generateGears(0);
layers[0][0].setSpeed(1);
//layers[0][0].propagate();
}
let fn=10;
let cc=0;
function draw() {
clear();
background(0);
update();
drawGears();
//if (fn<6 && cc%2==0) {save("gears"+fn+".jpg"); fn++}
cc++;
}
function update() {
for(let i=0;i<layers.length;i++)
for (let j = 0; j < layers[i].length; j++)
layers[i][j].rotate();
}
function drawGears() {
for(let i=layers.length-1;i>=0;i--)
for (let j = 0; j < layers[i].length; j++)
layers[i][j].drawShape();
}
function generateGears(layer,ind){
//ind of previous gear
const least=4; //least teeth
let ang=random(0,360);
let gears=layers[layer];
let minT=60;
let x=gears[ind].x;
let y=gears[ind].y;
let r=gears[ind].r;
if(gears.length>=50 || x < width*-0.1 || x > width*1.1 || y < height*-0.1 || y > height*1.1) return;
for(let i=0;i<gears.length;i++){
if(i==ind) continue;
let ir=gears[i].r;
let t=least;
for(;t<minT;t++){
let tr=t*5+20/2 +20;
let d=dist(gears[i].x,gears[i].y,x+(r+tr)*cos(ang),y+(r+tr)*sin(ang));
if(ir+tr > d) {
break;
}
}
t--;
minT = minT < t ? minT : t;
}
if(minT>=least){
let newT=parseInt(random(least,minT));
let newX=x+(r+(newT*5+20/2))*cos(ang);
let newY=y+(r+(newT*5+20/2))*sin(ang);
let newI=gears.length;
let l=(layers.length-layer)*100/(layers.length+1);
gears.push(new Gear(newI,newX,newY,newT,color(`hsl(180, 10%, ${l}%)`)));
gears[newI].addConnection(gears[ind]);
gears[ind].addConnection(gears[newI]);
for(let i=0;i<10;i++) generateGears(layer,newI);
}
else return;
}
/*function onClick(){
cc=0;
fn=0;
}*/
// save jpg
let lapse = 0; // mouse timer
function mousePressed(){
if (millis() - lapse > 400){
save("img_" + month() + '-' + day() + '_' + hour() + '-' + minute() + '-' + second() + ".jpg");
lapse = millis();
}
}