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)