Mercurial > nagslang
comparison tools/area_editor.py @ 255:d4928d4a661a
Object editing
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Thu, 05 Sep 2013 00:05:03 +0200 |
parents | 611370331bd1 |
children | 521f73061872 |
comparison
equal
deleted
inserted
replaced
254:e86d1b8f37e2 | 255:d4928d4a661a |
---|---|
30 from albow.table_view import TableView, TableColumn | 30 from albow.table_view import TableView, TableColumn |
31 | 31 |
32 from nagslang.options import parse_args | 32 from nagslang.options import parse_args |
33 from nagslang.constants import SCREEN | 33 from nagslang.constants import SCREEN |
34 from nagslang.level import Level, POLY_COLORS, LINE_COLOR | 34 from nagslang.level import Level, POLY_COLORS, LINE_COLOR |
35 from nagslang.yamlish import load_s | |
35 import nagslang.enemies as ne | 36 import nagslang.enemies as ne |
36 import nagslang.game_object as ngo | 37 import nagslang.game_object as ngo |
37 import nagslang.puzzle as np | 38 import nagslang.puzzle as np |
38 | 39 |
39 # layout constants | 40 # layout constants |
243 | 244 |
244 class EditClassDialog(Dialog): | 245 class EditClassDialog(Dialog): |
245 | 246 |
246 def __init__(self, classname, cls, data): | 247 def __init__(self, classname, cls, data): |
247 super(EditClassDialog, self).__init__() | 248 super(EditClassDialog, self).__init__() |
249 self.classname = classname | |
248 self.rect = pygame.rect.Rect(0, 0, 800, 550) | 250 self.rect = pygame.rect.Rect(0, 0, 800, 550) |
249 title = Label("Editing %s" % classname) | 251 title = Label("Editing %s" % classname) |
250 title.rect = pygame.rect.Rect(100, 10, 600, 25) | 252 title.rect = pygame.rect.Rect(100, 10, 600, 25) |
251 self.add(title) | 253 self.add(title) |
252 requires = cls.requires() | 254 requires = cls.requires() |
261 field.rect = pygame.rect.Rect(220, y, 400, 25) | 263 field.rect = pygame.rect.Rect(220, y, 400, 25) |
262 self.add(field) | 264 self.add(field) |
263 if data is not None: | 265 if data is not None: |
264 if requirement in data: | 266 if requirement in data: |
265 field.set_text('%s' % data[requirement]) | 267 field.set_text('%s' % data[requirement]) |
266 elif 'args' in data: | 268 elif 'args' in data and requirement != 'name': |
267 # NB: The ordering assumptions in requires should make | 269 # NB: The ordering assumptions in requires should make |
268 # this safe, but it's really, really, really fragile | 270 # this safe, but it's really, really, really fragile |
269 field.set_text('%s' % data['args'][index]) | 271 try: |
270 index += 1 | 272 field.set_text('%s' % data['args'][index]) |
273 index += 1 | |
274 except IndexError: | |
275 # Assumed to be arguments with the default value | |
276 pass | |
271 self.fields[requirement] = field | 277 self.fields[requirement] = field |
272 hintlabel = Label(hint) | 278 hintlabel = Label(hint) |
273 hintlabel.rect = pygame.rect.Rect(640, y, 100, 25) | 279 hintlabel.rect = pygame.rect.Rect(640, y, 100, 25) |
274 self.add(hintlabel) | 280 self.add(hintlabel) |
275 y += 30 | 281 y += 30 |
280 row = Row(buttons) | 286 row = Row(buttons) |
281 row.rect = pygame.rect.Rect(250, 500, 700, 50) | 287 row.rect = pygame.rect.Rect(250, 500, 700, 50) |
282 self.add(row) | 288 self.add(row) |
283 | 289 |
284 def get_data(self): | 290 def get_data(self): |
285 return '' | 291 result = {} |
292 result['classname'] = self.classname | |
293 args = [] | |
294 # We arrange to bounce this through yaml'ish to convert | |
295 # stuff to the expected type | |
296 for val in self.fields: | |
297 text = self.fields[val].get_text() | |
298 if not text: | |
299 # skip empty fields | |
300 continue | |
301 if val == 'name': | |
302 result['name'] = text | |
303 else: | |
304 args.append(' - ' + text) | |
305 data = "args:\n" + '\n'.join(args) | |
306 result['args'] = load_s(data)['args'] | |
307 return result | |
286 | 308 |
287 | 309 |
288 class LevelWidget(Widget): | 310 class LevelWidget(Widget): |
289 | 311 |
290 def __init__(self, level): | 312 def __init__(self, level): |