npm.io
3.0.5 • Published 1 year ago

gen-biome

Licence
MIT
Version
3.0.5
Deps
0
Size
87 kB
Vulns
0
Weekly
0
Stars
43

Gen Biome

Version Small size Build

Procedural generation of 2D maps with distinct biomes

.

Demo

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);
});