Mercurial > nagslang
comparison tools/area_editor.py @ 109:817d4a62135c
Partially albowify the level editor
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Mon, 02 Sep 2013 14:09:39 +0200 |
parents | dde91f8c4335 |
children | 6415db718b36 |
comparison
equal
deleted
inserted
replaced
108:dde91f8c4335 | 109:817d4a62135c |
---|---|
17 import pygame | 17 import pygame |
18 import pygame.locals as pgl | 18 import pygame.locals as pgl |
19 | 19 |
20 from albow.root import RootWidget | 20 from albow.root import RootWidget |
21 from albow.widget import Widget | 21 from albow.widget import Widget |
22 from albow.controls import Button, Image | 22 from albow.controls import Button |
23 from albow.resource import get_font | |
24 | 23 |
25 sys.path.append(os.path.join(os.path.dirname(__file__), '..')) | 24 sys.path.append(os.path.join(os.path.dirname(__file__), '..')) |
26 | 25 |
27 from nagslang.constants import SCREEN, FPS | 26 from nagslang.constants import SCREEN |
28 from nagslang.level import Level, POLY_COLORS | 27 from nagslang.level import Level, POLY_COLORS |
29 | 28 |
30 | 29 |
31 # layout constants | 30 # layout constants |
32 MENU_WIDTH = 200 | 31 MENU_WIDTH = 200 |
102 self.point_to_pygame(polygon[-1]), | 101 self.point_to_pygame(polygon[-1]), |
103 self.point_to_pygame(endpoint)) | 102 self.point_to_pygame(endpoint)) |
104 surface_area = pygame.rect.Rect(topleft, SCREEN) | 103 surface_area = pygame.rect.Rect(topleft, SCREEN) |
105 surface.blit(self._surface, (0, 0), surface_area) | 104 surface.blit(self._surface, (0, 0), surface_area) |
106 | 105 |
106 | |
107 class LevelWidget(Widget): | 107 class LevelWidget(Widget): |
108 | 108 |
109 def __init__(self, level): | 109 def __init__(self, level): |
110 super(LevelWidget, self).__init__(pygame.rect.Rect(0, 0, | 110 super(LevelWidget, self).__init__(pygame.rect.Rect(0, 0, |
111 SCREEN[0], SCREEN[1])) | 111 SCREEN[0], SCREEN[1])) |
112 self.level = level | 112 self.level = level |
113 self.pos = (0, 0) | 113 self.pos = (0, 0) |
114 self.filled_mode = False | 114 self.filled_mode = False |
115 self.mouse_pos = None | 115 self.mouse_pos = None |
116 self.cur_poly = None | 116 self.cur_poly = None |
131 new_pos[1] = self.pos[1] | 131 new_pos[1] = self.pos[1] |
132 elif new_pos[1] > self.level.y - SCREEN[1]: | 132 elif new_pos[1] > self.level.y - SCREEN[1]: |
133 new_pos[1] = self.pos[1] | 133 new_pos[1] = self.pos[1] |
134 self.pos = tuple(new_pos) | 134 self.pos = tuple(new_pos) |
135 | 135 |
136 | |
137 def draw(self, surface): | 136 def draw(self, surface): |
138 if (self.cur_poly is not None and self.cur_poly in self.level.polygons | 137 if (self.cur_poly is not None and self.cur_poly in self.level.polygons |
139 and len(self.level.polygons[self.cur_poly])): | 138 and len(self.level.polygons[self.cur_poly])): |
140 # We have an active polygon | 139 # We have an active polygon |
141 mouse_pos = self._level_coordinates(self.mouse_pos) | 140 mouse_pos = self._level_coordinates(self.mouse_pos) |
142 else: | 141 else: |
143 mouse_pos = None | 142 mouse_pos = None |
144 level.draw(surface, self.pos, self.mouse_pos, self.cur_poly, | 143 level.draw(surface, self.pos, mouse_pos, self.cur_poly, |
145 self.filled_mode) | 144 self.filled_mode) |
146 | 145 |
147 def key_down(self, ev): | 146 def key_down(self, ev): |
148 if ev.key == pgl.K_LEFT: | 147 if ev.key == pgl.K_LEFT: |
149 self._move_view((-10, 0)) | 148 self._move_view((-10, 0)) |
150 elif ev.key == pgl.K_RIGHT: | 149 elif ev.key == pgl.K_RIGHT: |
182 self.cur_poly = None | 181 self.cur_poly = None |
183 self.filled_mode = True | 182 self.filled_mode = True |
184 else: | 183 else: |
185 print 'Not all polygons closed, so not filling' | 184 print 'Not all polygons closed, so not filling' |
186 | 185 |
186 def mouse_move(self, ev): | |
187 old_pos = self.mouse_pos | |
188 self.mouse_pos = ev.pos | |
189 if self.cur_poly and old_pos != self.mouse_pos: | |
190 self.invalidate() | |
191 | |
192 def mouse_down(self, ev): | |
193 if self.cur_poly: | |
194 # Add a point | |
195 self.level.add_point(self.cur_poly, | |
196 self._level_coordinates(ev.pos)) | |
187 | 197 |
188 | 198 |
189 class EditorApp(RootWidget): | 199 class EditorApp(RootWidget): |
190 | 200 |
191 def __init__(self, level, surface): | 201 def __init__(self, level, surface): |
197 quit_but = Button('Quit', action=self.quit) | 207 quit_but = Button('Quit', action=self.quit) |
198 quit_but.rect = pygame.rect.Rect(0, 0, MENU_WIDTH, MENU_BUTTON_HEIGHT) | 208 quit_but.rect = pygame.rect.Rect(0, 0, MENU_WIDTH, MENU_BUTTON_HEIGHT) |
199 quit_but.rect.move_ip(SCREEN[0], 25) | 209 quit_but.rect.move_ip(SCREEN[0], 25) |
200 self.add(quit_but) | 210 self.add(quit_but) |
201 | 211 |
202 # elif ev.type == pgl.MOUSEBUTTONDOWN and self.cur_poly: | |
203 # # Add a point | |
204 # self.level.add_point(self.cur_poly, | |
205 # self._level_coordinates(ev.pos)) | |
206 # elif ev.type == pgl.MOUSEMOTION: | |
207 # self.mouse_pos = ev.pos | |
208 # self.draw() | |
209 # pygame.display.flip() | |
210 # clock.tick(FPS) | |
211 | |
212 def key_down(self, ev): | 212 def key_down(self, ev): |
213 if ev.key == pgl.K_ESCAPE: | 213 if ev.key == pgl.K_ESCAPE: |
214 self.quit() | 214 self.quit() |
215 else: | 215 else: |
216 self.level_widget.key_down(ev) | 216 self.level_widget.key_down(ev) |
217 | |
218 def mouse_move(self, ev): | |
219 self.level_widget.mouse_move(ev) | |
217 | 220 |
218 | 221 |
219 if __name__ == "__main__": | 222 if __name__ == "__main__": |
220 if len(sys.argv) == 2: | 223 if len(sys.argv) == 2: |
221 level = EditorLevel(sys.argv[1]) | 224 level = EditorLevel(sys.argv[1]) |
226 print 'Please supply a levelname or levelname and level size' | 229 print 'Please supply a levelname or levelname and level size' |
227 sys.exit() | 230 sys.exit() |
228 pygame.display.init() | 231 pygame.display.init() |
229 pygame.font.init() | 232 pygame.font.init() |
230 pygame.display.set_mode((SCREEN[0] + MENU_WIDTH, SCREEN[1]), | 233 pygame.display.set_mode((SCREEN[0] + MENU_WIDTH, SCREEN[1]), |
231 pgl.SWSURFACE) | 234 pgl.SWSURFACE) |
232 pygame.display.set_caption('Nagslang Area Editor') | 235 pygame.display.set_caption('Nagslang Area Editor') |
233 pygame.key.set_repeat(200, 100) | 236 pygame.key.set_repeat(200, 100) |
234 app = EditorApp(level, pygame.display.get_surface()) | 237 app = EditorApp(level, pygame.display.get_surface()) |
235 app.run() | 238 app.run() |