eb9e8b232e3ff6b5ec6aafafb8222df3685b3503
[koperkapel.git] / koperkapel / gamelib / level.py
1 """ Class holding the level info """
2
3 from .keypad import Keypad
4 from .door import Door
5
6
7 class Level(object):
8
9     def __init__(self):
10         self.width = self.height = 0
11         self.tiles = []
12         self.keypads = []
13         self.doors = []
14         self.grates = []
15         self.tileset = None
16         self.start_pos = (0, 0)
17         self.enemies = []
18         self.friends = []
19
20     def get_neighbors(self, x, y):
21         # 4 -connected neighbors
22         return [self.tiles[y][x-1] if x > 0 else None,
23                 self.tiles[y][x+1] if x < self.width - 1 else None,
24                 self.tiles[y-1][x] if y > 0 else None,
25                 self.tiles[y+1][x] if y < self.height- 1 else None,
26                ]
27
28     def can_walk(self, x, y, layer):
29         if 'walk' in self.tiles[y][x][layer]['behaviour']:
30             # check doors
31             for door in self.doors:
32                 if (x, y) == door.game_pos and door.is_closed():
33                     return False
34             return True
35         return False
36
37     def can_fly(self, x, y, layer):
38         if 'fly' in self.tiles[y][x][layer]['behaviour']:
39             for door in self.doors:
40                 if (x, y) == door.game_pos and door.is_closed():
41                     return False
42             return True
43
44         return False
45
46     def can_crawl(self, x, y, layer):
47         return 'crawl' in self.tiles[y][x][layer]['behaviour']
48
49     def is_keypad(self, x, y):
50         for keypad in self.keypads:
51             if (x, y) == keypad.game_pos:
52                 return True
53         return False
54
55     def is_grate(self, x, y):
56         if (x, y) in self.grates:
57             return True
58         return False
59
60     def press_keypad(self, x, y, roaches):
61         for keypad in self.keypads:
62             if (x, y) == keypad.game_pos:
63                 keypad.activate(roaches)
64
65     def get_friends(self):
66         return self._friends[:]
67
68     def is_on_friend(self, x, y):
69         return (x, y) in [x.game_pos for x in self.friends]
70
71     def remove_friend(self, x, y):
72         for friend in self.friends[:]:
73             if friend.game_pos == (x, y):
74                 self.friends.remove(friend)
75                 return friend
76         return None