// Noise-Setup: verschiedene Noise-Funktionen fuer Terrain, Biome und Hoehlen import { createNoise2D, createNoise3D } from 'simplex-noise'; import { WORLD_SEED } from './constants.js'; import { mulberry32 } from './rng.js'; // Wir leiten mehrere unabhaengige Streams aus dem Seed ab, damit // verschiedene Noise-Quellen (Hoehe, Temperatur, Hoehlen) nicht korrelieren. const rngTerrain = mulberry32(WORLD_SEED); const rngTemp = mulberry32(WORLD_SEED ^ 0x9e3779b9); const rngHumid = mulberry32(WORLD_SEED ^ 0x85ebca6b); const rngCave = mulberry32(WORLD_SEED ^ 0xc2b2ae35); const rngDetail = mulberry32(WORLD_SEED ^ 0x27d4eb2f); export const noise2DTerrain = createNoise2D(rngTerrain); export const noise2DDetail = createNoise2D(rngDetail); export const noise2DTemp = createNoise2D(rngTemp); export const noise2DHumid = createNoise2D(rngHumid); export const noise3DCave = createNoise3D(rngCave); // Fraktale Brownian Motion (fbm) in 2D export function fbm2(noiseFn, x, z, octaves, lacunarity, gain) { let amp = 1, freq = 1, sum = 0, norm = 0; for (let o = 0; o < octaves; o++) { sum += amp * noiseFn(x * freq, z * freq); norm += amp; amp *= gain; freq *= lacunarity; } return sum / norm; // [-1,1] }