changeset 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
files skaapsteker/level.py skaapsteker/physics.py skaapsteker/sprites/base.py skaapsteker/sprites/player.py
diffstat 4 files changed, 23 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- 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())
--- 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)
--- 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)
--- 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')