gen-biome
v3.0.4
Published
Procedural generation of 2D maps with distinct biomes
Downloads
363
Maintainers
Readme
Procedural generation of 2D maps with distinct biomes
.
Documentation
.
Install
npm i gen-biome
.
Generator
Create world generator
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 | |
.
Biomes
Add biome
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
Get current biomes
generator.getBiomes(): WorldBiome<T>[]
Clear all biomes
generator.clearBiomes()
.
Generation
Generate world
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
Get matrix of biomes data
world.getMatrix(): T[][]
Each all positions
world.each(
callback: (position: WorldPoint, data: T) => void,
): void
[callback
] - Callback with position and biome stored data
Get biome data at position
world.getAt(
position: WorldPoint,
): T | null
[position
] - Position at matrix
Replace biome data at position
world.replaceAt(
position: WorldPoint,
data: T,
): void
[position
] - Position at matrix
[data
] - New biome stored data
Get current world generation seed
world.seed: number[]
Get world width
world.width: number
Get world height
world.height: number
.
Example
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);
});