b5a1dd40969f363f9ab25dec2f1f6b1c0a6a8dbc
[koperkapel.git] / koperkapel / gamelib / enemy_generator.py
1 """ Add enemies to the level as required """
2
3 import os
4 from pgzero.actor import Actor
5 from pgzero.clock import each_tick
6
7 from .enemy_roach import get_enemy_roach
8
9 class EnemyGenerator(Actor):
10     """Generators are currently invisble, but we want the update hook."""
11
12     def __init__(self, info, level):
13         self.gen_pos = info['pos']
14         self.level = level
15         self.enemy_type = info['type']
16         self.rate = info['rate']
17         self.max_enemies = info['max']
18         self._time_since_last_update = 0
19         self.paused = False
20         each_tick(self.update)
21         self._made_enemies = []
22         super().__init__(os.path.join('weapons', 'blank'))
23
24     def update(self, dt):
25         if self.paused:
26             return
27         self._time_since_last_update += dt
28         if self._time_since_last_update > self.rate:
29             if len(self._made_enemies) < self.max_enemies:
30                 self._make_enemy()
31             self._time_since_last_update = 0
32
33     def _make_enemy(self):
34         if self.enemy_type == 'roach':
35             roach = get_enemy_roach(self.level)
36             self._made_enemies.append(roach)
37             self.level.add_enemy(roach, *self.gen_pos)
38
39     def killed(self, enemy):
40         if enemy in self._made_enemies:
41             self._made_enemies.remove(enemy)
42             # Delay next respawn so we don't flood the player with enemies
43             self._time_since_last_update = 0
44
45     def pause(self):
46         self.paused = True
47
48     def unpause(self):
49         self.paused = False