git.fiddlerwoaroof.com
Browse code

added terrain probabilities and fixed colors

edwlan authored on 26/07/2013 19:33:54
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):