+ def is_gate(self, pos):
+ return self._data[pos[1]][pos[0]] == GATE
+
+ def is_button(self, pos):
+ return self._data[pos[1]][pos[0]] == BUTTON
+
+ def trigger_button(self, pos):
+ if not self.is_button(pos):
+ return False
+ if not self._buttons[pos] == 'active':
+ return False
+ # Find the closest gate down gate and trigger it
+ gate_pos = pos
+
+ self._changed.append((pos, self.get_single_tile(pos)))
+ self._changed.append((gate_pos, self.get_single_tile(pos)))
+
+ def damage_gate(self, pos):
+ if not self.is_gate(pos):
+ return False
+ if self._gates[pos] == -1 or self._gates[pos] == 0:
+ return False
+ self._gates[pos] = self._gates[pos] - 1
+ self._fix_gate_tile(pos)
+ self._changed.append((pos, self.get_single_tile(pos)))
+ return True
+
+ def get_changed_tiles(self):
+ ret = self._changed[:]
+ self._changed = []
+ return ret
+