changeset 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 52c94435e38b
children 1b7b0b8e8275
files nagslang/enemies.py nagslang/events.py nagslang/screens/area.py
diffstat 3 files changed, 9 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/nagslang/enemies.py	Sat Sep 07 00:34:00 2013 +0200
+++ b/nagslang/enemies.py	Sat Sep 07 00:42:09 2013 +0200
@@ -8,7 +8,7 @@
 from nagslang import render
 from nagslang.constants import (COLLISION_TYPE_ENEMY, COLLISION_TYPE_FURNITURE,
                                 ACID_SPEED, ACID_DAMAGE, ZORDER_MID)
-from nagslang.events import EnemyDeathEvent, FireEvent
+from nagslang.events import FireEvent, EnemyDeathEvent
 from nagslang.game_object import (GameObject, SingleShapePhysicser, Result,
                                   make_body)
 from nagslang.mutators import FLIP_H
@@ -70,8 +70,8 @@
     def lose_health(self, amount):
         self.health -= amount
         if self.health <= 0:
+            EnemyDeathEvent.post()
             self.physicser.remove_from_space()
-            EnemyDeathEvent.post(self.physicser.position, self.enemy_type)
 
     def set_direction(self, dx, dy):
         vec = vec_with_length((dx, dy), self.impulse_factor)
@@ -128,7 +128,10 @@
     def update(self, dt):
         super(Enemy, self).update(dt)
         if self.health <= 0:
-            return Result(remove=[self])
+            return Result(
+                add=[DeadEnemy(self.get_space(), self.world,
+                               self.physicser.position, self.enemy_type)],
+                remove=[self])
 
 
 class DeadEnemy(GameObject):
--- a/nagslang/events.py	Sat Sep 07 00:34:00 2013 +0200
+++ b/nagslang/events.py	Sat Sep 07 00:42:09 2013 +0200
@@ -56,9 +56,8 @@
 
 class EnemyDeathEvent(UserEvent):
     @classmethod
-    def post(cls, position, enemy_type):
-        super(EnemyDeathEvent, cls).post(position=position,
-                                         enemy_type=enemy_type)
+    def post(cls):
+        super(EnemyDeathEvent, cls).post()
 
 
 class ClawEvent(UserEvent):
--- a/nagslang/screens/area.py	Sat Sep 07 00:34:00 2013 +0200
+++ b/nagslang/screens/area.py	Sat Sep 07 00:42:09 2013 +0200
@@ -8,9 +8,8 @@
     COLLISION_TYPE_WALL, COLLISION_TYPE_PLAYER, CALLBACK_COLLIDERS,
     COLLISION_TYPE_FURNITURE, COLLISION_TYPE_WEREWOLF_ATTACK,
     CMD_TOGGLE_FORM, CMD_ACTION)
-from nagslang.enemies import DeadEnemy
 from nagslang.events import (
-    ScreenChange, DoorEvent, FireEvent, EnemyDeathEvent, ClawEvent)
+    ScreenChange, DoorEvent, EnemyDeathEvent, FireEvent, ClawEvent)
 from nagslang.level import Level
 from nagslang.screens.base import Screen
 from nagslang.game_object import Bullet, ClawAttack
@@ -185,9 +184,6 @@
             self._drawables.add(bullet)
         elif EnemyDeathEvent.matches(ev):
             self.world.kills += 1
-            dead_enemy = DeadEnemy(self.space, self.world, ev.position,
-                                   ev.enemy_type)
-            self._drawables.add(dead_enemy)
         elif ClawEvent.matches(ev):
             claw_attack = ClawAttack(self.space, ev.source, ev.vector,
                                      ev.damage)