Improve brush node parsing

This commit is contained in:
luboslenco
2020-10-24 18:56:22 +02:00
parent 730bba57b2
commit 784de44ad9
2 changed files with 40 additions and 16 deletions
+15 -9
View File
@@ -7,6 +7,7 @@ class Brush {
public static var customNodes = js.Syntax.code("new Map()");
static var nodes: Array<TNode>;
static var links: Array<TNodeLink>;
static var tree: LogicTree;
static var parsed_nodes: Array<String> = null;
static var parsed_labels: Map<String, String> = 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 {
+25 -7
View File
@@ -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);