# HG changeset patch # User Simon Cross # Date 1316027539 -7200 # Node ID 7a9be9add4c744313c98ec5c3906b8ddab278b5f # Parent e768056b0588e4c2193d27f41094abbdf4115394 Hook up exit. diff -r e768056b0588 -r 7a9be9add4c7 mamba/engine.py --- 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() diff -r e768056b0588 -r 7a9be9add4c7 mamba/snake.py --- 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 diff -r e768056b0588 -r 7a9be9add4c7 mamba/sprites.py --- 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' diff -r e768056b0588 -r 7a9be9add4c7 mamba/widgets/game.py --- 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())