78 lines
2.4 KiB
Python
78 lines
2.4 KiB
Python
import enum
|
|
import random
|
|
|
|
|
|
@enum.unique
|
|
class SubstrateTypes(enum.Enum):
|
|
grass = 0
|
|
sand = 1
|
|
rock = 2
|
|
water = 3
|
|
ice = 4
|
|
space = 5
|
|
|
|
|
|
@enum.unique
|
|
class Features(enum.Enum):
|
|
# TODO: Maybe separate out into individual types of features and their densities.
|
|
empty = 0
|
|
brush = 1
|
|
forest = 2
|
|
jungle = 3
|
|
road = 4
|
|
ruins = 5
|
|
town = 6
|
|
city = 7
|
|
|
|
|
|
class Terrain(object):
|
|
def __init__(self, substrate=SubstrateTypes.grass, features=Features.empty, elevation=0):
|
|
self.substrate = substrate
|
|
self.elevation = elevation
|
|
self.features = features
|
|
|
|
@staticmethod
|
|
def choose_random_terrain():
|
|
random_terrain_seed = random.randint(0, 100)
|
|
|
|
# TODO: Add in ability to do weighted randomness of terrain based on map, overall terrain type.
|
|
|
|
substrate = SubstrateTypes.grass
|
|
# if 0 < random_terrain_seed < 20:
|
|
# substrate = SubstrateTypes.space
|
|
# elif 20 < random_terrain_seed < 25:
|
|
# substrate = SubstrateTypes.rock
|
|
# elif 50 < random_terrain_seed < 60:
|
|
# substrate = SubstrateTypes.water
|
|
# elif 70 < random_terrain_seed < 90:
|
|
# substrate = SubstrateTypes.sand
|
|
# elif 90 < random_terrain_seed < 100:
|
|
# substrate = SubstrateTypes.ice
|
|
if 0 < random_terrain_seed < 20:
|
|
substrate = SubstrateTypes.sand
|
|
elif 20 < random_terrain_seed < 25:
|
|
substrate = SubstrateTypes.rock
|
|
elif 50 < random_terrain_seed < 60:
|
|
substrate = SubstrateTypes.water
|
|
elif 70 < random_terrain_seed < 90:
|
|
substrate = SubstrateTypes.sand
|
|
|
|
# TODO Add in features selection, add in heighted randomness
|
|
features = Features.empty
|
|
if 0 < random_terrain_seed < 20:
|
|
features = Features.forest
|
|
elif 20 < random_terrain_seed < 25:
|
|
features = Features.brush
|
|
elif 50 < random_terrain_seed < 60:
|
|
features = Features.jungle
|
|
elif 70 < random_terrain_seed < 90:
|
|
features = Features.ruins
|
|
elif 90 < random_terrain_seed < 100:
|
|
features = Features.city
|
|
|
|
elevation = random.randint(-5, 5)
|
|
return Terrain(substrate=substrate, features=features, elevation=elevation)
|
|
|
|
def description(self):
|
|
return ", ".join([self.substrate.name, self.features.name, "height: {}".format(self.elevation)])
|