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: number
world.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);
});