@esengine/procgen 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/noise/PerlinNoise.ts","../src/noise/SimplexNoise.ts","../src/noise/WorleyNoise.ts","../src/noise/FBM.ts","../src/random/SeededRandom.ts","../src/random/WeightedRandom.ts","../src/random/Shuffle.ts","../src/nodes/ProcGenNodes.ts"],"names":["PerlinNoise","seed","_perm","_gradP","Uint8Array","Float32Array","_seed","p","i","n","j","grad3","gi","_fade","t","_lerp","a","b","_dot2","x","y","_dot3","z","noise2D","X","Math","floor","Y","u","v","A","B","noise3D","Z","w","AA","AB","BA","BB","createPerlinNoise","F2","sqrt","G2","F3","G3","SimplexNoise","_permMod12","_grad3","n0","n1","n2","s","X0","Y0","x0","y0","i1","j1","x1","y1","x2","y2","ii","jj","gi0","gi1","gi2","t0","t1","t2","n3","k","Z0","z0","k1","i2","j2","k2","z1","z2","x3","y3","z3","kk","gi3","t3","createSimplexNoise","WorleyNoise","distanceFunc","_distanceFunc","_hash","h","imul","_randomPoint","cellX","cellY","index","h1","h2","_randomPoint3D","cellZ","h3","_distance2D","dx","dy","abs","max","_distance3D","dz","pointsPerCell","minDist","Infinity","cx","cy","point","dist","min","cz","nthNearest2D","distances","push","sort","length","createWorleyNoise","DEFAULT_CONFIG","octaves","lacunarity","persistence","frequency","amplitude","FBM","noise","config","_noise","_config","value","maxValue","Error","ridged2D","weight","signal","turbulence2D","billowed2D","createFBM","SeededRandom","Date","now","_s0","_s1","_initialS0","_initialS1","next","reset","s1","s0","nextInt","nextFloat","nextBool","probability","nextGaussian","mean","stdDev","u1","u2","log","cos","PI","nextExponential","lambda","nextPointInCircle","radius","r","theta","sin","nextPointOnCircle","nextPointInSphere","cbrt","phi","acos","nextDirection2D","createSeededRandom","WeightedRandom","items","_items","_cumulativeWeights","_totalWeight","total","item","pick","rng","left","right","mid","pickRandom","random","getProbability","size","totalWeight","weightedPick","weightedPickFromMap","weights","key","createWeightedRandom","shuffle","array","shuffleCopy","pickOne","sample","count","result","indices","Set","has","add","slice","sampleWithReplacement","randomIntegers","range","numbers","weightedSample","remaining","remainingWeights","selectedIndex","splice","noiseCache","Map","getPerlinNoise","set","get","getSimplexNoise","getWorleyNoise","SampleNoise2DTemplate","type","title","category","description","keywords","menuPath","isPure","inputs","name","displayName","outputs","color","SampleNoise2DExecutor","execute","node","context","ctx","evaluateInput","id","noiseType","toLowerCase","SampleFBMTemplate","SampleFBMExecutor","fbm","SeededRandomTemplate","SeededRandomExecutor","SeededRandomIntTemplate","SeededRandomIntExecutor","WeightedPickTemplate","WeightedPickExecutor","weightedItems","map","ShuffleArrayTemplate","ShuffleArrayExecutor","PickRandomTemplate","PickRandomExecutor","SampleArrayTemplate","SampleArrayExecutor","actualCount","RandomPointInCircleTemplate","RandomPointInCircleExecutor","centerX","centerY","ProcGenNodeDefinitions","templates","executors"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @zh Perlin 噪声实现\n * @en Perlin Noise Implementation\n *\n * @zh 基于 Ken Perlin 的改进版噪声算法\n * @en Based on Ken Perlin's improved noise algorithm\n */\n\n/**\n * @zh Perlin 噪声生成器\n * @en Perlin noise generator\n */\nexport class PerlinNoise {\n private readonly _perm: Uint8Array;\n private readonly _gradP: Float32Array;\n\n /**\n * @zh 创建 Perlin 噪声生成器\n * @en Create Perlin noise generator\n *\n * @param seed - @zh 随机种子 @en Random seed\n */\n constructor(seed: number = 0) {\n this._perm = new Uint8Array(512);\n this._gradP = new Float32Array(512 * 3);\n this._seed(seed);\n }\n\n private _seed(seed: number): void {\n const p = new Uint8Array(256);\n\n // Initialize permutation array\n for (let i = 0; i < 256; i++) {\n p[i] = i;\n }\n\n // Shuffle using seed\n let n = seed;\n for (let i = 255; i > 0; i--) {\n n = (n * 16807) % 2147483647;\n const j = n % (i + 1);\n [p[i], p[j]] = [p[j], p[i]];\n }\n\n // Duplicate permutation array\n for (let i = 0; i < 512; i++) {\n this._perm[i] = p[i & 255];\n }\n\n // Precompute gradient vectors\n const grad3 = [\n 1, 1, 0, -1, 1, 0, 1, -1, 0, -1, -1, 0,\n 1, 0, 1, -1, 0, 1, 1, 0, -1, -1, 0, -1,\n 0, 1, 1, 0, -1, 1, 0, 1, -1, 0, -1, -1\n ];\n\n for (let i = 0; i < 512; i++) {\n const gi = (this._perm[i] % 12) * 3;\n this._gradP[i * 3] = grad3[gi];\n this._gradP[i * 3 + 1] = grad3[gi + 1];\n this._gradP[i * 3 + 2] = grad3[gi + 2];\n }\n }\n\n private _fade(t: number): number {\n return t * t * t * (t * (t * 6 - 15) + 10);\n }\n\n private _lerp(a: number, b: number, t: number): number {\n return a + t * (b - a);\n }\n\n private _dot2(gi: number, x: number, y: number): number {\n return this._gradP[gi * 3] * x + this._gradP[gi * 3 + 1] * y;\n }\n\n private _dot3(gi: number, x: number, y: number, z: number): number {\n return this._gradP[gi * 3] * x + this._gradP[gi * 3 + 1] * y + this._gradP[gi * 3 + 2] * z;\n }\n\n /**\n * @zh 2D Perlin 噪声\n * @en 2D Perlin noise\n *\n * @param x - @zh X 坐标 @en X coordinate\n * @param y - @zh Y 坐标 @en Y coordinate\n * @returns @zh 噪声值 [-1, 1] @en Noise value [-1, 1]\n */\n noise2D(x: number, y: number): number {\n const X = Math.floor(x) & 255;\n const Y = Math.floor(y) & 255;\n\n x -= Math.floor(x);\n y -= Math.floor(y);\n\n const u = this._fade(x);\n const v = this._fade(y);\n\n const A = this._perm[X] + Y;\n const B = this._perm[X + 1] + Y;\n\n return this._lerp(\n this._lerp(this._dot2(this._perm[A], x, y), this._dot2(this._perm[B], x - 1, y), u),\n this._lerp(this._dot2(this._perm[A + 1], x, y - 1), this._dot2(this._perm[B + 1], x - 1, y - 1), u),\n v\n );\n }\n\n /**\n * @zh 3D Perlin 噪声\n * @en 3D Perlin noise\n *\n * @param x - @zh X 坐标 @en X coordinate\n * @param y - @zh Y 坐标 @en Y coordinate\n * @param z - @zh Z 坐标 @en Z coordinate\n * @returns @zh 噪声值 [-1, 1] @en Noise value [-1, 1]\n */\n noise3D(x: number, y: number, z: number): number {\n const X = Math.floor(x) & 255;\n const Y = Math.floor(y) & 255;\n const Z = Math.floor(z) & 255;\n\n x -= Math.floor(x);\n y -= Math.floor(y);\n z -= Math.floor(z);\n\n const u = this._fade(x);\n const v = this._fade(y);\n const w = this._fade(z);\n\n const A = this._perm[X] + Y;\n const AA = this._perm[A] + Z;\n const AB = this._perm[A + 1] + Z;\n const B = this._perm[X + 1] + Y;\n const BA = this._perm[B] + Z;\n const BB = this._perm[B + 1] + Z;\n\n return this._lerp(\n this._lerp(\n this._lerp(this._dot3(this._perm[AA], x, y, z), this._dot3(this._perm[BA], x - 1, y, z), u),\n this._lerp(this._dot3(this._perm[AB], x, y - 1, z), this._dot3(this._perm[BB], x - 1, y - 1, z), u),\n v\n ),\n this._lerp(\n this._lerp(this._dot3(this._perm[AA + 1], x, y, z - 1), this._dot3(this._perm[BA + 1], x - 1, y, z - 1), u),\n this._lerp(this._dot3(this._perm[AB + 1], x, y - 1, z - 1), this._dot3(this._perm[BB + 1], x - 1, y - 1, z - 1), u),\n v\n ),\n w\n );\n }\n}\n\n/**\n * @zh 创建 Perlin 噪声生成器\n * @en Create Perlin noise generator\n */\nexport function createPerlinNoise(seed: number = 0): PerlinNoise {\n return new PerlinNoise(seed);\n}\n","/**\n * @zh Simplex 噪声实现\n * @en Simplex Noise Implementation\n *\n * @zh 比 Perlin 噪声更快且没有方向性伪影\n * @en Faster than Perlin noise with no directional artifacts\n */\n\nconst F2 = 0.5 * (Math.sqrt(3) - 1);\nconst G2 = (3 - Math.sqrt(3)) / 6;\nconst F3 = 1 / 3;\nconst G3 = 1 / 6;\n\n/**\n * @zh Simplex 噪声生成器\n * @en Simplex noise generator\n */\nexport class SimplexNoise {\n private readonly _perm: Uint8Array;\n private readonly _permMod12: Uint8Array;\n\n private static readonly _grad3 = new Float32Array([\n 1, 1, 0, -1, 1, 0, 1, -1, 0, -1, -1, 0,\n 1, 0, 1, -1, 0, 1, 1, 0, -1, -1, 0, -1,\n 0, 1, 1, 0, -1, 1, 0, 1, -1, 0, -1, -1\n ]);\n\n /**\n * @zh 创建 Simplex 噪声生成器\n * @en Create Simplex noise generator\n *\n * @param seed - @zh 随机种子 @en Random seed\n */\n constructor(seed: number = 0) {\n this._perm = new Uint8Array(512);\n this._permMod12 = new Uint8Array(512);\n this._seed(seed);\n }\n\n private _seed(seed: number): void {\n const p = new Uint8Array(256);\n\n for (let i = 0; i < 256; i++) {\n p[i] = i;\n }\n\n let n = seed;\n for (let i = 255; i > 0; i--) {\n n = (n * 16807) % 2147483647;\n const j = n % (i + 1);\n [p[i], p[j]] = [p[j], p[i]];\n }\n\n for (let i = 0; i < 512; i++) {\n this._perm[i] = p[i & 255];\n this._permMod12[i] = this._perm[i] % 12;\n }\n }\n\n /**\n * @zh 2D Simplex 噪声\n * @en 2D Simplex noise\n *\n * @param x - @zh X 坐标 @en X coordinate\n * @param y - @zh Y 坐标 @en Y coordinate\n * @returns @zh 噪声值 [-1, 1] @en Noise value [-1, 1]\n */\n noise2D(x: number, y: number): number {\n const grad3 = SimplexNoise._grad3;\n let n0 = 0, n1 = 0, n2 = 0;\n\n const s = (x + y) * F2;\n const i = Math.floor(x + s);\n const j = Math.floor(y + s);\n\n const t = (i + j) * G2;\n const X0 = i - t;\n const Y0 = j - t;\n const x0 = x - X0;\n const y0 = y - Y0;\n\n let i1: number, j1: number;\n if (x0 > y0) {\n i1 = 1;\n j1 = 0;\n } else {\n i1 = 0;\n j1 = 1;\n }\n\n const x1 = x0 - i1 + G2;\n const y1 = y0 - j1 + G2;\n const x2 = x0 - 1 + 2 * G2;\n const y2 = y0 - 1 + 2 * G2;\n\n const ii = i & 255;\n const jj = j & 255;\n const gi0 = this._permMod12[ii + this._perm[jj]] * 3;\n const gi1 = this._permMod12[ii + i1 + this._perm[jj + j1]] * 3;\n const gi2 = this._permMod12[ii + 1 + this._perm[jj + 1]] * 3;\n\n let t0 = 0.5 - x0 * x0 - y0 * y0;\n if (t0 >= 0) {\n t0 *= t0;\n n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0);\n }\n\n let t1 = 0.5 - x1 * x1 - y1 * y1;\n if (t1 >= 0) {\n t1 *= t1;\n n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1);\n }\n\n let t2 = 0.5 - x2 * x2 - y2 * y2;\n if (t2 >= 0) {\n t2 *= t2;\n n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2);\n }\n\n return 70 * (n0 + n1 + n2);\n }\n\n /**\n * @zh 3D Simplex 噪声\n * @en 3D Simplex noise\n *\n * @param x - @zh X 坐标 @en X coordinate\n * @param y - @zh Y 坐标 @en Y coordinate\n * @param z - @zh Z 坐标 @en Z coordinate\n * @returns @zh 噪声值 [-1, 1] @en Noise value [-1, 1]\n */\n noise3D(x: number, y: number, z: number): number {\n const grad3 = SimplexNoise._grad3;\n let n0 = 0, n1 = 0, n2 = 0, n3 = 0;\n\n const s = (x + y + z) * F3;\n const i = Math.floor(x + s);\n const j = Math.floor(y + s);\n const k = Math.floor(z + s);\n\n const t = (i + j + k) * G3;\n const X0 = i - t;\n const Y0 = j - t;\n const Z0 = k - t;\n const x0 = x - X0;\n const y0 = y - Y0;\n const z0 = z - Z0;\n\n let i1: number, j1: number, k1: number;\n let i2: number, j2: number, k2: number;\n\n if (x0 >= y0) {\n if (y0 >= z0) {\n i1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 1; k2 = 0;\n } else if (x0 >= z0) {\n i1 = 1; j1 = 0; k1 = 0; i2 = 1; j2 = 0; k2 = 1;\n } else {\n i1 = 0; j1 = 0; k1 = 1; i2 = 1; j2 = 0; k2 = 1;\n }\n } else {\n if (y0 < z0) {\n i1 = 0; j1 = 0; k1 = 1; i2 = 0; j2 = 1; k2 = 1;\n } else if (x0 < z0) {\n i1 = 0; j1 = 1; k1 = 0; i2 = 0; j2 = 1; k2 = 1;\n } else {\n i1 = 0; j1 = 1; k1 = 0; i2 = 1; j2 = 1; k2 = 0;\n }\n }\n\n const x1 = x0 - i1 + G3;\n const y1 = y0 - j1 + G3;\n const z1 = z0 - k1 + G3;\n const x2 = x0 - i2 + 2 * G3;\n const y2 = y0 - j2 + 2 * G3;\n const z2 = z0 - k2 + 2 * G3;\n const x3 = x0 - 1 + 3 * G3;\n const y3 = y0 - 1 + 3 * G3;\n const z3 = z0 - 1 + 3 * G3;\n\n const ii = i & 255;\n const jj = j & 255;\n const kk = k & 255;\n const gi0 = this._permMod12[ii + this._perm[jj + this._perm[kk]]] * 3;\n const gi1 = this._permMod12[ii + i1 + this._perm[jj + j1 + this._perm[kk + k1]]] * 3;\n const gi2 = this._permMod12[ii + i2 + this._perm[jj + j2 + this._perm[kk + k2]]] * 3;\n const gi3 = this._permMod12[ii + 1 + this._perm[jj + 1 + this._perm[kk + 1]]] * 3;\n\n let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;\n if (t0 >= 0) {\n t0 *= t0;\n n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0 + grad3[gi0 + 2] * z0);\n }\n\n let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;\n if (t1 >= 0) {\n t1 *= t1;\n n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1 + grad3[gi1 + 2] * z1);\n }\n\n let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;\n if (t2 >= 0) {\n t2 *= t2;\n n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2 + grad3[gi2 + 2] * z2);\n }\n\n let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;\n if (t3 >= 0) {\n t3 *= t3;\n n3 = t3 * t3 * (grad3[gi3] * x3 + grad3[gi3 + 1] * y3 + grad3[gi3 + 2] * z3);\n }\n\n return 32 * (n0 + n1 + n2 + n3);\n }\n}\n\n/**\n * @zh 创建 Simplex 噪声生成器\n * @en Create Simplex noise generator\n */\nexport function createSimplexNoise(seed: number = 0): SimplexNoise {\n return new SimplexNoise(seed);\n}\n","/**\n * @zh Worley (Cellular) 噪声实现\n * @en Worley (Cellular) Noise Implementation\n *\n * @zh 基于 Voronoi 图的噪声,适合生成细胞、石头纹理\n * @en Voronoi-based noise, suitable for cellular and stone textures\n */\n\n/**\n * @zh 距离函数类型\n * @en Distance function type\n */\nexport type DistanceFunction = 'euclidean' | 'manhattan' | 'chebyshev';\n\n/**\n * @zh Worley 噪声生成器\n * @en Worley noise generator\n */\nexport class WorleyNoise {\n private readonly _seed: number;\n private readonly _distanceFunc: DistanceFunction;\n\n /**\n * @zh 创建 Worley 噪声生成器\n * @en Create Worley noise generator\n *\n * @param seed - @zh 随机种子 @en Random seed\n * @param distanceFunc - @zh 距离函数 @en Distance function\n */\n constructor(seed: number = 0, distanceFunc: DistanceFunction = 'euclidean') {\n this._seed = seed;\n this._distanceFunc = distanceFunc;\n }\n\n private _hash(x: number, y: number, z: number = 0): number {\n let h = this._seed;\n h ^= x * 374761393;\n h ^= y * 668265263;\n h ^= z * 1274126177;\n h = Math.imul(h ^ (h >>> 13), 1274126177);\n return h;\n }\n\n private _randomPoint(cellX: number, cellY: number, index: number): { x: number; y: number } {\n const h1 = this._hash(cellX, cellY, index);\n const h2 = this._hash(cellX, cellY, index + 1000);\n return {\n x: cellX + (h1 & 0xFFFF) / 65536,\n y: cellY + (h2 & 0xFFFF) / 65536\n };\n }\n\n private _randomPoint3D(cellX: number, cellY: number, cellZ: number, index: number): { x: number; y: number; z: number } {\n const h1 = this._hash(cellX, cellY, cellZ * 1000 + index);\n const h2 = this._hash(cellX, cellY, cellZ * 1000 + index + 1000);\n const h3 = this._hash(cellX, cellY, cellZ * 1000 + index + 2000);\n return {\n x: cellX + (h1 & 0xFFFF) / 65536,\n y: cellY + (h2 & 0xFFFF) / 65536,\n z: cellZ + (h3 & 0xFFFF) / 65536\n };\n }\n\n private _distance2D(x1: number, y1: number, x2: number, y2: number): number {\n const dx = x2 - x1;\n const dy = y2 - y1;\n\n switch (this._distanceFunc) {\n case 'manhattan':\n return Math.abs(dx) + Math.abs(dy);\n case 'chebyshev':\n return Math.max(Math.abs(dx), Math.abs(dy));\n case 'euclidean':\n default:\n return Math.sqrt(dx * dx + dy * dy);\n }\n }\n\n private _distance3D(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number): number {\n const dx = x2 - x1;\n const dy = y2 - y1;\n const dz = z2 - z1;\n\n switch (this._distanceFunc) {\n case 'manhattan':\n return Math.abs(dx) + Math.abs(dy) + Math.abs(dz);\n case 'chebyshev':\n return Math.max(Math.abs(dx), Math.abs(dy), Math.abs(dz));\n case 'euclidean':\n default:\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\n }\n }\n\n /**\n * @zh 2D Worley 噪声\n * @en 2D Worley noise\n *\n * @param x - @zh X 坐标 @en X coordinate\n * @param y - @zh Y 坐标 @en Y coordinate\n * @param pointsPerCell - @zh 每个单元格的点数 @en Points per cell\n * @returns @zh 到最近点的距离 [0, ~1.4] @en Distance to nearest point [0, ~1.4]\n */\n noise2D(x: number, y: number, pointsPerCell: number = 1): number {\n const cellX = Math.floor(x);\n const cellY = Math.floor(y);\n\n let minDist = Infinity;\n\n for (let dx = -1; dx <= 1; dx++) {\n for (let dy = -1; dy <= 1; dy++) {\n const cx = cellX + dx;\n const cy = cellY + dy;\n\n for (let i = 0; i < pointsPerCell; i++) {\n const point = this._randomPoint(cx, cy, i);\n const dist = this._distance2D(x, y, point.x, point.y);\n minDist = Math.min(minDist, dist);\n }\n }\n }\n\n return minDist;\n }\n\n /**\n * @zh 3D Worley 噪声\n * @en 3D Worley noise\n *\n * @param x - @zh X 坐标 @en X coordinate\n * @param y - @zh Y 坐标 @en Y coordinate\n * @param z - @zh Z 坐标 @en Z coordinate\n * @param pointsPerCell - @zh 每个单元格的点数 @en Points per cell\n * @returns @zh 到最近点的距离 @en Distance to nearest point\n */\n noise3D(x: number, y: number, z: number, pointsPerCell: number = 1): number {\n const cellX = Math.floor(x);\n const cellY = Math.floor(y);\n const cellZ = Math.floor(z);\n\n let minDist = Infinity;\n\n for (let dx = -1; dx <= 1; dx++) {\n for (let dy = -1; dy <= 1; dy++) {\n for (let dz = -1; dz <= 1; dz++) {\n const cx = cellX + dx;\n const cy = cellY + dy;\n const cz = cellZ + dz;\n\n for (let i = 0; i < pointsPerCell; i++) {\n const point = this._randomPoint3D(cx, cy, cz, i);\n const dist = this._distance3D(x, y, z, point.x, point.y, point.z);\n minDist = Math.min(minDist, dist);\n }\n }\n }\n }\n\n return minDist;\n }\n\n /**\n * @zh 获取到第 N 近点的距离(用于更复杂的纹理)\n * @en Get distance to Nth nearest point (for more complex textures)\n *\n * @param x - @zh X 坐标 @en X coordinate\n * @param y - @zh Y 坐标 @en Y coordinate\n * @param n - @zh 第 N 近 (1 = 最近) @en Nth nearest (1 = nearest)\n * @returns @zh 距离值 @en Distance value\n */\n nthNearest2D(x: number, y: number, n: number = 1): number {\n const cellX = Math.floor(x);\n const cellY = Math.floor(y);\n const distances: number[] = [];\n\n for (let dx = -1; dx <= 1; dx++) {\n for (let dy = -1; dy <= 1; dy++) {\n const cx = cellX + dx;\n const cy = cellY + dy;\n const point = this._randomPoint(cx, cy, 0);\n distances.push(this._distance2D(x, y, point.x, point.y));\n }\n }\n\n distances.sort((a, b) => a - b);\n return distances[Math.min(n - 1, distances.length - 1)];\n }\n}\n\n/**\n * @zh 创建 Worley 噪声生成器\n * @en Create Worley noise generator\n */\nexport function createWorleyNoise(seed: number = 0, distanceFunc: DistanceFunction = 'euclidean'): WorleyNoise {\n return new WorleyNoise(seed, distanceFunc);\n}\n","/**\n * @zh 分形布朗运动 (FBM)\n * @en Fractal Brownian Motion (FBM)\n *\n * @zh 通过叠加多层噪声创建更自然的效果\n * @en Creates more natural effects by layering multiple noise octaves\n */\n\n/**\n * @zh 噪声函数接口\n * @en Noise function interface\n */\nexport interface INoise2D {\n noise2D(x: number, y: number): number;\n}\n\n/**\n * @zh 噪声函数接口 (3D)\n * @en Noise function interface (3D)\n */\nexport interface INoise3D {\n noise3D(x: number, y: number, z: number): number;\n}\n\n/**\n * @zh FBM 配置\n * @en FBM configuration\n */\nexport interface FBMConfig {\n /**\n * @zh 八度数(层数)\n * @en Number of octaves (layers)\n */\n octaves: number;\n\n /**\n * @zh 频率倍增因子\n * @en Frequency multiplier per octave\n */\n lacunarity: number;\n\n /**\n * @zh 振幅衰减因子\n * @en Amplitude decay per octave\n */\n persistence: number;\n\n /**\n * @zh 初始频率\n * @en Initial frequency\n */\n frequency: number;\n\n /**\n * @zh 初始振幅\n * @en Initial amplitude\n */\n amplitude: number;\n}\n\nconst DEFAULT_CONFIG: FBMConfig = {\n octaves: 6,\n lacunarity: 2.0,\n persistence: 0.5,\n frequency: 1.0,\n amplitude: 1.0\n};\n\n/**\n * @zh FBM 噪声生成器\n * @en FBM noise generator\n */\nexport class FBM {\n private readonly _noise: INoise2D & Partial<INoise3D>;\n private readonly _config: FBMConfig;\n\n /**\n * @zh 创建 FBM 噪声生成器\n * @en Create FBM noise generator\n *\n * @param noise - @zh 基础噪声函数 @en Base noise function\n * @param config - @zh 配置 @en Configuration\n */\n constructor(noise: INoise2D & Partial<INoise3D>, config?: Partial<FBMConfig>) {\n this._noise = noise;\n this._config = { ...DEFAULT_CONFIG, ...config };\n }\n\n /**\n * @zh 2D FBM 噪声\n * @en 2D FBM noise\n *\n * @param x - @zh X 坐标 @en X coordinate\n * @param y - @zh Y 坐标 @en Y coordinate\n * @returns @zh 噪声值 @en Noise value\n */\n noise2D(x: number, y: number): number {\n let value = 0;\n let frequency = this._config.frequency;\n let amplitude = this._config.amplitude;\n let maxValue = 0;\n\n for (let i = 0; i < this._config.octaves; i++) {\n value += this._noise.noise2D(x * frequency, y * frequency) * amplitude;\n maxValue += amplitude;\n amplitude *= this._config.persistence;\n frequency *= this._config.lacunarity;\n }\n\n return value / maxValue;\n }\n\n /**\n * @zh 3D FBM 噪声\n * @en 3D FBM noise\n *\n * @param x - @zh X 坐标 @en X coordinate\n * @param y - @zh Y 坐标 @en Y coordinate\n * @param z - @zh Z 坐标 @en Z coordinate\n * @returns @zh 噪声值 @en Noise value\n */\n noise3D(x: number, y: number, z: number): number {\n if (!this._noise.noise3D) {\n throw new Error('Base noise does not support 3D');\n }\n\n let value = 0;\n let frequency = this._config.frequency;\n let amplitude = this._config.amplitude;\n let maxValue = 0;\n\n for (let i = 0; i < this._config.octaves; i++) {\n value += this._noise.noise3D(x * frequency, y * frequency, z * frequency) * amplitude;\n maxValue += amplitude;\n amplitude *= this._config.persistence;\n frequency *= this._config.lacunarity;\n }\n\n return value / maxValue;\n }\n\n /**\n * @zh Ridged FBM(脊状,适合山脉)\n * @en Ridged FBM (suitable for mountains)\n */\n ridged2D(x: number, y: number): number {\n let value = 0;\n let frequency = this._config.frequency;\n let amplitude = this._config.amplitude;\n let weight = 1;\n\n for (let i = 0; i < this._config.octaves; i++) {\n let signal = this._noise.noise2D(x * frequency, y * frequency);\n signal = 1 - Math.abs(signal);\n signal *= signal;\n signal *= weight;\n weight = Math.max(0, Math.min(1, signal * 2));\n value += signal * amplitude;\n frequency *= this._config.lacunarity;\n amplitude *= this._config.persistence;\n }\n\n return value;\n }\n\n /**\n * @zh Turbulence(湍流,使用绝对值)\n * @en Turbulence (using absolute value)\n */\n turbulence2D(x: number, y: number): number {\n let value = 0;\n let frequency = this._config.frequency;\n let amplitude = this._config.amplitude;\n let maxValue = 0;\n\n for (let i = 0; i < this._config.octaves; i++) {\n value += Math.abs(this._noise.noise2D(x * frequency, y * frequency)) * amplitude;\n maxValue += amplitude;\n amplitude *= this._config.persistence;\n frequency *= this._config.lacunarity;\n }\n\n return value / maxValue;\n }\n\n /**\n * @zh Billowed(膨胀,适合云朵)\n * @en Billowed (suitable for clouds)\n */\n billowed2D(x: number, y: number): number {\n let value = 0;\n let frequency = this._config.frequency;\n let amplitude = this._config.amplitude;\n let maxValue = 0;\n\n for (let i = 0; i < this._config.octaves; i++) {\n const n = this._noise.noise2D(x * frequency, y * frequency);\n value += (Math.abs(n) * 2 - 1) * amplitude;\n maxValue += amplitude;\n amplitude *= this._config.persistence;\n frequency *= this._config.lacunarity;\n }\n\n return value / maxValue;\n }\n}\n\n/**\n * @zh 创建 FBM 噪声生成器\n * @en Create FBM noise generator\n */\nexport function createFBM(noise: INoise2D & Partial<INoise3D>, config?: Partial<FBMConfig>): FBM {\n return new FBM(noise, config);\n}\n","/**\n * @zh 种子随机数生成器\n * @en Seeded Random Number Generator\n *\n * @zh 基于 xorshift128+ 算法的确定性伪随机数生成器\n * @en Deterministic PRNG based on xorshift128+ algorithm\n */\n\n/**\n * @zh 种子随机数生成器\n * @en Seeded random number generator\n */\nexport class SeededRandom {\n private _s0: number;\n private _s1: number;\n private readonly _initialS0: number;\n private readonly _initialS1: number;\n\n /**\n * @zh 创建种子随机数生成器\n * @en Create seeded random number generator\n *\n * @param seed - @zh 随机种子 @en Random seed\n */\n constructor(seed: number = Date.now()) {\n // Initialize with MurmurHash3 mixing\n let h = seed | 0;\n h = Math.imul(h ^ (h >>> 16), 0x85ebca6b);\n h = Math.imul(h ^ (h >>> 13), 0xc2b2ae35);\n h ^= h >>> 16;\n\n this._s0 = h >>> 0;\n this._s1 = (h * 0x9e3779b9) >>> 0;\n\n // Ensure non-zero state\n if (this._s0 === 0) this._s0 = 1;\n if (this._s1 === 0) this._s1 = 1;\n\n this._initialS0 = this._s0;\n this._initialS1 = this._s1;\n\n // Warm up\n for (let i = 0; i < 10; i++) {\n this.next();\n }\n }\n\n /**\n * @zh 重置到初始状态\n * @en Reset to initial state\n */\n reset(): void {\n this._s0 = this._initialS0;\n this._s1 = this._initialS1;\n\n for (let i = 0; i < 10; i++) {\n this.next();\n }\n }\n\n /**\n * @zh 生成下一个随机数 [0, 1)\n * @en Generate next random number [0, 1)\n */\n next(): number {\n let s1 = this._s0;\n const s0 = this._s1;\n this._s0 = s0;\n s1 ^= s1 << 23;\n s1 ^= s1 >>> 17;\n s1 ^= s0;\n s1 ^= s0 >>> 26;\n this._s1 = s1;\n return ((this._s0 + this._s1) >>> 0) / 4294967296;\n }\n\n /**\n * @zh 生成整数 [min, max]\n * @en Generate integer [min, max]\n */\n nextInt(min: number, max: number): number {\n return Math.floor(this.next() * (max - min + 1)) + min;\n }\n\n /**\n * @zh 生成浮点数 [min, max)\n * @en Generate float [min, max)\n */\n nextFloat(min: number, max: number): number {\n return this.next() * (max - min) + min;\n }\n\n /**\n * @zh 生成布尔值\n * @en Generate boolean\n *\n * @param probability - @zh 为 true 的概率 [0, 1] @en Probability of true [0, 1]\n */\n nextBool(probability: number = 0.5): boolean {\n return this.next() < probability;\n }\n\n /**\n * @zh 生成正态分布随机数 (Box-Muller 变换)\n * @en Generate normally distributed random number (Box-Muller transform)\n *\n * @param mean - @zh 均值 @en Mean\n * @param stdDev - @zh 标准差 @en Standard deviation\n */\n nextGaussian(mean: number = 0, stdDev: number = 1): number {\n const u1 = this.next();\n const u2 = this.next();\n const z0 = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n return z0 * stdDev + mean;\n }\n\n /**\n * @zh 生成指数分布随机数\n * @en Generate exponentially distributed random number\n *\n * @param lambda - @zh 率参数 @en Rate parameter\n */\n nextExponential(lambda: number = 1): number {\n return -Math.log(1 - this.next()) / lambda;\n }\n\n /**\n * @zh 在圆内生成均匀分布的随机点\n * @en Generate uniformly distributed random point in circle\n *\n * @param radius - @zh 半径 @en Radius\n */\n nextPointInCircle(radius: number = 1): { x: number; y: number } {\n const r = Math.sqrt(this.next()) * radius;\n const theta = this.next() * 2 * Math.PI;\n return {\n x: r * Math.cos(theta),\n y: r * Math.sin(theta)\n };\n }\n\n /**\n * @zh 在圆环上生成随机点\n * @en Generate random point on circle\n *\n * @param radius - @zh 半径 @en Radius\n */\n nextPointOnCircle(radius: number = 1): { x: number; y: number } {\n const theta = this.next() * 2 * Math.PI;\n return {\n x: radius * Math.cos(theta),\n y: radius * Math.sin(theta)\n };\n }\n\n /**\n * @zh 在球内生成均匀分布的随机点\n * @en Generate uniformly distributed random point in sphere\n *\n * @param radius - @zh 半径 @en Radius\n */\n nextPointInSphere(radius: number = 1): { x: number; y: number; z: number } {\n const r = Math.cbrt(this.next()) * radius;\n const theta = this.next() * 2 * Math.PI;\n const phi = Math.acos(2 * this.next() - 1);\n return {\n x: r * Math.sin(phi) * Math.cos(theta),\n y: r * Math.sin(phi) * Math.sin(theta),\n z: r * Math.cos(phi)\n };\n }\n\n /**\n * @zh 生成随机方向向量\n * @en Generate random direction vector\n */\n nextDirection2D(): { x: number; y: number } {\n const theta = this.next() * 2 * Math.PI;\n return {\n x: Math.cos(theta),\n y: Math.sin(theta)\n };\n }\n}\n\n/**\n * @zh 创建种子随机数生成器\n * @en Create seeded random number generator\n */\nexport function createSeededRandom(seed?: number): SeededRandom {\n return new SeededRandom(seed);\n}\n","/**\n * @zh 加权随机工具\n * @en Weighted Random Utilities\n */\n\nimport type { SeededRandom } from './SeededRandom';\n\n/**\n * @zh 加权项\n * @en Weighted item\n */\nexport interface WeightedItem<T> {\n /**\n * @zh 项目值\n * @en Item value\n */\n value: T;\n\n /**\n * @zh 权重(> 0)\n * @en Weight (> 0)\n */\n weight: number;\n}\n\n/**\n * @zh 加权随机选择器\n * @en Weighted random selector\n */\nexport class WeightedRandom<T> {\n private readonly _items: WeightedItem<T>[];\n private readonly _cumulativeWeights: number[];\n private readonly _totalWeight: number;\n\n /**\n * @zh 创建加权随机选择器\n * @en Create weighted random selector\n *\n * @param items - @zh 加权项数组 @en Array of weighted items\n */\n constructor(items: WeightedItem<T>[]) {\n if (items.length === 0) {\n throw new Error('Items array cannot be empty');\n }\n\n this._items = [...items];\n this._cumulativeWeights = [];\n\n let total = 0;\n for (const item of this._items) {\n if (item.weight <= 0) {\n throw new Error('Weights must be positive');\n }\n total += item.weight;\n this._cumulativeWeights.push(total);\n }\n\n this._totalWeight = total;\n }\n\n /**\n * @zh 随机选择一个项目\n * @en Randomly select an item\n *\n * @param rng - @zh 随机数生成器 @en Random number generator\n */\n pick(rng: SeededRandom | { next(): number }): T {\n const r = rng.next() * this._totalWeight;\n\n // Binary search for the selected item\n let left = 0;\n let right = this._cumulativeWeights.length - 1;\n\n while (left < right) {\n const mid = (left + right) >>> 1;\n if (this._cumulativeWeights[mid] < r) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n\n return this._items[left].value;\n }\n\n /**\n * @zh 使用 Math.random 选择\n * @en Pick using Math.random\n */\n pickRandom(): T {\n return this.pick({ next: () => Math.random() });\n }\n\n /**\n * @zh 获取项目的选中概率\n * @en Get selection probability of an item\n */\n getProbability(index: number): number {\n if (index < 0 || index >= this._items.length) {\n throw new Error('Index out of bounds');\n }\n return this._items[index].weight / this._totalWeight;\n }\n\n /**\n * @zh 获取所有项目数量\n * @en Get total item count\n */\n get size(): number {\n return this._items.length;\n }\n\n /**\n * @zh 获取总权重\n * @en Get total weight\n */\n get totalWeight(): number {\n return this._totalWeight;\n }\n}\n\n/**\n * @zh 从加权数组中随机选择\n * @en Pick from weighted array\n *\n * @param items - @zh 加权项数组 @en Array of weighted items\n * @param rng - @zh 随机数生成器 @en Random number generator\n */\nexport function weightedPick<T>(\n items: WeightedItem<T>[],\n rng: SeededRandom | { next(): number }\n): T {\n if (items.length === 0) {\n throw new Error('Items array cannot be empty');\n }\n\n let totalWeight = 0;\n for (const item of items) {\n totalWeight += item.weight;\n }\n\n let r = rng.next() * totalWeight;\n for (const item of items) {\n r -= item.weight;\n if (r <= 0) {\n return item.value;\n }\n }\n\n return items[items.length - 1].value;\n}\n\n/**\n * @zh 从权重映射中随机选择\n * @en Pick from weight map\n *\n * @param weights - @zh 值到权重的映射 @en Map of values to weights\n * @param rng - @zh 随机数生成器 @en Random number generator\n */\nexport function weightedPickFromMap<T extends string | number>(\n weights: Record<T, number>,\n rng: SeededRandom | { next(): number }\n): T {\n const items: WeightedItem<T>[] = [];\n for (const key in weights) {\n items.push({ value: key as T, weight: weights[key] });\n }\n return weightedPick(items, rng);\n}\n\n/**\n * @zh 创建加权随机选择器\n * @en Create weighted random selector\n */\nexport function createWeightedRandom<T>(items: WeightedItem<T>[]): WeightedRandom<T> {\n return new WeightedRandom(items);\n}\n","/**\n * @zh 洗牌和采样工具\n * @en Shuffle and Sampling Utilities\n */\n\nimport type { SeededRandom } from './SeededRandom';\n\n/**\n * @zh Fisher-Yates 洗牌算法(原地修改)\n * @en Fisher-Yates shuffle algorithm (in-place)\n *\n * @param array - @zh 要洗牌的数组 @en Array to shuffle\n * @param rng - @zh 随机数生成器 @en Random number generator\n * @returns @zh 洗牌后的数组(同一数组)@en Shuffled array (same array)\n */\nexport function shuffle<T>(array: T[], rng: SeededRandom | { next(): number }): T[] {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(rng.next() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n return array;\n}\n\n/**\n * @zh 创建洗牌后的副本(不修改原数组)\n * @en Create shuffled copy (does not modify original)\n *\n * @param array - @zh 原数组 @en Original array\n * @param rng - @zh 随机数生成器 @en Random number generator\n * @returns @zh 洗牌后的新数组 @en New shuffled array\n */\nexport function shuffleCopy<T>(array: readonly T[], rng: SeededRandom | { next(): number }): T[] {\n return shuffle([...array], rng);\n}\n\n/**\n * @zh 从数组中随机选择一个元素\n * @en Pick a random element from array\n *\n * @param array - @zh 数组 @en Array\n * @param rng - @zh 随机数生成器 @en Random number generator\n * @returns @zh 随机元素 @en Random element\n */\nexport function pickOne<T>(array: readonly T[], rng: SeededRandom | { next(): number }): T {\n if (array.length === 0) {\n throw new Error('Cannot pick from empty array');\n }\n return array[Math.floor(rng.next() * array.length)];\n}\n\n/**\n * @zh 从数组中随机采样 N 个不重复元素\n * @en Sample N unique elements from array\n *\n * @param array - @zh 数组 @en Array\n * @param count - @zh 采样数量 @en Sample count\n * @param rng - @zh 随机数生成器 @en Random number generator\n * @returns @zh 采样结果 @en Sample result\n */\nexport function sample<T>(array: readonly T[], count: number, rng: SeededRandom | { next(): number }): T[] {\n if (count > array.length) {\n throw new Error('Sample count exceeds array length');\n }\n\n if (count === array.length) {\n return shuffleCopy(array, rng);\n }\n\n // For small sample sizes relative to array, use selection\n if (count < array.length / 2) {\n const result: T[] = [];\n const indices = new Set<number>();\n\n while (result.length < count) {\n const index = Math.floor(rng.next() * array.length);\n if (!indices.has(index)) {\n indices.add(index);\n result.push(array[index]);\n }\n }\n\n return result;\n }\n\n // For large sample sizes, shuffle and take first N\n return shuffleCopy(array, rng).slice(0, count);\n}\n\n/**\n * @zh 从数组中随机采样 N 个元素(可重复)\n * @en Sample N elements from array (with replacement)\n *\n * @param array - @zh 数组 @en Array\n * @param count - @zh 采样数量 @en Sample count\n * @param rng - @zh 随机数生成器 @en Random number generator\n * @returns @zh 采样结果 @en Sample result\n */\nexport function sampleWithReplacement<T>(\n array: readonly T[],\n count: number,\n rng: SeededRandom | { next(): number }\n): T[] {\n if (array.length === 0) {\n throw new Error('Cannot sample from empty array');\n }\n\n const result: T[] = [];\n for (let i = 0; i < count; i++) {\n result.push(pickOne(array, rng));\n }\n return result;\n}\n\n/**\n * @zh 生成范围内的随机整数数组(不重复)\n * @en Generate array of random unique integers in range\n *\n * @param min - @zh 最小值(包含)@en Minimum (inclusive)\n * @param max - @zh 最大值(包含)@en Maximum (inclusive)\n * @param count - @zh 数量 @en Count\n * @param rng - @zh 随机数生成器 @en Random number generator\n * @returns @zh 随机整数数组 @en Array of random integers\n */\nexport function randomIntegers(\n min: number,\n max: number,\n count: number,\n rng: SeededRandom | { next(): number }\n): number[] {\n const range = max - min + 1;\n if (count > range) {\n throw new Error('Count exceeds range');\n }\n\n // Generate all numbers and sample\n const numbers: number[] = [];\n for (let i = min; i <= max; i++) {\n numbers.push(i);\n }\n\n return sample(numbers, count, rng);\n}\n\n/**\n * @zh 按权重从数组中采样(不重复)\n * @en Sample from array by weight (without replacement)\n *\n * @param items - @zh 项目数组 @en Item array\n * @param weights - @zh 权重数组 @en Weight array\n * @param count - @zh 采样数量 @en Sample count\n * @param rng - @zh 随机数生成器 @en Random number generator\n */\nexport function weightedSample<T>(\n items: readonly T[],\n weights: readonly number[],\n count: number,\n rng: SeededRandom | { next(): number }\n): T[] {\n if (items.length !== weights.length) {\n throw new Error('Items and weights must have same length');\n }\n if (count > items.length) {\n throw new Error('Sample count exceeds array length');\n }\n\n const result: T[] = [];\n const remaining = [...items];\n const remainingWeights = [...weights];\n\n for (let i = 0; i < count; i++) {\n let totalWeight = 0;\n for (const w of remainingWeights) {\n totalWeight += w;\n }\n\n let r = rng.next() * totalWeight;\n let selectedIndex = 0;\n\n for (let j = 0; j < remainingWeights.length; j++) {\n r -= remainingWeights[j];\n if (r <= 0) {\n selectedIndex = j;\n break;\n }\n }\n\n result.push(remaining[selectedIndex]);\n remaining.splice(selectedIndex, 1);\n remainingWeights.splice(selectedIndex, 1);\n }\n\n return result;\n}\n","/**\n * @zh 程序化生成蓝图节点\n * @en Procedural Generation Blueprint Nodes\n */\n\nimport type { BlueprintNodeTemplate, BlueprintNode, INodeExecutor, ExecutionResult } from '@esengine/blueprint';\nimport { PerlinNoise } from '../noise/PerlinNoise';\nimport { SimplexNoise } from '../noise/SimplexNoise';\nimport { WorleyNoise } from '../noise/WorleyNoise';\nimport { FBM } from '../noise/FBM';\nimport { SeededRandom } from '../random/SeededRandom';\nimport { weightedPick } from '../random/WeightedRandom';\nimport type { WeightedItem } from '../random/WeightedRandom';\nimport { shuffle, pickOne, sample } from '../random/Shuffle';\n\n// =============================================================================\n// 噪声缓存 | Noise Cache\n// =============================================================================\n\nconst noiseCache = new Map<string, PerlinNoise | SimplexNoise | WorleyNoise>();\nconst rngCache = new Map<number, SeededRandom>();\n\nfunction getPerlinNoise(seed: number): PerlinNoise {\n const key = `perlin_${seed}`;\n if (!noiseCache.has(key)) {\n noiseCache.set(key, new PerlinNoise(seed));\n }\n return noiseCache.get(key) as PerlinNoise;\n}\n\nfunction getSimplexNoise(seed: number): SimplexNoise {\n const key = `simplex_${seed}`;\n if (!noiseCache.has(key)) {\n noiseCache.set(key, new SimplexNoise(seed));\n }\n return noiseCache.get(key) as SimplexNoise;\n}\n\nfunction getWorleyNoise(seed: number): WorleyNoise {\n const key = `worley_${seed}`;\n if (!noiseCache.has(key)) {\n noiseCache.set(key, new WorleyNoise(seed));\n }\n return noiseCache.get(key) as WorleyNoise;\n}\n\nfunction getSeededRandom(seed: number): SeededRandom {\n if (!rngCache.has(seed)) {\n rngCache.set(seed, new SeededRandom(seed));\n }\n return rngCache.get(seed)!;\n}\n\n// =============================================================================\n// 执行上下文接口 | Execution Context Interface\n// =============================================================================\n\ninterface ProcGenContext {\n evaluateInput(nodeId: string, pinName: string, defaultValue?: unknown): unknown;\n setOutputs(nodeId: string, outputs: Record<string, unknown>): void;\n}\n\n// =============================================================================\n// SampleNoise2D 节点 | SampleNoise2D Node\n// =============================================================================\n\nexport const SampleNoise2DTemplate: BlueprintNodeTemplate = {\n type: 'SampleNoise2D',\n title: 'Sample Noise 2D',\n category: 'math',\n description: 'Sample 2D noise at coordinates / 在坐标处采样 2D 噪声',\n keywords: ['noise', 'perlin', 'simplex', 'random', 'procedural'],\n menuPath: ['Procedural', 'Noise', 'Sample Noise 2D'],\n isPure: true,\n inputs: [\n { name: 'x', displayName: 'X', type: 'float' },\n { name: 'y', displayName: 'Y', type: 'float' },\n { name: 'seed', displayName: 'Seed', type: 'int' },\n { name: 'noiseType', displayName: 'Type', type: 'string' }\n ],\n outputs: [\n { name: 'value', displayName: 'Value', type: 'float' }\n ],\n color: '#9c27b0'\n};\n\nexport class SampleNoise2DExecutor implements INodeExecutor {\n execute(node: BlueprintNode, context: unknown): ExecutionResult {\n const ctx = context as ProcGenContext;\n const x = ctx.evaluateInput(node.id, 'x', 0) as number;\n const y = ctx.evaluateInput(node.id, 'y', 0) as number;\n const seed = ctx.evaluateInput(node.id, 'seed', 0) as number;\n const noiseType = ctx.evaluateInput(node.id, 'noiseType', 'perlin') as string;\n\n let value = 0;\n switch (noiseType.toLowerCase()) {\n case 'simplex':\n value = getSimplexNoise(seed).noise2D(x, y);\n break;\n case 'worley':\n value = getWorleyNoise(seed).noise2D(x, y);\n break;\n case 'perlin':\n default:\n value = getPerlinNoise(seed).noise2D(x, y);\n break;\n }\n\n return { outputs: { value } };\n }\n}\n\n// =============================================================================\n// SampleFBM 节点 | SampleFBM Node\n// =============================================================================\n\nexport const SampleFBMTemplate: BlueprintNodeTemplate = {\n type: 'SampleFBM',\n title: 'Sample FBM',\n category: 'math',\n description: 'Sample Fractal Brownian Motion noise / 采样分形布朗运动噪声',\n keywords: ['noise', 'fbm', 'fractal', 'octave', 'terrain'],\n menuPath: ['Procedural', 'Noise', 'Sample FBM'],\n isPure: true,\n inputs: [\n { name: 'x', displayName: 'X', type: 'float' },\n { name: 'y', displayName: 'Y', type: 'float' },\n { name: 'seed', displayName: 'Seed', type: 'int' },\n { name: 'octaves', displayName: 'Octaves', type: 'int' },\n { name: 'frequency', displayName: 'Frequency', type: 'float' },\n { name: 'persistence', displayName: 'Persistence', type: 'float' }\n ],\n outputs: [\n { name: 'value', displayName: 'Value', type: 'float' }\n ],\n color: '#9c27b0'\n};\n\nexport class SampleFBMExecutor implements INodeExecutor {\n execute(node: BlueprintNode, context: unknown): ExecutionResult {\n const ctx = context as ProcGenContext;\n const x = ctx.evaluateInput(node.id, 'x', 0) as number;\n const y = ctx.evaluateInput(node.id, 'y', 0) as number;\n const seed = ctx.evaluateInput(node.id, 'seed', 0) as number;\n const octaves = ctx.evaluateInput(node.id, 'octaves', 6) as number;\n const frequency = ctx.evaluateInput(node.id, 'frequency', 1) as number;\n const persistence = ctx.evaluateInput(node.id, 'persistence', 0.5) as number;\n\n const noise = getPerlinNoise(seed);\n const fbm = new FBM(noise, { octaves, frequency, persistence });\n const value = fbm.noise2D(x, y);\n\n return { outputs: { value } };\n }\n}\n\n// =============================================================================\n// SeededRandom 节点 | SeededRandom Node\n// =============================================================================\n\nexport const SeededRandomTemplate: BlueprintNodeTemplate = {\n type: 'SeededRandom',\n title: 'Seeded Random',\n category: 'math',\n description: 'Generate deterministic random number / 生成确定性随机数',\n keywords: ['random', 'seed', 'deterministic', 'procedural'],\n menuPath: ['Procedural', 'Random', 'Seeded Random'],\n isPure: true,\n inputs: [\n { name: 'seed', displayName: 'Seed', type: 'int' },\n { name: 'index', displayName: 'Index', type: 'int' }\n ],\n outputs: [\n { name: 'value', displayName: 'Value', type: 'float' }\n ],\n color: '#9c27b0'\n};\n\nexport class SeededRandomExecutor implements INodeExecutor {\n execute(node: BlueprintNode, context: unknown): ExecutionResult {\n const ctx = context as ProcGenContext;\n const seed = ctx.evaluateInput(node.id, 'seed', 0) as number;\n const index = ctx.evaluateInput(node.id, 'index', 0) as number;\n\n // Create deterministic value from seed and index\n const rng = new SeededRandom(seed + index * 12345);\n const value = rng.next();\n\n return { outputs: { value } };\n }\n}\n\n// =============================================================================\n// SeededRandomInt 节点 | SeededRandomInt Node\n// =============================================================================\n\nexport const SeededRandomIntTemplate: BlueprintNodeTemplate = {\n type: 'SeededRandomInt',\n title: 'Seeded Random Int',\n category: 'math',\n description: 'Generate deterministic random integer / 生成确定性随机整数',\n keywords: ['random', 'seed', 'integer', 'deterministic'],\n menuPath: ['Procedural', 'Random', 'Seeded Random Int'],\n isPure: true,\n inputs: [\n { name: 'seed', displayName: 'Seed', type: 'int' },\n { name: 'index', displayName: 'Index', type: 'int' },\n { name: 'min', displayName: 'Min', type: 'int' },\n { name: 'max', displayName: 'Max', type: 'int' }\n ],\n outputs: [\n { name: 'value', displayName: 'Value', type: 'int' }\n ],\n color: '#9c27b0'\n};\n\nexport class SeededRandomIntExecutor implements INodeExecutor {\n execute(node: BlueprintNode, context: unknown): ExecutionResult {\n const ctx = context as ProcGenContext;\n const seed = ctx.evaluateInput(node.id, 'seed', 0) as number;\n const index = ctx.evaluateInput(node.id, 'index', 0) as number;\n const min = ctx.evaluateInput(node.id, 'min', 0) as number;\n const max = ctx.evaluateInput(node.id, 'max', 100) as number;\n\n const rng = new SeededRandom(seed + index * 12345);\n const value = rng.nextInt(min, max);\n\n return { outputs: { value } };\n }\n}\n\n// =============================================================================\n// WeightedPick 节点 | WeightedPick Node\n// =============================================================================\n\nexport const WeightedPickTemplate: BlueprintNodeTemplate = {\n type: 'WeightedPick',\n title: 'Weighted Pick',\n category: 'math',\n description: 'Pick from weighted options / 从加权选项中选择',\n keywords: ['random', 'weight', 'pick', 'select', 'loot'],\n menuPath: ['Procedural', 'Random', 'Weighted Pick'],\n isPure: true,\n inputs: [\n { name: 'seed', displayName: 'Seed', type: 'int' },\n { name: 'index', displayName: 'Index', type: 'int' },\n { name: 'items', displayName: 'Items', type: 'array' },\n { name: 'weights', displayName: 'Weights', type: 'array' }\n ],\n outputs: [\n { name: 'value', displayName: 'Value', type: 'any' },\n { name: 'selectedIndex', displayName: 'Index', type: 'int' }\n ],\n color: '#9c27b0'\n};\n\nexport class WeightedPickExecutor implements INodeExecutor {\n execute(node: BlueprintNode, context: unknown): ExecutionResult {\n const ctx = context as ProcGenContext;\n const seed = ctx.evaluateInput(node.id, 'seed', 0) as number;\n const index = ctx.evaluateInput(node.id, 'index', 0) as number;\n const items = ctx.evaluateInput(node.id, 'items', []) as unknown[];\n const weights = ctx.evaluateInput(node.id, 'weights', []) as number[];\n\n if (items.length === 0) {\n return { outputs: { value: null, selectedIndex: -1 } };\n }\n\n const rng = new SeededRandom(seed + index * 12345);\n\n // Build weighted items\n const weightedItems: WeightedItem<{ value: unknown; index: number }>[] = items.map((item, i) => ({\n value: { value: item, index: i },\n weight: weights[i] ?? 1\n }));\n\n const result = weightedPick(weightedItems, rng);\n\n return { outputs: { value: result.value, selectedIndex: result.index } };\n }\n}\n\n// =============================================================================\n// ShuffleArray 节点 | ShuffleArray Node\n// =============================================================================\n\nexport const ShuffleArrayTemplate: BlueprintNodeTemplate = {\n type: 'ShuffleArray',\n title: 'Shuffle Array',\n category: 'math',\n description: 'Shuffle array with seed / 使用种子洗牌数组',\n keywords: ['random', 'shuffle', 'array', 'order'],\n menuPath: ['Procedural', 'Random', 'Shuffle Array'],\n isPure: true,\n inputs: [\n { name: 'seed', displayName: 'Seed', type: 'int' },\n { name: 'array', displayName: 'Array', type: 'array' }\n ],\n outputs: [\n { name: 'result', displayName: 'Result', type: 'array' }\n ],\n color: '#9c27b0'\n};\n\nexport class ShuffleArrayExecutor implements INodeExecutor {\n execute(node: BlueprintNode, context: unknown): ExecutionResult {\n const ctx = context as ProcGenContext;\n const seed = ctx.evaluateInput(node.id, 'seed', 0) as number;\n const array = ctx.evaluateInput(node.id, 'array', []) as unknown[];\n\n const rng = new SeededRandom(seed);\n const result = shuffle([...array], rng);\n\n return { outputs: { result } };\n }\n}\n\n// =============================================================================\n// PickRandom 节点 | PickRandom Node\n// =============================================================================\n\nexport const PickRandomTemplate: BlueprintNodeTemplate = {\n type: 'PickRandom',\n title: 'Pick Random',\n category: 'math',\n description: 'Pick random element from array / 从数组中随机选择元素',\n keywords: ['random', 'pick', 'array', 'select'],\n menuPath: ['Procedural', 'Random', 'Pick Random'],\n isPure: true,\n inputs: [\n { name: 'seed', displayName: 'Seed', type: 'int' },\n { name: 'index', displayName: 'Index', type: 'int' },\n { name: 'array', displayName: 'Array', type: 'array' }\n ],\n outputs: [\n { name: 'value', displayName: 'Value', type: 'any' }\n ],\n color: '#9c27b0'\n};\n\nexport class PickRandomExecutor implements INodeExecutor {\n execute(node: BlueprintNode, context: unknown): ExecutionResult {\n const ctx = context as ProcGenContext;\n const seed = ctx.evaluateInput(node.id, 'seed', 0) as number;\n const index = ctx.evaluateInput(node.id, 'index', 0) as number;\n const array = ctx.evaluateInput(node.id, 'array', []) as unknown[];\n\n if (array.length === 0) {\n return { outputs: { value: null } };\n }\n\n const rng = new SeededRandom(seed + index * 12345);\n const value = pickOne(array, rng);\n\n return { outputs: { value } };\n }\n}\n\n// =============================================================================\n// SampleArray 节点 | SampleArray Node\n// =============================================================================\n\nexport const SampleArrayTemplate: BlueprintNodeTemplate = {\n type: 'SampleArray',\n title: 'Sample Array',\n category: 'math',\n description: 'Sample N unique elements from array / 从数组中采样 N 个不重复元素',\n keywords: ['random', 'sample', 'array', 'unique'],\n menuPath: ['Procedural', 'Random', 'Sample Array'],\n isPure: true,\n inputs: [\n { name: 'seed', displayName: 'Seed', type: 'int' },\n { name: 'array', displayName: 'Array', type: 'array' },\n { name: 'count', displayName: 'Count', type: 'int' }\n ],\n outputs: [\n { name: 'result', displayName: 'Result', type: 'array' }\n ],\n color: '#9c27b0'\n};\n\nexport class SampleArrayExecutor implements INodeExecutor {\n execute(node: BlueprintNode, context: unknown): ExecutionResult {\n const ctx = context as ProcGenContext;\n const seed = ctx.evaluateInput(node.id, 'seed', 0) as number;\n const array = ctx.evaluateInput(node.id, 'array', []) as unknown[];\n const count = ctx.evaluateInput(node.id, 'count', 1) as number;\n\n if (array.length === 0 || count <= 0) {\n return { outputs: { result: [] } };\n }\n\n const rng = new SeededRandom(seed);\n const actualCount = Math.min(count, array.length);\n const result = sample(array, actualCount, rng);\n\n return { outputs: { result } };\n }\n}\n\n// =============================================================================\n// RandomPointInCircle 节点 | RandomPointInCircle Node\n// =============================================================================\n\nexport const RandomPointInCircleTemplate: BlueprintNodeTemplate = {\n type: 'RandomPointInCircle',\n title: 'Random Point In Circle',\n category: 'math',\n description: 'Generate random point inside circle / 在圆内生成随机点',\n keywords: ['random', 'point', 'circle', 'position'],\n menuPath: ['Procedural', 'Random', 'Random Point In Circle'],\n isPure: true,\n inputs: [\n { name: 'seed', displayName: 'Seed', type: 'int' },\n { name: 'index', displayName: 'Index', type: 'int' },\n { name: 'centerX', displayName: 'Center X', type: 'float' },\n { name: 'centerY', displayName: 'Center Y', type: 'float' },\n { name: 'radius', displayName: 'Radius', type: 'float' }\n ],\n outputs: [\n { name: 'x', displayName: 'X', type: 'float' },\n { name: 'y', displayName: 'Y', type: 'float' }\n ],\n color: '#9c27b0'\n};\n\nexport class RandomPointInCircleExecutor implements INodeExecutor {\n execute(node: BlueprintNode, context: unknown): ExecutionResult {\n const ctx = context as ProcGenContext;\n const seed = ctx.evaluateInput(node.id, 'seed', 0) as number;\n const index = ctx.evaluateInput(node.id, 'index', 0) as number;\n const centerX = ctx.evaluateInput(node.id, 'centerX', 0) as number;\n const centerY = ctx.evaluateInput(node.id, 'centerY', 0) as number;\n const radius = ctx.evaluateInput(node.id, 'radius', 1) as number;\n\n const rng = new SeededRandom(seed + index * 12345);\n const point = rng.nextPointInCircle(radius);\n\n return {\n outputs: {\n x: centerX + point.x,\n y: centerY + point.y\n }\n };\n }\n}\n\n// =============================================================================\n// 节点定义集合 | Node Definition Collection\n// =============================================================================\n\nexport const ProcGenNodeDefinitions = {\n templates: [\n SampleNoise2DTemplate,\n SampleFBMTemplate,\n SeededRandomTemplate,\n SeededRandomIntTemplate,\n WeightedPickTemplate,\n ShuffleArrayTemplate,\n PickRandomTemplate,\n SampleArrayTemplate,\n RandomPointInCircleTemplate\n ],\n executors: new Map<string, INodeExecutor>([\n ['SampleNoise2D', new SampleNoise2DExecutor()],\n ['SampleFBM', new SampleFBMExecutor()],\n ['SeededRandom', new SeededRandomExecutor()],\n ['SeededRandomInt', new SeededRandomIntExecutor()],\n ['WeightedPick', new WeightedPickExecutor()],\n ['ShuffleArray', new ShuffleArrayExecutor()],\n ['PickRandom', new PickRandomExecutor()],\n ['SampleArray', new SampleArrayExecutor()],\n ['RandomPointInCircle', new RandomPointInCircleExecutor()]\n ])\n};\n"]}
package/module.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "procgen",
3
+ "name": "@esengine/procgen",
4
+ "globalKey": "procgen",
5
+ "displayName": "Procedural Generation",
6
+ "description": "程序化生成工具,包含噪声函数和随机工具 | Procedural generation tools with noise functions and random utilities",
7
+ "version": "1.0.0",
8
+ "category": "Math",
9
+ "icon": "Wand",
10
+ "tags": ["noise", "random", "procedural", "generation"],
11
+ "isCore": false,
12
+ "defaultEnabled": true,
13
+ "isEngineModule": true,
14
+ "canContainContent": false,
15
+ "platforms": ["web", "desktop"],
16
+ "dependencies": ["core"],
17
+ "exports": {
18
+ "components": [],
19
+ "systems": []
20
+ },
21
+ "requiresWasm": false,
22
+ "outputPath": "dist/index.js",
23
+ "pluginExport": "ProcGenPlugin"
24
+ }
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@esengine/procgen",
3
+ "version": "1.0.0",
4
+ "description": "Procedural generation tools for ECS Framework / ECS 框架的程序化生成工具",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "module.json"
18
+ ],
19
+ "dependencies": {
20
+ "tslib": "^2.8.1"
21
+ },
22
+ "devDependencies": {
23
+ "@types/node": "^20.19.17",
24
+ "rimraf": "^5.0.0",
25
+ "tsup": "^8.0.0",
26
+ "typescript": "^5.8.3",
27
+ "@esengine/ecs-framework": "2.4.2",
28
+ "@esengine/blueprint": "1.0.0",
29
+ "@esengine/build-config": "1.0.0"
30
+ },
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "scripts": {
35
+ "build": "tsup",
36
+ "build:watch": "tsup --watch",
37
+ "type-check": "tsc --noEmit",
38
+ "clean": "rimraf dist"
39
+ }
40
+ }