comparison tools/area_editor.py @ 96:a9b564c38bef

Support showing exterior filled view in the editor
author Neil Muller <drnlmuller@gmail.com>
date Mon, 02 Sep 2013 11:20:34 +0200
parents 5db052531510
children 67f8b06a433d
comparison
equal deleted inserted replaced
95:ecba9550ad8d 96:a9b564c38bef
74 74
75 def delete_point(self, index): 75 def delete_point(self, index):
76 if index in self.polygons and len(self.polygons[index]) > 0: 76 if index in self.polygons and len(self.polygons[index]) > 0:
77 self.polygons[index].pop() 77 self.polygons[index].pop()
78 78
79 def draw(self, surface, topleft, mouse_pos, mouse_poly): 79 def draw(self, surface, topleft, mouse_pos, mouse_poly, filled):
80 self._draw_background(True) 80 self._draw_background(True)
81 # Draw polygons as needed for the editor 81 # Draw polygons as needed for the editor
82 if filled:
83 self._draw_exterior(True)
82 for index, polygon in self.polygons.items(): 84 for index, polygon in self.polygons.items():
83 color = POLY_COLORS[index] 85 color = POLY_COLORS[index]
84 if len(polygon) > 1: 86 if len(polygon) > 1:
85 pointlist = [self.point_to_pygame(p) for p in polygon] 87 pointlist = [self.point_to_pygame(p) for p in polygon]
86 pygame.draw.lines(self._surface, color, False, pointlist, 2) 88 pygame.draw.lines(self._surface, color, False, pointlist, 2)
99 self.level = level 101 self.level = level
100 self.surface = surface 102 self.surface = surface
101 self.pos = (0, 0) 103 self.pos = (0, 0)
102 self.cur_poly = None 104 self.cur_poly = None
103 self.mouse_pos = None 105 self.mouse_pos = None
106 self.filled_mode = False
104 107
105 def move_view(self, offset): 108 def move_view(self, offset):
106 new_pos = [self.pos[0] + offset[0], self.pos[1] + offset[1]] 109 new_pos = [self.pos[0] + offset[0], self.pos[1] + offset[1]]
107 if new_pos[0] < 0: 110 if new_pos[0] < 0:
108 new_pos[0] = self.pos[0] 111 new_pos[0] = self.pos[0]
120 # We have an active polygon 123 # We have an active polygon
121 mouse_pos = self._level_coordinates(self.mouse_pos) 124 mouse_pos = self._level_coordinates(self.mouse_pos)
122 else: 125 else:
123 mouse_pos = None 126 mouse_pos = None
124 self.level.draw(self.surface, self.pos, mouse_pos, 127 self.level.draw(self.surface, self.pos, mouse_pos,
125 self.cur_poly) 128 self.cur_poly, self.filled_mode)
126 129
127 def _level_coordinates(self, pos): 130 def _level_coordinates(self, pos):
128 # Move positions to level values 131 # Move positions to level values
129 if not pos: 132 if not pos:
130 return (0, 0) 133 return (0, 0)
149 self.move_view((0, -10)) 152 self.move_view((0, -10))
150 elif ev.key == pgl.K_DOWN: 153 elif ev.key == pgl.K_DOWN:
151 self.move_view((0, 10)) 154 self.move_view((0, 10))
152 if ev.key == pgl.K_1: 155 if ev.key == pgl.K_1:
153 self.cur_poly = 1 156 self.cur_poly = 1
157 self.filled_mode = False
154 if ev.key == pgl.K_2: 158 if ev.key == pgl.K_2:
155 self.cur_poly = 2 159 self.cur_poly = 2
160 self.filled_mode = False
156 if ev.key == pgl.K_3: 161 if ev.key == pgl.K_3:
157 self.cur_poly = 3 162 self.cur_poly = 3
163 self.filled_mode = False
158 if ev.key == pgl.K_4: 164 if ev.key == pgl.K_4:
159 self.cur_poly = 4 165 self.cur_poly = 4
166 self.filled_mode = False
160 if ev.key == pgl.K_5: 167 if ev.key == pgl.K_5:
161 self.cur_poly = 5 168 self.cur_poly = 5
169 self.filled_mode = False
162 if ev.key == pgl.K_6: 170 if ev.key == pgl.K_6:
163 self.cur_poly = 6 171 self.cur_poly = 6
172 self.filled_mode = False
164 if ev.key == pgl.K_0: 173 if ev.key == pgl.K_0:
165 self.cur_poly = None 174 self.cur_poly = None
166 if ev.key == pgl.K_d and self.cur_poly: 175 if ev.key == pgl.K_d and self.cur_poly:
167 self.level.delete_point(self.cur_poly) 176 self.level.delete_point(self.cur_poly)
168 if ev.key == pgl.K_s: 177 if ev.key == pgl.K_s:
169 level.save() 178 level.save()
179 if ev.key == pgl.K_f:
180 if level.all_closed():
181 self.cur_poly = None
182 self.filled_mode = True
183 else:
184 print 'Not all polygons closed, so not filling'
170 elif ev.type == pgl.MOUSEBUTTONDOWN and self.cur_poly: 185 elif ev.type == pgl.MOUSEBUTTONDOWN and self.cur_poly:
171 # Add a point 186 # Add a point
172 self.level.add_point(self.cur_poly, 187 self.level.add_point(self.cur_poly,
173 self._level_coordinates(ev.pos)) 188 self._level_coordinates(ev.pos))
174 elif ev.type == pgl.MOUSEMOTION: 189 elif ev.type == pgl.MOUSEMOTION: