diff skaapsteker/sprites/base.py @ 623:65881746dc20

More Sprite hierarchy work.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 07 May 2011 13:59:00 +0200
parents da331c80ec08
children 83569a6b3ad8
line wrap: on
line diff
--- 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)