# HG changeset patch # User Stefano Rivera # Date 1378557369 -7200 # Node ID 9eee96966d889576c3a71cb286a11e185ecadd1d # Parent 4c60df80b91b743e8deb2d886c2eeb2151e454f7 Add Death event to reduce death code duplication diff -r 4c60df80b91b -r 9eee96966d88 nagslang/events.py --- a/nagslang/events.py Sat Sep 07 14:30:27 2013 +0200 +++ b/nagslang/events.py Sat Sep 07 14:36:09 2013 +0200 @@ -40,6 +40,12 @@ super(ScreenChange, cls).post(screen=new_screen) +class DeathEvent(UserEvent): + @classmethod + def post(cls): + super(DeathEvent, cls).post() + + class DoorEvent(UserEvent): @classmethod def post(cls, destination, dest_pos): diff -r 4c60df80b91b -r 9eee96966d88 nagslang/protagonist.py --- a/nagslang/protagonist.py Sat Sep 07 14:30:27 2013 +0200 +++ b/nagslang/protagonist.py Sat Sep 07 14:36:09 2013 +0200 @@ -11,10 +11,9 @@ CMD_TOGGLE_FORM, CMD_ACTION) from nagslang.game_object import ( GameObject, Physicser, Result, Bullet, ClawAttack, make_body) -from nagslang.level import Level from nagslang.mutators import FLIP_H from nagslang.resources import resources -from nagslang.events import ScreenChange +from nagslang.events import DeathEvent from nagslang.utils import vec_from_angle, vec_with_length @@ -339,11 +338,8 @@ def die(self): # Handle player death - may be called due to other reasons # than zero health - self.world.load() - self.world.deaths += 1 - level, pos = Level.game_starting_point() - self.set_position(pos) - ScreenChange.post(level) + self.reset() + DeathEvent.post() def lose_health(self, amount): if self.in_human_form(): diff -r 4c60df80b91b -r 9eee96966d88 nagslang/screens/area.py --- a/nagslang/screens/area.py Sat Sep 07 14:30:27 2013 +0200 +++ b/nagslang/screens/area.py Sat Sep 07 14:36:09 2013 +0200 @@ -8,7 +8,7 @@ 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, QuitEvent +from nagslang.events import ScreenChange, DoorEvent, QuitEvent, DeathEvent from nagslang.level import Level from nagslang.screens.base import Screen from nagslang.sound import sound @@ -165,12 +165,7 @@ if self._level.is_starting_level(): QuitEvent.post() return - room, pos = self.game_starting_point - self.world.load() - self.world.deaths += 1 - ScreenChange.post(room) - self.protagonist.set_position(pos) - self._disable_render = True + self.protagonist.die() return cmd_key = self.keys.get_command_key(ev.key) if cmd_key is not None: @@ -187,6 +182,14 @@ return # else we're teleporting within the screen, and just the # position change is enough + elif DeathEvent.matches(ev): + self._disable_render = True + self.world.load() + self.world.deaths += 1 + level, pos = Level.game_starting_point() + self.protagonist.set_position(pos) + ScreenChange.post(level) + self.keys.handle_event(ev) def _calc_viewport(self, level_surface, display_surface):