changeset 40:6d38f7032b0d

Move vision handling into the level
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sat, 10 Mar 2012 13:08:48 +0100
parents 2475e658d13f
children 6b1e309eafc3
files mhrok/mobs.py mhrok/rooms_level.py mhrok/sprites.py
diffstat 3 files changed, 14 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/mhrok/mobs.py	Sat Mar 10 13:03:32 2012 +0100
+++ b/mhrok/mobs.py	Sat Mar 10 13:08:48 2012 +0100
@@ -22,6 +22,7 @@
 
     def __init__(self, (x, y)):
         self.pos = x, y
+        self.vision = None
 
     def make_sprite(self, tiles):
         self.sprite = self.Sprite(tiles, self.pos, self.animation)
@@ -76,14 +77,6 @@
         return self.sprite, shadow, self.vision
 
     def control(self, level):
-        room = level.find_room(*self.pos)
-        if room:
-            self.vision.radius = 64
-            if room not in level.lit_rooms:
-                level.lit_rooms.append(room)
-                self.vision.rooms.append(room)
-        else:
-            self.vision.radius = 40
 
         keys = pygame.key.get_pressed()
         for key, direction in KEY_DIRS.iteritems():
--- a/mhrok/rooms_level.py	Sat Mar 10 13:03:32 2012 +0100
+++ b/mhrok/rooms_level.py	Sat Mar 10 13:08:48 2012 +0100
@@ -69,9 +69,20 @@
                 return
             self[ex, y] = fill
 
-    def find_room(self, x, y):
+    def find_room(self, (x, y)):
         for room in self.rooms:
             (rx, ry), (rw, rh) = room
             if rx <= x <= rx + rw and ry <= y <= ry + rh:
                 return room
 
+    def walk(self, mob, direction):
+        super(Level, self).walk(mob, direction)
+        if mob.vision:
+            room = self.find_room(mob.pos)
+            if room:
+                mob.vision.radius = 64
+                if room not in self.lit_rooms:
+                    self.lit_rooms.append(room)
+                    mob.vision.rooms.append(room)
+            else:
+                mob.vision.radius = 40
--- a/mhrok/sprites.py	Sat Mar 10 13:03:32 2012 +0100
+++ b/mhrok/sprites.py	Sat Mar 10 13:08:48 2012 +0100
@@ -19,6 +19,7 @@
         self.rect.move_ip(4 + 20 * x, 12 * y)
         self.depth = self.rect.bottom
         self.animation = None
+        self.vision = None
 
     def update(self):
         self.frame = (self.frame + 1) % len(self.steps)