# HG changeset patch # User Neil Muller # Date 1378557027 -7200 # Node ID 4c60df80b91b743e8deb2d886c2eeb2151e454f7 # Parent b9c152fb11119f4d24377747b30168fcdcb7982e Don't allow placing points outside the level diff -r b9c152fb1111 -r 4c60df80b91b tools/area_editor.py --- a/tools/area_editor.py Sat Sep 07 14:26:47 2013 +0200 +++ b/tools/area_editor.py Sat Sep 07 14:30:27 2013 +0200 @@ -73,6 +73,13 @@ self.lookup = {} self._move_poly = None + def _in_bounds(self, pos): + if pos[0] < 0 or pos[0] >= self.x: + return False + if pos[1] < 0 or pos[1] >= self.y: + return False + return True + def load(self, space): super(EditorLevel, self).load(space) # Needed to fill in the lookup dict @@ -86,12 +93,15 @@ def add_point(self, poly_index, pos): self.polygons.setdefault(poly_index, []) + if not self._in_bounds(pos): + return False if not self.polygons[poly_index]: point = self.point_to_pymunk(pos) self.polygons[poly_index].append(point) else: add_pos = self.point_to_pymunk(pos) self.polygons[poly_index].append(add_pos) + return True def delete_point(self, index): if index in self.polygons and len(self.polygons[index]) > 0: @@ -106,8 +116,9 @@ # Too small return False first = self.polygons[index][0] - self.add_point(index, self.point_to_pygame(first)) - return True + if self.add_point(index, self.point_to_pygame(first)): + return True + return False def add_line(self, start_pos, end_pos): startpoint = self.point_to_pymunk(start_pos) @@ -599,7 +610,8 @@ self._move_view((10, 0)) elif self.cur_poly and ev.button == 1: # Add a point - self.level.add_point(self.cur_poly, snapped_pos) + if not self.level.add_point(self.cur_poly, snapped_pos): + alert("Failed to place point") elif ev.button == 3: self._mouse_drag = True