+ return self._tiles
+
+ def get_single_tile(self, pos):
+ return self._tiles[pos[1]][pos[0]]
+
+ def get_tile_type(self, pos):
+ return self._data[pos[1]][pos[0]]
+
+ def set_tile_type(self, pos, new_type):
+ # Setting the type resets any state anyway, so
+ if pos in self._gates:
+ del self._gates[pos]
+ if pos in self._buttons:
+ del self._buttons[pos]
+ self._data[pos[1]][pos[0]] = new_type
+ new_tile = self._get_tile_image(pos, new_type)
+ self._tiles[pos[1]][pos[0]] = new_tile
+ self._changed.append((pos, new_tile))
+ # Also update neighbourhood for wall types, etc.
+ for new_pos in [(pos[0] - 1, pos[1]), (pos[0] + 1, pos[1]),
+ (pos[0] - 1, pos[1] - 1), (pos[0] + 1, pos[1] + 1),
+ (pos[0], pos[1] - 1), (pos[0], pos[1] + 1),
+ (pos[0] - 1, pos[1] + 1), (pos[0] + 1, pos[1] - 1)]:
+ if not self._in_limits(new_pos):
+ continue
+ # Update display to changed status
+ self._fix_tile(new_pos)
+
+ def _fix_tile(self, pos):
+ tile = self._data[pos[1]][pos[0]]
+ new_tile = self._get_tile_image(pos, tile)
+ self._tiles[pos[1]][pos[0]] = new_tile
+ self._changed.append((pos, new_tile))
+
+ def get_size(self):
+ return len(self._tiles[0]), len(self._tiles)