Mercurial > rinkhals
changeset 56:205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Mon, 31 Aug 2009 18:33:33 +0000 |
parents | 3a409e058608 |
children | 08665fa60345 |
files | gamelib/tiles.py |
diffstat | 1 files changed, 41 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/gamelib/tiles.py Mon Aug 31 18:30:02 2009 +0000 +++ b/gamelib/tiles.py Mon Aug 31 18:33:33 2009 +0000 @@ -4,15 +4,41 @@ import os import imagecache -TILE_MAP = { - 0: "woodland", - 1: "grassland", - 2: "fence", - 3: "henhouse", - 4: "chicken", -} +class TileMap(object): + """Helper class for describing all the game tiles.""" + + # number -> (name, image file name) + DEFAULT_TILES = { + 0: ("woodland", "woodland.png"), + 1: ("grassland", "grassland.png"), + 2: ("fence", "fence.png"), + 3: ("henhouse", "grassland.png"), + 4: ("guardtower", "guardtower.png"), + } + + def __init__(self, tiles=None): + if tiles is None: + tiles = self.DEFAULT_TILES.copy() + self._tiles = tiles + self._reverse_map = dict((v[0], k) for k, v in self._tiles.iteritems()) -REVERSE_TILE_MAP = dict((v, k) for k, v in TILE_MAP.iteritems()) + def __getitem__(self, n): + """Get the string name of tile n.""" + return self._tiles[n][0] + + def tile_number(self, name): + """Return the tile number of the tile with the given name.""" + return self._reverse_map[name] + + def tiles_for_image(self, image_name): + """Return tile numbers associated with the given image name.""" + for n, (name, image) in self._tiles.iteritems(): + if image_name == image: + yield n + +TILE_MAP = TileMap() +REVERSE_TILE_MAP = TILE_MAP._reverse_map + class FarmVid(tilevid.Tilevid): """Extension of pgu's TileVid class to handle the complications @@ -26,12 +52,10 @@ for dirpath, dirnames, filenames in os.walk(path): abstract_dirpath = "/".join(dirpath.split(os.path.sep)) for filename in filenames: - basename, ext = os.path.splitext(filename) - if ext != ".png": - continue - if basename in REVERSE_TILE_MAP: - n = REVERSE_TILE_MAP[basename] - self.tiles[n] = FarmTile(abstract_dirpath + "/" + filename) + image_name = abstract_dirpath + "/" + filename + for tile_no in TILE_MAP.tiles_for_image(filename): + tile_name = TILE_MAP[tile_no] + self.tiles[tile_no] = FarmTile(tile_no, tile_name, image_name) def sun(self, sun_on): """Make it night.""" @@ -44,7 +68,9 @@ class FarmTile(vid.Tile): - def __init__(self, image_name): + def __init__(self, tile_no, tile_name, image_name): + self.tile_no = tile_no + self.tile_name = tile_name self.day_image = imagecache.load_image(image_name) self.night_image = imagecache.load_image(image_name, ("night",)) vid.Tile.__init__(self, self.day_image)