12 个版本
0.5.3 | 2020年5月25日 |
---|---|
0.5.2 | 2020年5月24日 |
0.4.0 | 2016年3月7日 |
0.3.2 | 2016年3月7日 |
0.1.2 | 2015年6月30日 |
#1080 在 算法 中
每月 35 次下载
52KB
756 行
Rust 中的世界和噪图生成。
一个用于在 Rust 中简单生成噪图和对象图的库。
完整文档可以在这里找到。
用法
要使用此库,只需将以下行添加到您的 Cargo.toml 依赖项部分
worldgen = "0.5.2"
简介
要开始生成世界,我们需要一个噪声源。`noise` 模块包含不同的噪声生成器,例如用于 Perlin 噪声的生成器
let noise = PerlinNoise::new();
我们可以使用生成器的 `generate` 方法从生成器生成单个值,如下所示
// x, y, seed
let value = noise.generate(1.0, 1.0, 15);
单独来看,这并不是非常有用或方便,但是通过将其连接到 `NoiseMap`(来自 `noisemap` 模块),我们可以生成连续噪声字段
let nm = NoiseMap::new(noise)
.set(Size::of(10, 10))
.set(Step::of(0.05, 0.05));
let vec = nm.generate_chunk(0, 0);
这些可以组合和缩放,以满足您的需求
let nm = nm1 + nm2 * 5;
最后,我们可以将此包装到 `World` 中,并根据给定的约束生成特定瓦片的向量(可以用您想要的内容表示)
let world = World::new(nm)
.add(Tile::new('~').when(Constraint::LT(0.0)))
.add(Tile::new(','));
let tiles = world.generate(0, 0);
有关这三个组件的更多信息,请参阅每个相关模块的文档。
完整示例
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!("");
}
}