changeset 288:e2cf46a4eeaf

Merge branch
author David Fraser <davidf@sjsoft.com>
date Thu, 05 Sep 2013 16:41:02 +0200
parents 67387621c61b (current diff) ef4f6375c0b5 (diff)
children d7ab2594f8d2
files
diffstat 3 files changed, 45 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/nagslang/engine.py	Thu Sep 05 16:40:04 2013 +0200
+++ b/nagslang/engine.py	Thu Sep 05 16:41:02 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,
         }
--- a/nagslang/protagonist.py	Thu Sep 05 16:40:04 2013 +0200
+++ b/nagslang/protagonist.py	Thu Sep 05 16:41:02 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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nagslang/screens/playerdied.py	Thu Sep 05 16:41:02 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)