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()