diff nagslang/screens/area.py @ 393:8d961e05b7b6

Use Result to handle firing
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 07 Sep 2013 01:04:01 +0200
parents 866cdc74b26a
children 76f053cf2322
line wrap: on
line diff
--- a/nagslang/screens/area.py	Sat Sep 07 01:03:46 2013 +0200
+++ b/nagslang/screens/area.py	Sat Sep 07 01:04:01 2013 +0200
@@ -8,11 +8,10 @@
     COLLISION_TYPE_WALL, COLLISION_TYPE_PLAYER, CALLBACK_COLLIDERS,
     COLLISION_TYPE_FURNITURE, COLLISION_TYPE_WEREWOLF_ATTACK,
     CMD_TOGGLE_FORM, CMD_ACTION)
-from nagslang.events import (
-    ScreenChange, DoorEvent, EnemyDeathEvent, FireEvent, ClawEvent)
+from nagslang.events import ScreenChange, DoorEvent, EnemyDeathEvent, ClawEvent
 from nagslang.level import Level
 from nagslang.screens.base import Screen
-from nagslang.game_object import Bullet, ClawAttack
+from nagslang.game_object import ClawAttack
 from nagslang.sound import sound
 
 
@@ -178,10 +177,6 @@
                 return
             # else we're teleporting within the screen, and just the
             # position change is enough
-        elif FireEvent.matches(ev):
-            bullet = Bullet(self.space, ev.source, ev.impulse, ev.damage,
-                            ev.bullet_type, ev.source_collision_type)
-            self._drawables.add(bullet)
         elif EnemyDeathEvent.matches(ev):
             self.world.kills += 1
         elif ClawEvent.matches(ev):
@@ -233,18 +228,20 @@
         dx, dy = self.keys.get_direction()
         self.protagonist.set_direction(dx, dy)
         if self.keys.is_attacking():
-            self.protagonist.handle_attack_key_down()
+            self._handle_result(self.protagonist.handle_attack_key_down())
 
     def tick(self, seconds):
         super(AreaScreen, self).tick(seconds)
         self.tick_protagonist()
         for drawable in self._drawables:
-            result = drawable.update(seconds)
-            if result is not None:
-                for new_drawable in result.add:
-                    self._drawables.add(new_drawable)
-                for old_drawable in result.remove:
-                    self._drawables.remove(old_drawable)
+            self._handle_result(drawable.update(seconds))
+
+    def _handle_result(self, result):
+        if result is not None:
+            for drawable in result.add:
+                self._drawables.add(drawable)
+            for drawable in result.remove:
+                self._drawables.remove(drawable)
 
     def render_health_bar(self, surface, damage_experienced=None):
         bar_surface = pygame.Surface((110, 50)).convert(surface)