""" Class holding the level info """
+from .keypad import Keypad
+from .door import Door
+
class Level(object):
def __init__(self):
self.width = self.height = 0
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
]
def can_walk(self, x, y, layer):
- return 'walk' in self.tiles[y][x][layer]['behaviour']
+ if 'walk' in self.tiles[y][x][layer]['behaviour']:
+ # check doors
+ for door in self.doors:
+ if (x, y) == door.game_pos and door.is_closed():
+ return False
+ return True
+ return False
def can_fly(self, x, y, layer):
- return 'fly' in self.tiles[y][x][layer]['behaviour']
+ if 'fly' in 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 can_crawl(self, x, y, layer):
+ return 'crawl' in self.tiles[y][x][layer]['behaviour']
+
+ def is_keypad(self, x, y):
+ for keypad in self.keypads:
+ 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"]