예제 #1
0
def Percipitaion(preciphm, temphm):

    libtcod.heightmap_add(preciphm, 2)

    for x in xrange(WORLD_WIDTH):
        for y in xrange(WORLD_HEIGHT):
            temp = libtcod.heightmap_get_value(temphm, x, y)

    precip = libtcod.noise_new(2, libtcod.NOISE_DEFAULT_HURST,
                               libtcod.NOISE_DEFAULT_LACUNARITY)

    libtcod.heightmap_add_fbm(preciphm, precip, 2, 2, 0, 0, 32, 1, 1)

    libtcod.heightmap_normalize(preciphm, 0.0, 1.0)

    return
예제 #2
0
def Percipitaion(preciphm):

    libtcod.heightmap_add(preciphm, 2)

    for x in xrange(WORLD_WIDTH):
        for y in xrange(WORLD_HEIGHT):
                if y > WORLD_HEIGHT/2 - WORLD_HEIGHT/10 and y < WORLD_HEIGHT/2 + WORLD_HEIGHT/10:
                    val = y
                    val = abs(y - WORLD_HEIGHT/2)
                    libtcod.heightmap_set_value(preciphm, x, y, val/4)
                        
    precip = libtcod.noise_new(2,libtcod.NOISE_DEFAULT_HURST, libtcod.NOISE_DEFAULT_LACUNARITY)

    libtcod.heightmap_add_fbm(preciphm,precip ,8, 8, 0, 0, 32, 1, 1)

    libtcod.heightmap_normalize(preciphm, 0.0, 1.0)                       

    return
예제 #3
0
def test_heightmap():
    hmap = libtcodpy.heightmap_new(16, 16)
    repr(hmap)
    noise = libtcodpy.noise_new(2)

    # basic operations
    libtcodpy.heightmap_set_value(hmap, 0, 0, 1)
    libtcodpy.heightmap_add(hmap, 1)
    libtcodpy.heightmap_scale(hmap, 1)
    libtcodpy.heightmap_clear(hmap)
    libtcodpy.heightmap_clamp(hmap, 0, 0)
    libtcodpy.heightmap_copy(hmap, hmap)
    libtcodpy.heightmap_normalize(hmap)
    libtcodpy.heightmap_lerp_hm(hmap, hmap, hmap, 0)
    libtcodpy.heightmap_add_hm(hmap, hmap, hmap)
    libtcodpy.heightmap_multiply_hm(hmap, hmap, hmap)

    # modifying the heightmap
    libtcodpy.heightmap_add_hill(hmap, 0, 0, 4, 1)
    libtcodpy.heightmap_dig_hill(hmap, 0, 0, 4, 1)
    libtcodpy.heightmap_rain_erosion(hmap, 1, 1, 1)
    libtcodpy.heightmap_kernel_transform(hmap, 3, [-1, 1, 0], [0, 0, 0],
                                         [.33, .33, .33], 0, 1)
    libtcodpy.heightmap_add_voronoi(hmap, 10, 3, [1, 3, 5])
    libtcodpy.heightmap_add_fbm(hmap, noise, 1, 1, 1, 1, 4, 1, 1)
    libtcodpy.heightmap_scale_fbm(hmap, noise, 1, 1, 1, 1, 4, 1, 1)
    libtcodpy.heightmap_dig_bezier(hmap, [0, 16, 16, 0], [0, 0, 16, 16], 1, 1,
                                   1, 1)

    # read data
    libtcodpy.heightmap_get_value(hmap, 0, 0)
    libtcodpy.heightmap_get_interpolated_value(hmap, 0, 0)

    libtcodpy.heightmap_get_slope(hmap, 0, 0)
    libtcodpy.heightmap_get_normal(hmap, 0, 0, 0)
    libtcodpy.heightmap_count_cells(hmap, 0, 0)
    libtcodpy.heightmap_has_land_on_border(hmap, 0)
    libtcodpy.heightmap_get_minmax(hmap)

    libtcodpy.noise_delete(noise)
    libtcodpy.heightmap_delete(hmap)
예제 #4
0
    def build_atmosphere(self, width, height):
        if self.planet_class in ['terran', 'ocean', 'jungle', 'tundra', 'artic'] :
            atmosphere = self.spherical_noise(
                    noise_dx=10.0,
                    noise_dy=10.0,
                    noise_dz=10.0,
                    noise_octaves=4.0,
                    noise_zoom=2.0,
                    noise_hurst=self.noise_hurst,
                    noise_lacunarity=self.noise_lacunarity,
                    width=width,
                    height=height )

            libtcod.heightmap_normalize(atmosphere, 0, 1.0)
            libtcod.heightmap_add(atmosphere,0.30)
            libtcod.heightmap_clamp(atmosphere,0.4,1.0)
            return atmosphere

        elif self.planet_class in ['arid', 'desert']:
            atmosphere = self.spherical_noise(
                    noise_dx=10.0,
                    noise_dy=10.0,
                    noise_dz=10.0,
                    noise_octaves=4.0,
                    noise_zoom=2.0,
                    noise_hurst=self.noise_hurst,
                    noise_lacunarity=self.noise_lacunarity,
                    width=width,
                    height=height )
            libtcod.heightmap_normalize(atmosphere, 0, 1.0)
            libtcod.heightmap_add(atmosphere,0.7)
            libtcod.heightmap_clamp(atmosphere,0.8,1.0)
            return atmosphere

        else:
            return None
