Mercurial > nagslang
changeset 440:9eee96966d88
Add Death event to reduce death code duplication
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 07 Sep 2013 14:36:09 +0200 |
parents | 4c60df80b91b |
children | 707d06a77f39 |
files | nagslang/events.py nagslang/protagonist.py nagslang/screens/area.py |
diffstat | 3 files changed, 19 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- 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):
--- 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():
--- 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):