def build_arena_list(chapters_list, outfile): root = mml.Node('arenas', '_') for chapter in chapters_list: name = filename(chapter[0])[:2] render_arenas(chapter, 'atlas_' + name + '.png') chapter_node = mml.Node('chapter', name) for arena in chapter: contents = open(arena, 'r') tree = mml.deserialize(contents.read()) contents.close() max_players = '0' for child in tree.children: if child.name == 'max_players': max_players = child.value arena_node = mml.Node('greed_assets/' + filename(arena), max_players) name_node = mml.Node('name', tree.value) arena_node.children.append(name_node) chapter_node.children.append(arena_node) root.children.append(chapter_node) out = open(outfile, 'w') out.write(mml.serialize(root)) out.close()
def query(request): #print '\nQuery: request: ', request , ' -- end\n' response = HttpResponse(mimetype="text/plain") try: tree = mml.deserialize(request.META['QUERY_STRING']) except Exception: response.status_code = 400 # Bad Request response.write('Bad query format') return response if len(tree.children) != 5: response.status_code = 400 # Bad Request response.write('Bad query format. 5 fields required, got ') response.write(len(tree.children)) return response #for i in record.objects.values_list(): # print i #print '\n' fields = dict( [(tree.children[i].name, tree.children[i].value) for i in range(5)] ) startTime = datetime.datetime(*time.strptime(fields['startTime'], '%Y%m%d%H%M%S')[0:6] ) endTime = datetime.datetime(*time.strptime(fields['endTime'], '%Y%m%d%H%M%S')[0:6] ) results = record.objects.filter(gid=fields['gid']) if startTime < endTime: results = results.filter(time__gt=startTime).filter(time__lt=endTime) elif startTime > endTime: print 'startTime > endTime' results = results.order_by('weight')[fields['startEntry'] : fields['startEntry'] + fields['entryCount']] resp = mml.Node( 'entries', str(len(results)) ) for r in results: entry = (mml.Node( 'entry', '_')) entry.children.append(mml.Node('gid', r.gid)) entry.children.append(mml.Node('uid', r.uid)) entry.children.append(mml.Node('time', r.time.strftime('%Y%m%d%H%M%S'))) entry.children.append(mml.Node('weight', str(r.weight)) ) entry.children.append(mml.Node('data', r.data)) resp.children.append(entry) response.write(mml.serialize(resp)) response.status_code = 201 # Created return response
def compress(arena_mml, mml_path, out_path): (folder, mml_filename) = os.path.split(mml_path) for child in arena_mml.children: if child.name == 'walls' or child.name == 'tex': (img_directory, img_filename) = os.path.split(child.value) new_img_filename = img_filename.replace('tga', 'png') if not os.path.exists(folder + '/' + new_img_filename): img = Image.open(folder + '/' + img_filename) img.save(folder + '/' + new_img_filename, 'png') child.value = img_directory + '/' + new_img_filename os.remove(folder + '/' + img_filename) arena_file = open(out_path, 'w') arena_file.write(mml.serialize(arena_mml)) arena_file.close()
img = img.resize((img.size[0]/2, img.size[1]/2), Image.ANTIALIAS) img_hd = Image.open(prop.value) if prop.name == 'def': grid = parse_puzzle_def(prop.value) if img == None or grid == None: raise RuntimeError('Bad puzzle ' + puzzle.value + ' description') slices = slice(grid, img, img_hd) add_to_atlas(slices, puzzle.value) if __name__ == '__main__': usage = '%prog puzzles.mml OUT' parser = OptionParser(usage=usage) (opt, args) = parser.parse_args(sys.argv) if len(args) != 3: parser.error('You must provide puzzles desc and output destination') desc_file = open(args[1], 'r') desc_mml = mml.deserialize(desc_file.read()) tiles_mml = mml.Node('puzzle_tiles', '_') parse_puzzles(desc_mml) save_current_atlas() out = open(args[2], 'w') out.write(mml.serialize(tiles_mml))