The endless pointlessness of level progression
[koperkapel.git] / koperkapel / gamelib / level.py
index 4644e0498bbf89e2647c928f1de9ad89bb367364..a754f29c80e996d9be2a238393116c9911805a42 100644 (file)
@@ -11,8 +11,12 @@ class Level(object):
         self.tiles = []
         self.keypads = []
         self.doors = []
+        self.grates = []
         self.tileset = None
         self.start_pos = (0, 0)
+        self.exit = None
+        self.enemies = []
+        self.friends = []
 
     def get_neighbors(self, x, y):
         # 4 -connected neighbors
@@ -26,7 +30,7 @@ class Level(object):
         if 'walk' in self.tiles[y][x][layer]['behaviour']:
             # check doors
             for door in self.doors:
-                if (x, y) == door.pos and door.closed():
+                if (x, y) == door.game_pos and door.is_closed():
                     return False
             return True
         return False
@@ -34,7 +38,7 @@ class Level(object):
     def can_fly(self, x, y, layer):
         if 'fly' in self.tiles[y][x][layer]['behaviour']:
             for door in self.doors:
-                if (x, y) == door.pos and door.closed():
+                if (x, y) == door.game_pos and door.is_closed():
                     return False
             return True
 
@@ -43,8 +47,37 @@ class Level(object):
     def can_crawl(self, x, y, layer):
         return 'crawl' in self.tiles[y][x][layer]['behaviour']
 
-    def keypad_at(self, x, y):
+    def is_keypad(self, x, y):
         for keypad in self.keypads:
-            if (x, y) == keypad.pos:
-                return keypad
+            if (x, y) == keypad.game_pos:
+                return True
+        return False
+
+    def is_grate(self, x, y):
+        if (x, y) in self.grates:
+            return True
+        return False
+
+    def press_keypad(self, x, y, roaches):
+        for keypad in self.keypads:
+            if (x, y) == keypad.game_pos:
+                keypad.activate(roaches)
+
+    def get_friends(self):
+        return self._friends[:]
+
+    def is_on_friend(self, x, y):
+        return (x, y) in [x.game_pos for x in self.friends]
+
+    def remove_friend(self, x, y):
+        for friend in self.friends[:]:
+            if friend.game_pos == (x, y):
+                self.friends.remove(friend)
+                return friend
         return None
+
+    def is_exit(self, x, y):
+        return self.exit and (x, y) == tuple(self.exit["pos"])
+
+    def get_exit_level(self):
+        return self.exit["next level"]