changeset 104:5b92ff941de3

Refactor sprites.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 11 Sep 2011 19:52:49 +0200
parents 45397addd80d
children 87acd3ddc972
files mamba/level.py mamba/sprites.py
diffstat 2 files changed, 30 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/level.py	Sun Sep 11 19:50:58 2011 +0200
+++ b/mamba/level.py	Sun Sep 11 19:52:49 2011 +0200
@@ -15,21 +15,25 @@
     pass
 
 
+def mktile(cls, **kw):
+    return (cls, kw)
+
+
 TILE_MAP = {
     '.': None,
-    'X': (TileSprite, 'wall'),
-    'R': (DoorSprite, 'red'),
-    'B': (DoorSprite, 'blue'),
-    '^': (EntrySprite, Snake.UP),
-    'v': (EntrySprite, Snake.DOWN),
-    '<': (EntrySprite, Snake.LEFT),
-    '>': (EntrySprite, Snake.RIGHT),
-    'E': (ExitSprite,),
-    '~': (PuddleSprite,),
+    'X': mktile(TileSprite, image_name='wall'),
+    'R': mktile(DoorSprite, colour='red'),
+    'B': mktile(DoorSprite, colour='blue'),
+    '^': mktile(EntrySprite, direction=Snake.UP),
+    'v': mktile(EntrySprite, direction=Snake.DOWN),
+    '<': mktile(EntrySprite, direction=Snake.LEFT),
+    '>': mktile(EntrySprite, direction=Snake.RIGHT),
+    'E': mktile(ExitSprite),
+    '~': mktile(PuddleSprite),
     }
 
 THING_MAP = {
-    'a': (BaseSprite, 'common', 'snake/snake-head-r'),
+    'a': mktile(BaseSprite, image_name='snake/snake-head-r'),
     }
 
 
@@ -40,10 +44,10 @@
 
     def load_tiles(self):
         self.tiles = {}
-        self.floor = TileSprite(self.name, 'floor').image
+        self.floor = TileSprite(tileset=self.name, image_name='floor').image
         for name, value in TILE_MAP.items():
             if value is not None:
-                value = (value[0], self.name) + value[1:]
+                value[1]['tileset'] = self.name
             self.tiles[name] = value
         self.tiles.update(THING_MAP)
 
@@ -54,7 +58,7 @@
             raise InvalidMapError("Unknown tile type: '%s'" % key)
         if not tilespec:
             return None
-        return tilespec[0](*tilespec[1:])
+        return tilespec[0](**tilespec[1])
 
     def get_tile(self, key, tile_pos, *groups):
         tile = self[key]
--- a/mamba/sprites.py	Sun Sep 11 19:50:58 2011 +0200
+++ b/mamba/sprites.py	Sun Sep 11 19:52:49 2011 +0200
@@ -30,33 +30,35 @@
 
 
 class TileSprite(BaseSprite):
-    def __init__(self, tileset, image_name):
-        super(TileSprite, self).__init__(tileset, image_name)
+    def __init__(self, tileset, **kw):
+        kw['tileset'] = tileset
+        super(TileSprite, self).__init__(**kw)
 
 
 class SingleImageTileSprite(TileSprite):
-    def __init__(self, tileset):
-        super(SingleImageTileSprite, self).__init__(tileset, self.image_name)
+    def __init__(self, **kw):
+        kw.setdefault('image_name', self.image_name)
+        super(SingleImageTileSprite, self).__init__(**kw)
 
 
 class DoorSprite(TileSprite):
-    def __init__(self, tileset_name, colour):
+    def __init__(self, colour, **kw):
         self.colour = colour
         image_name = 'door_%s' % (colour,)
-        super(DoorSprite, self).__init__(tileset_name, image_name)
+        kw.setdefault('image_name', image_name)
+        super(DoorSprite, self).__init__(**kw)
 
 
 class EntrySprite(SingleImageTileSprite):
-    image_name = 'puddle-r'
+    image_name = 'entrance-1'
 
-    def __init__(self, tileset_name, direction):
+    def __init__(self, direction, **kw):
         self.direction = direction
-        super(EntrySprite, self).__init__(tileset_name)
+        super(EntrySprite, self).__init__(**kw)
 
 
 class ExitSprite(SingleImageTileSprite):
-    # image_name = 'exit'
-    image_name = 'puddle-tl'
+    image_name = 'exit-1'
 
 
 class PuddleSprite(SingleImageTileSprite):