# HG changeset patch # User Neil Muller # Date 1378334243 -7200 # Node ID 521f73061872817b1570de402652786fbd2e3da6 # Parent db7c8e74efb427c0bb264b98c88fb2a6feeb176c Better reporting of object errors. Fix incorrect assumption about ordering diff -r db7c8e74efb4 -r 521f73061872 tools/area_editor.py --- a/tools/area_editor.py Thu Sep 05 00:36:30 2013 +0200 +++ b/tools/area_editor.py Thu Sep 05 00:37:23 2013 +0200 @@ -197,18 +197,19 @@ mod = ngo return getattr(mod, classname) - def try_new_object(self, target, new, old=None): + def try_new_object(self, classname, target, new, old=None): if old in target: target.remove(old) try: target.append(new) self.reset_objs() return True - except Exception: + except Exception as e: target.remove(new) if old is not None: target.append(old) self.reset_objs() + alert("Failed to update object %s: %s" % (classname, e)) return False @@ -251,11 +252,11 @@ title = Label("Editing %s" % classname) title.rect = pygame.rect.Rect(100, 10, 600, 25) self.add(title) - requires = cls.requires() + self.requires = cls.requires() y = 40 self.fields = {} index = 0 - for requirement, hint in requires: + for requirement, hint in self.requires: label = Label(requirement) label.rect = pygame.rect.Rect(40, y, 200, 25) self.add(label) @@ -293,7 +294,7 @@ args = [] # We arrange to bounce this through yaml'ish to convert # stuff to the expected type - for val in self.fields: + for val, _ in self.requires: text = self.fields[val].get_text() if not text: # skip empty fields @@ -503,10 +504,9 @@ cls = self.level.get_class(choice['classname']) edited = self._edit_class(choice['classname'], cls, choice) if edited is not None: - if not self.level.try_new_object(self.level._game_objects, - edited, choice): - alert('Failed to update GameObject %s' - % choice['classname']) + self.level.try_new_object(choice["classname"], + self.level._game_objects, + edited, choice) elif res == 'Delete': self.level._game_objects.remove(choice) self.level.reset_objs() @@ -521,10 +521,8 @@ cls = self.level.get_class(choice['classname'], ne) edited = self._edit_class(choice['classname'], cls, choice) if edited is not None: - if not self.level.try_new_object(self.level._enemies, - edited, choice): - alert('Failed to update Enemy %s' - % choice['classname']) + self.level.try_new_object(choice["classname"], + self.level._enemies, edited, choice) elif res == 'Delete': self.level._enemies.remove(choice) self.level.reset_objs() @@ -558,9 +556,8 @@ cls = choice['class'] new_cls = self._edit_class(classname, cls, None) if new_cls is not None: - if not self.level.try_new_object(self.level._game_objects, - new_cls, None): - alert('Failed to add GameObject %s' % classname) + self.level.try_new_object(classname, self.level._game_objects, + new_cls, None) def add_enemy(self): classes = ne.get_editable_enemies() @@ -572,9 +569,8 @@ cls = choice['class'] new_cls = self._edit_class(classname, cls, None) if new_cls is not None: - if not self.level.try_new_object(self.level._enemies, - new_cls, None): - alert('Failed to add Enemy %s' % classname) + self.level.try_new_object(classname, self.level._enemies, + new_cls, None) def add_puzzler(self): classes = np.get_editable_puzzlers() @@ -586,9 +582,8 @@ cls = choice['class'] new_cls = self._edit_class(classname, cls, None) if new_cls is not None: - if not self.level.try_new_object(self.level._game_objects, - new_cls, None): - alert('Failed to add Puzzler %s' % classname) + self.level.try_new_object(classname, self.level._game_objects, + new_cls, None) class PolyButton(Button):