comparison gamelib/animations.py @ 202:3074784c93f4

Animation support
author Neil Muller <drnlmuller@gmail.com>
date Fri, 04 Sep 2009 20:23:30 +0000
parents
children d3d5352f5853
comparison
equal deleted inserted replaced
201:fe1e9c18d4d7 202:3074784c93f4
1 """Animation Loops"""
2
3 from pgu.vid import Sprite
4
5 import imagecache
6 from misc import Position
7
8 class Animation(Sprite):
9 """Animation loop.
10
11 These are derived from sprites, since they behave similiary in most
12 respects, but, to ensure draw ordering, we don't add them to
13 the sprites list.
14
15 Ideally, animations should be quite short."""
16
17 def __init__(self, sequence, tile_pos):
18 # Create the first frame
19 self.iter = iter(sequence)
20 Sprite.__init__(self, self.iter.next(), (-1000, -1000))
21 if hasattr(tile_pos, 'to_tuple'):
22 self.pos = tile_pos
23 else:
24 self.pos = Position(tile_pos[0], tile_pos[1])
25 self.removed = False
26
27 def fix_pos(self, tv):
28 ppos = tv.tile_to_view(self.pos.to_tuple())
29 self.rect.x = ppos[0]
30 self.rect.y = ppos[1]
31
32 def animate(self):
33 """Step to the next frame.
34
35 Set removed flag when we hit the end of the sequence"""
36 try:
37 self.setimage(self.iter.next())
38 except StopIteration:
39 self.removed = True
40
41 class MuzzleFlash(Animation):
42
43 SEQUENCE_LEFT = [imagecache.load_image('sprites/muzzle_flash.png')]
44 SEQUENCE_RIGHT = [imagecache.load_image('sprites/muzzle_flash.png',
45 ("right_facing",))]
46
47 def __init__(self, chicken):
48 if chicken.facing == 'right':
49 Animation.__init__(self, self.SEQUENCE_RIGHT, chicken.pos)
50 else:
51 Animation.__init__(self, self.SEQUENCE_LEFT, chicken.pos)
52