Source code for redeclipse.cli.perlin

#!/usr/bin/env python
from redeclipse.voxel import VoxelWorld
from redeclipse.cli import parse
from redeclipse.objects import cube
import argparse
import sys  # noqa
import random  # noqa
import math  # noqa
import noise  # noqa
random.seed(22)
IJ_SIZE = 2**7
K_SIZE = 50
MAP_SEED = 0
octaves = 1
noise_scaling = 32


[docs]def main(): parser = argparse.ArgumentParser(description='Add trees to map') parser.add_argument('input', help='Input .mpz file') parser.add_argument('output', help='Output .mpz file') args = parser.parse_args() mymap = parse(args.input) v = VoxelWorld(size=2**7) treeDensityMap = {} for i in range(IJ_SIZE): for j in range(IJ_SIZE): w = noise.pnoise2(j / noise_scaling, i / noise_scaling, octaves=2, base=MAP_SEED + 128) # This is a forrest if w < -0.1: # Then we take a chance if random.random() < (abs(w) / 4): treeDensityMap[i, j] = True bldgDensityMap = {} for i in range(IJ_SIZE // 4): for j in range(IJ_SIZE // 4): w = noise.pnoise2(j / noise_scaling, i / noise_scaling, octaves=2, base=MAP_SEED + 64) # This is a forrest if w < -0.1: # Then we take a chance if random.random() < (abs(w) / 3): for i2 in range(4 * i, 4 * (i + 1)): for j2 in range(4 * j, 4 * (j + 1)): bldgDensityMap[i2, j2] = True def point(i, j, k): q = noise.pnoise2(i / noise_scaling, j / noise_scaling, octaves=octaves, base=MAP_SEED) q *= 5 q += 30 if i % 10 == 0 and j == 0 and k == 0: sys.stderr.write('%s / %s %s %s\n' % (i, IJ_SIZE, q, w)) if (i, j) in treeDensityMap: return [58, 58, 58, 58, 59, 59] if (i, j) in bldgDensityMap and k < q + 4 and k >= q: return [57, 57, 57, 57, 57, 57] if k < q: return [23, 23, 23, 23, 22, 61] return False for i in range(IJ_SIZE): for j in range(IJ_SIZE): for k in range(K_SIZE): q = point(i, j, k) if q: v.set_point(i, j, k, cube.newtexcube(tex=q)) mymap.world = v.to_octree() mymap.world[0].octsav = 0 mymap.write(args.output)
if __name__ == '__main__': main()