Procedural generation of 2D maps with distinct biomes
npm install gen-biomeProcedural generation of 2D maps with distinct biomes
.
Documentation
* Install
* Generator
* Biomes
* Generation
* World
* Example
.
``sh`
npm i gen-biome
.
ts
new WorldGenerator(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 | |
.
Biomes
$3
`ts
generator.addBiome(
config: WorldBiomeConfig,
data: T,
): WorldBiome
`
[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_$3
`ts
generator.getBiomes(): WorldBiome[]
`$3
`ts
generator.clearBiomes()
`.
Generation
$3
`ts
generator.generate(
params?: WorldGenerationParams,
): World
`
[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
$3
`ts
world.getMatrix(): T[][]
`$3
`ts
world.each(
callback: (position: WorldPoint, data: T) => void,
): void
`
[callback] - _Callback with position and biome stored data_$3
`ts
world.getAt(
position: WorldPoint,
): T | null
`
[position] - _Position at matrix_$3
`ts
world.replaceAt(
position: WorldPoint,
data: T,
): void
`
[position] - _Position at matrix_[
data] - _New biome stored data_$3
`ts
world.seed: number[]
`$3
`ts
world.width: number
`$3
`ts
world.height: number
`.
Example
`ts
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);
});
``