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