Somewhat doorish
[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.tileset = None
15         self.start_pos = (0, 0)
16
17     def get_neighbors(self, x, y):
18         # 4 -connected neighbors
19         return [self.tiles[y][x-1] if x > 0 else None,
20                 self.tiles[y][x+1] if x < self.width - 1 else None,
21                 self.tiles[y-1][x] if y > 0 else None,
22                 self.tiles[y+1][x] if y < self.height- 1 else None,
23                ]
24
25     def can_walk(self, x, y, layer):
26         if 'walk' in self.tiles[y][x][layer]['behaviour']:
27             # check doors
28             for door in self.doors:
29                 if (x, y) == door.game_pos and door.is_closed():
30                     return False
31             return True
32         return False
33
34     def can_fly(self, x, y, layer):
35         if 'fly' in self.tiles[y][x][layer]['behaviour']:
36             for door in self.doors:
37                 if (x, y) == door.game_pos and door.is_closed():
38                     return False
39             return True
40
41         return False
42
43     def can_crawl(self, x, y, layer):
44         return 'crawl' in self.tiles[y][x][layer]['behaviour']
45
46     def keypad_at(self, x, y):
47         for keypad in self.keypads:
48             if (x, y) == keypad.game_pos:
49                 return keypad
50         return None