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