changeset 146:423050ec188b

Equipment images.
author Jeremy Thurgood <firxen@gmail.com>
date Thu, 03 Sep 2009 18:46:38 +0000
parents 490ede177f50
children 1cb47e6b8f61
files gamelib/animal.py gamelib/equipment.py
diffstat 2 files changed, 29 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/animal.py	Thu Sep 03 15:14:13 2009 +0000
+++ b/gamelib/animal.py	Thu Sep 03 18:46:38 2009 +0000
@@ -19,11 +19,14 @@
     def __init__(self, image_left, image_right, tile_pos):
         # Create the animal somewhere far off screen
         Sprite.__init__(self, image_left, (-1000, -1000))
-        self.image_left = image_left
-        self.image_right = image_right
+        self._image_left = image_left
+        self.image_left = image_left.copy()
+        self._image_right = image_right
+        self.image_right = image_right.copy()
         self.pos = Position(tile_pos[0], tile_pos[1])
         self.equipment = []
         self.abode = None
+        self.facing = 'left'
 
     def loop(self, tv, _sprite):
         ppos = tv.tile_to_view(self.pos.to_tuple())
@@ -44,12 +47,29 @@
     def _fix_face(self, final_pos):
         """Set the face correctly"""
         if final_pos.left_of(self.pos):
+            self._set_image_facing('left')
+        elif final_pos.right_of(self.pos):
+            self._set_image_facing('right')
+
+    def _set_image_facing(self, facing):
+        self.facing = facing
+        if self.facing == 'left':
             self.setimage(self.image_left)
-        elif final_pos.right_of(self.pos):
+        elif self.facing == 'right':
             self.setimage(self.image_right)
 
     def equip(self, item):
         self.equipment.append(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))
+        self._set_image_facing(self.facing)
 
     def weapons(self):
         return [e for e in self.equipment if equipment.is_weapon(e)]
@@ -63,6 +83,8 @@
 class Chicken(Animal):
     """A chicken"""
 
+    EQUIPMENT_IMAGE_ATTRIBUTE = 'CHICKEN_IMAGE_FILE'
+
     def __init__(self, pos):
         image_left = imagecache.load_image('sprites/chkn.png')
         image_right = imagecache.load_image('sprites/chkn.png',
--- a/gamelib/equipment.py	Thu Sep 03 15:14:13 2009 +0000
+++ b/gamelib/equipment.py	Thu Sep 03 18:46:38 2009 +0000
@@ -50,6 +50,8 @@
     RANGE_MODIFIER = 15
     HIT_SOUND = "fire-rifle.ogg"
 
+    CHICKEN_IMAGE_FILE = 'sprites/equip_rifle.png'
+
 class Knife(Weapon):
     NAME = "knife"
     BUY_PRICE = 20
@@ -59,6 +61,8 @@
     BASE_HIT = 70
     RANGE_MODIFIER = 0
 
+    CHICKEN_IMAGE_FILE = 'sprites/equip_knife.png'
+
 def is_equipment(obj):
     """Return true if obj is a build class."""
     return getattr(obj, "IS_EQUIPMENT", False) and hasattr(obj, "NAME")