Mercurial > mamba
changeset 278:f10d06fc64b2
Add some robustness against broken levels
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Thu, 15 Sep 2011 18:11:55 +0200 |
parents | 82aa91664e27 |
children | 162bddbbc5d0 |
files | mamba/habitats/editor.py |
diffstat | 1 files changed, 24 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/mamba/habitats/editor.py Thu Sep 15 18:01:43 2011 +0200 +++ b/mamba/habitats/editor.py Thu Sep 15 18:11:55 2011 +0200 @@ -11,7 +11,7 @@ from mamba.widgets.entrybox import EntryBox from mamba.widgets.listbox import ListBox from mamba.widgets.toollist import ToolListWidget -from mamba.level import Level, Tileset, TILE_MAP, THING_MAP +from mamba.level import Level, Tileset, TILE_MAP, THING_MAP, InvalidMapError from mamba.data import check_level_exists, list_levels, list_tilesets from mamba.constants import (SCREEN, EDIT_SCREEN, NAME, ESCAPE_KEYS, RESERVED_NAMES) @@ -148,14 +148,14 @@ self.current_tool.prepare() def save(self, ev, widget): - messagebox = None + message = None if not self.level.level_name: - messagebox = MessageBox((300, 300), 'Please enter a name') + message = MessageBox((300, 300), 'Please enter a name') elif self.level.level_name in RESERVED_NAMES: - messagebox = MessageBox((300, 300), 'Reserved level name') - if messagebox: - self.container.add(messagebox) - messagebox.grab_focus() + message = MessageBox((300, 300), 'Reserved level name') + if message: + self.container.add(message) + message.grab_focus() return self.level.save_level() @@ -176,8 +176,16 @@ load_dialog.grab_focus() def load_level(self, ev, widget, level_name): + try: + new_level = Level(level_name) + except (IOError, InvalidMapError, pygame.error), error: + message = MessageBox((300, 300), + 'Loading Level Failed: %s' % error, color='red') + self.container.add(message) + message.grab_focus() + return False self.container.remove(self.edit_widget) - self.level = Level(level_name) + self.level = new_level if level_name in RESERVED_NAMES: self.level.level_name = '' # Special case for new level self.edit_widget = EditLevelWidget(self.level) @@ -224,29 +232,29 @@ load_dialog.grab_focus() def change_tileset(self, ev, widget, new_name): + self.level.update_tiles_ascii() self.level.tileset = Tileset(new_name) - self.level.update_tiles_ascii() self.level.restart() self.clear_toolbar() self.setup_toolbar() return True def check_file(self, new_name): - messagebox = None + message = None if new_name == self.level.level_name: return True # No-op change if not new_name: - messagebox = MessageBox((300, 300), 'Please enter a name') + message = MessageBox((300, 300), 'Please enter a name') if new_name in RESERVED_NAMES: # This case is caught by the existance check, but the # importance of the reserved names means we use a different # message - messagebox = MessageBox((300, 300), 'Reserved level name') + message = MessageBox((300, 300), 'Reserved level name') elif check_level_exists(new_name): - messagebox = MessageBox((300, 300), 'Name already in use') - if messagebox: - self.container.add(messagebox) - messagebox.grab_focus() + message = MessageBox((300, 300), 'Name already in use') + if message: + self.container.add(message) + message.grab_focus() return False self.level.level_name = new_name self.clear_toolbar()