changeset 361:d4062344d8f4

Level namespaces (for telling that a level is complete, no matter where it came from)
author Stefano Rivera <stefano@rivera.za.net>
date Fri, 16 Sep 2011 23:53:34 +0200
parents bac829cccd35
children cc8be536a7fc
files mamba/__main__.py mamba/gamestate.py mamba/habitats/editor.py mamba/habitats/level.py mamba/habitats/levelmenu.py mamba/habitats/mainmenu.py mamba/habitats/userlevelmenu.py mamba/level.py
diffstat 8 files changed, 19 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/__main__.py	Fri Sep 16 23:53:49 2011 +0200
+++ b/mamba/__main__.py	Fri Sep 16 23:53:34 2011 +0200
@@ -32,9 +32,10 @@
     load_levels()
 
     if options.edit:
-        start = EditorHabitat(Level(options.level))
+        start = EditorHabitat(Level(options.level, 'official'))
     elif options.level is not None:
-        start = LevelHabitat(Level(options.level), LevelMenu.go_menu)
+        start = LevelHabitat(Level(options.level, 'official'),
+                             LevelMenu.go_menu)
     else:
         start = MainMenu()
 
--- a/mamba/gamestate.py	Fri Sep 16 23:53:49 2011 +0200
+++ b/mamba/gamestate.py	Fri Sep 16 23:53:34 2011 +0200
@@ -14,7 +14,6 @@
 
 
 def level_done(level_name):
-    assert level_name in levels
     done_levels.add(level_name)
     save_state()
 
--- a/mamba/habitats/editor.py	Fri Sep 16 23:53:49 2011 +0200
+++ b/mamba/habitats/editor.py	Fri Sep 16 23:53:34 2011 +0200
@@ -230,7 +230,7 @@
 
     def load_level(self, ev, widget, level_name):
         try:
-            new_level = Level(level_name)
+            new_level = Level(level_name, 'official')
         except (IOError, InvalidMapError, pygame.error), error:
             message = MessageBox((300, 300),
                     'Loading Level Failed: %s' % error, color='red')
--- a/mamba/habitats/level.py	Fri Sep 16 23:53:49 2011 +0200
+++ b/mamba/habitats/level.py	Fri Sep 16 23:53:34 2011 +0200
@@ -32,5 +32,5 @@
                                 self.go_menu)
         self.container.add(messagebox)
         messagebox.grab_focus()
-        level_done(self.world.level.level_name)
+        level_done(self.world.level.unique_name())
         return True
--- a/mamba/habitats/levelmenu.py	Fri Sep 16 23:53:49 2011 +0200
+++ b/mamba/habitats/levelmenu.py	Fri Sep 16 23:53:34 2011 +0200
@@ -12,6 +12,8 @@
 
 class LevelMenu(Habitat):
 
+    level_namespace = 'official'
+
     def __init__(self):
         super(LevelMenu, self).__init__()
         self.level_buttons = {}
@@ -22,7 +24,7 @@
             level = self.get_level(name)
             button = LevelButton((20 + 120 * (i % WIDTH),
                                   20 + 120 * (i // WIDTH)),
-                                 level, done=name in done_levels)
+                                 level)
             button.add_callback('clicked', self.level_selected, name)
             container.add(button)
             self.level_buttons[name] = button
@@ -34,11 +36,11 @@
         return levels
 
     def get_level(self, name):
-        return Level(name)
+        return Level(name, self.level_namespace)
 
     def update_buttons(self):
-        for name, button in self.level_buttons.iteritems():
-            button.done = name in done_levels
+        for button in self.level_buttons.itervalues():
+            button.done = button.level.unique_name() in done_levels
 
     def level_selected(self, ev, widget, name):
         from mamba.habitats.level import LevelHabitat
--- a/mamba/habitats/mainmenu.py	Fri Sep 16 23:53:49 2011 +0200
+++ b/mamba/habitats/mainmenu.py	Fri Sep 16 23:53:34 2011 +0200
@@ -47,7 +47,7 @@
 
     def edit_event(self, ev, widget):
         from mamba.habitats.editor import EditorHabitat
-        NewHabitatEvent.post(EditorHabitat(Level('dev')))
+        NewHabitatEvent.post(EditorHabitat(Level('dev', 'official')))
         return True
 
     def quit_keydown_event(self, ev, widget):
--- a/mamba/habitats/userlevelmenu.py	Fri Sep 16 23:53:49 2011 +0200
+++ b/mamba/habitats/userlevelmenu.py	Fri Sep 16 23:53:34 2011 +0200
@@ -9,6 +9,7 @@
 
 class UserLevelMenu(LevelMenu):
 
+    level_namespace = 'curated'
     LEVEL_SERVER_URL = LEVEL_SERVER + "curated/"
     TIMEOUT = 5.0  # in seconds
     CACHE = {}
@@ -30,7 +31,7 @@
         for name in levels:
             try:
                 source = cls._url_data("level/%s" % name)
-                level = Level(name, source)
+                level = Level(name, cls.level_namespace, source)
             except:
                 print "Failed to download online level %r" % name
                 continue
--- a/mamba/level.py	Fri Sep 16 23:53:49 2011 +0200
+++ b/mamba/level.py	Fri Sep 16 23:53:34 2011 +0200
@@ -89,8 +89,9 @@
 
 
 class Level(object):
-    def __init__(self, level_name, source=None):
+    def __init__(self, level_name, level_namespace, source=None):
         self.level_name = level_name
+        self.level_namespace = level_namespace
         self.source = source
         self.load_level_data()
 
@@ -131,6 +132,9 @@
         for sprite_ascii in self.sprites_ascii:
             save_file.write('%s\n' % sprite_ascii)
 
+    def unique_name(self):
+        return '/'.join((self.level_namespace, self.level_name))
+
     def update_tiles_ascii(self):
         """Resync tiles and tile_ascii"""
         for i, tile_row in enumerate(self.tiles):