# HG changeset patch # User Jeremy Thurgood # Date 1304769540 -7200 # Node ID 65881746dc2031544788feb5c9e65a88686275f5 # Parent da331c80ec08f256e62c9928fce80d5ede148d78 More Sprite hierarchy work. diff -r da331c80ec08 -r 65881746dc20 skaapsteker/level.py --- a/skaapsteker/level.py Sat May 07 13:42:27 2011 +0200 +++ b/skaapsteker/level.py Sat May 07 13:59:00 2011 +0200 @@ -51,7 +51,7 @@ dirname = self.dirname image = data.load_image('tiles/' + dirname + '/' + image_name) def _tilefac(pos): - tile = Geography(pos, image) + tile = Geography(pos, image=image) tile.block = block tile.floor = floor tile._layer = layer @@ -187,4 +187,4 @@ surface.fill(Color('black')) text = Text("? Tile at\n(%i, %i)" % (x, y), (2, 2), size=14, color='white') text.draw(surface) - return Geography((x, y), surface.convert_alpha()) + return Geography((x, y), image=surface.convert_alpha()) diff -r da331c80ec08 -r 65881746dc20 skaapsteker/physics.py --- a/skaapsteker/physics.py Sat May 07 13:42:27 2011 +0200 +++ b/skaapsteker/physics.py Sat May 07 13:59:00 2011 +0200 @@ -34,8 +34,6 @@ # set to True to have .update() called once per tick (and have .collision_group set) wants_updates = False - debug_color = (240, 0, 0) - floor = False # We special case collisions with ground objects block = False @@ -54,12 +52,6 @@ def init_pos(self): self._float_pos = self.rect.center - def get_debug_color(self): - return self.debug_color - - def draw_debug(self, surface): - pygame.draw.rect(surface, self.get_debug_color(), self.collide_rect, 1) - def deltav(self, dv): velocity = cadd(self.velocity, dv) diff -r da331c80ec08 -r 65881746dc20 skaapsteker/sprites/base.py --- a/skaapsteker/sprites/base.py Sat May 07 13:42:27 2011 +0200 +++ b/skaapsteker/sprites/base.py Sat May 07 13:59:00 2011 +0200 @@ -35,13 +35,14 @@ image_dir = 'sprites/' image_file = None sprite_layer = None + debug_color = (240, 0, 0) def __init__(self, pos, **opts): Sprite.__init__(self) if self.sprite_layer is not None: # pygame's Sprite class clobbers self._layer in __init__(), so we need to thwart it. self._layer = self.sprite_layer - self.setup_image_data(pos) + self.setup_image_data(pos, **opts) self.setup(**opts) def setup(self): @@ -50,11 +51,17 @@ def get_tile_pos(self): return cdiv(self.rect.center, TILE_SIZE) - def setup_image_data(self, pos): + def setup_image_data(self, pos, **opts): self.image = data.load_image(self.image_dir + self.image_file) self.rect = self.image.get_rect(midbottom=tile_midbottom(pos)) self.collide_rect = self.rect.move(0, 0) + def get_debug_color(self): + return self.debug_color + + def draw_debug(self, surface): + pygame.draw.rect(surface, self.get_debug_color(), self.collide_rect, 1) + class AnimatedGameSprite(GameSprite): # first item is the starting animation @@ -70,7 +77,7 @@ facings = None - def setup_image_data(self, pos): + def setup_image_data(self, pos, **opts): self._animations = dict((k, []) for k, r in self.animation_regexes) self._frame = 0 self._last_time = 0 @@ -392,7 +399,7 @@ self.kill() -class Geography(Sprite): +class Geography(GameSprite): mobile = False gravitates = False collides_with = set([PC_LAYER, MONSTER_LAYER, NPC_LAYER, PROJECTILE_LAYER]) @@ -400,8 +407,10 @@ actionable = False bounce_factor = (0.0, 0.0) - def __init__(self, pos, image): - Sprite.__init__(self) + def setup(self, image): + pass + + def setup_image_data(self, pos, image, **opts): self.tile_pos = pos self.image = image self.collide_rect = self.image.get_bounding_rect(1) @@ -429,8 +438,8 @@ image_file = 'torii.png' - def setup_image_data(self, pos): - super(Doorway, self).setup_image_data(pos) + def setup_image_data(self, pos, **opts): + super(Doorway, self).setup_image_data(pos, **opts) self.image = pygame.transform.scale(self.image, self.image.get_rect().center) self.rect = self.image.get_rect(midbottom=self.rect.midbottom) self.collide_rect = self.rect @@ -460,7 +469,7 @@ class StartingDoorway(Doorway): actionable = False - def setup_image_data(self, pos): + def setup_image_data(self, pos, **opts): self.image = pygame.Surface((0, 0)) self.rect = self.image.get_rect(midbottom=tile_midbottom(pos)) self.collide_rect = self.rect.move(0, 0) @@ -488,8 +497,8 @@ self.image_file = 'monster.png' super(Skeleton, self).__init__(pos, **opts) - def setup_image_data(self, pos): - GameSprite.setup_image_data(self, pos) + def setup_image_data(self, pos, **opts): + super(Skeleton, self).setup_image_data(pos, **opts) # Pixel based rect, not tile: self.rect = self.image.get_rect(midbottom=self._pos) self.collide_rect = self.rect.move(0, 0) diff -r da331c80ec08 -r 65881746dc20 skaapsteker/sprites/player.py --- a/skaapsteker/sprites/player.py Sat May 07 13:42:27 2011 +0200 +++ b/skaapsteker/sprites/player.py Sat May 07 13:59:00 2011 +0200 @@ -63,7 +63,7 @@ self._last_collide = [] - def setup_image_data(self, pos): + def setup_image_data(self, pos, **opts): self.shape = 'fox' # Needed so load image does the right thing self._image_dict = {} self._shield_image = load_image('sprites/kitsune_shield.png')