tumult
Version:
A Javascript noise library
52 lines (39 loc) • 967 B
JavaScript
const rand = require('random-seed')
class Noise {
constructor (s) {
this.p = new Uint8Array(512)
this.seed(s)
}
gen () {}
seed (s) {
const rng = rand.create(s || Math.random())
for (let i = 0; i < 256; i++) this.p[i] = i
for (let i = 0; i < 256; i++) {
const r = rng(256)
const temp = this.p[i]
this.p[i] = this.p[r]
this.p[r] = temp
}
for (let i = 0; i < 256; i++) this.p[i + 256] = this.p[i]
}
transform (fn) {
const transformedFn = (...dims) => fn.apply(this, dims)
return transformedFn.bind(this)
}
octavate (...args) {
const octaves = args[0]
const dims = args.slice(1)
let val = 0
let max = 0
for (let i = 0; i < octaves; i++) {
const w = 1 << i
val += this.gen.apply(this, dims.map(x => x * w)) / w
}
for (let i = 0; i < octaves; i++) {
max += 1 / (1 << i)
}
return val / max
}
}
module.exports = Noise