changeset 35:258867e11432

make ghosts pass through doors
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Tue, 23 Aug 2011 19:13:56 +0200
parents 2d976c526ad4
children e96056af61ff
files monster.py
diffstat 1 files changed, 13 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/monster.py	Tue Aug 23 19:03:59 2011 +0200
+++ b/monster.py	Tue Aug 23 19:13:56 2011 +0200
@@ -121,7 +121,7 @@
 
         # Walk towards the hero
         possible = [(dx, dy) for (dx, dy) in dirs if
-                    not level.is_blocked(self.x+dx, self.y+dy)]
+                    not self.is_blocked(level, dx, dy)]
         if not possible:
             return
         random.shuffle(possible)
@@ -130,9 +130,13 @@
                                         self.x+d[0], self.y+d[1]))
         self.walk(level, dx, dy)
 
-    def walk(self, level, dx, dy):
+    def is_blocked(self, level, dx, dy):
         block = level.is_blocked(self.x + dx, self.y + dy)
         if block:
+            return True
+
+    def walk(self, level, dx, dy):
+        if self.is_blocked(level, dx, dy):
             return
         if (level.hero.x, level.hero.y) == (self.x + dx, self.y + dy):
             self.sprite.animation = self.sprite.anim_fight(dx, dy)
@@ -178,7 +182,7 @@
 
         # Move randomly (very annoying)
         possible = [(dx, dy) for (dx, dy) in dirs if
-                    not level.is_blocked(self.x+dx, self.y+dy)]
+                    not self.is_blocked(level, dx, dy)]
         if not possible:
             return
         dx, dy = random.choice(possible)
@@ -191,6 +195,12 @@
     max_hp = 5
     alpha = 192
 
+    def is_blocked(self, level, dx, dy):
+        # Ghosts can pass through obstacles
+        block = level.is_blocked(self.x + dx, self.y + dy)
+        if block and isinstance(block, Monster) or block == True:
+            return True
+
 
 class Eye(Monster):
     tx = 5