Mercurial > mamba
view mamba/sprites.py @ 130:9bef49d6db86
Ugly yucky half-done tile orientation magic.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sun, 11 Sep 2011 22:19:59 +0200 |
parents | f670ef33ae2e |
children | e0b4bfc51336 |
line wrap: on
line source
from pygame.sprite import Sprite from mamba.data import load_image from mamba.constants import TILE_SIZE from mamba import mutators 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' variant_suffix_0 = '' variant_suffix_1 = '' variant_suffix_2o = '' variant_suffix_2a = '' variant_suffix_3 = '' variant_suffix_4 = '' def __init__(self, tile_char=None, tileset=None, image_name=None, mutators=()): super(BaseSprite, self).__init__() self.tile_char = tile_char if tileset is not None: self.tileset = tileset if image_name is not None: self.image = self.load_image(image_name, mutators=mutators) def load_image(self, image_name, mutators=()): return load_image('tiles/%s/%s.png' % (self.tileset, image_name), mutators) def set_tile_pos(self, tile_pos): self.tile_pos = tile_pos self.rect = self.image.get_rect().move(tile_sizify(tile_pos)) def get_tile_variant_modifiers(self, image_name, top, bottom, left, right): variant_str = ''.join('X' if d else '.' for d in [top, bottom, left, right]) variant_suffix, mutator = { '....': (self.variant_suffix_0, mutators.NULL), 'X...': (self.variant_suffix_1, mutators.UP), '.X..': (self.variant_suffix_1, mutators.DOWN), '..X.': (self.variant_suffix_1, mutators.LEFT), '...X': (self.variant_suffix_1, mutators.RIGHT), 'XX..': (self.variant_suffix_2o, mutators.VERT), '..XX': (self.variant_suffix_2o, mutators.HORIZ), 'X.X.': (self.variant_suffix_2a, mutators.TL), 'X..X': (self.variant_suffix_2a, mutators.TR), '.XX.': (self.variant_suffix_2a, mutators.BL), '.X.X': (self.variant_suffix_2a, mutators.BR), '.XXX': (self.variant_suffix_3, mutators.UP), 'X.XX': (self.variant_suffix_3, mutators.DOWN), 'XX.X': (self.variant_suffix_3, mutators.LEFT), 'XXX.': (self.variant_suffix_3, mutators.RIGHT), 'XXXX': (self.variant_suffix_4, mutators.NULL), }[variant_str] return (image_name + variant_suffix, (mutator,)) class TileSprite(BaseSprite): def __init__(self, tileset, **kw): kw['tileset'] = tileset super(TileSprite, self).__init__(**kw) class SingleImageTileSprite(TileSprite): image_name = None # subclasses will override this def __init__(self, **kw): kw.setdefault('image_name', self.image_name) super(SingleImageTileSprite, self).__init__(**kw) class DoorSprite(TileSprite): def __init__(self, colour, **kw): self.colour = colour image_name = 'door_%s' % (colour,) kw.setdefault('image_name', image_name) super(DoorSprite, self).__init__(**kw) class EntrySprite(SingleImageTileSprite): image_name = 'entrance-1' def __init__(self, direction, **kw): self.direction = direction super(EntrySprite, self).__init__(**kw) class ExitSprite(SingleImageTileSprite): image_name = 'exit-1' class PuddleSprite(SingleImageTileSprite): image_name = 'puddle' variant_suffix_0 = '-island' variant_suffix_1 = '-r' variant_suffix_2a = '-tl' def __init__(self, variant=(0, 0, 0, 0), **kw): super(PuddleSprite, self).__init__(**kw) image_name, mutators = self.get_tile_variant_modifiers(self.image_name, *variant) self.image = self.load_image(image_name, mutators)