changeset 50:1b725035b8ef

Levels that are visible.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 11 Sep 2011 15:29:52 +0200
parents 56b69a869efb
children e5f36843f7cd
files mamba/constants.py mamba/level.py mamba/sprites.py mamba/widgets/level.py
diffstat 4 files changed, 56 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/constants.py	Sun Sep 11 15:24:37 2011 +0200
+++ b/mamba/constants.py	Sun Sep 11 15:29:52 2011 +0200
@@ -1,6 +1,7 @@
 # Useful constants, as usual
 
 SCREEN = (800, 600)
+TILE_SIZE = (20, 20)
 
 # Sound constants
 FREQ = 44100   # same as audio CD
--- a/mamba/level.py	Sun Sep 11 15:24:37 2011 +0200
+++ b/mamba/level.py	Sun Sep 11 15:29:52 2011 +0200
@@ -2,30 +2,10 @@
 Level for our shiny game.
 """
 
-from pygame.sprite import Sprite
-from pygame.surface import Surface
-
-from mamba.data import load_file, load_image
-
-TILE_SIZE = (20, 20)
-
+from pygame.sprite import RenderUpdates
 
-def tile_sizify(pos):
-    ts_x, ts_y = TILE_SIZE
-    p_x, p_y = pos
-    return (ts_x * p_x, ts_y * p_y)
-
-
-class TileSprite(Sprite):
-    def __init__(self, image_path, *groups):
-        super(TileSprite, self).__init__(*groups)
-        if image_path is None:
-            self.image = Surface(TILE_SIZE)
-        else:
-            self.image = load_image(image_path)
-
-    def set_tile_pos(self, tile_pos):
-        self.rect = self.image.get_rect().move(tile_sizify(tile_pos))
+from mamba.data import load_file
+from mamba.sprites import tile_sizify, TileSprite, ThingSprite
 
 
 TILE_MAP = {
@@ -34,7 +14,7 @@
     }
 
 THING_MAP = {
-    'a': (TileSprite, 'tiles/dev/randomtile.png'),
+    'a': (ThingSprite, 'snake-head-r'),
     }
 
 
@@ -45,20 +25,23 @@
 
     def load_tiles(self):
         self.tiles = {}
-        for k, v in TILE_MAP.items():
-            if v:
-                v = 'tiles/%s/%s.png' % (self.name, v)
-            self.tiles[k] = (TileSprite, (v,))
-        for k, v in THING_MAP.items():
-            self.tiles[k] = (v[0], v[1:])
+        for name, value in TILE_MAP.items():
+            if value is not None:
+                value = (TileSprite, self.name, value)
+            self.tiles[name] = value
+        self.tiles.update(THING_MAP)
 
     def __getitem__(self, key):
-        cls, args = self.tiles[key]
-        return cls(*args)
+        tilespec = self.tiles[key]
+        if not tilespec:
+            return None
+        return tilespec[0](*tilespec[1:])
 
-    def get_tile(self, key, tile_pos):
+    def get_tile(self, key, tile_pos, *groups):
         tile = self[key]
-        tile.set_tile_pos(tile_pos)
+        if tile:
+            tile.add(*groups)
+            tile.set_tile_pos(tile_pos)
         return tile
 
 
@@ -75,7 +58,8 @@
         tileset_name = level_data.readline().strip()
         self.tileset = Tileset(tileset_name)
         tiles_ascii = level_data.readlines()
-        self.tiles = [[self.tileset.get_tile(tile, (x, y))
+        self.tilegroup = RenderUpdates()
+        self.tiles = [[self.tileset.get_tile(tile, (x, y), self.tilegroup)
                        for x, tile in enumerate(row.strip())]
                       for y, row in enumerate(tiles_ascii)]
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mamba/sprites.py	Sun Sep 11 15:29:52 2011 +0200
@@ -0,0 +1,34 @@
+from pygame.sprite import Sprite
+
+from mamba.data import load_image
+from mamba.constants import TILE_SIZE
+
+
+def tile_sizify(pos):
+    ts_x, ts_y = TILE_SIZE
+    p_x, p_y = pos
+    return (ts_x * p_x, ts_y * p_y)
+
+
+class BaseSprite(Sprite):
+    tileset = 'common'
+
+    def load_image(self, image_name, tileset=None):
+        if tileset is None:
+            tileset = self.tileset
+        self.image = load_image('tiles/%s/%s.png' % (tileset, image_name))
+
+    def set_tile_pos(self, tile_pos):
+        self.rect = self.image.get_rect().move(tile_sizify(tile_pos))
+
+
+class TileSprite(BaseSprite):
+    def __init__(self, tileset_name, image_name, *groups):
+        super(TileSprite, self).__init__(*groups)
+        self.load_image(image_name, tileset_name)
+
+
+class ThingSprite(BaseSprite):
+    def __init__(self, image_name, *groups):
+        super(ThingSprite, self).__init__(*groups)
+        self.load_image(image_name)
--- a/mamba/widgets/level.py	Sun Sep 11 15:24:37 2011 +0200
+++ b/mamba/widgets/level.py	Sun Sep 11 15:29:52 2011 +0200
@@ -5,12 +5,12 @@
 
 class LevelWidget(Widget):
     def __init__(self, level, offset=(0, 0)):
+        self.level = level
         level_rect = Rect(offset, level.get_size())
         super(LevelWidget, self).__init__(level_rect)
 
     def draw(self, surface):
-        # TODO: Implement
-        pass
+        self.level.tilegroup.draw(surface)
 
     def event(self, event):
         # TODO: Implement