예제 #5
0
    def build_heightmap(self, width, height):
        hm = self.spherical_noise(
                self.noise_dx,
                self.noise_dy,
                self.noise_dz,
                self.noise_octaves,
                self.noise_zoom,
                self.noise_hurst,
                self.noise_lacunarity,
                width,
                height)

        if self.planet_class == 'terran':
            libtcod.heightmap_normalize(hm, 0, 1.0)
            libtcod.heightmap_add(hm,-0.40)
            libtcod.heightmap_clamp(hm,0.0,1.0)
            raindrops = 1000 if width == self.detail_heightmap_width else 100
            libtcod.heightmap_rain_erosion(hm,1000,0.46,0.12,self.rnd)
            libtcod.heightmap_normalize(hm, 0, 255)

        elif self.planet_class == 'ocean':
            libtcod.heightmap_normalize(hm, 0, 1.0)
            libtcod.heightmap_add(hm,-0.40)
            libtcod.heightmap_clamp(hm,0.0,1.0)
            raindrops = 3000 if width == self.detail_heightmap_width else 1000
            libtcod.heightmap_rain_erosion(hm,3000,0.46,0.12,self.rnd)
            libtcod.heightmap_normalize(hm, 0, 200)

        elif self.planet_class == 'jungle':
            libtcod.heightmap_normalize(hm, 0, 1.0)
            libtcod.heightmap_add(hm,0.20)
            libtcod.heightmap_clamp(hm,0.0,1.0)
            raindrops = 3000 if width == self.detail_heightmap_width else 1000
            libtcod.heightmap_rain_erosion(hm,raindrops,0.25,0.05,self.rnd)
            libtcod.heightmap_normalize(hm, 0, 255)

        elif self.planet_class == 'lava':
            libtcod.heightmap_normalize(hm, 0, 1.0)
            raindrops = 1000 if width == self.detail_heightmap_width else 500
            libtcod.heightmap_rain_erosion(hm,raindrops,0.65,0.05,self.rnd)
            libtcod.heightmap_normalize(hm, 0, 255)

        elif self.planet_class == 'tundra':
            libtcod.heightmap_normalize(hm, 0, 1.0)
            # libtcod.heightmap_add(hm,0.20)
            # libtcod.heightmap_clamp(hm,0.0,1.0)
            raindrops = 2000 if width == self.detail_heightmap_width else 50
            libtcod.heightmap_rain_erosion(hm,raindrops,0.45,0.05,self.rnd)
            libtcod.heightmap_normalize(hm, 0, 255)

        elif self.planet_class == 'arid':
            libtcod.heightmap_normalize(hm, 0, 1.0)
            libtcod.heightmap_add(hm,0.20)
            libtcod.heightmap_clamp(hm,0.0,1.0)
            raindrops = 2000 if width == self.detail_heightmap_width else 50
            libtcod.heightmap_rain_erosion(hm,raindrops,0.45,0.05,self.rnd)
            libtcod.heightmap_normalize(hm, 0, 255)

        elif self.planet_class == 'desert':
            libtcod.heightmap_normalize(hm, 0, 1.0)
            libtcod.heightmap_add(hm,0.15)
            libtcod.heightmap_clamp(hm,0.0,1.0)
            raindrops = 1000 if width == self.detail_heightmap_width else 50
            libtcod.heightmap_rain_erosion(hm,raindrops,0.10,0.10,self.rnd)
            libtcod.heightmap_normalize(hm, 0, 255)

        elif self.planet_class == 'artic':
            libtcod.heightmap_normalize(hm, 0, 1.0)
            libtcod.heightmap_add(hm,0.40)
            libtcod.heightmap_clamp(hm,0.0,1.0)
            raindrops = 1000 if width == self.detail_heightmap_width else 100
            libtcod.heightmap_rain_erosion(hm,raindrops,0.45,0.05,self.rnd)
            libtcod.heightmap_normalize(hm, 0, 255)

        elif self.planet_class == 'barren':
            libtcod.heightmap_normalize(hm, 0, 1.0)
            # libtcod.heightmap_add(hm,0.40)
            # libtcod.heightmap_clamp(hm,0.0,1.0)
            raindrops = 2000 if width == self.detail_heightmap_width else 500
            libtcod.heightmap_rain_erosion(hm,raindrops,0.45,0.05,self.rnd)
            libtcod.heightmap_normalize(hm, 0, 255)

        elif self.planet_class == 'gas giant':
            libtcod.heightmap_normalize(hm, 0, 1.0)
            # libtcod.heightmap_add(hm,0.40)
            # libtcod.heightmap_clamp(hm,0.0,1.0)
            # # 3x3 kernel for smoothing operations
            smoothKernelSize = 9
            smoothKernelDx = [
                -1, 0, 1,
                -1, 0, 1,
                -1, 0, 1
            ]
            # smoothKernelDy = [
            #     -1, -1, -1,
            #     0,  0,  0,
            #     1,  1,  1
            # ]
            smoothKernelDy = [
                0,  0,  0,
                0,  0,  0,
                0,  0,  0,
            ]
            smoothKernelWeight = [
                1.0, 2.0,  1.0,
                4.0, 20.0, 4.0,
                1.0, 2.0,  1.0
            ]
            for i in range(20,-1,-1) :
                libtcod.heightmap_kernel_transform(hm,smoothKernelSize,smoothKernelDx,smoothKernelDy,smoothKernelWeight,0,1.0)

            libtcod.heightmap_normalize(hm, 0, 255)

        else:
            libtcod.heightmap_normalize(hm, 0, 255)

        return hm