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()
Beispiel #2
0
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()
Beispiel #4
0
				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))