Display dialog of levels with errors at startup, rather than crashing
[erdslangetjie.git] / erdslangetjie / level.py
index b5dbe1343861f05958fd89d0c494d8e4f46d613c..2974b88b349adddc1bda0e41e072b0978f0d177b 100644 (file)
@@ -236,15 +236,23 @@ class LevelList(object):
 
     def __init__(self):
         self.levels = []
+        self.errors = []
         level_list = load(self.LEVELS)
         for line in level_list:
             line = line.strip()
             if os.path.exists(filepath(line)):
                 level_file = load(line)
-                self.levels.append(Level(level_file))
+                level = Level(level_file)
                 level_file.close()
+                try:
+                    level.validate()
+                    self.levels.append(level)
+                except RuntimeError as err:
+                    self.errors.append(
+                            'Invalid level %s in level_list: %s' % (line, err))
             else:
-                raise RuntimeError('Level list includes non-existant level %s' % line)
+                self.errors.append(
+                    'Level list includes non-existant level %s' % line)
         level_list.close()
         self._cur_level = 0
 
@@ -254,6 +262,9 @@ class LevelList(object):
         else:
             return None
 
+    def get_errors(self):
+        return self.errors
+
     def advance_to_next_level(self):
         self._cur_level += 1
         return self.get_current_level()