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
+