changeset 415:f1ba457772ae

Go to next level, not back to menu. (Official levels only, though.)
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 17 Sep 2011 15:19:57 +0200
parents 442007704a9a
children 30ce046d08c3
files TODO.txt mamba/habitats/level.py mamba/habitats/levelmenu.py
diffstat 3 files changed, 30 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/TODO.txt	Sat Sep 17 14:53:18 2011 +0200
+++ b/TODO.txt	Sat Sep 17 15:19:57 2011 +0200
@@ -14,8 +14,10 @@
 * Test on Windows
 * Improve Arrow behavior when on arrow and arrow rotator button
 * Sleep
-* When finishing a level, go to next instead of menu
 * Don't pause forever while loading unofficial levels
+  * For user levels, we can update the cache on level save, but that
+    would require a more global cache. Maybe centralise this in
+    data.py or somewhere?
 * Two colours plus eating bug
 
 Source:
--- a/mamba/habitats/level.py	Sat Sep 17 14:53:18 2011 +0200
+++ b/mamba/habitats/level.py	Sat Sep 17 15:19:57 2011 +0200
@@ -11,9 +11,10 @@
 
 
 class LevelHabitat(Habitat):
-    def __init__(self, level, go_menu):
+    def __init__(self, level, go_menu, go_next_level):
         super(LevelHabitat, self).__init__()
         self.go_menu = go_menu
+        self.go_next_level = go_next_level
         self.world = World(level)
         game_widget = GameWidget(self.world)
         self.container.add(game_widget)
@@ -30,6 +31,6 @@
         if not self.world.pause():
             return False
         self.display_dialog(
-            MessageBox((300, 200), 'Level complete!', self.go_menu))
+            MessageBox((300, 200), 'Level complete!', self.go_next_level))
         level_done(self.world.level.unique_name())
         return True
--- a/mamba/habitats/levelmenu.py	Sat Sep 17 14:53:18 2011 +0200
+++ b/mamba/habitats/levelmenu.py	Sat Sep 17 15:19:57 2011 +0200
@@ -63,9 +63,14 @@
 
     def level_selected(self, ev, widget, name):
         from mamba.habitats.level import LevelHabitat
-        NewHabitatEvent.post(LevelHabitat(widget.level, self.go_menu))
+        next_level = self.mk_next_level(name)
+        NewHabitatEvent.post(
+            LevelHabitat(widget.level, self.go_menu, next_level))
         return True
 
+    def mk_next_level(self, name):
+        return self.go_menu
+
     @classmethod
     def go_menu(cls):
         NewHabitatEvent.post(cls())
@@ -84,6 +89,24 @@
 
     level_namespace = 'official'
 
+    def mk_next_level(self, name):
+        levels = self.list_levels()
+        if name not in levels:
+            return self.go_menu
+        idx = levels.index(name) + 1
+        if idx >= len(levels):
+            return self.go_menu
+        next_name = levels[idx]
+
+        def next_level():
+            from mamba.habitats.level import LevelHabitat
+            next_level = self.mk_next_level(next_name)
+            NewHabitatEvent.post(LevelHabitat(self.get_level(next_name),
+                                              self.go_menu, next_level))
+
+        print "next_level end"
+        return next_level
+
     def list_levels(self):
         if not OFFICIAL_LEVELS:
             OFFICIAL_LEVELS.extend(get_official_levels())