# HG changeset patch # User Neil Muller # Date 1378391657 -7200 # Node ID ef4f6375c0b5c56c28c734eb7541f39e8f18edff # Parent 26682f1b8c59e68f0750fed6a85fb9b81e29db68 Basic death diff -r 26682f1b8c59 -r ef4f6375c0b5 nagslang/engine.py --- a/nagslang/engine.py Thu Sep 05 16:16:49 2013 +0200 +++ b/nagslang/engine.py Thu Sep 05 16:34:17 2013 +0200 @@ -6,6 +6,7 @@ from nagslang import constants from nagslang.screens.menu import MenuScreen from nagslang.screens.area import AreaScreen +from nagslang.screens.playerdied import PlayerDiedScreen from nagslang.events import ScreenChange from nagslang.world import World @@ -20,6 +21,7 @@ self._current_screen = None self._screens = { 'menu': MenuScreen, + 'dead': PlayerDiedScreen, 'level1': AreaScreen, 'level2': AreaScreen, } diff -r 26682f1b8c59 -r ef4f6375c0b5 nagslang/protagonist.py --- a/nagslang/protagonist.py Thu Sep 05 16:16:49 2013 +0200 +++ b/nagslang/protagonist.py Thu Sep 05 16:34:17 2013 +0200 @@ -11,6 +11,7 @@ from nagslang.game_object import GameObject, Physicser, make_body from nagslang.mutators import FLIP_H from nagslang.resources import resources +from nagslang.events import ScreenChange class ProtagonistPhysicser(Physicser): @@ -92,6 +93,12 @@ self.physicser.set_space(new_space) self.physicser.add_to_space() + def reset(self): + self.health_level = 100 + self.is_moving = False + + self.go_human() + def _make_renderer(self): return ProtagonistFormSelectionRenderer({ self.HUMAN_FORM: render.FacingSelectionRenderer( @@ -271,13 +278,18 @@ """ return self.health_level + def die(self): + # Handle player death - may be called due to other reasons + # than zero health + ScreenChange.post('dead') + def lose_health(self, amount): if self.in_human_form(): self.health_level -= amount else: self.health_level -= amount / WEREWOLF_SOAK_FACTOR - if self.health_level < PROTAGONIST_HEALTH_MIN_LEVEL: - self.health_level = PROTAGONIST_HEALTH_MIN_LEVEL + if self.health_level <= PROTAGONIST_HEALTH_MIN_LEVEL: + self.die() def gain_health(self, amount): self.health_level += amount diff -r 26682f1b8c59 -r ef4f6375c0b5 nagslang/screens/playerdied.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nagslang/screens/playerdied.py Thu Sep 05 16:34:17 2013 +0200 @@ -0,0 +1,29 @@ +"""Display a menu screen.""" + +import pygame + +from nagslang.screens.base import Screen +from nagslang.events import ScreenChange +from nagslang.widgets.text import TextWidget, MultiLineWidget + + +class PlayerDiedScreen(Screen): + def setup(self): + # Position is hacked later + self.widgets = [ + TextWidget((10, 10), 'You Died!', fontsize=20), + TextWidget((40, 70), 'Press escape to return to the menu.'), + MultiLineWidget((60, 120), self.world.get_formatted_stats()), + ] + + def handle_event(self, ev): + if ev.type == pygame.locals.KEYDOWN: + if ev.key == pygame.locals.K_ESCAPE: + self.world.protagonist.reset() + self.world.protagonist.set_position((350, 300)) + ScreenChange.post('menu') + + def render(self, surface): + surface.fill(pygame.color.Color(255, 255, 255)) + for widget in self.widgets: + widget.draw(surface)