Browse code
added terrain probabilities and fixed colors
edwlan authored on 26/07/2013 19:33:54
Showing 1 changed files
Showing 1 changed files
... | ... |
@@ -13,8 +13,9 @@ class TerrainGen(object): |
13 | 13 |
|
14 | 14 |
def generate(self): |
15 | 15 |
w,h = self.width, self.height |
16 |
- map = np.random.choice(self.terrain_registry.get_terrain_types(), (w,h)) |
|
17 |
- print self.terrain_registry.get_terrain_types() |
|
16 |
+ terrains, probs = self.terrain_registry.get_terrain_types() |
|
17 |
+ print terrains, probs |
|
18 |
+ map = np.random.choice(terrains, (w,h), p=probs) |
|
18 | 19 |
print map[map>4] |
19 | 20 |
chars = np.zeros((w,h)).astype('int') |
20 | 21 |
fgcolors = np.zeros((w,h,3)) |
... | ... |
@@ -22,7 +23,7 @@ class TerrainGen(object): |
22 | 23 |
|
23 | 24 |
for x, row in enumerate(map): |
24 | 25 |
for y, cell in enumerate(row): |
25 |
- char, bgcolor, fgcolor = self.terrain_registry.get_display(cell) |
|
26 |
+ char, fgcolor, bgcolor = self.terrain_registry.get_display(cell) |
|
26 | 27 |
chars[x,y] = char |
27 | 28 |
fgcolors[x,y] = fgcolor |
28 | 29 |
bgcolors[x,y] = bgcolor |
... | ... |
@@ -147,13 +148,14 @@ class TerrainInfo(object): |
147 | 148 |
char = ord(' ') |
148 | 149 |
fg = (255,255,255) |
149 | 150 |
bg = (0,0,0) |
151 |
+ prob = 1 |
|
150 | 152 |
|
151 | 153 |
@classmethod |
152 |
- def make_terrain(cls, name, char, passable, transparent,fg,bg): |
|
154 |
+ def make_terrain(cls, name, char, passable, transparent,fg,bg, prob=1): |
|
153 | 155 |
if hasattr(char, 'upper'): char = ord(char) |
154 | 156 |
passable = bool(passable) |
155 | 157 |
transparent = bool(transparent) |
156 |
- return type(name, (cls,), dict(char=char, passable=passable, transparent=transparent,fg=fg,bg=bg)) |
|
158 |
+ return type(name, (cls,), dict(char=char, passable=passable, transparent=transparent,fg=fg,bg=bg,prob=prob)) |
|
157 | 159 |
|
158 | 160 |
class TerrainRegistry(object): |
159 | 161 |
def __init__(self): |
... | ... |
@@ -174,7 +176,9 @@ class TerrainRegistry(object): |
174 | 176 |
return ter.char, ter.fg, ter.bg |
175 | 177 |
|
176 | 178 |
def get_terrain_types(self): |
177 |
- return list(self.registry) |
|
179 |
+ types, probabilities = zip(*[(x, self.registry[x].prob) for x in self.registry]) |
|
180 |
+ probs = [float(x) / sum(probabilities) for x in probabilities] |
|
181 |
+ return types, probs |
|
178 | 182 |
|
179 | 183 |
|
180 | 184 |
def register(self, ter): |
... | ... |
@@ -184,9 +188,10 @@ class TerrainRegistry(object): |
184 | 188 |
return ter |
185 | 189 |
|
186 | 190 |
def new_terrain(self, name, char, |
187 |
- passable=False, transparent=False, fg=(255,255,255), bg=(0,0,0) |
|
191 |
+ passable=False, transparent=False, fg=(255,255,255), bg=(0,0,0), prob=1 |
|
188 | 192 |
): |
189 |
- ter = TerrainInfo.make_terrain(name, char, passable, transparent, fg,bg) |
|
193 |
+ print 'prob: %f' % prob |
|
194 |
+ ter = TerrainInfo.make_terrain(name, char, passable, transparent, fg,bg, prob=prob) |
|
190 | 195 |
return self.register(ter) |
191 | 196 |
|
192 | 197 |
def load_from_file(self, fn, loader=yaml.safe_load): |