forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			105 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			105 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | # Convert Python logic node definition to Haxe | ||
|  | 
 | ||
|  | import json | ||
|  | import glob | ||
|  | import sys | ||
|  | 
 | ||
|  | def socket_type(s): | ||
|  | 	if s == 'LnxNodeSocketAction': | ||
|  | 		return 'ACTION' | ||
|  | 	elif s == 'LnxNodeSocketObject': | ||
|  | 		return 'OBJECT' | ||
|  | 	elif s == 'LnxNodeSocketAnimAction': | ||
|  | 		return 'ANIMACTION' | ||
|  | 	elif s == 'LnxNodeSocketArray': | ||
|  | 		return 'ARRAY' | ||
|  | 	elif s == 'NodeSocketShader': | ||
|  | 		return 'SHADER' | ||
|  | 	elif s == 'NodeSocketInt': | ||
|  | 		return 'INTEGER' | ||
|  | 	elif s == 'NodeSocketFloat': | ||
|  | 		return 'VALUE' | ||
|  | 	elif s == 'NodeSocketString': | ||
|  | 		return 'STRING' | ||
|  | 	elif s == 'NodeSocketBool': | ||
|  | 		return 'BOOL' | ||
|  | 	elif s == 'NodeSocketVector': | ||
|  | 		return 'VECTOR' | ||
|  | 	elif s == 'NodeSocketColor': | ||
|  | 		return 'RGBA' | ||
|  | 	else: | ||
|  | 		return s | ||
|  | 
 | ||
|  | # path = '/Users/onek8/Downloads/Leenkx/lnxsdk/leenkx/blender/lnx.logicnode' | ||
|  | path = sys.argv[1] | ||
|  | modules = glob.glob(path + "/*.py") | ||
|  | out = {} | ||
|  | out['categories'] = [] | ||
|  | 
 | ||
|  | for m in modules: | ||
|  | 	if m == '__init__.py': | ||
|  | 		continue | ||
|  | 	if m == 'lnx_nodes.py': | ||
|  | 		continue | ||
|  | 	with open(m) as f: | ||
|  | 		n = {} | ||
|  | 		n['inputs'] = [] | ||
|  | 		n['outputs'] = [] | ||
|  | 		n['buttons'] = [] | ||
|  | 		but = None | ||
|  | 		lines = f.read().splitlines() | ||
|  | 		for l in lines: | ||
|  | 			l = l.strip() | ||
|  | 			if l == '' or l == '],': | ||
|  | 				continue | ||
|  | 
 | ||
|  | 			# if l.startswith('property'): | ||
|  | 			if 'EnumProperty' in l: # TODO: enum only for now | ||
|  | 				but = {} | ||
|  | 				but['name'] = 'property' + l.split(' = ', 1)[0][-1] | ||
|  | 				but['type'] = 'ENUM' | ||
|  | 				but['default_value'] = 0 | ||
|  | 				but['data'] = [] | ||
|  | 				n['buttons'].append(but) | ||
|  | 				continue | ||
|  | 			elif but != None: | ||
|  | 				if l.endswith(')'): | ||
|  | 					but = None | ||
|  | 					continue | ||
|  | 				ar = l.split("'") | ||
|  | 				but['data'].append(ar[1]) | ||
|  | 
 | ||
|  | 			if l.startswith('bl_idname'): | ||
|  | 				ar = l.split("'") | ||
|  | 				n['type'] = ar[1][2:] | ||
|  | 			if l.startswith('bl_label'): | ||
|  | 				ar = l.split("'") | ||
|  | 				n['name'] = ar[1] | ||
|  | 			if l.startswith('self.inputs.new('): | ||
|  | 				ar = l.split("'") | ||
|  | 				soc = {} | ||
|  | 				soc['type'] = socket_type(ar[1]) | ||
|  | 				soc['name'] = ar[3] | ||
|  | 				n['inputs'].append(soc) | ||
|  | 			if l.startswith('self.outputs.new('): | ||
|  | 				ar = l.split("'") | ||
|  | 				soc = {} | ||
|  | 				soc['type'] = socket_type(ar[1]) | ||
|  | 				soc['name'] = ar[3] | ||
|  | 				n['outputs'].append(soc) | ||
|  | 			if l.startswith('add_node('): | ||
|  | 				ar = l.split("'") | ||
|  | 				cat = None | ||
|  | 				for c in out['categories']: | ||
|  | 					if c['name'] == ar[1]: | ||
|  | 						cat = c | ||
|  | 						break | ||
|  | 				if cat == None: | ||
|  | 					cat = {} | ||
|  | 					cat['name'] = ar[1] | ||
|  | 					cat['nodes'] = [] | ||
|  | 					out['categories'].append(cat) | ||
|  | 				cat['nodes'].append(n) | ||
|  | 
 | ||
|  | print(json.dumps(out)) |