changeset 439:4c60df80b91b

Don't allow placing points outside the level
author Neil Muller <drnlmuller@gmail.com>
date Sat, 07 Sep 2013 14:30:27 +0200
parents b9c152fb1111
children 9eee96966d88
files tools/area_editor.py
diffstat 1 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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