From: Simon Cross Date: Sat, 5 Mar 2016 21:19:49 +0000 (+0200) Subject: Merge branch 'master' of ctpug.org.za:koperkapel X-Git-Url: https://git.ctpug.org.za/?p=koperkapel.git;a=commitdiff_plain;h=af3fcb580e7a3acf730f5da2b8e7f51ad1314e83;hp=ba5afee0c613a5c05a423022ba01c2e66c312b8c Merge branch 'master' of ctpug.org.za:koperkapel --- diff --git a/koperkapel/gamelib/enemy_generator.py b/koperkapel/gamelib/enemy_generator.py index 1329660..b5a1dd4 100644 --- a/koperkapel/gamelib/enemy_generator.py +++ b/koperkapel/gamelib/enemy_generator.py @@ -28,16 +28,19 @@ class EnemyGenerator(Actor): if self._time_since_last_update > self.rate: if len(self._made_enemies) < self.max_enemies: self._make_enemy() + self._time_since_last_update = 0 def _make_enemy(self): if self.enemy_type == 'roach': - roach = get_enemy_roach() + roach = get_enemy_roach(self.level) self._made_enemies.append(roach) self.level.add_enemy(roach, *self.gen_pos) def killed(self, enemy): if enemy in self._made_enemies: self._made_enemies.remove(enemy) + # Delay next respawn so we don't flood the player with enemies + self._time_since_last_update = 0 def pause(self): self.paused = True diff --git a/koperkapel/gamelib/enemy_roach.py b/koperkapel/gamelib/enemy_roach.py index e36b176..2645efa 100644 --- a/koperkapel/gamelib/enemy_roach.py +++ b/koperkapel/gamelib/enemy_roach.py @@ -1,12 +1,45 @@ # Roach utilities +import random + +from pgzero.clock import each_tick +from functools import partial + from ..roaches import t32_roaches, WorldRoach -def get_enemy_roach(): - # red +def get_enemy_roach(level): roach = t32_roaches.assemble(WorldRoach(), color=(255, 0, 0, 255)) roach.anchor = (0, 0) roach.game_pos = (0, 0) roach.health = 5 + roach.level = level + roach.move = partial(move, roach) + roach.last_moved = 0 + roach.start_pos = None + each_tick(roach.move) return roach + + +def move(roach, dt): + """Enemy roach move method""" + roach.last_moved += dt + if roach.last_moved > 0.5: + if not roach.start_pos: + roach.start_pos = roach.game_pos + roach.last_moved = 0 + attempt = 0 + while attempt < 4: + attempt += 1 + dx = random.randint(-1, 1) + dy = random.randint(-1, 1) + if abs(roach.game_pos[0] + dx - roach.start_pos[0]) > 2: + continue + if abs(roach.game_pos[1] + dy - roach.start_pos[1]) > 2: + continue + if roach.level.can_walk(roach.game_pos[0] + dx, roach.game_pos[1] + dy, 'floor'): + enemy = roach.level.get_enemy(roach.game_pos[0] + dx, roach.game_pos[1] + dy) + if enemy and enemy is not roach: + continue + roach.game_pos = (roach.game_pos[0] + dx, roach.game_pos[1] + dy) + break diff --git a/koperkapel/gamelib/level.py b/koperkapel/gamelib/level.py index aed4ccc..34487af 100644 --- a/koperkapel/gamelib/level.py +++ b/koperkapel/gamelib/level.py @@ -101,6 +101,8 @@ class Level(object): 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""" diff --git a/koperkapel/levels/level1.json b/koperkapel/levels/level1.json index 88c188a..7ec08b5 100644 --- a/koperkapel/levels/level1.json +++ b/koperkapel/levels/level1.json @@ -4390,7 +4390,7 @@ { "type": "roach", "pos": [18, 8], - "rate": 1.0, + "rate": 2.0, "max": 2 } ] diff --git a/koperkapel/levels/level2.json b/koperkapel/levels/level2.json index 99571fd..4f6dce7 100644 --- a/koperkapel/levels/level2.json +++ b/koperkapel/levels/level2.json @@ -7639,7 +7639,7 @@ { "type": "roach", "pos": [16, 9], - "rate": 1.0, + "rate": 2.0, "max": 2 } ]