3.0.11 • Published 11 months ago
cyberheroic-maps v3.0.11
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,
): voidcallback - Callback with position and biome stored data
Get biome data at position
world.getAt(
position: WorldPoint,
): T | nullposition - Position at matrix
Replace biome data at position
world.replaceAt(
position: WorldPoint,
data: T,
): voidposition - Position at matrix
data - New biome stored data
Get current world generation seed
world.seed: number[]Get world width
world.width: numberGet 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);
});