Expand description
World and Noise Generation in Rust.
Note that any/all of this documentation may change as the library goes through changes.
§Introduction
To start generating a world, we need a source of noise. The noise
module contains different noise generators, for example for perlin noise:
let noise = PerlinNoise::new();
We can generate a single value from a generator using its generate
method, as follows:
// x, y, seed
let value = noise.generate(1.0, 1.0, 15);
This on its own is not very useful or convenient, however by plugging this
into a NoiseMap
(from the noisemap
module) we can generate a field of
continuous noise:
let nm = NoiseMap::new(noise)
.set(Size::of(10, 10))
.set(Step::of(0.05, 0.05));
let vec = nm.generate_chunk(0, 0);
These can be combined and scaled to your liking:
let nm = nm1 + nm2 * 5;
Finally, we can wrap these into a World
, and produce a vector of specific
tiles (represented by anything you want) based on given constraints:
let world = World::new()
.add(Tile::new('~').when(constraint!(nm, < 0.0)))
.add(Tile::new(','));
let tiles = world.generate(0, 0);
For more information on each of the three components, look at the documentation of the relevant module.
§Full Example
#[macro_use] extern crate worldgen;
use worldgen::noise::perlin::PerlinNoise;
use worldgen::noisemap::{NoiseMapGenerator, NoiseMapGeneratorBase, NoiseMap, Seed, Step, Size};
use worldgen::world::{World, Tile};
use worldgen::world::tile::{Constraint, ConstraintType};
fn main() {
let noise = PerlinNoise::new();
let nm1 = NoiseMap::new(noise)
.set(Seed::of("Hello?"))
.set(Step::of(0.005, 0.005));
let nm2 = NoiseMap::new(noise)
.set(Seed::of("Hello!"))
.set(Step::of(0.05, 0.05));
let nm = Box::new(nm1 + nm2 * 3);
let world = World::new()
.set(Size::of(80, 50))
// Water
.add(Tile::new('~')
.when(constraint!(nm.clone(), < -0.1)))
// Grass
.add(Tile::new(',')
.when(constraint!(nm.clone(), < 0.45)))
// Mountains
.add(Tile::new('^')
.when(constraint!(nm.clone(), > 0.8)))
// Hills
.add(Tile::new('n'));
for row in world.generate(0, 0).iter() {
for val in row.iter() {
for c in val.iter() {
print!("{}", c);
}
println!("");
}
println!("");
}
}
Modules§
- noise
- The Noise module provides generators for different kinds of noise.
- noisemap
- Generators for finite noise maps
- world
- For generating maps of specfic objects based on thresholds.