xxxxxxxxxx
86
const noiseScalar = 0.1;
const cel = 20;
const simplicity = 4;
let gx, yx, z, inverse, terrain;
function setup() {
createCanvas(800, 800);
gx = width / cel;
gy = height / cel;
z = 0;
inverse = 256 / simplicity;
terrain = new Terrain(1.2);
background(40,40,180)
noStroke()
}
function draw() {
z += 0.02;
let data = {}
for (let x = 0; x < gx; x++) {
for (let y = 0; y < gy; y++) {
let cur = round(noise(x * noiseScalar, y * noiseScalar, z * noiseScalar) * 20) * 12;
fill(terrain.terrain(cur));
if (!data[255 - cur]) {
data[255 - cur] = [];
}
data[255 - cur].push({
v: createVector(x, y),
color: terrain.terrain(cur, 20)
});
// fill(terrain.terrain(cur))
// rect(x * cel, y * cel, cel, cel);
}
}
let lastIndex = 0;
for (let i in data) {
if (lastIndex > 0) {
for (let j of data[lastIndex]) {
if (!j.used) {
data[i].push(j);
}
}
}
lastIndex = i;
if (data[i].length >= 3) {
for (let j of data[i]) {
if (!j.used) {
j.used = true;
let prev = j;
let shapeBuilder = [];
shapeBuilder.push(j);
for (let k of data[i]) {
if (!k.used) {
let cDist = dist(prev.v.x, prev.v.y, k.v.x, k.v.y);
if (cDist <= 2 && cDist !== 0) {
shapeBuilder.push(k);
prev = k;
}
}
}
if (shapeBuilder.length > 2) {
j.used = true;
beginShape();
for (let k of shapeBuilder) {
k.used = true;
vertex(k.v.x * cel-0.5*cel, k.v.y * cel-0.5*cel);
}
for (let k of reverse(shapeBuilder)) {
k.used = true;
vertex(k.v.x * cel+0.5*cel, k.v.y * cel+0.5*cel);
}
vertex(j.v.x * cel, j.v.y * cel + 0.5 * cel);
fill(j.color);
endShape();
} else {
j.used = false;
}
}
}
}
}
// console.log(data);
// noLoop()
}