changeset 213:7a9be9add4c7

Hook up exit.
author Simon Cross <hodgestar@gmail.com>
date Wed, 14 Sep 2011 21:12:19 +0200
parents e768056b0588
children c5c42c8f8b65
files mamba/engine.py mamba/snake.py mamba/sprites.py mamba/widgets/game.py
diffstat 4 files changed, 31 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/engine.py	Wed Sep 14 21:12:20 2011 +0200
+++ b/mamba/engine.py	Wed Sep 14 21:12:19 2011 +0200
@@ -99,3 +99,12 @@
     @classmethod
     def post(cls):
         super(SnakeDiedEvent, cls).post()
+
+
+class LevelCompletedEvent(UserEvent):
+
+    TYPE = "LEVEL_COMPLETED"
+
+    @classmethod
+    def post(cls):
+        super(LevelCompletedEvent, cls).post()
--- a/mamba/snake.py	Wed Sep 14 21:12:20 2011 +0200
+++ b/mamba/snake.py	Wed Sep 14 21:12:19 2011 +0200
@@ -4,7 +4,7 @@
 
 from mamba.constants import TILE_SIZE, UP, DOWN, LEFT, RIGHT
 from mamba.sprites import BaseSprite
-from mamba.engine import SnakeDiedEvent
+from mamba.engine import SnakeDiedEvent, LevelCompletedEvent
 from mamba import mutators
 
 
@@ -102,6 +102,9 @@
     def crash(self):
         SnakeDiedEvent.post()
 
+    def exit_level(self):
+        LevelCompletedEvent.post()
+
     def mutate(self, mutation):
         self.mutation = mutation
 
--- a/mamba/sprites.py	Wed Sep 14 21:12:20 2011 +0200
+++ b/mamba/sprites.py	Wed Sep 14 21:12:19 2011 +0200
@@ -185,6 +185,9 @@
     image_name = 'arrow-r'
     name = 'exit'
 
+    def interact(self, snake, segment):
+        snake.exit_level()
+
 
 class PuddleSprite(SingleImageTileSprite):
     image_name = 'puddle'
--- a/mamba/widgets/game.py	Wed Sep 14 21:12:20 2011 +0200
+++ b/mamba/widgets/game.py	Wed Sep 14 21:12:19 2011 +0200
@@ -6,7 +6,8 @@
 from mamba.constants import UP, DOWN, LEFT, RIGHT
 from mamba.widgets.base import Widget
 from mamba.widgets.messagebox import MessageBox
-from mamba.engine import SnakeDiedEvent
+from mamba.engine import SnakeDiedEvent, LevelCompletedEvent, NewHabitatEvent
+from mamba.habitats.mainmenu import MainMenu
 
 
 class GameWidget(Widget):
@@ -18,6 +19,7 @@
         self.focussable = True
         self.add_callback(KEYDOWN, self.action_callback)
         self.add_callback(SnakeDiedEvent, self.snake_died)
+        self.add_callback(LevelCompletedEvent, self.level_completed)
 
     def create_action_map(self):
         actions = {}
@@ -48,3 +50,15 @@
         self.world.restart()
         self.actions = self.create_action_map()
         self.grab_focus()
+
+    def level_completed(self, ev, widget):
+        self.world.pause()
+        messagebox = MessageBox((300, 200), 'Level complete!',
+                                self.go_mainmenu)
+        self.parent.add(messagebox)
+        messagebox.grab_focus()
+        return True
+
+    def go_mainmenu(self):
+        self.grab_focus()
+        NewHabitatEvent.post(MainMenu())