changeset 202:a11325bc5ff0

Sprite refactoring stuff.
author Jeremy Thurgood <firxen@gmail.com>
date Wed, 06 Apr 2011 22:42:35 +0200
parents e27c45d38605
children 0a793c4ac341
files skaapsteker/sprites/base.py skaapsteker/sprites/enemies.py skaapsteker/sprites/player.py
diffstat 3 files changed, 33 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/skaapsteker/sprites/base.py	Wed Apr 06 22:32:58 2011 +0200
+++ b/skaapsteker/sprites/base.py	Wed Apr 06 22:42:35 2011 +0200
@@ -16,9 +16,23 @@
 NPC_LAYER = 2
 
 
-class Monster(Sprite):
+
+class GameSprite(Sprite):
+    image_dir = 'sprites/'
+    image_file = None
 
-    image_file = None
+    def __init__(self, pos, **opts):
+        Sprite.__init__(self)
+        self.image = data.load_image(self.image_dir + 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.setup(**opts)
+
+
+
+class Monster(GameSprite):
+
     collision_layer = MONSTER_LAYER
     collides_with = set([PC_LAYER])
 
@@ -27,21 +41,16 @@
     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(midbottom=(pos[0]*TILE_SIZE[0]+TILE_SIZE[0]/2, (pos[1]+1)*TILE_SIZE[1]))
-        self.collide_rect = self.rect.move(0, 0)
+        GameSprite.__init__(self, pos, **opts)
         self.floor_rect = Rect(self.collide_rect.topleft, (self.collide_rect.width, 2))
         self._layer = Layers.PLAYER
-        self.setup(**opts)
 
 
-    def setup(self):
-        pass
+    def collided_player(self):
+        print "%s collided with player" % self
 
 
-class NPC(Sprite):
+class NPC(GameSprite):
 
     image_file = None
     collision_layer = NPC_LAYER
@@ -49,43 +58,33 @@
 
     debug_color = (240, 240, 240)
 
-    block = True
+    block = False
 
     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)
+        GameSprite.__init__(self, pos, **opts)
         self._layer = Layers.PLAYER
-        self.setup(**opts)
+
 
     def setup(self, name, world, dsm):
         self.dsm = dialogue.DSM(name, world, dsm)
 
 
-class Projectile(Sprite):
+class Projectile(GameSprite):
     gravitates = False
 
 
-class Item(Sprite):
+class Item(GameSprite):
     mobile = False
     gravitates = False
 
-    image_file = None
     collision_layer = MONSTER_LAYER
     collides_with = set([PC_LAYER])
 
     portable = 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(midbottom=(pos[0]*TILE_SIZE[0]+TILE_SIZE[0]/2, (pos[1]+1)*TILE_SIZE[1]))
-        self.collide_rect = self.rect.move(0, 0)
+        GameSprite.__init__(self, pos, **opts)
         self._layer = Layers.PLAYER
-        self.setup(**opts)
 
 
     def setup(self, name, world):
@@ -98,6 +97,10 @@
         return (0, 0, 240)
 
 
+    def collided_player(self):
+        print "Player touched %s" % self
+
+
 class Geography(Sprite):
     mobile = False
     gravitates = False
--- a/skaapsteker/sprites/enemies.py	Wed Apr 06 22:32:58 2011 +0200
+++ b/skaapsteker/sprites/enemies.py	Wed Apr 06 22:42:35 2011 +0200
@@ -6,5 +6,3 @@
 
     def setup(self, direction):
         self.facing = direction
-
-
--- a/skaapsteker/sprites/player.py	Wed Apr 06 22:32:58 2011 +0200
+++ b/skaapsteker/sprites/player.py	Wed Apr 06 22:42:35 2011 +0200
@@ -134,11 +134,13 @@
             self._collisions_seen = 0
         else:
             self._collisions_seen += 1
+        if hasattr(other, 'collided_player'):
+            other.collided_player()
 
 
     def set_pos(self, pos):
         self.starting_tile_pos = pos
-        self.rect.midbottom = pos[0] * TILE_SIZE[0] + self.rect_offset[0], pos[1] * TILE_SIZE[1] + self.rect_offset[1]
+        self.rect.midbottom = pos[0] * TILE_SIZE[0] + self.rect_offset[0], (pos[1] + 1) * TILE_SIZE[1] + self.rect_offset[1]
         self.collide_rect.midbottom = pos[0] * TILE_SIZE[0], pos[1] * TILE_SIZE[1]
 
     def action_left(self):