diff mamba/habitats/editor.py @ 402:001c3797a63b

Editor now uses templates and the user level directory.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 17 Sep 2011 12:56:26 +0200
parents 171c3d817c48
children 38f95fbc3710
line wrap: on
line diff
--- a/mamba/habitats/editor.py	Sat Sep 17 11:45:24 2011 +0200
+++ b/mamba/habitats/editor.py	Sat Sep 17 12:56:26 2011 +0200
@@ -16,7 +16,7 @@
 from mamba.widgets.editsprite import EditSpriteBox
 from mamba.level import Level, Tileset, TILE_MAP, THING_MAP, InvalidMapError
 from mamba.data import (check_level_exists, get_level_list, get_tileset_list,
-        get_track_list)
+        get_track_list, load_file)
 from mamba.constants import (SCREEN, EDIT_SCREEN, NAME, ESCAPE_KEYS,
         RESERVED_NAMES)
 
@@ -201,6 +201,8 @@
             message = MessageBox((300, 300), 'Please enter a name')
         elif self.level.level_name in RESERVED_NAMES:
             message = MessageBox((300, 300), 'Reserved level name')
+        elif '/' in self.level.level_name:
+            message = MessageBox((300, 300), 'Illegal level name')
         try:
             self.level.validate_level()
         except InvalidMapError, error:
@@ -210,32 +212,39 @@
             self.container.add(message)
             message.grab_focus()
             return
-        self.level.save_level()
+        self.level.save_level('user_levels', is_user_dir=True)
         self.refresh_display()
         return True
 
     def new(self, ev, widget):
-        self.load_level(ev, widget, 'blank')
-        return True
+        return self.load(ev, widget, 'levels', subdir='templates')
 
-    def load(self, ev, widget):
+    def load(self, ev, widget, level_dir=None, is_user_dir=False, subdir=''):
+        if level_dir is None:
+            level_dir = 'user_levels'
+            is_user_dir = True
         self.container.paused = True
-        levels = get_level_list()
+        levels = get_level_list('/'.join([level_dir, subdir]), is_user_dir)
         load_list = []
         for level_name in levels:
             if level_name in RESERVED_NAMES:
                 continue
+            if subdir:
+                level_name = '/'.join([subdir, level_name])
             load_button = TextButton((0, 0), level_name)
-            load_button.add_callback('clicked', self.load_level, level_name)
+            load_button.add_callback(
+                'clicked', self.load_level, level_name, level_dir, is_user_dir)
             load_list.append(load_button)
         load_dialog = ListBox((200, 200), 'Select Level', load_list, 6)
         self.container.add(load_dialog)
         load_dialog.grab_focus()
         return True
 
-    def load_level(self, ev, widget, level_name):
+    def load_level(self, ev, widget, level_name, level_dir, is_user_dir):
         try:
-            new_level = Level(level_name, 'official')
+            source = load_file("%s/%s.txt" % (level_dir, level_name),
+                               is_user_dir=is_user_dir)
+            new_level = Level(level_name, 'user', source.read())
         except (IOError, InvalidMapError, pygame.error), error:
             message = MessageBox((300, 300),
                     'Loading Level Failed: %s' % error, color='red')
@@ -353,7 +362,7 @@
             # importance of the reserved names means we use a different
             # message
             message = MessageBox((300, 300), 'Reserved level name')
-        elif check_level_exists(new_name):
+        elif check_level_exists(new_name, 'user_levels', is_user_dir=True):
             message = MessageBox((300, 300), 'Name already in use')
         if message:
             self.container.paused = True