Mercurial > scrounge
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
