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 次下载

Apache-2.0

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!("");
    }
}

无运行时依赖