Chenges to allow ability to automatically create inputs if required.

This commit is contained in:
ilya
2020-07-08 21:14:36 +03:00
parent 6ac6948609
commit 0238a5dcae
2 changed files with 37 additions and 21 deletions

11
src/litegraph.d.ts vendored
View File

@@ -938,6 +938,17 @@ export declare class LGraphNode {
_this: this,
slotIndex: number
): boolean;
/**
* Called just before connection (or disconnect - if input is linked).
* A convenient place to switch to another input, or create new one.
* This allow for ability to automatically add slots if needed
* @param inputIndex
* @return selected input slot index, can differ from parameter value
*/
onBeforeConnectInput?(
inputIndex: number
): number;
/** a connection changed (new one or removed) (LiteGraph.INPUT or LiteGraph.OUTPUT, slot, true if connected, link_info, input_info or output_info ) */
onConnectionsChange(

View File

@@ -3592,28 +3592,33 @@
return null;
}
//if there is something already plugged there, disconnect
if (target_node.inputs[target_slot].link != null) {
target_node.disconnectInput(target_slot);
}
//why here??
//this.setDirtyCanvas(false,true);
//this.graph.connectionChange( this );
var output = this.outputs[slot];
//allows nodes to block connection
if (target_node.onConnectInput) {
if ( target_node.onConnectInput(target_slot, output.type, output, this, slot) === false ) {
return null;
}
}
var input = target_node.inputs[target_slot];
var link_info = null;
if (LiteGraph.isValidConnection(output.type, input.type)) {
if (target_node.onBeforeConnectInput) {
// This way node can choose another slot (if selected is occupied)
target_slot = target_node.onBeforeConnectInput(target_slot);
}
//if there is something already plugged there, disconnect
if (target_node.inputs[target_slot].link != null) {
target_node.disconnectInput(target_slot);
}
//why here??
//this.setDirtyCanvas(false,true);
//this.graph.connectionChange( this );
var output = this.outputs[slot];
//allows nodes to block connection
if (target_node.onConnectInput) {
if ( target_node.onConnectInput(target_slot, output.type, output, this, slot) === false ) {
return null;
}
}
var input = target_node.inputs[target_slot];
var link_info = null;
link_info = new LLink(
++this.graph.last_link_id,
input.type,