32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
// what worldgen scripts get, see "World generation" in MODS.md. runs in chunk workers and must be deterministic
|
|
import type { Id } from "./shared.ts";
|
|
|
|
export type { Id } from "./shared.ts";
|
|
|
|
export interface WorldgenContext {
|
|
register_terrain(id: Id, generate: (chunk: TerrainChunk) => void): void;
|
|
register_feature(id: Id, generate: (chunk: FeatureChunk) => void): void;
|
|
}
|
|
|
|
export interface FeatureChunk {
|
|
// chunk coordinates
|
|
readonly x: number;
|
|
readonly z: number;
|
|
readonly seed: string;
|
|
// seeded from the seed, chunk and feature id
|
|
readonly rng: { next(): number };
|
|
// create_noise_2d(new Alea(seed + "_" + name)), cached per seed and name
|
|
noise_2d(name: string): (x: number, z: number) => number;
|
|
noise_3d(name: string): (x: number, y: number, z: number) => number;
|
|
// surface height and biome, inside this chunk only
|
|
height_at(x: number, z: number): number;
|
|
biome_at(x: number, z: number): Id;
|
|
get_block(x: number, y: number, z: number): Id | undefined; // inside this chunk only
|
|
set_block(x: number, y: number, z: number, id: Id): void; // up to one chunk away, like trees
|
|
}
|
|
|
|
export interface TerrainChunk extends FeatureChunk {
|
|
set_height(x: number, z: number, height: number): void;
|
|
set_biome(x: number, z: number, biome: Id): void;
|
|
}
|