Mercurial > nagslang
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)