Mercurial > mamba
diff mamba/sprites.py @ 182:0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Wed, 14 Sep 2011 16:27:11 +0200 |
parents | 061d711ba570 |
children | 045f6b4301eb |
line wrap: on
line diff
--- a/mamba/sprites.py Wed Sep 14 15:27:27 2011 +0200 +++ b/mamba/sprites.py Wed Sep 14 16:27:11 2011 +0200 @@ -5,6 +5,19 @@ from mamba import mutators +COLOURS = { + 'red': mutators.RED, + 'blue': mutators.BLUE, + 'yellow': mutators.YELLOW, + } + + +def colour_with_fittings(image_name, tileset, colour): + fittings_mutator = mutators.Overlay( + "tiles/%s/%s-fittings.png" % (tileset, image_name)) + return image_name, (COLOURS[colour], fittings_mutator) + + def tile_sizify(pos): ts_x, ts_y = TILE_SIZE p_x, p_y = pos @@ -72,14 +85,9 @@ } -class InvariantSpriteImageVariants(SpriteImageVariants): - def __call__(self, top, bottom, left, right): - return (self.base_image_name, ()) - - class BaseSprite(Sprite): tileset = 'common' - variants_class = InvariantSpriteImageVariants + variants_class = None variants = None name = None alive = True @@ -109,7 +117,8 @@ return self.variants(top, bottom, left, right) def use_variant(self, *args): - self.image = self.load_image(*self.get_variant(*args)) + if self.variants_class is not None: + self.image = self.load_image(*self.get_variant(*args)) class TileSprite(BaseSprite): @@ -118,11 +127,11 @@ self.tile_char = tile_char self.solid = solid - def get_solid(self, snake): + def get_solid(self, snake, segment): return self.solid - def interact(self, snake): - if self.get_solid(snake): + def interact(self, snake, segment): + if self.get_solid(snake, segment): snake.crash() @@ -140,12 +149,12 @@ def __init__(self, colour, **kw): self.colour = colour - image_name = 'door_%s' % (colour,) - kw.setdefault('image_name', image_name) super(DoorSprite, self).__init__(**kw) + self.image = self.load_image( + *colour_with_fittings("door", self.tileset, colour)) - def get_solid(self, snake_mutations): - return self.colour in self.snake_mutations + def get_solid(self, snake, segment): + return COLOURS[self.colour] != segment._colour_overlay class EntrySprite(SingleImageTileSprite): @@ -171,7 +180,7 @@ super(PuddleSprite, self).__init__(**kw) self.image = self.load_image(*self.get_variant(*variant)) - def get_solid(self, snake): + def get_solid(self, snake, segment): if snake.can_swim(): print "Splishy!" return False @@ -180,31 +189,45 @@ class EdibleTile(SingleImageTileSprite): - def eat(self): + def interact(self, snake, segment): + if not segment.is_head: + return + self.eat(snake) self.alive = False self.kill() + def eat(self, snake): + print "I'm delicious!" + class BigMouse(EdibleTile): image_name = "rat-big" - def interact(self, snake): + def eat(self, snake): print "Embiggen!" - self.eat() class SmallMouse(EdibleTile): image_name = "rat-small" - def interact(self, snake): + def eat(self, snake): print "Ensmallen!" - self.eat() class Frog(EdibleTile): image_name = "frog" - def interact(self, snake): + def eat(self, snake): print "Swimmery!" snake.mutate('amphibious') - self.eat() + + +class Painter(TileSprite): + def __init__(self, colour, **kw): + super(Painter, self).__init__(**kw) + self.colour = colour + self.image = self.load_image( + *colour_with_fittings("spray", self.tileset, colour)) + + def interact(self, snake, segment): + segment.set_colour(COLOURS[self.colour])