diff nagslang/screens/area.py @ 333:3dd32686dbc3

Better wolf claw attack.
author Jeremy Thurgood <firxen@gmail.com>
date Fri, 06 Sep 2013 10:49:19 +0200
parents 0d7885e2f063
children 1d487646a4d4
line wrap: on
line diff
--- a/nagslang/screens/area.py	Fri Sep 06 03:10:04 2013 +0200
+++ b/nagslang/screens/area.py	Fri Sep 06 10:49:19 2013 +0200
@@ -6,10 +6,10 @@
 
 from nagslang.constants import (
     COLLISION_TYPE_WALL, COLLISION_TYPE_PLAYER, CALLBACK_COLLIDERS,
-    COLLISION_TYPE_FURNITURE)
+    COLLISION_TYPE_FURNITURE, COLLISION_TYPE_WEREWOLF_ATTACK)
 from nagslang.enemies import DeadEnemy
-from nagslang.events import ScreenChange, DoorEvent, FireEvent, \
-    EnemyDeathEvent, ClawEvent
+from nagslang.events import (
+    ScreenChange, DoorEvent, FireEvent, EnemyDeathEvent, ClawEvent)
 from nagslang.level import Level
 from nagslang.screens.base import Screen
 from nagslang.game_object import Bullet, ClawAttack
@@ -93,9 +93,13 @@
         # The collision handler must return `True` or `False`. We don't want to
         # accidentally reject collisions from handlers that return `None`, so
         # we explicitly check for `False` and treate everything else as `True`.
-        if result is False:
-            return False
-        return True
+        return result is not False
+
+    def _claw_attack_collision_pre_solve_handler(self, space, arbiter):
+        claw = arbiter.shapes[0].physicser.game_object
+        gobj = arbiter.shapes[1].physicser.game_object
+        result = gobj.collide_with_claw_attack(claw)
+        return result is not False
 
     def _furniture_collision_pre_solve_handler(self, space, arbiter):
         furniture = arbiter.shapes[0].physicser.game_object
@@ -111,6 +115,9 @@
             self.space.add_collision_handler(
                 COLLISION_TYPE_FURNITURE, collision_type,
                 pre_solve=self._furniture_collision_pre_solve_handler)
+            self.space.add_collision_handler(
+                COLLISION_TYPE_WEREWOLF_ATTACK, collision_type,
+                pre_solve=self._claw_attack_collision_pre_solve_handler)
 
     def add_walls(self):
         self.walls = []
@@ -173,7 +180,7 @@
             self._drawables.add(dead_enemy)
         elif ClawEvent.matches(ev):
             claw_attack = ClawAttack(self.space, ev.source, ev.vector,
-                                     ev.source_collision_type)
+                                     ev.damage)
             self._drawables.add(claw_attack)
         self.keys.handle_event(ev)
 
@@ -234,11 +241,10 @@
             health_box_colour = pygame.color.THECOLORS['red']
         else:
             health_box_colour = pygame.color.THECOLORS['white']
-        pygame.draw.rect(surface,  health_box_colour, rect, 0)
+        pygame.draw.rect(surface, health_box_colour, rect, 0)
         if self.protagonist.in_human_form():
             health_colour = pygame.color.THECOLORS['red']
         else:
             health_colour = pygame.color.THECOLORS['purple']
         rect = pygame.Rect(55, 505, self.protagonist.get_health_level(), 40)
-        pygame.draw.rect(surface,  health_colour,
-                         rect, 0)
+        pygame.draw.rect(surface, health_colour, rect, 0)