mirror of
https://github.com/Relintai/material-maker.git
synced 2024-11-13 06:27:18 +01:00
Fixed connecting/disconnecting generators
This commit is contained in:
parent
049250e073
commit
a8dffae7cf
@ -10,5 +10,29 @@ func get_port_source(gen_name: String, input_index: int) -> OutputPort:
|
||||
return OutputPort.new(get_node(c.from), c.from_port)
|
||||
return null
|
||||
|
||||
func connect_children(src, src_index : int, dst, dst_index : int):
|
||||
pass
|
||||
func connect_children(from, from_port : int, to, to_port : int):
|
||||
# disconnect target
|
||||
while true:
|
||||
var remove = -1
|
||||
for i in connections.size():
|
||||
if connections[i].to == to.name and connections[i].to_port == to_port:
|
||||
remove = i
|
||||
break
|
||||
if remove == -1:
|
||||
break
|
||||
connections.remove(remove)
|
||||
# create new connection
|
||||
connections.append({from=from.name, from_port=from_port, to=to.name, to_port=to_port})
|
||||
return true
|
||||
|
||||
func disconnect_children(from, from_port : int, to, to_port : int):
|
||||
while true:
|
||||
var remove = -1
|
||||
for i in connections.size():
|
||||
if connections[i].from == from.name and connections[i].from_port == from_port and connections[i].to == to.name and connections[i].to_port == to_port:
|
||||
remove = i
|
||||
break
|
||||
if remove == -1:
|
||||
break
|
||||
connections.remove(remove)
|
||||
return true
|
@ -47,22 +47,11 @@ func connect_node(from, from_slot, to, to_slot):
|
||||
.disconnect_node(disconnect.node, disconnect.slot, to, to_slot)
|
||||
.connect_node(from, from_slot, to, to_slot)
|
||||
send_changed_signal()
|
||||
var source_list = [ from ]
|
||||
# Check if the new connection creates a cycle in the graph
|
||||
while !source_list.empty():
|
||||
var source = source_list.pop_front()
|
||||
if source == to:
|
||||
#print("cannot connect %s to %s (%s)" % [from, to, source])
|
||||
return false
|
||||
for c in get_connection_list():
|
||||
if c.to == source and source_list.find(c.from) == -1:
|
||||
source_list.append(c.from)
|
||||
send_changed_signal()
|
||||
return true
|
||||
|
||||
func disconnect_node(from, from_slot, to, to_slot):
|
||||
.disconnect_node(from, from_slot, to, to_slot)
|
||||
send_changed_signal();
|
||||
if generator.disconnect_children(get_node(from).generator, from_slot, get_node(to).generator, to_slot):
|
||||
.disconnect_node(from, from_slot, to, to_slot)
|
||||
send_changed_signal();
|
||||
|
||||
func remove_node(node):
|
||||
var node_name = node.name
|
||||
|
@ -307,7 +307,6 @@ func update_preview_2d(node = null):
|
||||
node = n
|
||||
break
|
||||
if node != null:
|
||||
print(node.name)
|
||||
var source = node.generator.get_shader(0)
|
||||
if source != null:
|
||||
var shader : String = renderer.generate_shader(source)
|
||||
|
@ -1,8 +1,7 @@
|
||||
[gd_scene load_steps=14 format=2]
|
||||
[gd_scene load_steps=13 format=2]
|
||||
|
||||
[ext_resource path="res://addons/material_maker/preview.gd" type="Script" id=1]
|
||||
[ext_resource path="res://addons/material_maker/panoramas/park.hdr" type="Texture" id=2]
|
||||
[ext_resource path="res://icon.png" type="Texture" id=3]
|
||||
|
||||
[sub_resource type="Animation" id=1]
|
||||
loop = true
|
||||
@ -100,7 +99,6 @@ void fragment() {
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=10]
|
||||
shader = SubResource( 9 )
|
||||
shader_param/tex = ExtResource( 3 )
|
||||
|
||||
[node name="Preview" type="ViewportContainer"]
|
||||
anchor_left = 1.0
|
||||
@ -129,7 +127,7 @@ render_target_clear_mode = 1
|
||||
render_target_update_mode = 3
|
||||
|
||||
[node name="Objects" type="Spatial" parent="MaterialPreview"]
|
||||
transform = Transform( -0.956327, 0, -0.292284, 0, 1, 0, 0.292284, 0, -0.956327, 0, 0, 0 )
|
||||
transform = Transform( 0.979431, 0, -0.201756, 0, 1, 0, 0.201756, 0, 0.979431, 0, 0, 0 )
|
||||
|
||||
[node name="Cube" type="MeshInstance" parent="MaterialPreview/Objects"]
|
||||
mesh = SubResource( 2 )
|
||||
|
Loading…
Reference in New Issue
Block a user