Mercurial > nagslang
comparison nagslang/enemies.py @ 391:866cdc74b26a
Use Result to handle enemy death (but keep the event for accounting purposes)
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 07 Sep 2013 00:42:09 +0200 |
parents | 51deb78cae52 |
children | 8d961e05b7b6 |
comparison
equal
deleted
inserted
replaced
390:52c94435e38b | 391:866cdc74b26a |
---|---|
6 from pymunk.vec2d import Vec2d | 6 from pymunk.vec2d import Vec2d |
7 | 7 |
8 from nagslang import render | 8 from nagslang import render |
9 from nagslang.constants import (COLLISION_TYPE_ENEMY, COLLISION_TYPE_FURNITURE, | 9 from nagslang.constants import (COLLISION_TYPE_ENEMY, COLLISION_TYPE_FURNITURE, |
10 ACID_SPEED, ACID_DAMAGE, ZORDER_MID) | 10 ACID_SPEED, ACID_DAMAGE, ZORDER_MID) |
11 from nagslang.events import EnemyDeathEvent, FireEvent | 11 from nagslang.events import FireEvent, EnemyDeathEvent |
12 from nagslang.game_object import (GameObject, SingleShapePhysicser, Result, | 12 from nagslang.game_object import (GameObject, SingleShapePhysicser, Result, |
13 make_body) | 13 make_body) |
14 from nagslang.mutators import FLIP_H | 14 from nagslang.mutators import FLIP_H |
15 from nagslang.resources import resources | 15 from nagslang.resources import resources |
16 from nagslang.utils import vec_with_length | 16 from nagslang.utils import vec_with_length |
68 self.lose_health(weapon.damage) | 68 self.lose_health(weapon.damage) |
69 | 69 |
70 def lose_health(self, amount): | 70 def lose_health(self, amount): |
71 self.health -= amount | 71 self.health -= amount |
72 if self.health <= 0: | 72 if self.health <= 0: |
73 EnemyDeathEvent.post() | |
73 self.physicser.remove_from_space() | 74 self.physicser.remove_from_space() |
74 EnemyDeathEvent.post(self.physicser.position, self.enemy_type) | |
75 | 75 |
76 def set_direction(self, dx, dy): | 76 def set_direction(self, dx, dy): |
77 vec = vec_with_length((dx, dy), self.impulse_factor) | 77 vec = vec_with_length((dx, dy), self.impulse_factor) |
78 self.angle = vec.angle | 78 self.angle = vec.angle |
79 self.physicser.apply_impulse(vec) | 79 self.physicser.apply_impulse(vec) |
126 return x_step, y_step | 126 return x_step, y_step |
127 | 127 |
128 def update(self, dt): | 128 def update(self, dt): |
129 super(Enemy, self).update(dt) | 129 super(Enemy, self).update(dt) |
130 if self.health <= 0: | 130 if self.health <= 0: |
131 return Result(remove=[self]) | 131 return Result( |
132 add=[DeadEnemy(self.get_space(), self.world, | |
133 self.physicser.position, self.enemy_type)], | |
134 remove=[self]) | |
132 | 135 |
133 | 136 |
134 class DeadEnemy(GameObject): | 137 class DeadEnemy(GameObject): |
135 def __init__(self, space, world, position, enemy_type='A'): | 138 def __init__(self, space, world, position, enemy_type='A'): |
136 body = make_body(10, 10000, position, damping=0.5) | 139 body = make_body(10, 10000, position, damping=0.5) |