Procedural generation of 2D maps with distinct biomes
.
Documentation
.
npm i gen-biome.
new WorldGenerator<T>(config: WorldConfig)[config] - World config
| Prop | Description | Default | Range |
|---|---|---|---|
| width | Map width | ||
| height | Map height | ||
| frequencyChange | Frequency of biomes change | 0.3 | 0.0 - 1.0 |
| borderSmoothness | Smoothness of biomes borders | 0.5 | 0.0 - 1.0 |
| heightRedistribution | Redistribution of biomes height | 1.0 | 0.5 - 1.5 |
| heightAveraging | Averaging of biomes height | true | |
| falloff | Scale of falloff area | 0.0 |
.
generator.addBiome(
config: WorldBiomeConfig,
data: T,
): WorldBiome<T>[config] - Biome config
| Prop | Description | Default |
|---|---|---|
| lowerBound | Lower biome bound | 0.0 |
| upperBound | Upper biome bound | 1.0 |
[data] - Biome data that will be stored in the world matrix
generator.getBiomes(): WorldBiome<T>[]generator.clearBiomes().
generator.generate(
params?: WorldGenerationParams,
): World<T>[params] - Generation params (optional)
| Prop | Description | Default |
|---|---|---|
| seed | Generation seed | (autogenerated) |
| seedSize | Size of seed array | 512 |
| offsetX | Generation offset X | 0 |
| offsetY | Generation offset Y | 0 |
.
world.getMatrix(): T[][]world.each(
callback: (position: WorldPoint, data: T) => void,
): void[callback] - Callback with position and biome stored data
world.getAt(
position: WorldPoint,
): T | null[position] - Position at matrix
world.replaceAt(
position: WorldPoint,
data: T,
): void[position] - Position at matrix
[data] - New biome stored data
world.seed: number[]world.width: numberworld.height: number.
const TILE_SIZE = 2;
const BIOMES = [
{ // WATER
params: { lowerBound: 0.0, upperBound: 0.2 },
data: { color: 'blue' },
},
{ // GRASS
params: { lowerBound: 0.2, upperBound: 0.7 },
data: { color: 'green' },
},
{ // MOUNTS
params: { lowerBound: 0.7 },
data: { color: 'gray' },
},
];
const generator = new WorldGenerator({
width: 100,
height: 100,
});
for (const { params, data } of BIOMES) {
generator.addBiome(params, data);
}
const world = generator.generate();
world.each((position, biome) => {
const tileX = position.x * TILE_SIZE;
const tileY = position.y * TILE_SIZE;
ctx.fillStyle = biome.color;
ctx.fillRect(tileX, tileY, TILE_SIZE, TILE_SIZE);
});