Mercurial > nagslang
comparison tools/area_editor.py @ 115:6415db718b36
More albow
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Mon, 02 Sep 2013 15:04:42 +0200 |
parents | 817d4a62135c |
children | ecbcf6569fdb |
comparison
equal
deleted
inserted
replaced
114:d1a96fc62d26 | 115:6415db718b36 |
---|---|
26 from nagslang.constants import SCREEN | 26 from nagslang.constants import SCREEN |
27 from nagslang.level import Level, POLY_COLORS | 27 from nagslang.level import Level, POLY_COLORS |
28 | 28 |
29 | 29 |
30 # layout constants | 30 # layout constants |
31 MENU_WIDTH = 200 | |
32 MENU_BUTTON_HEIGHT = 35 | 31 MENU_BUTTON_HEIGHT = 35 |
32 MENU_PAD = 6 | |
33 MENU_HALF_PAD = MENU_PAD // 2 | |
34 MENU_LEFT = SCREEN[0] + MENU_HALF_PAD | |
35 MENU_WIDTH = 200 - MENU_PAD | |
33 | 36 |
34 | 37 |
35 class EditorLevel(Level): | 38 class EditorLevel(Level): |
36 | 39 |
37 def __init__(self, name, x=800, y=600): | 40 def __init__(self, name, x=800, y=600): |
141 else: | 144 else: |
142 mouse_pos = None | 145 mouse_pos = None |
143 level.draw(surface, self.pos, mouse_pos, self.cur_poly, | 146 level.draw(surface, self.pos, mouse_pos, self.cur_poly, |
144 self.filled_mode) | 147 self.filled_mode) |
145 | 148 |
149 def change_poly(self, new_poly): | |
150 self.cur_poly = new_poly | |
151 if self.cur_poly is not None: | |
152 self.filled_mode = False | |
153 | |
146 def key_down(self, ev): | 154 def key_down(self, ev): |
147 if ev.key == pgl.K_LEFT: | 155 if ev.key == pgl.K_LEFT: |
148 self._move_view((-10, 0)) | 156 self._move_view((-10, 0)) |
149 elif ev.key == pgl.K_RIGHT: | 157 elif ev.key == pgl.K_RIGHT: |
150 self._move_view((10, 0)) | 158 self._move_view((10, 0)) |
151 elif ev.key == pgl.K_UP: | 159 elif ev.key == pgl.K_UP: |
152 self._move_view((0, -10)) | 160 self._move_view((0, -10)) |
153 elif ev.key == pgl.K_DOWN: | 161 elif ev.key == pgl.K_DOWN: |
154 self._move_view((0, 10)) | 162 self._move_view((0, 10)) |
155 elif ev.key == pgl.K_1: | 163 elif ev.key in (pgl.K_1, pgl.K_2, pgl.K_3, pgl.K_4, pgl.K_5, pgl.K_6): |
156 self.cur_poly = 1 | 164 self.change_poly(ev.key - pgl.K_0) |
157 self.filled_mode = False | |
158 elif ev.key == pgl.K_2: | |
159 self.cur_poly = 2 | |
160 self.filled_mode = False | |
161 elif ev.key == pgl.K_3: | |
162 self.cur_poly = 3 | |
163 self.filled_mode = False | |
164 elif ev.key == pgl.K_4: | |
165 self.cur_poly = 4 | |
166 self.filled_mode = False | |
167 elif ev.key == pgl.K_5: | |
168 self.cur_poly = 5 | |
169 self.filled_mode = False | |
170 elif ev.key == pgl.K_6: | |
171 self.cur_poly = 6 | |
172 self.filled_mode = False | |
173 elif ev.key == pgl.K_0: | 165 elif ev.key == pgl.K_0: |
174 self.cur_poly = None | 166 self.change_poly(None) |
175 elif ev.key == pgl.K_d and self.cur_poly: | 167 elif ev.key == pgl.K_d and self.cur_poly: |
176 self.level.delete_point(self.cur_poly) | 168 self.level.delete_point(self.cur_poly) |
177 elif ev.key == pgl.K_s: | 169 elif ev.key == pgl.K_s: |
178 level.save() | 170 level.save() |
179 elif ev.key == pgl.K_f: | 171 elif ev.key == pgl.K_f: |
194 # Add a point | 186 # Add a point |
195 self.level.add_point(self.cur_poly, | 187 self.level.add_point(self.cur_poly, |
196 self._level_coordinates(ev.pos)) | 188 self._level_coordinates(ev.pos)) |
197 | 189 |
198 | 190 |
191 class PolyButton(Button): | |
192 """Button for coosing the correct polygon""" | |
193 | |
194 def __init__(self, index, level_widget): | |
195 if index is not None: | |
196 text = "Draw: %s" % index | |
197 else: | |
198 text = 'Exit Draw Mode' | |
199 super(PolyButton, self).__init__(text) | |
200 self.index = index | |
201 self.level_widget = level_widget | |
202 | |
203 def action(self): | |
204 self.level_widget.change_poly(self.index) | |
205 | |
206 | |
199 class EditorApp(RootWidget): | 207 class EditorApp(RootWidget): |
200 | 208 |
201 def __init__(self, level, surface): | 209 def __init__(self, level, surface): |
202 super(EditorApp, self).__init__(surface) | 210 super(EditorApp, self).__init__(surface) |
203 self.level = level | 211 self.level = level |
204 self.level_widget = LevelWidget(self.level) | 212 self.level_widget = LevelWidget(self.level) |
205 self.add(self.level_widget) | 213 self.add(self.level_widget) |
206 | 214 |
215 # Add poly buttons | |
216 y = 15 | |
217 for poly in range(1, 7): | |
218 but = PolyButton(poly, self.level_widget) | |
219 but.rect = pygame.rect.Rect(0, 0, MENU_WIDTH // 2 - MENU_PAD, | |
220 MENU_BUTTON_HEIGHT) | |
221 if poly % 2: | |
222 but.rect.move_ip(MENU_LEFT, y) | |
223 else: | |
224 but.rect.move_ip(MENU_LEFT + MENU_WIDTH // 2 - MENU_HALF_PAD, | |
225 y) | |
226 y += MENU_BUTTON_HEIGHT + MENU_PAD | |
227 self.add(but) | |
228 | |
229 end_poly_but = PolyButton(None, self.level_widget) | |
230 end_poly_but.rect = pygame.rect.Rect(0, 0, MENU_WIDTH, | |
231 MENU_BUTTON_HEIGHT) | |
232 end_poly_but.rect.move_ip(MENU_LEFT, y) | |
233 self.add(end_poly_but) | |
234 y += MENU_BUTTON_HEIGHT + MENU_PAD | |
235 | |
207 quit_but = Button('Quit', action=self.quit) | 236 quit_but = Button('Quit', action=self.quit) |
208 quit_but.rect = pygame.rect.Rect(0, 0, MENU_WIDTH, MENU_BUTTON_HEIGHT) | 237 quit_but.rect = pygame.rect.Rect(0, 0, MENU_WIDTH, MENU_BUTTON_HEIGHT) |
209 quit_but.rect.move_ip(SCREEN[0], 25) | 238 quit_but.rect.move_ip(MENU_LEFT, y) |
210 self.add(quit_but) | 239 self.add(quit_but) |
211 | 240 |
212 def key_down(self, ev): | 241 def key_down(self, ev): |
213 if ev.key == pgl.K_ESCAPE: | 242 if ev.key == pgl.K_ESCAPE: |
214 self.quit() | 243 self.quit() |