changeset 15:55ee23d91598

pick items
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Thu, 14 Mar 2013 00:05:36 +0100
parents 7a3935873931
children 14a80ae3b325
files fhrl/level.py fhrl/mobs.py fhrl/stuff.png
diffstat 3 files changed, 26 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/fhrl/level.py	Wed Mar 13 23:36:51 2013 +0100
+++ b/fhrl/level.py	Thu Mar 14 00:05:36 2013 +0100
@@ -58,7 +58,7 @@
             if f == 1
         ]
         random.shuffle(self.free)
-        self.hero = Hero(0, self.free.pop())
+        self.hero = Hero(self.free.pop())
         self.monsters = [
             Mob(random.randrange(1, 4), self.free.pop())
             for i in xrange(20)
@@ -100,6 +100,11 @@
             if (x, y) == (s.x, s.y):
                 return s
 
+    def find_item(self, (x, y)):
+        for i in self.items:
+            if (x, y) == (i.x, i.y):
+                return i
+
     def is_wall(self, (x, y)):
         if x < 0 or x > self.width:
             return True
--- a/fhrl/mobs.py	Wed Mar 13 23:36:51 2013 +0100
+++ b/fhrl/mobs.py	Thu Mar 14 00:05:36 2013 +0100
@@ -55,6 +55,12 @@
         self.x, self.y = x, y
         self.kind = kind
 
+    def _pick_anim(self, display):
+        for i in xrange(8):
+            self.rect.move_ip((0, -i))
+            yield
+        self.kill()
+
 
 class Stuff(Sprite):
     def __init__(self, kind, (x, y)):
@@ -85,14 +91,14 @@
     def walk(self, d, level):
         x = self.x + DX[d]
         y = self.y + DY[d]
+        m = level.find_mob((x, y))
+        if m:
+            raise ActBumpMob((x, y), m)
         if level.is_blocked((x, y)):
             s = level.find_stuff((x, y))
             if s:
                 raise ActBumpStuff((x, y), s)
             raise ActBlocked((x, y))
-        m = level.find_mob((x, y))
-        if m:
-            raise ActBumpMob((x, y), m)
         self.x, self.y = x, y
         return self._walk_anim(d)
 
@@ -104,6 +110,10 @@
 
 
 class Hero(Mob):
+    def __init__(self, (x, y)):
+        super(Hero, self).__init__(0, (x, y))
+        self.items = []
+
     def act(self, level, display):
         keys = pygame.key.get_pressed()
         direction = None
@@ -127,7 +137,13 @@
             direction = 1
         if direction is not None:
             try:
-                return [self.walk(direction, level)]
+                anims = [self.walk(direction, level)]
+                item = level.find_item((self.x, self.y))
+                if item:
+                    anims.append(item._pick_anim(display))
+                    self.items.append(item)
+                    level.items.remove(item)
+                return anims
             except ActBumpStuff as e:
                 if e.stuff.kind in (4, 6):
                     e.stuff.kind += 1
Binary file fhrl/stuff.png has changed