Mercurial > rinkhals
annotate gamelib/tiles.py @ 139:1d73de63bd71
Add basic game over screen
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 02 Sep 2009 22:48:39 +0000 |
parents | b7dc405a28be |
children | a4e3d26d16f0 |
rev | line source |
---|---|
24 | 1 """Extension to pgu's tilevid.""" |
2 | |
3 from pgu import tilevid, vid | |
4 import os | |
49
dd9d2a4dd494
Update tile loading to use imagecache and new data.py auto-converting of paths.
Simon Cross <hodgestar@gmail.com>
parents:
30
diff
changeset
|
5 import imagecache |
24 | 6 |
56
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
7 class TileMap(object): |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
8 """Helper class for describing all the game tiles.""" |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
9 |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
10 # number -> (name, image file name) |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
11 DEFAULT_TILES = { |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
12 0: ("woodland", "woodland.png"), |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
13 1: ("grassland", "grassland.png"), |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
14 2: ("fence", "fence.png"), |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
15 3: ("henhouse", "grassland.png"), |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
16 4: ("guardtower", "guardtower.png"), |
62 | 17 5: ("broken fence", "broken_fence.png"), |
133
b7dc405a28be
Add Hendominium image support.
Simon Cross <hodgestar@gmail.com>
parents:
62
diff
changeset
|
18 6: ("hendominium", "grassland.png"), |
56
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
19 } |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
20 |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
21 def __init__(self, tiles=None): |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
22 if tiles is None: |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
23 tiles = self.DEFAULT_TILES.copy() |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
24 self._tiles = tiles |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
25 self._reverse_map = dict((v[0], k) for k, v in self._tiles.iteritems()) |
24 | 26 |
56
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
27 def __getitem__(self, n): |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
28 """Get the string name of tile n.""" |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
29 return self._tiles[n][0] |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
30 |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
31 def tile_number(self, name): |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
32 """Return the tile number of the tile with the given name.""" |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
33 return self._reverse_map[name] |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
34 |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
35 def tiles_for_image(self, image_name): |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
36 """Return tile numbers associated with the given image name.""" |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
37 for n, (name, image) in self._tiles.iteritems(): |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
38 if image_name == image: |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
39 yield n |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
40 |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
41 TILE_MAP = TileMap() |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
42 REVERSE_TILE_MAP = TILE_MAP._reverse_map |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
43 |
24 | 44 |
45 class FarmVid(tilevid.Tilevid): | |
46 """Extension of pgu's TileVid class to handle the complications | |
47 of raising chickens. | |
48 """ | |
49 def __init__(self): | |
50 tilevid.Tilevid.__init__(self) | |
51 | |
52 def png_folder_load_tiles(self, path): | |
53 """Load tiles from a folder of PNG files.""" | |
54 for dirpath, dirnames, filenames in os.walk(path): | |
49
dd9d2a4dd494
Update tile loading to use imagecache and new data.py auto-converting of paths.
Simon Cross <hodgestar@gmail.com>
parents:
30
diff
changeset
|
55 abstract_dirpath = "/".join(dirpath.split(os.path.sep)) |
24 | 56 for filename in filenames: |
56
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
57 image_name = abstract_dirpath + "/" + filename |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
58 for tile_no in TILE_MAP.tiles_for_image(filename): |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
59 tile_name = TILE_MAP[tile_no] |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
60 self.tiles[tile_no] = FarmTile(tile_no, tile_name, image_name) |
24 | 61 |
30 | 62 def sun(self, sun_on): |
63 """Make it night.""" | |
64 for tile in self.tiles: | |
65 if hasattr(tile, "sun"): | |
66 tile.sun(sun_on) | |
67 for sprite in self.sprites: | |
68 if hasattr(sprite, "sun"): | |
69 sprite.sun(sun_on) | |
70 | |
24 | 71 class FarmTile(vid.Tile): |
30 | 72 |
56
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
73 def __init__(self, tile_no, tile_name, image_name): |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
74 self.tile_no = tile_no |
205789321a46
Replace TILE_MAP with richer (but backwards compatible) structure. Record tile number and tile name on tile object.
Simon Cross <hodgestar@gmail.com>
parents:
51
diff
changeset
|
75 self.tile_name = tile_name |
49
dd9d2a4dd494
Update tile loading to use imagecache and new data.py auto-converting of paths.
Simon Cross <hodgestar@gmail.com>
parents:
30
diff
changeset
|
76 self.day_image = imagecache.load_image(image_name) |
dd9d2a4dd494
Update tile loading to use imagecache and new data.py auto-converting of paths.
Simon Cross <hodgestar@gmail.com>
parents:
30
diff
changeset
|
77 self.night_image = imagecache.load_image(image_name, ("night",)) |
51
32fb395cf71c
Add missing call to vid.Tile.__init__ to FarmTile.
Simon Cross <hodgestar@gmail.com>
parents:
49
diff
changeset
|
78 vid.Tile.__init__(self, self.day_image) |
30 | 79 |
80 def sun(self, sun_on): | |
81 if sun_on: | |
82 self.image = self.day_image | |
83 else: | |
84 self.image = self.night_image |