home · contact · privacy
Make terrain types configurable.
[plomrogue2] / plomrogue / game.py
index e1c92cf21cd477080ccff2b3cffba660a200b7dc..78598143628df6057efc41e4e216af0f211de4d6 100755 (executable)
@@ -12,7 +12,7 @@ class GameBase:
     def __init__(self):
         self.turn = 0
         self.things = []
-        self.map_geometry = MapGeometrySquare(YX(24, 40))
+        self.map_geometry = MapGeometrySquare(YX(32, 32))
         self.commands = {}
 
     def get_thing(self, id_):
@@ -115,6 +115,7 @@ import os
 class Game(GameBase):
 
     def __init__(self, save_file, *args, **kwargs):
+        from plomrogue.misc import Terrain
         super().__init__(*args, **kwargs)
         self.changed = True
         self.changed_tiles = []
@@ -137,15 +138,11 @@ class Game(GameBase):
         self.last_send_gamestate = datetime.datetime.now() -\
             self.send_gamestate_interval
         self.terrains = {
-            '.': 'floor',
-            'X': 'wall',
-            '=': 'window',
-            '#': 'bed',
-            'T': 'desk',
-            '8': 'cupboard',
-            '[': 'glass door',
-            'o': 'sink',
-            'O': 'toilet'
+            '.': Terrain('.', 'floor'),
+            'X': Terrain('X', 'wall', blocks_light=True, blocks_sound=True,
+                         blocks_movement=True),
+            '=': Terrain('=', 'glass', blocks_sound=True, blocks_movement=True),
+            'T': Terrain('T', 'table', blocks_movement=True),
         }
         if os.path.exists(self.io.save_file):
             if not os.path.isfile(self.io.save_file):
@@ -431,6 +428,28 @@ class Game(GameBase):
             self.player_char_i = 0
         return self.player_chars[self.player_char_i]
 
+    def get_foo_blockers(self, foo):
+        foo_blockers = ''
+        for t in self.terrains.values():
+            block_attr = getattr(t, 'blocks_' + foo)
+            if block_attr:
+                foo_blockers += t.character
+        return foo_blockers
+
+    def get_sound_blockers(self):
+        return self.get_foo_blockers('sound')
+
+    def get_light_blockers(self):
+        return self.get_foo_blockers('light')
+
+    def get_movement_blockers(self):
+        return self.get_foo_blockers('movement')
+
+    def get_flatland(self):
+        for t in self.terrains.values:
+            if not t.blocks_movement:
+                return t.character
+
     def save(self):
 
         def write(f, msg):
@@ -440,6 +459,12 @@ class Game(GameBase):
             write(f, 'TURN %s' % self.turn)
             map_geometry_shape = self.get_map_geometry_shape()
             write(f, 'MAP %s %s' % (map_geometry_shape, self.map_geometry.size,))
+            for terrain in self.terrains.values():
+                write(f, 'TERRAIN %s %s %s %s %s' % (quote(terrain.character),
+                                                     quote(terrain.description),
+                                                     int(terrain.blocks_light),
+                                                     int(terrain.blocks_sound),
+                                                     int(terrain.blocks_movement)))
             for big_yx in [yx for yx in self.maps if self.maps[yx].modified]:
                 for y, line in self.maps[big_yx].lines():
                     write(f, 'MAP_LINE %s %5s %s' % (big_yx, y, quote(line)))