From 784de44ad99981fac753738c899a071a52dcd820 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Sat, 24 Oct 2020 18:56:22 +0200 Subject: [PATCH] Improve brush node parsing --- Sources/arm/node/Brush.hx | 24 ++++++++++------- Sources/arm/node/brush/BrushOutputNode.hx | 32 ++++++++++++++++++----- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/Sources/arm/node/Brush.hx b/Sources/arm/node/Brush.hx index 58b4b826..4ed2db4e 100644 --- a/Sources/arm/node/Brush.hx +++ b/Sources/arm/node/Brush.hx @@ -7,6 +7,7 @@ class Brush { public static var customNodes = js.Syntax.code("new Map()"); static var nodes: Array; static var links: Array; + static var tree: LogicTree; static var parsed_nodes: Array = null; static var parsed_labels: Map = null; @@ -56,8 +57,7 @@ class Brush { return s; } - static var tree: LogicTree; - public static function parse(canvas: TNodeCanvas, onAdd = true): LogicTree { + public static function parse(canvas: TNodeCanvas, onAdd = true) { nodes = canvas.nodes; links = canvas.links; @@ -76,13 +76,12 @@ class Brush { else { for (node in root_nodes) build_node(node); } - return tree; } static function build_node(node: TNode): String { // Get node name - var name = node_name(node); + var name = node_name(node); // Check if node already exists if (parsed_nodes.indexOf(name) != -1) { @@ -117,13 +116,20 @@ class Brush { if (l != null) { var n = getNode(l.from_id); var socket = n.outputs[l.from_socket]; - inp_node = nodeMap.get(build_node(n)); - for (i in 0...n.outputs.length) { - if (n.outputs[i] == socket) { - inp_from = i; - break; + // Ensure matching socket types + if (socket.type == node.inputs[i].type) { + inp_node = nodeMap.get(build_node(n)); + for (i in 0...n.outputs.length) { + if (n.outputs[i] == socket) { + inp_from = i; + break; + } } } + else { + inp_node = build_default_node(inp); + inp_from = 0; + } } // Not linked - create node with default values else { diff --git a/Sources/arm/node/brush/BrushOutputNode.hx b/Sources/arm/node/brush/BrushOutputNode.hx index e5d411a8..7b1f5f6a 100644 --- a/Sources/arm/node/brush/BrushOutputNode.hx +++ b/Sources/arm/node/brush/BrushOutputNode.hx @@ -19,12 +19,30 @@ class BrushOutputNode extends LogicNode { var lastMask = Context.brushMaskImage; var lastStencil = Context.brushStencilImage; - Context.paintVec = inputs[0].get(); - Context.brushNodesRadius = inputs[1].get(); - Context.brushNodesScale = inputs[2].get(); - Context.brushNodesAngle = inputs[3].get(); + var input0: Dynamic; + var input1: Dynamic; + var input2: Dynamic; + var input3: Dynamic; + var input4: Dynamic; + var input5: Dynamic; + var input6: Dynamic; + try { + input0 = inputs[0].get(); + input1 = inputs[1].get(); + input2 = inputs[2].get(); + input3 = inputs[3].get(); + input4 = inputs[4].get(); + input5 = inputs[5].get(); + input6 = inputs[6].get(); + } + catch (_) { return; } - var opac: Dynamic = inputs[4].get(); // Float or texture name + Context.paintVec = input0; + Context.brushNodesRadius = input1; + Context.brushNodesScale = input2; + Context.brushNodesAngle = input3; + + var opac: Dynamic = input4; // Float or texture name if (opac == null) opac = 1.0; if (Std.is(opac, String)) { Context.brushNodesOpacity = 1.0; @@ -37,9 +55,9 @@ class BrushOutputNode extends LogicNode { Context.brushMaskImage = null; } - Context.brushNodesHardness = inputs[5].get(); + Context.brushNodesHardness = input5; - var stencil: Dynamic = inputs[6].get(); // Float or texture name + var stencil: Dynamic = input6; // Float or texture name if (stencil == null) stencil = 1.0; if (Std.is(stencil, String)) { var index = Project.assetNames.indexOf(stencil);