# HG changeset patch # User Jeremy Thurgood # Date 1315747792 -7200 # Node ID 1b725035b8ef14d573a21c0b9d1e0a4c7a7080fe # Parent 56b69a869efb11bc8aae57de6b3edf6846aa9e35 Levels that are visible. diff -r 56b69a869efb -r 1b725035b8ef mamba/constants.py --- 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 diff -r 56b69a869efb -r 1b725035b8ef mamba/level.py --- 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)] diff -r 56b69a869efb -r 1b725035b8ef mamba/sprites.py --- /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) diff -r 56b69a869efb -r 1b725035b8ef mamba/widgets/level.py --- 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