diff options
Diffstat (limited to 'tools/export/export_lua.py')
-rw-r--r-- | tools/export/export_lua.py | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/tools/export/export_lua.py b/tools/export/export_lua.py new file mode 100644 index 0000000000..6f9bafd611 --- /dev/null +++ b/tools/export/export_lua.py @@ -0,0 +1,209 @@ + +def tw(f,t,st): + for x in range(t): + f.write("\t") + nl = True + if st[-1] == "#": + nl = False + st = st[:-1] + f.write(st) + if nl: + f.write("\n") + + +def write_property_lua(f, tab, name, value, pref = ""): + + tw(f, tab, '%s{ name = "%s",' % (pref, name)) + tab = tab + 1 + + if (type(value)==str): + + tw(f, tab, 'value = "%s",' % value) + tw(f, t, 'type = "string",') + + elif (type(value)==bool): + + + if (value): + tw(f, tab, 'value = true,') + else: + tw(f, tab, 'value = false,') + + tw(f, t, 'type = "bool",') + + elif (type(value)==int): + + tw(f, t, 'type = "int",') + tw(f, tab, 'value = %d,' % value) + + elif (type(value)==float): + + tw(f, t, 'type = "real",') + tw(f, tab, 'value = %f,' % value) + + elif (type(value)==dict): + + tw(f, t, 'type = "dictionary",') + for x in value: + write_property_lua(f,tab,x,value[x]) + + elif (isinstance(value,ObjectTree)): + if (not value._resource): + print("ERROR: Not a resource!!") + tw(f, tab-1, "},") + return + + tw(f, tab, 'type = "resource",') + tw(f, tab, 'resource_type = "%s",' % value._type) + + if (value._res_path!=""): + + tw(f, tab, 'path = "%s",' % value._res_path) + + else: + + tw(f, tab, "value = {") + tab = tab + 1 + tw(f, tab, 'type = "%s",' % value._type) + + for x in value._properties: + write_property_lua(f,tab,x[0],x[1]) + + tab = tab - 1 + tw(f, tab, "},") + + elif (isinstance(value,Color)): + + tw(f, tab, 'type = "color",') + tw(f, tab, 'value = { %.20f, %.20f, %.20f, %.20f },' % (value.r, value.g, value.b, value.a)) + + elif (isinstance(value,Vector3)): + + tw(f, tab, 'type = "vector3",') + tw(f, tab, 'value = { %.20f, %.20f, %.20f },' % (value.x, value.y, value.z)) + + elif (isinstance(value,Quat)): + + tw(f, tab, 'type = "quaternion",') + tw(f, tab, 'value = { %.20f, %.20f, %.20f, %.20f },' % (value.x, value.y, value.z, value.w)) + + elif (isinstance(value,Matrix4x3)): # wtf, blender matrix? + + tw(f, tab, 'type = "transform",') + tw(f, tab, 'value = { #') + for i in range(3): + for j in range(3): + f.write("%.20f, " % value.m[j][i]) + + for i in range(3): + f.write("%.20f, " % value.m[i][3]) + + f.write("},\n") + + elif (type(value)==list): + if (len(value)==0): + tw(f, tab-1, "},") + return + first=value[0] + if (type(first)==int): + + tw(f, tab, 'type = "int_array",') + tw(f, tab, 'value = #') + for i in range(len(value)): + f.write("%d, " % value[i]) + f.write("},\n") + + elif (type(first)==float): + + tw(f, tab, 'type = "real_array",') + tw(f, tab, 'value = #') + for i in range(len(value)): + f.write("%.20f, " % value[i]) + f.write("},\n") + + + elif (type(first)==str): + + tw(f, tab, 'type = "string_array",') + tw(f, tab, 'value = #') + for i in range(len(value)): + f.write('"%s", ' % value[i]) + f.write("},\n") + + elif (isinstance(first,Vector3)): + + tw(f, tab, 'type = "vector3_array",') + tw(f, tab, 'value = #') + for i in range(len(value)): + f.write("{ %.20f, %.20f, %.20f }, " % (value[i].x, value[i].y, value[i].z)) + f.write("},\n") + + elif (isinstance(first,Color)): + + tw(f, tab, 'type = "color_array",') + tw(f, tab, 'value = #') + for i in range(len(value)): + f.write("{ %.20f, %.20f, %.20f, %.20f }, " % (value[i].r, value[i].g, value[i].b, value[i].a)) + f.write("},\n") + + elif (type(first)==dict): + + tw(f, tab, 'type = "dict_array",') + tw(f, tab, 'value = {') + + for i in range(len(value)): + write_property_lua(f,tab+1,str(i+1),value[i]) + + tw(f, tab, '},') + + + tw(f, tab-1, "},") + + + +def write_node_lua(f,tab,tree,path): + + tw(f, tab, '{ type = "%s",') + + if not tree._resource: + tw(f, tab+1, 'meta = {') + write_property_lua(f, tab+3, "name", tree._name) + if path != "": + write_property_lua(f, tab+3, "path", path) + tw(f, tab+1, '},') + + tw(f, tab+1, "properties = {,") + for x in tree._properties: + write_property_lua(f,tab+2,x[0],x[1]) + tw(f, tab+1, "},") + + tw(f, tab, '},') + + + if (path==""): + path="." + else: + if (path=="."): + path=tree._name + else: + path=path+"/"+tree._name + #path="." + for x in tree._children: + write_node_lua(f,tab,x,path) + +def write(tree,fname): + f=open(fname,"wb") + f.write("return = {\n") + + f.write('\tmagic = "SCENE",\n') + tab = 1 + + write_node_lua(f,tab,tree,"") + + f.write("}\n\n") + + + + + + |