Hook up some stuff to the settings options
[erdslangetjie.git] / erdslangetjie / level.py
index fc23cc626238bb965d69eea370098cffad96293f..2246b1f2acd6910aa2e3bc17ca0b5f10354d41ea 100644 (file)
@@ -228,8 +228,7 @@ class Level(object):
         if tile == WALL or tile == ENTRY:
             return True
         if tile == GATE:
-            print tile, pos, self._gates[pos]
-            if self._gates[pos] != -1:
+            if self._gates[pos] > 0:
                 return True
         return False
 
@@ -237,11 +236,20 @@ class Level(object):
         return abs(pos1[0] - pos2[0]) + abs(pos1[1] - pos2[1])
 
     def is_gate(self, pos):
+        if not self._in_limits(pos):
+            return False
         return self._data[pos[1]][pos[0]] == GATE
 
     def is_button(self, pos):
+        if not self._in_limits(pos):
+            return False
         return self._data[pos[1]][pos[0]] == BUTTON
 
+    def is_wall(self, pos):
+        if not self._in_limits(pos):
+            return True
+        return self._data[pos[1]][pos[0]] == WALL
+
     def trigger_button(self, pos):
         if not self.is_button(pos):
             return False
@@ -256,20 +264,18 @@ class Level(object):
                 gate_pos = cand
                 mindist = dist
         if gate_pos:
-            self._buttons[pos] == 'pressed'
+            self._buttons[pos] = 'pressed'
             self._gates[gate_pos] = 3  # Raise gate
             self._fix_tile(pos)
             self._fix_tile(gate_pos)
 
     def damage_gate(self, pos):
         if not self.is_gate(pos):
-            return False
+            return
         if self._gates[pos] == -1 or self._gates[pos] == 0:
-            return False
+            return
         self._gates[pos] = self._gates[pos] - 1
-        self._fix_gate_tile(pos)
-        self._changed.append((pos, self.get_single_tile(pos)))
-        return True
+        self._fix_tile(pos)
 
     def get_changed_tiles(self):
         ret = self._changed[:]
@@ -282,8 +288,9 @@ 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()
@@ -293,24 +300,32 @@ class LevelList(object):
                 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