xxxxxxxxxx
137
const BORDER = 130;
let ROWS, COLUMNS = 25;
let WRAT = 0.2;
let COLOR_PROB = 0//0.02;
let MULTI_DRAW_PROB = 0;
const NCOLOR = 60;
const COLOR = [154,183,211];
let WDT, HGT, GWDT, GHGT;
let hWDT, hHGT;
let drawFuncs, totWgt, sWgt;
function setup() {
createCanvas(windowWidth, windowHeight);
GWDT = (width - BORDER * 2);
WDT = GWDT / COLUMNS;
HGT = WDT * 0.9;
ROWS = floor((height - BORDER * 2) / HGT);
GHGT = ROWS * WDT;
hWDT = WDT * 0.5;
hHGT = HGT * 0.5;
xStart = (width - GWDT) * 0.5;
yStart = (height - GHGT) * 0.5;
sWgt = WDT * WRAT;
strokeWeight(sWgt);
strokeCap(PROJECT);
// CALCULATE GRID LAYOUT ---------------
drawFuncs = [
[0,() => {}], // empty
[1,(x,y) => line(x, y + hHGT, x + WDT, y + hHGT)], // hori
[1,(x,y) => line(x, y, x + WDT, y + HGT)], // dsc
[1,(x,y) => line(x + hWDT, y, x + hWDT, y + HGT)], // vert
[1,(x,y) => line(x, y + HGT, x + WDT, y)], // asc
[0,(x,y) => {line(x, y + hHGT, x + WDT, y + hHGT); // plus
line(x + hWDT, y, x + hWDT, y + HGT);}],
[0,(x,y) => {line(x, y, x + WDT, y + HGT); // cross
line(x, y + HGT, x + WDT, y);}],
[0,(x,y) => {noStroke(); // hound up
beginShape();
vertex(x,y);
vertex(x,y+HGT);
vertex(x+WDT,y+HGT);
vertex(x+WDT,y);
vertex(x+hWDT,y+hHGT);
vertex(x,y);
endShape();
stroke(sWgt);}],
[0,(x,y) => {noStroke(); // hound lft
beginShape();
vertex(x,y);
vertex(x+hWDT,y+hHGT);
vertex(x,y+HGT);
vertex(x+WDT,y+HGT);
vertex(x+WDT,y);
vertex(x,y);
endShape();
stroke(sWgt);}],
[0,(x,y) => {noStroke(); // hound btm
beginShape();
vertex(x,y);
vertex(x,y+HGT);
vertex(x+hWDT,y+hHGT);
vertex(x+WDT,y+HGT);
vertex(x+WDT,y);
vertex(x,y);
endShape();
stroke(sWgt);}],
[0,(x,y) => {noStroke(); // hound rgt
beginShape();
vertex(x,y);
vertex(x,y+HGT);
vertex(x+WDT,y+HGT);
vertex(x+hWDT,y+hHGT);
vertex(x+WDT,y);
vertex(x,y);
endShape();
stroke(sWgt);}]
];
//TODO U tiles, M tiles,
// object to weight array
// colour probability array
// obj prob, colour prob, WRAD, border, columns = PRESET OBJ
// DECLARE CELL TYPES -------------------
let original = [0,1,1,1,1,0,0,0,0,0,0];
let pluses = [0,1,0,1,0,1,0,0,0,0,0];
let vbars = [0,0.005,0,1,0,0,0,0,0,0,0];
let crosses = [0,0,1,0,1,0,1,0,0,0,0];
let test = [0.1,0,0,0,0,0,0,1,1,1,1];
let diagsp = [1.5,1,0.1,1.5,1,0,0,0,0,0,0];
let lines = [0,1,0,0,0,0,0,0,0,0,0];
drawFuncs = drawFuncs.map(([_,f],i) => [crosses[i],f]);
// ASSIGN WEIGHTS -----------------------
[totWgt,drawFuncs] = drawFuncs.reduce(
([p,fs],[x,f]) => [p + x, [fs,[p + x,f]]] ,[0,[]]);
// CALCULATE TOTAL WEIGHT AND PREP ADDITIVE SUM
}
let drawn = false;
function draw() {
if(!drawn) {
background(220);
drawOnce();
drawn = true;
}
}
function drawOnce() {
background(220);
for(let x = 0; x < COLUMNS; ++x) {
let clk = 0;
for(let y = 0; y < ROWS; ++y) {
let dx = xStart + x * WDT;
let dy = yStart + y * HGT;
do {
const curCol = random() < COLOR_PROB ? COLOR : NCOLOR;
stroke(curCol);
fill(curCol);
let choice = random() * totWgt;
for(let i = 0; i < drawFuncs.length; i++) {
if(choice < drawFuncs[i][0]) {
drawFuncs[i][1](dx, dy);
break;
}
}
} while(random() < MULTI_DRAW_PROB);
}
}
}