Less buggy Kivy 1.7 hackery
[erdslangetjie.git] / erdslangetjie / level.py
index f430f5dd53a27e2def6254aaca778917dd32f7aa..9ebb6f4912525a3f0f34c7589badbb80cf3525af 100644 (file)
@@ -3,6 +3,9 @@
 import os
 from data import load_image, load, filepath
 
+
+from kivy.logger import Logger
+
 WALL = '.'
 FLOOR = ' '
 ENTRY = 'E'
@@ -13,7 +16,7 @@ BUTTON = 'B'
 
 class Level(object):
 
-    def __init__(self, levelfile):
+    def __init__(self, levelfile, name):
         self._data = []
         self.exit_pos = []
         self.enter_pos = None
@@ -21,6 +24,7 @@ class Level(object):
         self._changed = []
         self._gates = {}
         self._buttons = {}
+        self._name = name
         # Because of how kivy's coordinate system works,
         # we reverse the lines so things match up between
         # the file and the display (top of file == top of display)
@@ -29,6 +33,7 @@ class Level(object):
 
     def load_tiles(self):
         """Load the list of tiles for the level"""
+        Logger.info('%s: load tiles' % self._name)
         self._tiles = []
         self._gates = {}
         self._buttons = {}
@@ -288,35 +293,44 @@ class LevelList(object):
     LEVELS = 'level_list'
 
     def __init__(self):
-        self.levels = []
-        self.errors = []
+        self._levels = []
+        self._level_names = []
+        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)
-                level = Level(level_file)
+                level = Level(level_file, line)
                 level_file.close()
                 try:
                     level.validate()
-                    self.levels.append(level)
+                    self._levels.append(level)
+                    self._level_names.append(line)
                 except RuntimeError as err:
-                    self.errors.append(
+                    self._errors.append(
                             'Invalid level %s in level_list: %s' % (line, err))
             else:
-                self.errors.append(
+                self._errors.append(
                     'Level list includes non-existant level %s' % line)
         level_list.close()
         self._cur_level = 0
 
     def get_current_level(self):
-        if self._cur_level < len(self.levels):
-            return self.levels[self._cur_level]
+        if self._cur_level < len(self._levels):
+            return self._levels[self._cur_level]
         else:
             return None
 
     def get_errors(self):
-        return self.errors
+        return self._errors
+
+    def get_level_names(self):
+        return self._level_names
+
+    def set_level_to(self, level_name):
+        if level_name in self._level_names:
+            self._cur_level = self._level_names.index(level_name)
 
     def advance_to_next_level(self):
         self._cur_level += 1