Mercurial > mamba
comparison mamba/habitats/editor.py @ 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 |
comparison
equal
deleted
inserted
replaced
277:82aa91664e27 | 278:f10d06fc64b2 |
---|---|
9 from mamba.widgets.imagebutton import ImageButtonWidget | 9 from mamba.widgets.imagebutton import ImageButtonWidget |
10 from mamba.widgets.messagebox import MessageBox | 10 from mamba.widgets.messagebox import MessageBox |
11 from mamba.widgets.entrybox import EntryBox | 11 from mamba.widgets.entrybox import EntryBox |
12 from mamba.widgets.listbox import ListBox | 12 from mamba.widgets.listbox import ListBox |
13 from mamba.widgets.toollist import ToolListWidget | 13 from mamba.widgets.toollist import ToolListWidget |
14 from mamba.level import Level, Tileset, TILE_MAP, THING_MAP | 14 from mamba.level import Level, Tileset, TILE_MAP, THING_MAP, InvalidMapError |
15 from mamba.data import check_level_exists, list_levels, list_tilesets | 15 from mamba.data import check_level_exists, list_levels, list_tilesets |
16 from mamba.constants import (SCREEN, EDIT_SCREEN, NAME, ESCAPE_KEYS, | 16 from mamba.constants import (SCREEN, EDIT_SCREEN, NAME, ESCAPE_KEYS, |
17 RESERVED_NAMES) | 17 RESERVED_NAMES) |
18 | 18 |
19 MAX_TOOLS = 6 | 19 MAX_TOOLS = 6 |
146 self.edit_widget.set_tool(new_tool) | 146 self.edit_widget.set_tool(new_tool) |
147 self.current_tool.text = 'Tool: %s' % text | 147 self.current_tool.text = 'Tool: %s' % text |
148 self.current_tool.prepare() | 148 self.current_tool.prepare() |
149 | 149 |
150 def save(self, ev, widget): | 150 def save(self, ev, widget): |
151 messagebox = None | 151 message = None |
152 if not self.level.level_name: | 152 if not self.level.level_name: |
153 messagebox = MessageBox((300, 300), 'Please enter a name') | 153 message = MessageBox((300, 300), 'Please enter a name') |
154 elif self.level.level_name in RESERVED_NAMES: | 154 elif self.level.level_name in RESERVED_NAMES: |
155 messagebox = MessageBox((300, 300), 'Reserved level name') | 155 message = MessageBox((300, 300), 'Reserved level name') |
156 if messagebox: | 156 if message: |
157 self.container.add(messagebox) | 157 self.container.add(message) |
158 messagebox.grab_focus() | 158 message.grab_focus() |
159 return | 159 return |
160 self.level.save_level() | 160 self.level.save_level() |
161 | 161 |
162 def new(self, ev, widget): | 162 def new(self, ev, widget): |
163 self.load_level(ev, widget, 'blank') | 163 self.load_level(ev, widget, 'blank') |
174 load_dialog = ListBox((200, 200), 'Select Level', load_list) | 174 load_dialog = ListBox((200, 200), 'Select Level', load_list) |
175 self.container.add(load_dialog) | 175 self.container.add(load_dialog) |
176 load_dialog.grab_focus() | 176 load_dialog.grab_focus() |
177 | 177 |
178 def load_level(self, ev, widget, level_name): | 178 def load_level(self, ev, widget, level_name): |
179 try: | |
180 new_level = Level(level_name) | |
181 except (IOError, InvalidMapError, pygame.error), error: | |
182 message = MessageBox((300, 300), | |
183 'Loading Level Failed: %s' % error, color='red') | |
184 self.container.add(message) | |
185 message.grab_focus() | |
186 return False | |
179 self.container.remove(self.edit_widget) | 187 self.container.remove(self.edit_widget) |
180 self.level = Level(level_name) | 188 self.level = new_level |
181 if level_name in RESERVED_NAMES: | 189 if level_name in RESERVED_NAMES: |
182 self.level.level_name = '' # Special case for new level | 190 self.level.level_name = '' # Special case for new level |
183 self.edit_widget = EditLevelWidget(self.level) | 191 self.edit_widget = EditLevelWidget(self.level) |
184 self.container.add(self.edit_widget) | 192 self.container.add(self.edit_widget) |
185 self.clear_toolbar() | 193 self.clear_toolbar() |
222 load_dialog = ListBox((200, 200), 'Select Level', load_list) | 230 load_dialog = ListBox((200, 200), 'Select Level', load_list) |
223 self.container.add(load_dialog) | 231 self.container.add(load_dialog) |
224 load_dialog.grab_focus() | 232 load_dialog.grab_focus() |
225 | 233 |
226 def change_tileset(self, ev, widget, new_name): | 234 def change_tileset(self, ev, widget, new_name): |
235 self.level.update_tiles_ascii() | |
227 self.level.tileset = Tileset(new_name) | 236 self.level.tileset = Tileset(new_name) |
228 self.level.update_tiles_ascii() | |
229 self.level.restart() | 237 self.level.restart() |
230 self.clear_toolbar() | 238 self.clear_toolbar() |
231 self.setup_toolbar() | 239 self.setup_toolbar() |
232 return True | 240 return True |
233 | 241 |
234 def check_file(self, new_name): | 242 def check_file(self, new_name): |
235 messagebox = None | 243 message = None |
236 if new_name == self.level.level_name: | 244 if new_name == self.level.level_name: |
237 return True # No-op change | 245 return True # No-op change |
238 if not new_name: | 246 if not new_name: |
239 messagebox = MessageBox((300, 300), 'Please enter a name') | 247 message = MessageBox((300, 300), 'Please enter a name') |
240 if new_name in RESERVED_NAMES: | 248 if new_name in RESERVED_NAMES: |
241 # This case is caught by the existance check, but the | 249 # This case is caught by the existance check, but the |
242 # importance of the reserved names means we use a different | 250 # importance of the reserved names means we use a different |
243 # message | 251 # message |
244 messagebox = MessageBox((300, 300), 'Reserved level name') | 252 message = MessageBox((300, 300), 'Reserved level name') |
245 elif check_level_exists(new_name): | 253 elif check_level_exists(new_name): |
246 messagebox = MessageBox((300, 300), 'Name already in use') | 254 message = MessageBox((300, 300), 'Name already in use') |
247 if messagebox: | 255 if message: |
248 self.container.add(messagebox) | 256 self.container.add(message) |
249 messagebox.grab_focus() | 257 message.grab_focus() |
250 return False | 258 return False |
251 self.level.level_name = new_name | 259 self.level.level_name = new_name |
252 self.clear_toolbar() | 260 self.clear_toolbar() |
253 self.setup_toolbar() | 261 self.setup_toolbar() |
254 return True | 262 return True |