changeset 332:8643c7dbc8ad

Allow sub-classing level menu.
author Simon Cross <hodgestar@gmail.com>
date Fri, 16 Sep 2011 21:05:07 +0200
parents 0c25bca380de
children 1fc3fa4f6c9c
files mamba/habitats/level.py mamba/habitats/levelmenu.py
diffstat 2 files changed, 17 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/habitats/level.py	Fri Sep 16 21:04:42 2011 +0200
+++ b/mamba/habitats/level.py	Fri Sep 16 21:05:07 2011 +0200
@@ -3,14 +3,15 @@
 from pygame.locals import KEYDOWN
 
 from mamba.constants import ESCAPE_KEYS
-from mamba.engine import Habitat, NewHabitatEvent
+from mamba.engine import Habitat
 from mamba.world import World
 from mamba.widgets.game import GameWidget
 
 
 class LevelHabitat(Habitat):
-    def __init__(self, level):
+    def __init__(self, level, go_menu):
         super(LevelHabitat, self).__init__()
+        self.go_menu = go_menu
         world = World(level)
         game_widget = GameWidget(world)
         self.container.add(game_widget)
@@ -18,6 +19,5 @@
 
     def keydown_event(self, ev, widget):
         if ev.key in ESCAPE_KEYS:
-            from mamba.habitats.mainmenu import MainMenu
-            NewHabitatEvent.post(MainMenu())
+            self.go_menu()
             return True
--- a/mamba/habitats/levelmenu.py	Fri Sep 16 21:04:42 2011 +0200
+++ b/mamba/habitats/levelmenu.py	Fri Sep 16 21:05:07 2011 +0200
@@ -14,8 +14,8 @@
     def __init__(self):
         super(LevelMenu, self).__init__()
         self.level_buttons = {}
-        for i, name in enumerate(levels):
-            level = Level(name)
+        for i, name in enumerate(self.list_levels()):
+            level = self.get_level(name)
             button = LevelButton((20 + 120 * i, 20), level,
                                  done=name in done_levels)
             button.add_callback('clicked', self.level_selected, name)
@@ -24,15 +24,25 @@
         self.container.add_callback(KEYDOWN, self.keydown_event)
         self.update_buttons()
 
+    def list_levels(self):
+        return levels
+
+    def get_level(self, name):
+        return Level(name)
+
     def update_buttons(self):
         for name, button in self.level_buttons.iteritems():
             button.done = name in done_levels
 
     def level_selected(self, ev, widget, name):
         from mamba.habitats.level import LevelHabitat
-        NewHabitatEvent.post(LevelHabitat(widget.level))
+        NewHabitatEvent.post(LevelHabitat(widget.level, self.go_menu))
         return True
 
+    @classmethod
+    def go_menu(cls):
+        NewHabitatEvent.post(cls())
+
     def keydown_event(self, ev, widget):
         if ev.key in ESCAPE_KEYS:
             return self.return_to_mainmenu(ev, widget)