Mercurial > skaapsteker
view skaapsteker/sprites/base.py @ 163:98ff05be85e0
Better Item placement.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Wed, 06 Apr 2011 00:02:41 +0200 |
parents | 663bdac80299 |
children | 8774c170a232 |
line wrap: on
line source
"""Basic sprite classes.""" from pygame import Rect from skaapsteker.physics import Sprite from skaapsteker.constants import Layers from skaapsteker import data TILE_SIZE = (64, 64) # Collision Layers (values are ids not numbers) PC_LAYER = 0 MONSTER_LAYER = 1 class Monster(Sprite): image_file = None collision_layer = MONSTER_LAYER collides_with = set([PC_LAYER]) debug_color = (240, 120, 120) block = True def __init__(self, pos, **opts): Sprite.__init__(self) self.image = data.load_image('sprites/' + self.image_file) self.starting_tile_pos = pos self.rect = self.image.get_rect(topleft=(pos[0]*TILE_SIZE[0], pos[1]*TILE_SIZE[1])) self.collide_rect = self.image.get_rect(topleft=(pos[0]*TILE_SIZE[0], pos[1]*TILE_SIZE[1])) self._layer = Layers.PLAYER self.setup(**opts) def setup(self): pass class NPC(Sprite): pass class Projectile(Sprite): gravitates = False class Item(Sprite): mobile = False gravitates = False image_file = None collision_layer = MONSTER_LAYER collides_with = set([PC_LAYER]) debug_color = (240, 0, 240) def __init__(self, pos, **opts): Sprite.__init__(self) self.image = data.load_image('sprites/' + self.image_file) self.starting_tile_pos = pos self.rect = self.image.get_rect(midbottom=(pos[0]*TILE_SIZE[0]+TILE_SIZE[0]/2, (pos[1]+1)*TILE_SIZE[1])) self.collide_rect = self.rect.move(0, 0) self._layer = Layers.PLAYER self.setup(**opts) def setup(self): pass class Geography(Sprite): mobile = False gravitates = False collides_with = set([PC_LAYER, MONSTER_LAYER]) is_ground = True bounce_factor = (0.0, 0.0) def __init__(self, pos, image): Sprite.__init__(self) self.tile_pos = pos self.image = image self.collide_rect = self.image.get_bounding_rect(1) self.rect = self.image.get_rect() self.rect_offset = self.collide_rect.left - self.rect.left, self.rect.top - self.rect.top self.collide_rect.topleft = pos[0] * TILE_SIZE[0] + self.rect_offset[0], pos[1] * TILE_SIZE[1] + self.rect_offset[1] self.rect.topleft = pos[0] * TILE_SIZE[0], pos[1] * TILE_SIZE[1] def get_debug_color(self): if self.floor or self.block: return (240, 240, 0) return (0, 240, 0) def find_sprite(descr, mod_name=None): """Create a sprite object from a dictionary describing it.""" descr = descr.copy() cls_name = descr.pop("type") if mod_name is None: mod_name, cls_name = cls_name.rsplit(".", 1) mod_name = ".".join(["skaapsteker.sprites", mod_name]) mod = __import__(mod_name, fromlist=[cls_name]) cls = getattr(mod, cls_name) return cls(**descr)