Mercurial > mamba
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