2019-08-02 08:17:32 +02:00
|
|
|
tool
|
2019-07-31 20:53:00 +02:00
|
|
|
extends Object
|
|
|
|
class_name MMGenLoader
|
|
|
|
|
2019-09-09 22:00:18 +02:00
|
|
|
static func load_gen(filename: String) -> MMGenBase:
|
2019-07-31 20:53:00 +02:00
|
|
|
var file = File.new()
|
|
|
|
if file.open(filename, File.READ) == OK:
|
|
|
|
var data = parse_json(file.get_as_text())
|
|
|
|
return create_gen(data)
|
|
|
|
return null
|
|
|
|
|
2019-09-09 22:00:18 +02:00
|
|
|
static func add_to_gen_graph(gen_graph, generators, connections):
|
2019-08-15 11:53:21 +02:00
|
|
|
var rv = { generators=[], connections=[] }
|
2019-09-17 08:12:53 +02:00
|
|
|
var gennames = {}
|
2019-08-15 11:53:21 +02:00
|
|
|
for n in generators:
|
|
|
|
var g = create_gen(n)
|
|
|
|
if g != null:
|
2019-09-17 08:12:53 +02:00
|
|
|
var orig_name = g.name
|
2019-09-29 10:07:32 +02:00
|
|
|
gen_graph.add_generator(g)
|
2019-08-15 11:53:21 +02:00
|
|
|
rv.generators.append(g)
|
2019-09-29 10:07:32 +02:00
|
|
|
gennames[orig_name] = g.name
|
2019-08-15 11:53:21 +02:00
|
|
|
for c in connections:
|
2019-09-17 08:12:53 +02:00
|
|
|
if gennames.has(c.from) and gennames.has(c.to):
|
|
|
|
c.from = gennames[c.from]
|
|
|
|
c.to = gennames[c.to]
|
|
|
|
gen_graph.connections.append(c)
|
|
|
|
rv.connections.append(c)
|
2019-08-15 11:53:21 +02:00
|
|
|
return rv
|
|
|
|
|
2019-09-09 22:00:18 +02:00
|
|
|
static func create_gen(data) -> MMGenBase:
|
2019-07-31 20:53:00 +02:00
|
|
|
var generator = null
|
|
|
|
if data.has("connections") and data.has("nodes"):
|
|
|
|
generator = MMGenGraph.new()
|
2019-09-17 08:12:53 +02:00
|
|
|
if data.has("label"):
|
|
|
|
generator.label = data.label
|
2019-08-15 11:53:21 +02:00
|
|
|
add_to_gen_graph(generator, data.nodes, data.connections)
|
2019-08-17 17:35:48 +02:00
|
|
|
elif data.has("shader_model"):
|
2019-08-12 15:58:42 +02:00
|
|
|
generator = MMGenShader.new()
|
2019-08-17 17:35:48 +02:00
|
|
|
generator.set_shader_model(data.shader_model)
|
2019-09-16 20:45:47 +02:00
|
|
|
elif data.has("convolution_params"):
|
|
|
|
generator = MMGenConvolution.new()
|
|
|
|
generator.set_convolution_params(data.convolution_params)
|
2019-09-09 22:00:18 +02:00
|
|
|
elif data.has("model_data"):
|
|
|
|
generator = MMGenShader.new()
|
|
|
|
generator.set_shader_model(data.model_data)
|
2019-09-20 20:43:57 +02:00
|
|
|
elif data.has("widgets"):
|
|
|
|
generator = MMGenRemote.new()
|
2019-09-26 22:32:49 +02:00
|
|
|
generator.set_widgets(data.widgets.duplicate(true))
|
2019-07-31 20:53:00 +02:00
|
|
|
elif data.has("type"):
|
|
|
|
if data.type == "material":
|
|
|
|
generator = MMGenMaterial.new()
|
2019-08-17 17:35:48 +02:00
|
|
|
elif data.type == "buffer":
|
|
|
|
generator = MMGenBuffer.new()
|
2019-08-25 23:27:07 +02:00
|
|
|
elif data.type == "image":
|
|
|
|
generator = MMGenImage.new()
|
2019-09-17 08:12:53 +02:00
|
|
|
elif data.type == "ios":
|
|
|
|
generator = MMGenIOs.new()
|
|
|
|
generator.ports = data.ports
|
2019-09-22 22:17:26 +02:00
|
|
|
elif data.type == "switch":
|
|
|
|
generator = MMGenSwitch.new()
|
2019-07-31 20:53:00 +02:00
|
|
|
else:
|
2019-08-12 15:58:42 +02:00
|
|
|
var file = File.new()
|
2019-09-25 08:04:36 +02:00
|
|
|
var gen_path = OS.get_executable_path().get_base_dir()+"/generators"
|
|
|
|
if file.open(gen_path+"/"+data.type+".mmg", File.READ) == OK:
|
|
|
|
generator = create_gen(parse_json(file.get_as_text()))
|
|
|
|
generator.model = data.type
|
|
|
|
file.close()
|
|
|
|
elif file.open("res://addons/material_maker/nodes/"+data.type+".mmg", File.READ) == OK:
|
2019-08-17 17:35:48 +02:00
|
|
|
generator = create_gen(parse_json(file.get_as_text()))
|
2019-09-09 22:00:18 +02:00
|
|
|
generator.model = data.type
|
2019-08-12 15:58:42 +02:00
|
|
|
file.close()
|
|
|
|
elif file.open("res://addons/material_maker/nodes/"+data.type+".mmn", File.READ) == OK:
|
|
|
|
generator = MMGenShader.new()
|
2019-09-09 22:00:18 +02:00
|
|
|
generator.model = data.type
|
2019-08-17 17:35:48 +02:00
|
|
|
generator.set_shader_model(parse_json(file.get_as_text()))
|
2019-08-12 15:58:42 +02:00
|
|
|
file.close()
|
2019-07-31 20:53:00 +02:00
|
|
|
else:
|
2019-08-12 15:58:42 +02:00
|
|
|
print("Cannot find description for "+data.type)
|
2019-08-17 17:35:48 +02:00
|
|
|
if generator != null:
|
|
|
|
generator.name = data.type
|
2019-08-09 08:16:24 +02:00
|
|
|
else:
|
2019-09-09 22:00:18 +02:00
|
|
|
print("LOADER: data not supported:"+str(data))
|
2019-08-12 15:58:42 +02:00
|
|
|
if generator != null:
|
2019-08-15 11:53:21 +02:00
|
|
|
if data.has("name"):
|
|
|
|
generator.name = data.name
|
2019-08-12 15:58:42 +02:00
|
|
|
if data.has("node_position"):
|
|
|
|
generator.position.x = data.node_position.x
|
|
|
|
generator.position.y = data.node_position.y
|
|
|
|
if data.has("parameters"):
|
2019-08-17 17:35:48 +02:00
|
|
|
for p in data.parameters.keys():
|
2019-09-09 22:00:18 +02:00
|
|
|
generator.parameters[p] = MMType.deserialize_value(data.parameters[p])
|
2019-07-31 20:53:00 +02:00
|
|
|
return generator
|