X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fgamelib%2Flevel.py;h=7641fbcd3de7b29ded0b1ad631c43eab74b16470;hb=92591cd60f6346d318735b9a1adf778b57177917;hp=a8fe447494f64a6c7e3e5b04f046696f3cb90036;hpb=803254edba328148045841cd2cbdc0e4bd19655b;p=koperkapel.git diff --git a/koperkapel/gamelib/level.py b/koperkapel/gamelib/level.py index a8fe447..7641fbc 100644 --- a/koperkapel/gamelib/level.py +++ b/koperkapel/gamelib/level.py @@ -1,7 +1,6 @@ """ Class holding the level info """ -from .keypad import Keypad -from .door import Door +import random class Level(object): @@ -14,14 +13,17 @@ class Level(object): self.grates = [] self.tileset = None self.start_pos = (0, 0) + self.exit = None + self.enemies = [] + self.enemy_generators = [] + self.friends = [] def get_neighbors(self, x, y): # 4 -connected neighbors return [self.tiles[y][x-1] if x > 0 else None, self.tiles[y][x+1] if x < self.width - 1 else None, self.tiles[y-1][x] if y > 0 else None, - self.tiles[y+1][x] if y < self.height- 1 else None, - ] + self.tiles[y+1][x] if y < self.height - 1 else None] def can_walk(self, x, y, layer): if 'walk' in self.tiles[y][x][layer]['behaviour']: @@ -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,7 +65,63 @@ 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[:] + + def friend_at(self, x, y): + for f in self.friends: + if f.game_pos == (x, y): + return f + + def remove_friend(self, friend): + self.friends.remove(friend) + + def item_at(self, x, y): + for i in self.items: + if i.game_pos == (x, y): + return i + + def remove_item(self, item): + self.items.remove(item) + + 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"] + + 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)