changeset 262:521f73061872

Better reporting of object errors. Fix incorrect assumption about ordering
author Neil Muller <drnlmuller@gmail.com>
date Thu, 05 Sep 2013 00:37:23 +0200
parents db7c8e74efb4
children 6c554ce627e3
files tools/area_editor.py
diffstat 1 files changed, 17 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- 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):