Mercurial > rrr
changeset 9:5141cbd5f776 default tip
Read terrain data from a file
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Tue, 02 Apr 2013 14:53:26 +0200 |
| parents | cf0dd3ae6b21 |
| children | |
| files | rrr/level.py rrr/resources.py rrr/terrain.conf |
| diffstat | 3 files changed, 114 insertions(+), 95 deletions(-) [+] |
line wrap: on
line diff
--- a/rrr/level.py Tue Apr 02 13:20:38 2013 +0200 +++ b/rrr/level.py Tue Apr 02 14:53:26 2013 +0200 @@ -13,7 +13,16 @@ self.height = height self.explored = set() self.map = self.fractal_fill([ - 1, 2, 2, 2, 4, 5, 6, 7, 8, 9, 10, 10 + 'ground', + 'grass', + 'grass', + 'grass', + 'weeds', + 'bush', + 'large bush', + 'tree', + 'large tree', + 'jungle', ]) def fractal_fill(self, gradient): @@ -46,10 +55,10 @@ def get_terrain(self, (x, y)): if not (0 <= x < self.width and 0 <= y < self.height): - t = TERRAIN[0] + t = TERRAIN['invalid'] else: try: t = TERRAIN[self.map[y][x]] except IndexError: - t = TERRAIN[0] + t = TERRAIN['invalid'] return t
--- a/rrr/resources.py Tue Apr 02 13:20:38 2013 +0200 +++ b/rrr/resources.py Tue Apr 02 14:53:26 2013 +0200 @@ -1,97 +1,31 @@ # -*- coding: utf-8 -*- +from ConfigParser import RawConfigParser as ConfigParser +from StringIO import StringIO +import pkgutil + + +TERRAIN = {} + + +def load_file(filename): + data = pkgutil.get_data('rrr', filename) + return StringIO(data) + -TERRAIN = [ - { - 'name': 'invalid', - 'symbol': '?', - 'color': 'pink', - 'opaque': True, - 'opacity': 1.0, - 'block': True, - }, - { - 'name': 'floor', - 'symbol': '.', - 'color': 'black', - 'opaque': False, - 'opacity': 0.0, - 'block': False, - }, - { - 'name': 'ground', - 'symbol': '.', - 'color': 'brown', - 'opaque': False, - 'opacity': 0.0, - 'block': False, - }, - { - 'name': 'rocks', - 'symbol': ':', - 'color': 'gray', - 'opaque': False, - 'opacity': 0.25, - 'block': False, - }, - { - 'name': 'grass', - 'symbol': ',', - 'color': 'green', - 'opacity': 0.0, - 'block': False, - }, - { - 'name': 'weeds', - 'symbol': ';', - 'color': 'green', - 'opacity': 0.125, - 'block': False, - }, - { - 'name': 'bush', - 'symbol': '+', - 'color': 'green', - 'opacity': 0.25, - 'block': False, - }, - { - 'name': 'large bush', - 'symbol': '+', - 'color': 'lime', - 'opacity': 0.33, - 'block': False, - }, - { - 'name': 'tree', - 'symbol': '*', - 'color': 'green', - 'opacity': 0.5, - 'block': True, - }, - { - 'name': 'large tree', - 'symbol': '*', - 'color': 'lime', - 'opacity': 0.75, - 'block': True, - }, - { - 'name': 'jungle', - 'symbol': '#', - 'color': 'lime', - 'opaque': True, - 'opacity': 1.0, - 'block': True, - }, - { - 'name': 'wall', - 'symbol': '#', - 'color': 'gray', - 'opaque': True, - 'opacity': 1.0, - 'block': True, - }, +def load_terrain(filename): + parser = ConfigParser() + parser.readfp(load_file(filename)) + terrain = {} + for section in parser.sections(): + t = {} + t['name'] = section + t['opacity'] = parser.getfloat(section, 'opacity') + t['block'] = parser.getboolean(section, 'block') + t['symbol'] = parser.get(section, 'symbol')[:1] + t['color'] = parser.get(section, 'color') + terrain[section] = t + return terrain -] +TERRAIN = load_terrain('terrain.conf')
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rrr/terrain.conf Tue Apr 02 14:53:26 2013 +0200 @@ -0,0 +1,76 @@ +[invalid] +symbol: ? +color: pink +opacity: 1.0 +block: true + +[floor] +symbol: . +color: black +opacity: 0.0 +block: False + +[ground] +symbol: . +color: brown +opaque: False +opacity: 0.0 +block: False + + +[rocks] +symbol: : +color: gray +opaque: False +opacity: 0.25 +block: False + +[grass] +symbol: , +color: green +opacity: 0.0 +block: False + + +[weeds] +symbol: : +color: green +opacity: 0.125 +block: False + +[bush] +symbol: + +color: green +opacity: 0.25 +block: False + +[large bush] +symbol: + +color: lime +opacity: 0.33 +block: False + +[tree] +symbol: * +color: green +opacity: 0.5 +block: True + +[large tree] +symbol: * +color: lime +opacity: 0.75 +block: True + +[jungle] +symbol: # +color: lime +opacity: 1.0 +block: True + +[wall] +symbol: # +color: gray +opacity: 1.0 +block: True +
