import { createNoise4D } from "https://cdn.skypack.dev/simplex-noise@4.0.0"
import { mountFlex } from "https://cdn.jsdelivr.net/npm/p5.flex@0.2.0/src/p5.flex.mjs"
import mountSpaceDivide from "./spaceDivide.js"
import colorURLs from "./colorChart.js"
import PaletteFrom from "./PaletteFrom.js"
const simplexNoiseSeed = p.random()
const noise4D = createNoise4D(() => simplexNoiseSeed)
const nodeNum = p.random([10, 100, 1000])
const novaNum = 10000 / nodeNum
const minSpace = p.random([50, 100, 150])
const strokeWeight = p.floor(minSpace / 5)
const randomStrokeWeight = p.random([true, false])
const palette = PaletteFrom(p.random(colorURLs))
const bg = p.random(["#000000", "#ffffff", p.random(palette)])
const useDivide = p.random() < 0.33333 ? false : true
const HALF = p.random([true, false])
p.windowWidth < p.windowHeight
? [600, p.floor(600 * PHI)]
: [p.floor(600 * PHI), 600]
p.createCanvas(WIDTH, HEIGHT)
p.flex({ container: { padding: "20px" } })
for (let i = 0; i < novaNum; i++) {
pos: [p.random(WIDTH), p.random(HEIGHT)],
rad: p.random([25, 50, 75, 100]),
const t = p.frameCount * 0.02
Nova(...nova.pos, nova.rad, t * 0.1 + nova.off, nova.rot + t * 0.001)
if (blocks.length) showSpaceDivide()
const showSpaceDivide = () => {
blocks.forEach((block, index) => {
p.randomSeed(index * 100)
const w = randomStrokeWeight ? p.random(1, strokeWeight) : strokeWeight
randomStrokeWeight ? block.w - w : block.w,
randomStrokeWeight ? block.h - w : block.h
if (randomStrokeWeight) {
p.strokeWeight(strokeWeight)
p.rect(WIDTH / 2, HEIGHT / 2, WIDTH - strokeWeight, HEIGHT - strokeWeight)
const Nova = (posX, posY, rad, t, rot) => {
const max = (p.TWO_PI / nodeNum) * nodeNum
const step = p.TWO_PI / nodeNum
for (let i = 0; i < max; i += step) {
const wei = (0.5 + 0.5 * p.cos(t)) * 200
const nx = noise4D(x + 100, y + 200, p.cos(t), p.sin(t)) * wei
const ny = noise4D(x + 300, y + 400, p.cos(t), p.sin(t)) * wei
p.randomSeed(x * 100 + y * 100)
const c = p.color(p.random(palette))
c.setAlpha(p.map(p.noise(t + p.random(1000)), 0, 1, 200, 255))
const d = p.sqrt((x + nx) * (x + nx) + (y + ny) * (y + ny))
p.translate(x + nx, y + ny)
p.rotate(i + p.map(d, 0, WIDTH, -90, 90))
const w = p.map(d, 0, WIDTH, 0, 5)
const h = p.map(d, 0, WIDTH, 0, 55)