xxxxxxxxxx
84
// Marching Squares Cave Generation
// Coding in the Cabana
// The Coding Train / David Snyder
// https://thecodingtrain.com/challenges/coding-in-the-cabana/005-marching-squares.html
// https://youtu.be/0ZONMNUKTfU
// httpfiitor.p5js.org/codingtrain/sketches/z4U3Luf7o
let mainCanvas;
let w = 640, h = 640
let grid;
let tileSize = 16
let cols = 48, rows = 48
let sprite
let openSimplex;
let noiseMap;
let noiseOffset;
let noiseScale = 0.15;
let frameCounter = 0
function preload() {
sprite = loadImage('marching-squares.png')
}
function setup() {
randomSeed(1);
mainCanvas = createCanvas(w, h);
noiseOffset = createVector(0,0);
openSimplex = openSimplexNoise(random(123));
offsetHorzSlider = createSlider(-100, 100, 0, 1);
offsetVertSlider = createSlider(-100, 100, 0, 1);
offsetHorzSlider.position(10, 10);
offsetVertSlider.position(10, 40);
}
function generateNoiseMap(offset) {
noiseMap = create2DArray(rows+1, cols+1);
for (let y = 0; y < rows+1; y++)
{
for (let x = 0; x < cols+1; x++)
{
let p = createVector(x, y)
p.add(offset)
p.mult(noiseScale)
const noise = openSimplex.noise3D
(
p.x,
p.y,
0
)
noiseMap[x][y] = ceil(noise)
}
}
}
function draw() {
background(255);
translate(0, h);
scale(1, -1);
generateNoiseMap(noiseOffset)
grid = new Grid(rows, cols, noiseMap, tileSize)
grid.show()
frameCounter++
noiseOffset.x = offsetHorzSlider.value();
noiseOffset.y = offsetVertSlider.value();
}
function create2DArray(rows, cols) {
return Array(rows)
.fill()
.map(() => Array(cols).fill(0));
}