diff gamelib/animal.py @ 195:9d31cfc3afde

refactor of layers drawn on chicken, to allow for extended functionality
author Adrianna Pińska <adrianna.pinska@gmail.com>
date Fri, 04 Sep 2009 19:26:02 +0000
parents 6854e706dcdf
children edcb5edfa0ff
line wrap: on
line diff
--- a/gamelib/animal.py	Fri Sep 04 18:45:45 2009 +0000
+++ b/gamelib/animal.py	Fri Sep 04 19:26:02 2009 +0000
@@ -28,6 +28,7 @@
         else:
             self.pos = Position(tile_pos[0], tile_pos[1])
         self.equipment = []
+        self.accoutrements = []
         self.abode = None
         self.facing = 'left'
 
@@ -70,23 +71,22 @@
         self.redraw()
 
     def redraw(self):
-        self.image_left = self._image_left.copy()
-        self.image_right = self._image_right.copy()
-        self.equipment.sort(key=lambda x: x.DRAW_LAYER)
-        for item in self.equipment:
-            self.draw_equipment(item)
-        self._set_image_facing(self.facing)
+        layers = [(self._image_left.copy(), self._image_right.copy(), 0)]
+        if hasattr(self, 'EQUIPMENT_IMAGE_ATTRIBUTE'):
+            for item in self.accoutrements + self.equipment:
+                images = item.images(self.EQUIPMENT_IMAGE_ATTRIBUTE)
+                if images:
+                    layers.append(images)
 
-    def draw_equipment(self, item):
-        if not hasattr(self, 'EQUIPMENT_IMAGE_ATTRIBUTE'):
-            return
-        eq_image_attr = getattr(item, self.EQUIPMENT_IMAGE_ATTRIBUTE, 'None')
-        if not eq_image_attr:
-            return
-        eq_image_left = imagecache.load_image(eq_image_attr)
-        eq_image_right = imagecache.load_image(eq_image_attr, ("right_facing",))
-        self.image_left.blit(eq_image_left, (0, 0))
-        self.image_right.blit(eq_image_right, (0, 0))
+        layers.sort(key=lambda l: l[2])
+
+        self.image_left = layers[0][0]
+        self.image_right = layers[0][1]
+        for l in layers[1:]:
+            self.image_left.blit(l[0], (0,0))
+            self.image_right.blit(l[1], (0,0))
+
+        self._set_image_facing(self.facing)
 
     def weapons(self):
         return [e for e in self.equipment if equipment.is_weapon(e)]