smartness now required for keypads
[koperkapel.git] / koperkapel / gamelib / level.py
index bcc319a2886d2f5e530d30ff70be6f7f50478a09..7641fbcd3de7b29ded0b1ad631c43eab74b16470 100644 (file)
@@ -1,5 +1,7 @@
 """ Class holding the level info """
 
+import random
+
 
 class Level(object):
 
@@ -44,6 +46,14 @@ class Level(object):
     def can_crawl(self, x, y, layer):
         return 'crawl' in self.tiles[y][x][layer]['behaviour']
 
+    def can_bullet(self, x, y, layer):
+        if self.tiles[y][x][layer]['behaviour']:
+            for door in self.doors:
+                if (x, y) == door.game_pos and door.is_closed():
+                    return False
+            return True
+        return False
+
     def is_keypad(self, x, y):
         for keypad in self.keypads:
             if (x, y) == keypad.game_pos:
@@ -55,10 +65,10 @@ class Level(object):
             return True
         return False
 
-    def press_keypad(self, x, y, roaches):
+    def press_keypad(self, x, y, smart):
         for keypad in self.keypads:
             if (x, y) == keypad.game_pos:
-                keypad.activate(roaches)
+                keypad.activate(smart)
 
     def get_friends(self):
         return self._friends[:]
@@ -84,3 +94,34 @@ class Level(object):
 
     def get_exit_level(self):
         return self.exit["next level"]
+
+    def enemy_at(self, x, y):
+        for enemy in self.enemies:
+            if (x, y) == enemy.game_pos:
+                return True
+        return False
+
+    def get_enemy(self, x, y):
+        for enemy in self.enemies:
+            if (x, y) == enemy.game_pos:
+                return enemy
+        return None
+
+    def remove_enemy(self, enemy):
+        self.enemies.remove(enemy)
+        for generator in self.enemy_generators:
+            generator.killed(enemy)
+
+    def add_enemy(self, enemy, x, y):
+        """Add an enemy to an empty floor space near x, y"""
+        added = False
+        while not added:
+            if self.can_walk(x, y, 'floor'):
+                if not self.friend_at(x, y):
+                    if not self.enemy_at(x, y):
+                        added = True
+                        enemy.game_pos = (x, y)
+                        self.enemies.append(enemy)
+                        added = True
+            x += random.randint(-1, 1)
+            y += random.randint(-1, 1)