dynamic inputs

This commit is contained in:
Tanasart 2024-05-23 15:59:39 +07:00
parent 13bfca84cf
commit ef2d8aaa2f
45 changed files with 449 additions and 1086 deletions

Binary file not shown.

View file

@ -62,17 +62,13 @@ function __Node_3D_Combine(_x, _y, _group = noone) : Node(_x, _y, _group) constr
["Objects", true], ["Objects", true],
]; ];
setIsDynamicInput(1);
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
outputs[| 1] = nodeValue("3D objects", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3object, function() { return submit_vertex(); }); outputs[| 1] = nodeValue("3D objects", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3object, function() { return submit_vertex(); });
outputs[| 2] = nodeValue("Normal pass", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); outputs[| 2] = nodeValue("Normal pass", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
output_display_list = [ output_display_list = [ 0, 2, 1 ]
0, 2, 1
]
_3d_node_init(1, /*Transform*/ 4, 5, 1, 2, 3); _3d_node_init(1, /*Transform*/ 4, 5, 1, 2, 3);
@ -82,35 +78,8 @@ function __Node_3D_Combine(_x, _y, _group = noone) : Node(_x, _y, _group) constr
.setVisible(true, true); .setVisible(true, true);
array_push(input_display_list, index); array_push(input_display_list, index);
}
if(!LOADING && !APPENDING) createNewInput();
static refreshDynamicInput = function() {
var _l = ds_list_create();
for( var i = 0; i < ds_list_size(inputs); i++ ) {
if(i < input_fix_len || inputs[| i].value_from)
ds_list_add(_l, inputs[| i]);
else
delete inputs[| i];
}
for( var i = 0; i < ds_list_size(_l); i++ ) } setDynamicInput(1, true, VALUE_TYPE.d3object);
_l[| i].index = i;
ds_list_destroy(inputs);
inputs = _l;
var _d = [];
for( var i = 0, n = array_length(input_display_list); i < n; i++ ) {
var ind = input_display_list[i];
if(i < input_display_len || ind < ds_list_size(inputs))
array_push(_d, input_display_list[i]);
}
input_display_list = _d;
createNewInput();
}
static onValueFromUpdate = function(index) { static onValueFromUpdate = function(index) {
if(index < input_fix_len) return; if(index < input_fix_len) return;

View file

@ -132,7 +132,7 @@ function buttonClass(_onClick, _icon = noone) : widget() constructor {
} #endregion } #endregion
} }
function buttonInstant(spr, _x, _y, _w, _h, _m, _act, _hvr, _tip = "", _icon = noone, _icon_index = 0, _icon_blend = COLORS._main_icon, _icon_alpha = 1, _icon_scale = 1) { #region function buttonInstant(spr, _x, _y, _w, _h, _m, _act, _hvr, _tip = "", _icon = noone, _icon_index = 0, _icon_blend = COLORS._main_icon, _icon_alpha = 1, _icon_scale = 1) {
var res = 0; var res = 0;
var cc = is_array(_icon_blend)? _icon_blend[0] : _icon_blend; var cc = is_array(_icon_blend)? _icon_blend[0] : _icon_blend;
@ -161,4 +161,16 @@ function buttonInstant(spr, _x, _y, _w, _h, _m, _act, _hvr, _tip = "", _icon = n
draw_sprite_ui_uniform(_icon, _icon_index, _x + _w / 2, _y + _h / 2, _icon_scale, cc, _icon_alpha); draw_sprite_ui_uniform(_icon, _icon_index, _x + _w / 2, _y + _h / 2, _icon_scale, cc, _icon_alpha);
return res; return res;
} #endregion }
function buttonTextIconInstant(spr, _x, _y, _w, _h, _m, _act, _hvr, _tip = "", _icon = noone, _icon_label = "") {
var _b = buttonInstant(spr, _x, _y, _w, _h, _m, _act, _hvr, _tip);
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_icon_light);
var bxc = _x + _w / 2 - (string_width(_icon_label) + ui(64)) / 2;
var byc = _y + _h / 2;
draw_sprite_ui(_icon, 0, bxc + ui(24), byc,,,, COLORS._main_icon_light);
draw_text(bxc + ui(48), byc, _icon_label);
return _b;
}

View file

@ -85,9 +85,13 @@ function Action(_type, _object, _data, _trigger = 0) constructor {
break; break;
case ACTION_TYPE.junction_connect : case ACTION_TYPE.junction_connect :
var _d = obj.value_from; if(obj.is_dummy) {
obj.setFrom(data); data[0].setFrom(noone);
data = _d; } else {
var _d = obj.value_from;
obj.setFrom(data);
data = _d;
}
break; break;
case ACTION_TYPE.junction_disconnect : case ACTION_TYPE.junction_disconnect :
@ -192,9 +196,14 @@ function Action(_type, _object, _data, _trigger = 0) constructor {
break; break;
case ACTION_TYPE.junction_connect : case ACTION_TYPE.junction_connect :
var _d = obj.value_from; if(obj.is_dummy) {
obj.setFrom(data); obj.setFrom(data[1]);
data = _d; data[0] = obj.dummy_target;
} else {
var _d = obj.value_from;
obj.setFrom(data);
data = _d;
}
break; break;
case ACTION_TYPE.junction_disconnect : case ACTION_TYPE.junction_disconnect :

View file

@ -42,7 +42,7 @@ function Node_3D_Mesh_Obj(_x, _y, _group = noone) : Node_3D_Mesh(_x, _y, _group)
["Material", false], in_mesh + 1, ["Material", false], in_mesh + 1,
] ]
setIsDynamicInput(1); setDynamicInput(1, false);
obj_reading = false; obj_reading = false;
obj_raw = noone; obj_raw = noone;

View file

@ -3,41 +3,15 @@ function Node_3D_Scene(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constru
outputs[| 0] = nodeValue("Scene", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3Scene, noone); outputs[| 0] = nodeValue("Scene", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3Scene, noone);
setIsDynamicInput(1);
object_lists = []; object_lists = [];
static createNewInput = function() { #region static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index] = nodeValue("Object", self, JUNCTION_CONNECT.input, VALUE_TYPE.d3Mesh, noone ) inputs[| index] = nodeValue("Object", self, JUNCTION_CONNECT.input, VALUE_TYPE.d3Mesh, noone )
.setVisible(true, true); .setVisible(true, true);
} #endregion
if(!LOADING && !APPENDING) createNewInput();
static refreshDynamicInput = function() { #region
var _l = ds_list_create();
for( var i = 0; i < ds_list_size(inputs); i++ ) {
if(i < input_fix_len || inputs[| i].value_from)
ds_list_add(_l, inputs[| i]);
else
delete inputs[| i];
}
for( var i = 0; i < ds_list_size(_l); i++ ) return inputs[| index];
_l[| i].index = i; } setDynamicInput(1, true, VALUE_TYPE.d3Mesh);
ds_list_destroy(inputs);
inputs = _l;
createNewInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(index < input_fix_len) return;
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static processData = function(_output, _data, _output_index, _array_index = 0) { #region static processData = function(_output, _data, _output_index, _array_index = 0) { #region
var _scene = new __3dGroup(); var _scene = new __3dGroup();

View file

@ -1,21 +1,11 @@
function Node_PCX_Equation(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { function Node_PCX_Equation(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor {
name = "Equation"; name = "Equation";
setDimension(96, 48);; setDimension(96, 48);
ast = noone; ast = noone;
inputs[| 0] = nodeValue("Equation", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, ""); inputs[| 0] = nodeValue("Equation", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "");
static createNewInput = function() { #region
var index = ds_list_size(inputs);
inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" )
.setDisplay(VALUE_DISPLAY.text_box);
inputs[| index + 1] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone )
.setVisible(true, true);
inputs[| index + 1].editWidget.interactable = false;
} #endregion
outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone ); outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone );
argument_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region argument_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region
@ -51,20 +41,29 @@ function Node_PCX_Equation(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) co
return hh; return hh;
}); #endregion }); #endregion
argument_renderer.register = function(parent = noone) { #region
for( var i = input_fix_len; i < ds_list_size(inputs); i++ )
inputs[| i].editWidget.register(parent);
} #endregion
input_display_list = [ input_display_list = [
["Function", false], 0, ["Function", false], 0,
["Arguments", false], argument_renderer, ["Arguments", false], argument_renderer,
["Inputs", true], ["Inputs", true],
] ]
setIsDynamicInput(2);
if(!LOADING && !APPENDING) createNewInput(); static createNewInput = function() {
var index = ds_list_size(inputs);
inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" )
.setDisplay(VALUE_DISPLAY.text_box);
inputs[| index + 1] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone )
.setVisible(true, true);
inputs[| index + 1].editWidget.interactable = false;
return inputs[| index + 0];
} setDynamicInput(2, false);
argument_renderer.register = function(parent = noone) { #region
for( var i = input_fix_len; i < ds_list_size(inputs); i++ )
inputs[| i].editWidget.register(parent);
} #endregion
static refreshDynamicInput = function() { #region static refreshDynamicInput = function() { #region
var _in = ds_list_create(); var _in = ds_list_create();

View file

@ -15,8 +15,6 @@ function Node_VCT(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) const
["Automations", false], ["Automations", false],
]; ];
setIsDynamicInput(1);
static createNewInput = function(key = "") { static createNewInput = function(key = "") {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
var _s = floor((index - input_fix_len) / data_length); var _s = floor((index - input_fix_len) / data_length);

View file

@ -19,7 +19,7 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline(
var input = nodeBuild("Node_VFX_Spawner", x, y); var input = nodeBuild("Node_VFX_Spawner", x, y);
var output = nodeBuild("Node_VFX_Renderer", x + 256, y); var output = nodeBuild("Node_VFX_Renderer", x + 256, y);
output.inputs[| output.input_fix_len + 1].setFrom(input.outputs[| 0]); output.dummy_input.setFrom(input.outputs[| 0]);
addNode(input); addNode(input);
addNode(output); addNode(output);

View file

@ -24,12 +24,10 @@ function Node_VFX_Renderer(_x, _y, _group = noone) : Node(_x, _y, _group) constr
["Rendering", false], 1, 2, 3, ["Rendering", false], 1, 2, 3,
]; ];
setIsDynamicInput(2);
attribute_surface_depth(); attribute_surface_depth();
attribute_interpolation(); attribute_interpolation();
static createNewInput = function() { #region static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index + 0] = nodeValue("Blend mode", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 ) inputs[| index + 0] = nodeValue("Blend mode", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
@ -40,7 +38,10 @@ function Node_VFX_Renderer(_x, _y, _group = noone) : Node(_x, _y, _group) constr
.setVisible(true, true); .setVisible(true, true);
array_push(input_display_list, ["Particle", false], index + 0, index + 1); array_push(input_display_list, ["Particle", false], index + 0, index + 1);
} if(!LOADING && !APPENDING) createNewInput(); #endregion
return inputs[| index + 1];
} setDynamicInput(2, true, VALUE_TYPE.particle);
dyna_input_check_shift = 1;
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
@ -49,42 +50,6 @@ function Node_VFX_Renderer(_x, _y, _group = noone) : Node(_x, _y, _group) constr
static onInspector2Update = function() { clearCache(); } static onInspector2Update = function() { clearCache(); }
static refreshDynamicInput = function() { #region
var _l = ds_list_create();
var _disp = [];
for( var i = 0; i < input_display_len; i++ )
array_push(_disp, input_display_list[i]);
for( var i = 0; i < input_fix_len; i++ )
ds_list_add(_l, inputs[| i]);
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
if(!inputs[| i + 1].value_from) continue;
ds_list_add(_l, inputs[| i + 0]);
ds_list_add(_l, inputs[| i + 1]);
array_push(_disp, ["Particle", false], i + 0, i + 1);
}
for( var i = 0; i < ds_list_size(_l); i++ )
_l[| i].index = i;
ds_list_destroy(inputs);
inputs = _l;
input_display_list = _disp;
createNewInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(index < input_fix_len) return;
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static step = function() { #region static step = function() { #region
var _typ = getInputData(2); var _typ = getInputData(2);

View file

@ -25,8 +25,6 @@ function Node_VFX_Renderer_Output(_x, _y, _group = noone) : Node_Group_Output(_x
["Rendering", false], 1, 2, 3, ["Rendering", false], 1, 2, 3,
]; ];
setIsDynamicInput(2);
attribute_surface_depth(); attribute_surface_depth();
attribute_interpolation(); attribute_interpolation();
@ -35,7 +33,7 @@ function Node_VFX_Renderer_Output(_x, _y, _group = noone) : Node_Group_Output(_x
static onInspector2Update = function() { clearCache(); } static onInspector2Update = function() { clearCache(); }
static createNewInput = function() { #region static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index + 0] = nodeValue("Blend mode", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 ) inputs[| index + 0] = nodeValue("Blend mode", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
@ -46,8 +44,11 @@ function Node_VFX_Renderer_Output(_x, _y, _group = noone) : Node_Group_Output(_x
.setVisible(true, true); .setVisible(true, true);
array_push(input_display_list, ["Particle", false], index + 0, index + 1); array_push(input_display_list, ["Particle", false], index + 0, index + 1);
} if(!LOADING && !APPENDING) createNewInput(); #endregion
return inputs[| index + 1];
} setDynamicInput(2, true, VALUE_TYPE.particle);
dyna_input_check_shift = 1;
static createOutput = function() { #region static createOutput = function() { #region
if(group == noone) return; if(group == noone) return;
if(!is_struct(group)) return; if(!is_struct(group)) return;
@ -65,42 +66,6 @@ function Node_VFX_Renderer_Output(_x, _y, _group = noone) : Node_Group_Output(_x
group.sortIO(); group.sortIO();
} if(!LOADING && !APPENDING) createOutput(); #endregion } if(!LOADING && !APPENDING) createOutput(); #endregion
static refreshDynamicInput = function() { #region
var _l = ds_list_create();
var _disp = [];
for( var i = 0; i < input_display_len ; i ++ )
array_push(_disp, input_display_list[i]);
for( var i = 0; i < input_fix_len; i++ )
ds_list_add(_l, inputs[| i]);
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
if(!inputs[| i + 1].value_from) continue;
ds_list_add(_l, inputs[| i + 0]);
ds_list_add(_l, inputs[| i + 1]);
array_push(_disp, ["Particle", false], i + 0, i + 1);
}
for( var i = 0; i < ds_list_size(_l); i++ )
_l[| i].index = i;
ds_list_destroy(inputs);
inputs = _l;
input_display_list = _disp;
createNewInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(index < input_fix_len) return;
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static step = function() { #region static step = function() { #region
if(outParent == undefined) return; if(outParent == undefined) return;

View file

@ -66,8 +66,6 @@ function Node_Armature_Bind(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
layer_remove = -1; layer_remove = -1;
layer_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region layer_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region
PROCESSOR_OVERLAY_CHECK
ds_map_clear(surfMap); ds_map_clear(surfMap);
var index = -1; var index = -1;
@ -85,8 +83,6 @@ function Node_Armature_Bind(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
array_push(surfMap[? _id], [ index, _surf ]); array_push(surfMap[? _id], [ index, _surf ]);
else else
surfMap[? _id] = [ [ index, _surf ] ]; surfMap[? _id] = [ [ index, _surf ] ];
//print($"Add {_surf} to {_id}");
} }
#region draw bones #region draw bones
@ -197,7 +193,7 @@ function Node_Armature_Bind(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
draw_sprite_stretched_ext(THEME.ui_panel_active, 0, _x, _ty, _w, bh - ui(32), COLORS._main_accent, 1); draw_sprite_stretched_ext(THEME.ui_panel_active, 0, _x, _ty, _w, bh - ui(32), COLORS._main_accent, 1);
#endregion #endregion
var amo = floor((ds_list_size(inputs) - input_fix_len) / data_length) - 1; var amo = floor((ds_list_size(inputs) - input_fix_len) / data_length);
if(array_length(current_data) != ds_list_size(inputs)) return 0; if(array_length(current_data) != ds_list_size(inputs)) return 0;
if(use_data) { if(use_data) {
@ -381,7 +377,7 @@ function Node_Armature_Bind(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
]; ];
input_display_list_len = array_length(input_display_list); input_display_list_len = array_length(input_display_list);
function deleteLayer(index) { #region function deleteLayer(index) {
var idx = input_fix_len + index * data_length; var idx = input_fix_len + index * data_length;
for( var i = 0; i < data_length; i++ ) { for( var i = 0; i < data_length; i++ ) {
ds_list_delete(inputs, idx); ds_list_delete(inputs, idx);
@ -393,13 +389,10 @@ function Node_Armature_Bind(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
input_display_list[i] = input_display_list[i] - data_length; input_display_list[i] = input_display_list[i] - data_length;
} }
if(ds_list_size(inputs) == input_fix_len)
createNewInput();
doUpdate(); doUpdate();
#endregion
} }
static createNewInput = function() { #region static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
var _s = floor((index - input_fix_len) / data_length); var _s = floor((index - input_fix_len) / data_length);
@ -423,12 +416,9 @@ function Node_Armature_Bind(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
array_push(attributes.layer_visible, true); array_push(attributes.layer_visible, true);
while(_s >= array_length(attributes.layer_selectable)) while(_s >= array_length(attributes.layer_selectable))
array_push(attributes.layer_selectable, true); array_push(attributes.layer_selectable, true);
#endregion
} return inputs[| index + 0];
} setDynamicInput(6);
setIsDynamicInput(6);
if(!LOADING && !APPENDING) createNewInput();
temp_surface = [ surface_create(1, 1), surface_create(1, 1), surface_create(1, 1) ]; temp_surface = [ surface_create(1, 1), surface_create(1, 1), surface_create(1, 1) ];
blend_temp_surface = temp_surface[2]; blend_temp_surface = temp_surface[2];
@ -452,22 +442,11 @@ function Node_Armature_Bind(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
bone = noone; bone = noone;
surface_selecting = noone; surface_selecting = noone;
static getInputAmount = function() { #region
return input_fix_len + (ds_list_size(inputs) - input_fix_len) / data_length;
} #endregion
static getInputIndex = function(index) { #region static getInputIndex = function(index) { #region
if(index < input_fix_len) return index; if(index < input_fix_len) return index;
return input_fix_len + (index - input_fix_len) * data_length; return input_fix_len + (index - input_fix_len) * data_length;
} #endregion } #endregion
static onValueFromUpdate = function(index) { #region
if(LOADING || APPENDING) return;
if(index + data_length >= ds_list_size(inputs))
createNewInput();
} #endregion
static setBone = function() { #region static setBone = function() { #region
ds_map_clear(boneMap); ds_map_clear(boneMap);

View file

@ -9,8 +9,6 @@ function Node_Armature_Pose(_x, _y, _group = noone) : Node(_x, _y, _group) const
["Bones", false] ["Bones", false]
] ]
setIsDynamicInput(1);
outputs[| 0] = nodeValue("Armature", self, JUNCTION_CONNECT.output, VALUE_TYPE.armature, noone); outputs[| 0] = nodeValue("Armature", self, JUNCTION_CONNECT.output, VALUE_TYPE.armature, noone);
boneMap = ds_map_create(); boneMap = ds_map_create();
@ -26,7 +24,7 @@ function Node_Armature_Pose(_x, _y, _group = noone) : Node(_x, _y, _group) const
array_push(attributeEditors, ["Display bone", function() { return attributes.display_bone; }, array_push(attributeEditors, ["Display bone", function() { return attributes.display_bone; },
new scrollBox(["Octahedral", "Stick"], function(ind) { attributes.display_bone = ind; })]); new scrollBox(["Octahedral", "Stick"], function(ind) { attributes.display_bone = ind; })]);
static createNewInput = function(bone = noone) { #region static createNewInput = function(bone = noone) {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index] = nodeValue(bone != noone? bone.name : "bone", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 1 ] ) inputs[| index] = nodeValue(bone != noone? bone.name : "bone", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 1 ] )
@ -38,7 +36,7 @@ function Node_Armature_Pose(_x, _y, _group = noone) : Node(_x, _y, _group) const
array_push(input_display_list, index); array_push(input_display_list, index);
return inputs[| index]; return inputs[| index];
} #endregion } setDynamicInput(1, false);
static setBone = function() { #region static setBone = function() { #region
//print("Setting dem bones..."); //print("Setting dem bones...");

View file

@ -3,6 +3,9 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
setDimension(96, 48); setDimension(96, 48);
attributes.size = 0;
attributes.spread_value = false;
inputs[| 0] = nodeValue("Type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 ) inputs[| 0] = nodeValue("Type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
.setDisplay(VALUE_DISPLAY.enum_scroll, { data: [ "Any", "Surface", "Number", "Color", "Text" ], update_hover: false }) .setDisplay(VALUE_DISPLAY.enum_scroll, { data: [ "Any", "Surface", "Number", "Color", "Text" ], update_hover: false })
.rejectArray(); .rejectArray();
@ -15,49 +18,36 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
var bw = _w / 2 - ui(4); var bw = _w / 2 - ui(4);
var bh = ui(36); var bh = ui(36);
var bx = _x; if(buttonTextIconInstant(THEME.button_hide, _x, _y + ui(8), bw, bh, _m, _focus, _hover, "", THEME.add, __txt("Add")) == 2) {
var by = _y + ui(8); attributes.size++;
if(buttonInstant(THEME.button_hide, bx, by, bw, bh, _m, _focus, _hover) == 2) {
var amo = ds_list_size(inputs) - input_fix_len;
attributes.size = amo + 1;
refreshDynamicInput(); refreshDynamicInput();
update(); update();
} }
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_icon_light);
var bxc = bx + bw / 2 - (string_width("Add") + ui(64)) / 2;
var byc = by + bh / 2;
draw_sprite_ui(THEME.add, 0, bxc + ui(24), byc,,,, COLORS._main_icon_light);
draw_text(bxc + ui(48), byc, __txt("Add"));
var bx = _x + bw + ui(8);
var amo = attributes.size; var amo = attributes.size;
if(amo > 1 && buttonInstant(THEME.button_hide, bx, by, bw, bh, _m, _focus, _hover) == 2) { if(buttonTextIconInstant(THEME.button_hide, _x + _w - bw, _y + ui(8), bw, bh, _m, _focus, _hover, "", THEME.minus, __txt("Remove")) == 2) {
var amo = ds_list_size(inputs) - input_fix_len; attributes.size = max(attributes.size - 1, 0);
attributes.size = max(amo - 1, 1);
refreshDynamicInput(); refreshDynamicInput();
update(); update();
} }
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_icon_light);
var bxc = bx + bw / 2 - (string_width("Remove") + ui(64)) / 2;
var byc = by + bh / 2;
draw_sprite_ui(THEME.minus, 0, bxc + ui(24), byc,,,, COLORS._main_icon_light, (amo > 1) * 0.5 + 0.5);
draw_set_alpha((amo > 1) * 0.5 + 0.5);
draw_text(bxc + ui(48), byc, __txt("Remove"));
draw_set_alpha(1);
return _h; return _h;
}); #endregion }); #endregion
input_display_list = [ 0, 1, ["Contents", false], array_adjust_tool, ]; input_display_list = [ 0, 1, ["Contents", false], array_adjust_tool, ];
setIsDynamicInput(1);
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, []); outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, []);
attributes.size = 1; static createNewInput = function() {
attributes.spread_value = false; var index = ds_list_size(inputs);
var _typ = getType();
inputs[| index] = nodeValue("Input", self, JUNCTION_CONNECT.input, _typ, -1 )
.setVisible(true, true);
array_push(input_display_list, index);
return inputs[| index];
} setDynamicInput(1);
static getType = function() { #region static getType = function() { #region
var _type = getInputData(0); var _type = getInputData(0);
@ -71,56 +61,33 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
} }
} #endregion } #endregion
static createNewInput = function() { #region
var index = ds_list_size(inputs);
var _typ = getType();
inputs[| index] = nodeValue("Input", self, JUNCTION_CONNECT.input, _typ, -1 )
.setVisible(true, true);
array_push(input_display_list, index);
return inputs[| index];
} if(!LOADING && !APPENDING) createNewInput(); #endregion
//dummy_input = nodeValue("Add value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0).setDummy(function() { return createNewInput(); });
static refreshDynamicInput = function() { #region static refreshDynamicInput = function() { #region
var _l = ds_list_create(); var _l = ds_list_create();
var amo = attributes.size; var amo = attributes.size;
var extra = true;
var lastNode = noone;
for( var i = 0; i < ds_list_size(inputs); i++ ) { for( var i = 0; i < ds_list_size(inputs); i++ ) {
if(i < input_fix_len + amo || inputs[| i].value_from) { var _inp = inputs[| i];
ds_list_add(_l, inputs[| i]);
if(i >= input_fix_len) if(i < input_fix_len + amo || _inp.value_from)
inputs[| i].setVisible(true, true); ds_list_add(_l, _inp);
}
} }
var _add = amo - (ds_list_size(_l) - input_fix_len); var _add = amo - getInputAmount();
repeat(_add) { repeat(_add) ds_list_add(_l, createNewInput());
lastNode = createNewInput();
ds_list_add(_l, lastNode);
}
input_display_list = array_clone(input_display_list_raw); input_display_list = array_clone(input_display_list_raw);
for( var i = input_fix_len; i < ds_list_size(_l); i++ ) { for( var i = input_fix_len; i < ds_list_size(_l); i++ ) {
_l[| i].index = i; _l[| i].index = i;
array_push(input_display_list, i); array_push(input_display_list, i);
if(_l[| i].value_from == noone)
extra = false;
} }
ds_list_destroy(inputs); ds_list_destroy(inputs);
inputs = _l; inputs = _l;
if(extra) lastNode = createNewInput();
_l[| ds_list_size(_l) - 1].setVisible(false, true);
getJunctionList(); getJunctionList();
setHeight();
} #endregion } #endregion
static updateType = function(resetVal = false) { #region static updateType = function(resetVal = false) { #region
@ -183,10 +150,11 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
if(is_array(val) && spd) array_append(res, val); if(is_array(val) && spd) array_append(res, val);
else array_push(res, val); else array_push(res, val);
if(_typ == VALUE_TYPE.any && inputs[| i].value_from)
outputs[| 0].setType(inputs[| i].value_from.type);
} }
if(_typ == VALUE_TYPE.any && inputs[| input_fix_len].value_from)
outputs[| 0].setType(inputs[| input_fix_len].value_from.type);
outputs[| 0].setValue(res); outputs[| 0].setValue(res);
if(outputs[| 0].type == VALUE_TYPE.surface) if(outputs[| 0].type == VALUE_TYPE.surface)

View file

@ -1,7 +1,6 @@
function Node_Array_Add(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { function Node_Array_Add(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
name = "Array Add"; name = "Array Add";
setDimension(96, 32 + 24); setDimension(96, 32 + 24);
min_h = h;
inputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0) inputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0)
.setVisible(true, true); .setVisible(true, true);
@ -11,8 +10,6 @@ function Node_Array_Add(_x, _y, _group = noone) : Node(_x, _y, _group) construct
outputs[| 0] = nodeValue("Output", self, JUNCTION_CONNECT.output, VALUE_TYPE.integer, 0); outputs[| 0] = nodeValue("Output", self, JUNCTION_CONNECT.output, VALUE_TYPE.integer, 0);
setIsDynamicInput(1);
static createNewInput = function() { static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
@ -20,33 +17,7 @@ function Node_Array_Add(_x, _y, _group = noone) : Node(_x, _y, _group) construct
.setVisible(true, true); .setVisible(true, true);
return inputs[| index]; return inputs[| index];
} } setDynamicInput(1);
if(!LOADING && !APPENDING) createNewInput();
static refreshDynamicInput = function() {
var _l = ds_list_create();
for( var i = 0; i < ds_list_size(inputs); i++ ) {
if(i < input_fix_len || inputs[| i].value_from)
ds_list_add(_l, inputs[| i]);
else
delete inputs[| i];
}
for( var i = 0; i < ds_list_size(_l); i++ )
_l[| i].index = i;
ds_list_destroy(inputs);
inputs = _l;
createNewInput();
}
static onValueFromUpdate = function(index) {
if(LOADING || APPENDING) return;
refreshDynamicInput();
}
static update = function(frame = CURRENT_FRAME) { static update = function(frame = CURRENT_FRAME) {
var _arr = getInputData(0); var _arr = getInputData(0);
@ -65,7 +36,7 @@ function Node_Array_Add(_x, _y, _group = noone) : Node(_x, _y, _group) construct
outputs[| 0].setType(_type); outputs[| 0].setType(_type);
var _out = array_clone(_arr); var _out = array_clone(_arr);
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i += data_length ) { for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _val = getInputData(i); var _val = getInputData(i);
inputs[| i].setType(_type); inputs[| i].setType(_type);

View file

@ -7,41 +7,14 @@ function Node_Array_Zip(_x, _y, _group = noone) : Node(_x, _y, _group) construct
outputs[| 0] = nodeValue("Output", self, JUNCTION_CONNECT.output, VALUE_TYPE.integer, 0); outputs[| 0] = nodeValue("Output", self, JUNCTION_CONNECT.output, VALUE_TYPE.integer, 0);
setIsDynamicInput(1); static createNewInput = function() {
static createNewInput = function() { #region
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, -1 ) inputs[| index] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, -1 )
.setVisible(true, true); .setVisible(true, true);
return inputs[| index]; return inputs[| index];
} if(!LOADING && !APPENDING) createNewInput(); #endregion } setDynamicInput(1);
static refreshDynamicInput = function() { #region
var _l = ds_list_create();
for( var i = 0; i < ds_list_size(inputs); i++ ) {
if(i < input_fix_len || inputs[| i].value_from)
ds_list_add(_l, inputs[| i]);
else
delete inputs[| i];
}
for( var i = 0; i < ds_list_size(_l); i++ )
_l[| i].index = i;
ds_list_destroy(inputs);
inputs = _l;
createNewInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static step = function() { #region static step = function() { #region
if(inputs[| 0].value_from == noone) { if(inputs[| 0].value_from == noone) {
@ -52,7 +25,7 @@ function Node_Array_Zip(_x, _y, _group = noone) : Node(_x, _y, _group) construct
outputs[| 0].setType(inputs[| 0].value_from.type); outputs[| 0].setType(inputs[| 0].value_from.type);
} }
for( var i = 0; i < ds_list_size(inputs) - 1; i += data_length ) for( var i = 0; i < ds_list_size(inputs); i += data_length )
inputs[| i].setType(inputs[| i].value_from == noone? VALUE_TYPE.any : inputs[| i].value_from.type); inputs[| i].setType(inputs[| i].value_from == noone? VALUE_TYPE.any : inputs[| i].value_from.type);
} #endregion } #endregion
@ -62,7 +35,7 @@ function Node_Array_Zip(_x, _y, _group = noone) : Node(_x, _y, _group) construct
if(!is_array(_arr)) return; if(!is_array(_arr)) return;
var len = 1; var len = 1;
var val = []; var val = [];
for( var i = 0; i < ds_list_size(inputs) - 1; i += data_length ) { for( var i = 0; i < ds_list_size(inputs); i += data_length ) {
val[i] = getInputData(i); val[i] = getInputData(i);
if(!is_array(val[i])) { if(!is_array(val[i])) {
@ -75,7 +48,7 @@ function Node_Array_Zip(_x, _y, _group = noone) : Node(_x, _y, _group) construct
var _out = array_create(len); var _out = array_create(len);
for( var i = 0; i < len; i++ ) { for( var i = 0; i < len; i++ ) {
for( var j = 0; j < ds_list_size(inputs) - 1; j += data_length ) for( var j = 0; j < ds_list_size(inputs); j += data_length )
_out[i][j] = array_safe_get_fast(val[j], i, 0); _out[i][j] = array_safe_get_fast(val[j], i, 0);
} }

View file

@ -27,11 +27,9 @@ function Node_Camera(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
attribute_surface_depth(); attribute_surface_depth();
setIsDynamicInput(6);
temp_surface = [ noone, noone ]; temp_surface = [ noone, noone ];
static createNewInput = function() { #region static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
var _s = floor((index - input_fix_len) / data_length); var _s = floor((index - input_fix_len) / data_length);
@ -59,49 +57,8 @@ function Node_Camera(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
for( var i = 0; i < data_length; i++ ) array_push(input_display_list, index + i); for( var i = 0; i < data_length; i++ ) array_push(input_display_list, index + i);
} if(!LOADING && !APPENDING) createNewInput(); #endregion return inputs[| index + 0];
} setDynamicInput(6, true, VALUE_TYPE.surface);
static refreshDynamicInput = function() { #region
var _in = ds_list_create();
for( var i = 0; i < input_fix_len; i++ )
ds_list_add(_in, inputs[| i]);
array_resize(input_display_list, input_display_len);
var sep = false;
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
if(inputs[| i].value_from) {
if(sep) array_push(input_display_list, new Inspector_Spacer(20, true));
sep = true;
for( var j = 0; j < data_length; j++ ) {
ds_list_add(_in, inputs[| i + j]);
array_push(input_display_list, i + j);
}
} else {
for( var j = 0; j < data_length; j++ )
delete inputs[| i + j];
}
}
for( var i = 0; i < ds_list_size(_in); i++ )
_in[| i].index = i;
ds_list_destroy(inputs);
inputs = _in;
createNewInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(index < input_fix_len) return;
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static getPreviewValues = function() { return getInputData(input_fix_len); } static getPreviewValues = function() { return getInputData(input_fix_len); }
@ -131,8 +88,6 @@ function Node_Camera(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
} #endregion } #endregion
static processData = function(_outSurf, _data, _output_index, _array_index) { #region static processData = function(_outSurf, _data, _output_index, _array_index) { #region
if(!is_surface(_data[input_fix_len])) return;
var _area = _data[0]; var _area = _data[0];
var _zoom = _data[1]; var _zoom = _data[1];
@ -157,7 +112,8 @@ function Node_Camera(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
surface_clear(temp_surface[i]); surface_clear(temp_surface[i]);
} }
var amo = (ds_list_size(inputs) - input_fix_len) / data_length - 1; var amo = getInputAmount();
if(amo <= 0) return _outSurf;
shader_set(sh_camera); shader_set(sh_camera);
shader_set_f("camDimension", _surf_w, _surf_h); shader_set_f("camDimension", _surf_w, _surf_h);

View file

@ -37,11 +37,9 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
layer_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region layer_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region
PROCESSOR_OVERLAY_CHECK PROCESSOR_OVERLAY_CHECK
var amo = (ds_list_size(inputs) - input_fix_len) / data_length - 1; var amo = getInputAmount();
if(array_length(current_data) != ds_list_size(inputs)) return 0; var lh = 28;
var eh = 36;
var lh = 28;
var eh = 36;
properties_expand = array_verify(properties_expand, amo); properties_expand = array_verify(properties_expand, amo);
var _h = 4; var _h = 4;
@ -85,22 +83,23 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, _px, _py, _pw, _ph, COLORS.node_composite_bg_blend, 1); draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, _px, _py, _pw, _ph, COLORS.node_composite_bg_blend, 1);
var jun = inputs[| index + 4]; var jn_bld = inputs[| index + 4];
var bl_wid = jun.editWidget; var jn_alp = inputs[| index + 5];
var _param = new widgetParam(_px + 4, _py + 4, _pww, _pwh, jun.showValue(), jun.display_data, _m, layer_renderer.rx, layer_renderer.ry); var wd_bld = jn_bld.editWidget;
bl_wid.setFocusHover(_focus, _hover); var wd_alp = jn_alp.editWidget;
bl_wid.font = f_p2; var _param = new widgetParam(_px + 4, _py + 4, _pww, _pwh, jn_bld.showValue(), jn_bld.display_data, _m, layer_renderer.rx, layer_renderer.ry);
bl_wid.drawParam(_param); _param.font = f_p2;
bl_wid.font = f_p0;
wd_bld.setFocusHover(_focus, _hover);
wd_bld.drawParam(_param);
var jun = inputs[| index + 5]; var _param = new widgetParam(_px + 4 + _pww + 8, _py + 4, _pww, _pwh, jn_alp.showValue(), jn_alp.display_data, _m, layer_renderer.rx, layer_renderer.ry);
var bl_wid = jun.editWidget; _param.font = f_p2;
var _param = new widgetParam(_px + 4 + _pww + 8, _py + 4, _pww, _pwh, jun.showValue(), jun.display_data, _m, layer_renderer.rx, layer_renderer.ry); wd_alp.setFocusHover(_focus, _hover);
bl_wid.setFocusHover(_focus, _hover); wd_alp.drawParam(_param);
bl_wid.drawParam(_param);
} #endregion } #endregion
if(point_in_circle(_m[0], _m[1], _bx, _cy + lh / 2, 16)) { if(point_in_circle(_m[0], _m[1], _bx, _cy + lh / 2, 16)) {
@ -226,7 +225,6 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
]; ];
input_display_list_len = array_length(input_display_list); input_display_list_len = array_length(input_display_list);
setIsDynamicInput(6);
function deleteLayer(index) { #region function deleteLayer(index) { #region
var idx = input_fix_len + index * data_length; var idx = input_fix_len + index * data_length;
@ -246,7 +244,7 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
doUpdate(); doUpdate();
} #endregion } #endregion
static createNewInput = function() { #region static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
var _s = floor((index - input_fix_len) / data_length); var _s = floor((index - input_fix_len) / data_length);
@ -279,8 +277,9 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
while(_s >= array_length(attributes.layer_selectable)) while(_s >= array_length(attributes.layer_selectable))
array_push(attributes.layer_selectable, true); array_push(attributes.layer_selectable, true);
} if(!LOADING && !APPENDING) createNewInput(); #endregion return inputs[| index + 0];
} setDynamicInput(6);
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
@ -308,15 +307,6 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
surface_selecting = noone; surface_selecting = noone;
static getInputAmount = function() { INLINE return input_fix_len + (ds_list_size(inputs) - input_fix_len) / data_length; }
static onValueFromUpdate = function(index) { #region
if(LOADING || APPENDING) return;
if(index + data_length >= ds_list_size(inputs))
createNewInput();
} #endregion
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
PROCESSOR_OVERLAY_CHECK PROCESSOR_OVERLAY_CHECK
@ -438,9 +428,7 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
var _vis = attributes.layer_visible; var _vis = attributes.layer_visible;
var _sel = attributes.layer_selectable; var _sel = attributes.layer_selectable;
var amo = (ds_list_size(inputs) - input_fix_len) / data_length; var amo = getInputAmount();
if(array_length(current_data) < input_fix_len + amo * data_length)
return;
var anchors = array_create(ds_list_size(inputs)); var anchors = array_create(ds_list_size(inputs));
@ -646,7 +634,7 @@ function Node_Composite(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
} }
var res_index = 0; var res_index = 0;
var imageAmo = (ds_list_size(inputs) - input_fix_len) / data_length; var imageAmo = getInputAmount();
var _vis = attributes.layer_visible; var _vis = attributes.layer_visible;
var bg = 0; var bg = 0;
var _bg = 0; var _bg = 0;

View file

@ -187,6 +187,8 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
input_button_length = array_length(input_buttons); input_button_length = array_length(input_buttons);
}); });
dummy_input = noone;
#endregion #endregion
#region --- attributes ---- #region --- attributes ----
@ -420,10 +422,12 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
_hi += junction_draw_hei_y; _hi += junction_draw_hei_y;
} }
if(auto_input && dummy_input) _hi += junction_draw_hei_y;
for( var i = 0; i < ds_list_size(outputs); i++ ) for( var i = 0; i < ds_list_size(outputs); i++ )
if(outputs[| i].isVisible()) _ho += junction_draw_hei_y; if(outputs[| i].isVisible()) _ho += junction_draw_hei_y;
h = max(min_h, _prev_surf * 128, _hi, _ho, attributes.node_height); h = max(min_h, _prev_surf * 128, _hi, _ho, attributes.node_height);
fix_h = h; fix_h = h;
} #endregion } #endregion
@ -440,56 +444,76 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
return self; return self;
} #endregion } #endregion
static setIsDynamicInput = function(_data_length = 1, _auto_input = true, _dynamic_input_cond = DYNA_INPUT_COND.connection) { #region #region //////////////////////////////// Dynamic IO ////////////////////////////////
is_dynamic_input = true; auto_input = false;
auto_input = _auto_input; dyna_input_check_shift = 0;
static createNewInput = -1;
input_display_list_raw = array_clone(input_display_list); static setDynamicInput = function(_data_length = 1, _auto_input = true, _dummy_type = VALUE_TYPE.any, _dynamic_input_cond = DYNA_INPUT_COND.connection) { #region
input_display_len = input_display_list == -1? 0 : array_length(input_display_list); is_dynamic_input = true;
input_fix_len = ds_list_size(inputs); auto_input = _auto_input;
data_length = _data_length; dummy_type = _dummy_type;
input_display_list_raw = array_clone(input_display_list, 1);
input_display_len = input_display_list == -1? 0 : array_length(input_display_list);
input_fix_len = ds_list_size(inputs);
data_length = _data_length;
dynamic_input_cond = _dynamic_input_cond;
if(auto_input) {
dummy_input = nodeValue("Add value", self, JUNCTION_CONNECT.input, dummy_type, 0)
.setDummy(function() { return createNewInput(); })
.setVisible(false, true);
}
} #endregion
dynamic_input_cond = _dynamic_input_cond; static refreshDynamicInput = function() { #region
} #endregion var _in = ds_list_create();
static createNewInput = -1; for( var i = 0; i < input_fix_len; i++ )
ds_list_add(_in, inputs[| i]);
static refreshDynamicInput = function() { #region
var _in = ds_list_create(); input_display_list = array_clone(input_display_list_raw, 1);
var sep = false;
for( var i = 0; i < input_fix_len; i++ )
ds_list_add(_in, inputs[| i]); for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _active = false;
array_resize(input_display_list, input_display_len); if(dynamic_input_cond & DYNA_INPUT_COND.connection)
_active |= inputs[| i + dyna_input_check_shift].value_from != noone;
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _active = false; if(dynamic_input_cond & DYNA_INPUT_COND.zero) {
if(dynamic_input_cond & DYNA_INPUT_COND.connection) var _val = inputs[| i + dyna_input_check_shift].getValue();
_active |= inputs[| i].value_from != noone; _active |= _val != 0 || _val != "";
if(dynamic_input_cond & DYNA_INPUT_COND.zero) { }
var _val = inputs[| i].getValue();
_active |= _val != 0 || _val != ""; if(_active) {
if(sep && data_length > 1) array_push(input_display_list, new Inspector_Spacer(20, true));
sep = true;
for( var j = 0; j < data_length; j++ ) {
var _ind = i + j;
ds_list_add(_in, inputs[| _ind]);
if(input_display_list != -1)
array_push(input_display_list, _ind);
}
} else {
for( var j = 0; j < data_length; j++ )
delete inputs[| i + j];
}
} }
if(_active) { for( var i = 0; i < ds_list_size(_in); i++ )
for( var j = 0; j < data_length; j++ ) { _in[| i].index = i;
ds_list_add(_in, inputs[| i + j]);
array_push(input_display_list, i + j); ds_list_destroy(inputs);
} inputs = _in;
} else { } #endregion
for( var j = 0; j < data_length; j++ )
delete inputs[| i + j]; static getInputAmount = function() { return (ds_list_size(inputs) - input_fix_len) / data_length; }
}
}
for( var i = 0; i < ds_list_size(_in); i++ ) #endregion //////////////////////////////// Dynamic IO ////////////////////////////////
_in[| i].index = i;
ds_list_destroy(inputs);
inputs = _in;
createNewInput();
} #endregion
static getOutput = function(junc = noone) { #region static getOutput = function(junc = noone) { #region
for( var i = 0; i < ds_list_size(outputs); i++ ) { for( var i = 0; i < ds_list_size(outputs); i++ ) {
@ -502,6 +526,8 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
} #endregion } #endregion
static getInput = function(junc = noone, shift = input_fix_len) { #region static getInput = function(junc = noone, shift = input_fix_len) { #region
if(dummy_input) return dummy_input;
for( var i = shift; i < ds_list_size(inputs); i++ ) { for( var i = shift; i < ds_list_size(inputs); i++ ) {
var _inp = inputs[| i]; var _inp = inputs[| i];
@ -554,7 +580,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
if(!LOADING) PROJECT.modified = true; if(!LOADING) PROJECT.modified = true;
} #endregion } #endregion
#region ++++ inspector update ++++ #region //// inspector update
static onInspector1Update = noone; static onInspector1Update = noone;
static inspector1Update = function() { INLINE onInspector1Update(); } static inspector1Update = function() { INLINE onInspector1Update(); }
static hasInspector1Update = function() { INLINE return NODE_HAS_INSP1; } static hasInspector1Update = function() { INLINE return NODE_HAS_INSP1; }
@ -739,7 +765,12 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
static valueFromUpdate = function(index) { #region static valueFromUpdate = function(index) { #region
onValueFromUpdate(index); onValueFromUpdate(index);
if(is_dynamic_input) will_setHeight = true; if(auto_input && !LOADING && !APPENDING)
refreshDynamicInput();
if(is_dynamic_input)
will_setHeight = true;
cacheCheck(); cacheCheck();
} #endregion } #endregion
@ -982,6 +1013,8 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
array_push(inputDisplayList, jun); array_push(inputDisplayList, jun);
} }
if(auto_input && dummy_input) array_push(inputDisplayList, dummy_input);
}#endregion }#endregion
static preDraw = function(_x, _y, _s) { #region static preDraw = function(_x, _y, _s) { #region
@ -1293,8 +1326,8 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
var yy = y * _s + _y; var yy = y * _s + _y;
var _hov = PANEL_GRAPH.pHOVER && (PANEL_GRAPH.node_hovering == noone || PANEL_GRAPH.node_hovering == self); var _hov = PANEL_GRAPH.pHOVER && (PANEL_GRAPH.node_hovering == noone || PANEL_GRAPH.node_hovering == self);
show_input_name = _hov && point_in_rectangle(_mx, _my, xx - 8 * _s, yy + 20 * _s, xx + 8 * _s, yy + h * _s); show_input_name = _hov && point_in_rectangle(_mx, _my, xx - 12 * _s, yy + 20 * _s, xx + 12 * _s, yy + h * _s);
show_output_name = _hov && point_in_rectangle(_mx, _my, xx + (w - 8) * _s, yy + 20 * _s, xx + (w + 8) * _s, yy + h * _s); show_output_name = _hov && point_in_rectangle(_mx, _my, xx + (w - 12) * _s, yy + 20 * _s, xx + (w + 12) * _s, yy + h * _s);
if(show_input_name) { if(show_input_name) {
for(var i = 0, n = array_length(inputDisplayList); i < n; i++) { for(var i = 0, n = array_length(inputDisplayList); i < n; i++) {

View file

@ -37,17 +37,9 @@ function Node_Equation(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
setDimension(96, 48); setDimension(96, 48);
ast = []; ast = [];
inputs[| 0] = nodeValue("Equation", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, ""); attributes.size = 0;
static createNewInput = function() { #region inputs[| 0] = nodeValue("Equation", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "");
var index = ds_list_size(inputs);
inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" )
.setDisplay(VALUE_DISPLAY.text_box);
inputs[| index + 1] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 )
.setVisible(true, true);
inputs[| index + 1].editWidget.interactable = false;
} #endregion
outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0); outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0);
@ -56,9 +48,24 @@ function Node_Equation(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
argument_renderer.y = _y; argument_renderer.y = _y;
argument_renderer.w = _w; argument_renderer.w = _w;
var tx = _x + ui(8); var bw = _w / 2 - ui(4);
var ty = _y + ui(8); var bh = ui(36);
var hh = ui(8); if(buttonTextIconInstant(THEME.button_hide, _x, _y + ui(8), bw, bh, _m, _focus, _hover, "", THEME.add, __txt("Add")) == 2) {
attributes.size++;
refreshDynamicInput();
update();
}
var amo = attributes.size;
if(buttonTextIconInstant(THEME.button_hide, _x + _w - bw, _y + ui(8), bw, bh, _m, _focus, _hover, "", THEME.minus, __txt("Remove")) == 2) {
attributes.size = max(attributes.size - 1, 0);
refreshDynamicInput();
update();
}
var tx = _x + ui(8);
var ty = _y + bh + ui(16);
var hh = bh + ui(16);
var _th = TEXTBOX_HEIGHT; var _th = TEXTBOX_HEIGHT;
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) { for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
@ -94,42 +101,48 @@ function Node_Equation(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
["Arguments", false], argument_renderer, ["Arguments", false], argument_renderer,
["Inputs", true], ["Inputs", true],
] ]
setIsDynamicInput(2);
if(!LOADING && !APPENDING) createNewInput(); static createNewInput = function() {
var index = ds_list_size(inputs);
inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" )
.setDisplay(VALUE_DISPLAY.text_box);
inputs[| index + 1] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 )
.setVisible(true, true);
return inputs[| index + 0];
} setDynamicInput(2, false);
static refreshDynamicInput = function() { #region static refreshDynamicInput = function() { #region
var _in = ds_list_create(); var _l = ds_list_create();
var amo = attributes.size;
for( var i = 0; i < input_fix_len; i++ ) for(var i = 0; i < input_fix_len; i++ )
ds_list_add(_in, inputs[| i]); ds_list_add(_l, inputs[| i]);
array_resize(input_display_list, input_display_len); for(var i = 0; i < amo; i++ ) {
var _i = input_fix_len + i * data_length;
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var varName = getInputData(i);
if(varName != "") { if(_i >= ds_list_size(_l))
ds_list_add(_in, inputs[| i + 0]); createNewInput();
ds_list_add(_in, inputs[| i + 1]);
inputs[| i + 1].editWidget.setInteract(true); for(var j = 0; j < data_length; j++)
inputs[| i + 1].name = varName; ds_list_add(_l, inputs[| _i + j]);
array_push(input_display_list, i + 1);
} else {
delete inputs[| i + 0];
delete inputs[| i + 1];
}
} }
for( var i = 0; i < ds_list_size(_in); i++ ) input_display_list = array_clone(input_display_list_raw);
_in[| i].index = i;
for( var i = input_fix_len; i < ds_list_size(_l); i++ ) {
_l[| i].index = i;
array_push(input_display_list, i);
}
ds_list_destroy(inputs); ds_list_destroy(inputs);
inputs = _in; inputs = _l;
getJunctionList();
setHeight();
createNewInput();
} #endregion } #endregion
static onValueUpdate = function(index = 0) { #region static onValueUpdate = function(index = 0) { #region
@ -137,8 +150,6 @@ function Node_Equation(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
if(safe_mod(index - input_fix_len, data_length) == 0) //Variable name if(safe_mod(index - input_fix_len, data_length) == 0) //Variable name
inputs[| index + 1].name = getInputData(index); inputs[| index + 1].name = getInputData(index);
refreshDynamicInput();
} #endregion } #endregion
static processData = function(_output, _data, _output_index, _array_index = 0) { #region static processData = function(_output, _data, _output_index, _array_index = 0) { #region

View file

@ -55,7 +55,7 @@ output.color = surfaceColor;")
["Values", true], ["Values", true],
]; ];
setIsDynamicInput(3, false); setDynamicInput(3, false);
static refreshDynamicInput = function() { #region static refreshDynamicInput = function() { #region
var _in = ds_list_create(); var _in = ds_list_create();

View file

@ -17,47 +17,22 @@ function Node_Image_Grid(_x, _y, _group = noone) : Node(_x, _y, _group) construc
.setDisplay(VALUE_DISPLAY.padding) .setDisplay(VALUE_DISPLAY.padding)
.rejectArray(); .rejectArray();
setIsDynamicInput(1);
static createNewInput = function() { #region
var index = ds_list_size(inputs);
inputs[| index] = nodeValue("Input", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, -1 )
.setVisible(true, true);
} if(!LOADING && !APPENDING) createNewInput(); #endregion
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
outputs[| 1] = nodeValue("Atlas data", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, []); outputs[| 1] = nodeValue("Atlas data", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, []);
temp_surface = [ noone, noone ]; temp_surface = [ noone, noone ];
static createNewInput = function() {
var index = ds_list_size(inputs);
inputs[| index] = nodeValue("Input", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, -1 )
.setVisible(true, true);
return inputs[| index];
} setDynamicInput(1, true, VALUE_TYPE.surface);
attribute_surface_depth(); attribute_surface_depth();
static refreshDynamicInput = function() { #region
var _l = ds_list_create();
for( var i = 0; i < ds_list_size(inputs); i++ ) {
if(i < input_fix_len || inputs[| i].value_from)
ds_list_add(_l, inputs[| i]);
else
delete inputs[| i];
}
for( var i = 0; i < ds_list_size(_l); i++ )
_l[| i].index = i;
ds_list_destroy(inputs);
inputs = _l;
createNewInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(index < input_fix_len) return;
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static update = function(frame = CURRENT_FRAME) { #region static update = function(frame = CURRENT_FRAME) { #region
var _axis = getInputData(0); var _axis = getInputData(0);
var _col = getInputData(1); var _col = getInputData(1);
@ -68,7 +43,7 @@ function Node_Image_Grid(_x, _y, _group = noone) : Node(_x, _y, _group) construc
var hh = 0; var hh = 0;
var surfs = []; var surfs = [];
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) { for( var i = input_fix_len; i < ds_list_size(inputs); i++ ) {
var _surf = getInputData(i); var _surf = getInputData(i);
if(!is_array(_surf)) _surf = [ _surf ]; if(!is_array(_surf)) _surf = [ _surf ];

View file

@ -38,19 +38,6 @@ function Node_Json_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) cons
outputs[| 1] = nodeValue("Struct", self, JUNCTION_CONNECT.output, VALUE_TYPE.struct, {}); outputs[| 1] = nodeValue("Struct", self, JUNCTION_CONNECT.output, VALUE_TYPE.struct, {});
setIsDynamicInput(1);
output_fix_len = ds_list_size(outputs);
static createNewInput = function() { #region
var index = ds_list_size(inputs);
inputs[| index] = nodeValue("Key", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" )
.setVisible(true, true);
var index = ds_list_size(outputs);
outputs[| index] = nodeValue("Values", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0 )
.setVisible(true, true);
} if(!LOADING && !APPENDING) createNewInput(); #endregion
content = {}; content = {};
path_current = ""; path_current = "";
edit_time = 0; edit_time = 0;
@ -78,47 +65,6 @@ function Node_Json_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) cons
triggerRender(); triggerRender();
} #endregion } #endregion
static refreshDynamicInput = function() { #region
var _in = ds_list_create();
var _ot = ds_list_create();
for( var i = 0; i < input_fix_len; i++ )
ds_list_add(_in, inputs[| i]);
for( var i = 0; i < output_fix_len; i++ )
ds_list_add(_ot, outputs[| i]);
for( var i = input_fix_len; i < ds_list_size(inputs); i++ ) {
if(getInputData(i) != "") {
ds_list_add(_in, inputs[| i + 0]);
ds_list_add(_ot, outputs[| i + 1]);
} else {
delete inputs[| i + 0];
delete outputs[| i + 1];
}
}
for( var i = 0; i < ds_list_size(_in); i++ )
_in[| i].index = i;
for( var i = 0; i < ds_list_size(_ot); i++ )
_ot[| i].index = i;
ds_list_destroy(inputs);
inputs = _in;
ds_list_destroy(outputs);
outputs = _ot;
createNewInput();
} #endregion
static onValueUpdate = function(index = 0) { #region
if(index < input_fix_len) return;
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
function updatePaths(path) { #region function updatePaths(path) { #region
if(path == -1) return false; if(path == -1) return false;
@ -153,40 +99,6 @@ function Node_Json_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) cons
if(path_current != path) updatePaths(path); if(path_current != path) updatePaths(path);
outputs[| 1].setValue(content); outputs[| 1].setValue(content);
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) {
var key = getInputData(i);
var out = outputs[| i + 1];
out.name = key;
var keys = string_splice(key, ".");
var _str = content;
for( var j = 0; j < array_length(keys); j++ ) {
var k = keys[j];
if(!variable_struct_exists(_str, k)) {
out.setValue(0);
out.setType(VALUE_TYPE.float);
break;
}
var val = variable_struct_get(_str, k);
if(j == array_length(keys) - 1) {
if(is_struct(val))
out.setType(VALUE_TYPE.struct);
else if(is_array(val) && array_length(val))
out.setType(is_string(val[0])? VALUE_TYPE.text : VALUE_TYPE.float);
else
out.setType(is_string(val)? VALUE_TYPE.text : VALUE_TYPE.float);
out.setValue(val);
}
if(is_struct(val)) _str = val;
else break;
}
}
} #endregion } #endregion
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region
@ -196,6 +108,4 @@ function Node_Json_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) cons
var ss = string_scale(str, bbox.w, bbox.h); var ss = string_scale(str, bbox.w, bbox.h);
draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0); draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0);
} #endregion } #endregion
static doApplyDeserialize = function() { refreshDynamicInput(); }
} }

View file

@ -11,71 +11,7 @@ function Node_Json_File_Write(_x, _y, _group = noone) : Node(_x, _y, _group) con
inputs[| 1] = nodeValue("Struct", self, JUNCTION_CONNECT.input, VALUE_TYPE.struct, {}) inputs[| 1] = nodeValue("Struct", self, JUNCTION_CONNECT.input, VALUE_TYPE.struct, {})
.setVisible(true, true); .setVisible(true, true);
static createNewInput = function() { input_display_list = [ 0, 1 ]
var index = ds_list_size(inputs);
inputs[| index + 0] = nodeValue("Key", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
inputs[| index + 1] = nodeValue("value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0 )
.setVisible(false, false);
array_push(input_display_list, index + 0);
array_push(input_display_list, index + 1);
}
input_display_list = [ 0, 1,
["Inputs", false],
]
setIsDynamicInput(3);
if(!LOADING && !APPENDING) createNewInput();
static refreshDynamicInput = function() {
var _in = ds_list_create();
for( var i = 0; i < input_fix_len; i++ )
ds_list_add(_in, inputs[| i]);
array_resize(input_display_list, input_display_len);
if(inputs[| 1].value_from != noone) {
ds_list_destroy(inputs);
inputs = _in;
return;
}
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
if(getInputData(i) != "") {
ds_list_add(_in, inputs[| i + 0]);
ds_list_add(_in, inputs[| i + 1].setVisible(false, true));
array_push(input_display_list, i + 0);
array_push(input_display_list, i + 1);
} else {
delete inputs[| i + 0];
delete inputs[| i + 1];
}
}
for( var i = 0; i < ds_list_size(_in); i++ )
_in[| i].index = i;
ds_list_destroy(inputs);
inputs = _in;
createNewInput();
}
static onValueUpdate = function(index = 0) {
if(index < input_fix_len) return;
if(LOADING || APPENDING) return;
if(safe_mod(index - input_fix_len, data_length) == 0) { //Variable name
inputs[| index + 1].name = getInputData(index) + " value";
}
refreshDynamicInput();
}
static writeFile = function() { static writeFile = function() {
var path = getInputData(0); var path = getInputData(0);
@ -83,31 +19,10 @@ function Node_Json_File_Write(_x, _y, _group = noone) : Node(_x, _y, _group) con
if(filename_ext(path) != ".json") if(filename_ext(path) != ".json")
path += ".json"; path += ".json";
var cont = {}; var cont = getInputData(1);
if(inputs[| 1].value_from == noone) {
for( var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length ) {
var _key = getInputData(i + 0);
var _val = getInputData(i + 1);
inputs[| i + 1].setType(inputs[| i + 1].value_from? inputs[| i + 1].value_from.type : VALUE_TYPE.any);
variable_struct_set(cont, _key, _val);
}
} else
cont = getInputData(1);
json_save_struct(path, cont); json_save_struct(path, cont);
} }
static step = function() {
for(var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length) {
var inp = inputs[| i + 1];
var typ = inp.value_from == noone? VALUE_TYPE.any : inp.value_from.type;
inp.setType(typ);
}
}
static update = function(frame = CURRENT_FRAME) { writeFile(); } static update = function(frame = CURRENT_FRAME) { writeFile(); }
static onInspector1Update = function() { writeFile(); } static onInspector1Update = function() { writeFile(); }
@ -122,8 +37,4 @@ function Node_Json_File_Write(_x, _y, _group = noone) : Node(_x, _y, _group) con
var ss = string_scale(str, bbox.w, bbox.h); var ss = string_scale(str, bbox.w, bbox.h);
draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0); draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0);
} }
static doApplyDeserialize = function() {
refreshDynamicInput();
}
} }

View file

@ -41,17 +41,8 @@ function Node_Logic(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
new scrollItem("Xor" , s_node_logic, 5), ]) new scrollItem("Xor" , s_node_logic, 5), ])
.rejectArray(); .rejectArray();
inputs[| 1] = nodeValue("a", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false)
.setVisible(true, true);
input_display_list = [
0, 1,
]
outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.boolean, false); outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.boolean, false);
setIsDynamicInput(1);
static createNewInput = function() { static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
@ -59,37 +50,8 @@ function Node_Logic(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
inputs[| index] = nodeValue(jname, self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false ) inputs[| index] = nodeValue(jname, self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false )
.setVisible(true, true); .setVisible(true, true);
array_push(input_display_list, index);
return inputs[| index]; return inputs[| index];
} } setDynamicInput(1, true, VALUE_TYPE.boolean);
if!(LOADING || APPENDING)
createNewInput();
static refreshDynamicInput = function() {
var _in = ds_list_create();
for( var i = 0; i < input_fix_len; i++ )
ds_list_add(_in, inputs[| i]);
array_resize(input_display_list, input_display_len);
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
if(inputs[| i].value_from) {
ds_list_add(_in, inputs[| i]);
array_push(input_display_list, i);
} else
delete inputs[| i];
}
for( var i = 0; i < ds_list_size(_in); i++ )
_in[| i].index = i;
ds_list_destroy(inputs);
inputs = _in;
createNewInput();
}
static trimInputs = function(amo) { static trimInputs = function(amo) {
if(ds_list_size(inputs) < amo + 1) { if(ds_list_size(inputs) < amo + 1) {
@ -99,7 +61,6 @@ function Node_Logic(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
while(ds_list_size(inputs) > amo + 1) while(ds_list_size(inputs) > amo + 1)
ds_list_delete(inputs, amo + 1); ds_list_delete(inputs, amo + 1);
} }
array_resize(input_display_list, amo + 1);
} }
static onValueUpdate = function(index) { static onValueUpdate = function(index) {
@ -109,50 +70,34 @@ function Node_Logic(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
switch(mode) { switch(mode) {
case LOGIC_OPERATOR.lnot : case LOGIC_OPERATOR.lnot :
trimInputs(1); trimInputs(1);
auto_input = false;
return; return;
case LOGIC_OPERATOR.lnand : case LOGIC_OPERATOR.lnand :
case LOGIC_OPERATOR.lnor : case LOGIC_OPERATOR.lnor :
case LOGIC_OPERATOR.lxor : case LOGIC_OPERATOR.lxor :
trimInputs(2); trimInputs(2);
auto_input = false;
return; return;
case LOGIC_OPERATOR.land : case LOGIC_OPERATOR.land :
case LOGIC_OPERATOR.lor : case LOGIC_OPERATOR.lor :
while(ds_list_size(inputs) < 3) auto_input = true;
createNewInput();
return;
}
}
static onValueFromUpdate = function(index) {
if(LOADING || APPENDING) return;
var mode = getInputData(0);
switch(mode) {
case LOGIC_OPERATOR.lnot :
trimInputs(1);
return;
case LOGIC_OPERATOR.lnand :
case LOGIC_OPERATOR.lnor :
case LOGIC_OPERATOR.lxor :
trimInputs(2);
return; return;
} }
if(index < input_fix_len) return; will_setHeight = true;
refreshDynamicInput();
} }
static _eval = function(mode, a, b) { static _eval = function(mode, a, b) {
switch(mode) { switch(mode) {
case LOGIC_OPERATOR.land : return bool(a) && bool(b); case LOGIC_OPERATOR.land : return bool(a) && bool(b);
case LOGIC_OPERATOR.lor : return bool(a) || bool(b); case LOGIC_OPERATOR.lor : return bool(a) || bool(b);
case LOGIC_OPERATOR.lnot : return !bool(a); case LOGIC_OPERATOR.lnot : return !bool(a);
case LOGIC_OPERATOR.lnand : return !(bool(a) && bool(b)); case LOGIC_OPERATOR.lnand : return !(bool(a) && bool(b));
case LOGIC_OPERATOR.lnor : return !(bool(a) || bool(b)); case LOGIC_OPERATOR.lnor : return !(bool(a) || bool(b));
case LOGIC_OPERATOR.lxor : return bool(a) ^^ bool(b); case LOGIC_OPERATOR.lxor : return bool(a) ^^ bool(b);
} }
return false; return false;
} }
@ -199,7 +144,8 @@ function Node_Logic(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
case LOGIC_OPERATOR.land : case LOGIC_OPERATOR.land :
case LOGIC_OPERATOR.lor : case LOGIC_OPERATOR.lor :
var val = a; var val = a;
var to = max(2, ds_list_size(inputs) - 1); var to = ds_list_size(inputs);
for( var i = 2; i < to; i++ ) { for( var i = 2; i < to; i++ ) {
var b = getInputData(i); var b = getInputData(i);
val = evalLogicArray(mode, val, b); val = evalLogicArray(mode, val, b);

View file

@ -28,14 +28,12 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
["Inputs", true], ["Inputs", true],
]; ];
setIsDynamicInput(3, false);
argument_name = []; argument_name = [];
argument_val = []; argument_val = [];
lua_state = lua_create(); lua_state = lua_create();
static createNewInput = function() { #region static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ); inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
@ -46,7 +44,12 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
inputs[| index + 2] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 ) inputs[| index + 2] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 )
.setVisible(true, true); .setVisible(true, true);
inputs[| index + 2].editWidget.interactable = false; inputs[| index + 2].editWidget.interactable = false;
} if(!LOADING && !APPENDING) createNewInput(); #endregion
return inputs[| index + 0];
}
setDynamicInput(3, false);
if(!LOADING && !APPENDING) createNewInput();
static getState = function() { #region static getState = function() { #region
if(inputs[| 3].value_from == noone) return lua_state; if(inputs[| 3].value_from == noone) return lua_state;
@ -71,15 +74,6 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
if(inputs[| i + 2].editWidget != noone) if(inputs[| i + 2].editWidget != noone)
inputs[| i + 2].editWidget.interactable = true; inputs[| i + 2].editWidget.interactable = true;
var type = getInputData(i + 1);
switch(type) {
case 0 : inputs[| i + 2].setType(VALUE_TYPE.float); break;
case 1 : inputs[| i + 2].setType(VALUE_TYPE.text); break;
case 2 : inputs[| i + 2].setType(VALUE_TYPE.surface); break;
case 3 : inputs[| i + 2].setType(VALUE_TYPE.struct); break;
}
inputs[| i + 2].setDisplay(VALUE_DISPLAY._default);
array_push(input_display_list, i + 2); array_push(input_display_list, i + 2);
} else { } else {
delete inputs[| i + 0]; delete inputs[| i + 0];
@ -94,13 +88,31 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
ds_list_destroy(inputs); ds_list_destroy(inputs);
inputs = _in; inputs = _in;
refreshInputType();
createNewInput(); createNewInput();
} #endregion } #endregion
static refreshInputType = function() { #region
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var type = getInputData(i + 1);
switch(type) {
case 0 : inputs[| i + 2].setType(VALUE_TYPE.float); break;
case 1 : inputs[| i + 2].setType(VALUE_TYPE.text); break;
case 2 : inputs[| i + 2].setType(VALUE_TYPE.surface); break;
case 3 : inputs[| i + 2].setType(VALUE_TYPE.struct); break;
}
inputs[| i + 2].setDisplay(VALUE_DISPLAY._default);
}
} #endregion
static onValueUpdate = function(index = 0) { #region static onValueUpdate = function(index = 0) { #region
if(LOADING || APPENDING) return; if(LOADING || APPENDING) return;
if((index - input_fix_len) % data_length == 0) refreshDynamicInput(); var _ind = (index - input_fix_len) % data_length;
if(_ind == 0) refreshDynamicInput();
else if(_ind == 1) refreshInputType();
} #endregion } #endregion
static step = function() { #region static step = function() { #region

View file

@ -30,14 +30,12 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
["Inputs", true], ["Inputs", true],
]; ];
setIsDynamicInput(3, false);
argument_name = []; argument_name = [];
argument_val = []; argument_val = [];
lua_state = lua_create(); lua_state = lua_create();
static createNewInput = function() { #region static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ); inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
@ -48,7 +46,12 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
inputs[| index + 2] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 ) inputs[| index + 2] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 )
.setVisible(true, true); .setVisible(true, true);
inputs[| index + 2].editWidget.interactable = false; inputs[| index + 2].editWidget.interactable = false;
} if(!LOADING && !APPENDING) createNewInput(); #endregion
return inputs[| index + 0];
}
setDynamicInput(3, false);
if(!LOADING && !APPENDING) createNewInput();
static getState = function() { #region static getState = function() { #region
if(inputs[| 3].value_from == noone) if(inputs[| 3].value_from == noone)
@ -74,15 +77,6 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
if(inputs[| i + 2].editWidget != noone) if(inputs[| i + 2].editWidget != noone)
inputs[| i + 2].editWidget.interactable = true; inputs[| i + 2].editWidget.interactable = true;
var type = getInputData(i + 1);
switch(type) {
case 0 : inputs[| i + 2].setType(VALUE_TYPE.float); break;
case 1 : inputs[| i + 2].setType(VALUE_TYPE.text); break;
case 2 : inputs[| i + 2].setType(VALUE_TYPE.surface); break;
case 3 : inputs[| i + 2].setType(VALUE_TYPE.struct); break;
}
inputs[| i + 2].setDisplay(VALUE_DISPLAY._default);
array_push(input_display_list, i + 2); array_push(input_display_list, i + 2);
} else { } else {
delete inputs[| i + 0]; delete inputs[| i + 0];
@ -97,13 +91,31 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
ds_list_destroy(inputs); ds_list_destroy(inputs);
inputs = _in; inputs = _in;
refreshInputType();
createNewInput(); createNewInput();
} #endregion } #endregion
static refreshInputType = function() { #region
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var type = getInputData(i + 1);
switch(type) {
case 0 : inputs[| i + 2].setType(VALUE_TYPE.float); break;
case 1 : inputs[| i + 2].setType(VALUE_TYPE.text); break;
case 2 : inputs[| i + 2].setType(VALUE_TYPE.surface); break;
case 3 : inputs[| i + 2].setType(VALUE_TYPE.struct); break;
}
inputs[| i + 2].setDisplay(VALUE_DISPLAY._default);
}
} #endregion
static onValueUpdate = function(index = 0) { #region static onValueUpdate = function(index = 0) { #region
if(LOADING || APPENDING) return; if(LOADING || APPENDING) return;
if((index - input_fix_len) % data_length == 0) refreshDynamicInput(); var _ind = (index - input_fix_len) % data_length;
if(_ind == 0) refreshDynamicInput();
else if(_ind == 1) refreshInputType();
} #endregion } #endregion
static step = function() { #region static step = function() { #region

View file

@ -28,40 +28,24 @@ function Node_MIDI_In(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
var bw = _w / 2 - ui(4); var bw = _w / 2 - ui(4);
var bh = ui(36); var bh = ui(36);
var bx = _x; if(buttonTextIconInstant(THEME.button_hide, _x, _y + ui(8), bw, bh, _m, _focus, _hover, "", THEME.add, __txt("Add")) == 2) {
var by = _y + ui(8);
if(buttonInstant(THEME.button_hide, bx, by, bw, bh, _m, _focus, _hover) == 2) {
createNewInput(); createNewInput();
} }
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_icon_light);
var bxc = bx + bw / 2 - (string_width("Add") + ui(64)) / 2;
var byc = by + bh / 2;
draw_sprite_ui(THEME.add, 0, bxc + ui(24), byc,,,, COLORS._main_icon_light);
draw_text(bxc + ui(48), byc, __txt("Add"));
var bx = _x + bw + ui(8);
var amo = ds_list_size(inputs); var amo = ds_list_size(inputs);
if(amo > 1 && buttonInstant(THEME.button_hide, bx, by, bw, bh, _m, _focus, _hover) == 2) { if(amo > 1 && buttonTextIconInstant(THEME.button_hide, _x + _w - bw, _y + ui(8), bw, bh, _m, _focus, _hover, "", THEME.minus, __txt("Remove")) == 2) {
var _out = outputs[| ds_list_size(outputs) - 1]; var _out = outputs[| ds_list_size(outputs) - 1];
for( var i = 0, n = array_length(_out.value_to); i < n; i++ ) for( var i = 0, n = array_length(_out.value_to); i < n; i++ )
_out.value_to[i].removeFrom(); _out.value_to[i].removeFrom();
array_remove(input_display_list, ds_list_size(inputs) - 1); array_remove(input_display_list, ds_list_size(inputs) - 1);
ds_list_delete(inputs, ds_list_size(inputs) - 1); ds_list_delete(inputs, ds_list_size(inputs) - 1);
ds_list_delete(inputs, ds_list_size(inputs) - 1);
ds_list_delete(outputs, ds_list_size(outputs) - 1); ds_list_delete(outputs, ds_list_size(outputs) - 1);
} }
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_icon_light);
var bxc = bx + bw / 2 - (string_width("Remove") + ui(64)) / 2;
var byc = by + bh / 2;
draw_sprite_ui(THEME.minus, 0, bxc + ui(24), byc,,,, COLORS._main_icon_light, (amo > 1) * 0.5 + 0.5);
draw_set_alpha((amo > 1) * 0.5 + 0.5);
draw_text(bxc + ui(48), byc, __txt("Remove"));
draw_set_alpha(1);
var _wx = TEXTBOX_HEIGHT + ui(16); var _wx = TEXTBOX_HEIGHT + ui(16);
var _wy = by + bh + ui(8); var _wy = _y + bh + ui(16);
var _wh = TEXTBOX_HEIGHT; var _wh = TEXTBOX_HEIGHT;
var _ww = _w - _wx - _wh - ui(8); var _ww = _w - _wx - _wh - ui(8);
@ -110,10 +94,9 @@ function Node_MIDI_In(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
["Watchers", false], watcher_controllers, ["Watchers", false], watcher_controllers,
]; ];
setIsDynamicInput(2); static createNewInput = function() {
var _index = ds_list_size(inputs);
static createNewInput = function() { #region index_watching = _index;
index_watching = ds_list_size(inputs);
var _inp = nodeValue("Index", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, -1 ); var _inp = nodeValue("Index", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, -1 );
_inp.editWidget.slidable = false; _inp.editWidget.slidable = false;
@ -121,7 +104,9 @@ function Node_MIDI_In(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
ds_list_add(inputs, nodeValue("Normalize", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false )); ds_list_add(inputs, nodeValue("Normalize", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false ));
ds_list_add(outputs, nodeValue("Value", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, -1 )); ds_list_add(outputs, nodeValue("Value", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, -1 ));
} #endregion
return _inp;
} setDynamicInput(2, false);
index_watching = noone; index_watching = noone;
disp_value = 0; disp_value = 0;

View file

@ -95,8 +95,6 @@ function Node_MK_Flare(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
var _flares = inputs[| 5].getValue(); var _flares = inputs[| 5].getValue();
var _amo = array_length(_flares); var _amo = array_length(_flares);
//print($"{_flares}: {_amo}");
var _fx = _x; var _fx = _x;
var _fy = _y + ui(8); var _fy = _y + ui(8);
var _fh = ui(32); var _fh = ui(32);
@ -314,12 +312,6 @@ function Node_MK_Flare(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
flares = []; flares = [];
setIsDynamicInput(1);
static createNewInput = function() { #region
ds_list_add(inputs, nodeValue("Index", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [] ).setArrayDepth(1));
} #endregion
ox = 0; ox = 0;
oy = 0; oy = 0;
cx = 0 cx = 0

View file

@ -13,7 +13,7 @@ function Node_Module_Test(_x, _y, _group = noone) : Node(_x, _y, _group) constru
//input_display_list = [ 0 ]; //input_display_list = [ 0 ];
setIsDynamicInput(1); setDynamicInput(1);
static createNewInput = function() { #region static createNewInput = function() { #region
var index = ds_list_size(inputs); var index = ds_list_size(inputs);

View file

@ -41,7 +41,7 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
["Anchors", false], ["Anchors", false],
]; ];
setIsDynamicInput(1); setDynamicInput(1, false);
tool_pathDrawer = new NodeTool( "Draw path", THEME.path_tools_draw ) tool_pathDrawer = new NodeTool( "Draw path", THEME.path_tools_draw )
.addSetting("Smoothness", VALUE_TYPE.float, function(val) { tool_pathDrawer.attribute.thres = val; }, "thres", 4) .addSetting("Smoothness", VALUE_TYPE.float, function(val) { tool_pathDrawer.attribute.thres = val; }, "thres", 4)

View file

@ -2,7 +2,6 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
name = "Path Array"; name = "Path Array";
setDimension(96, 48);; setDimension(96, 48);;
setIsDynamicInput(1);
cached_pos = ds_map_create(); cached_pos = ds_map_create();
outputs[| 0] = nodeValue("Path array", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self); outputs[| 0] = nodeValue("Path array", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self);
@ -14,39 +13,11 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
.setVisible(true, true); .setVisible(true, true);
return inputs[| index]; return inputs[| index];
} if(!LOADING && !APPENDING) createNewInput(); #endregion } setDynamicInput(1, true, VALUE_TYPE.pathnode);
static refreshDynamicInput = function() { #region
var _l = ds_list_create();
for( var i = 0; i < input_fix_len; i++ )
_l[| i] = inputs[| i];
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
if(inputs[| i].value_from)
ds_list_add(_l, inputs[| i]);
else
delete inputs[| i];
}
for( var i = 0; i < ds_list_size(_l); i++ )
_l[| i].index = i;
ds_list_destroy(inputs);
inputs = _l;
createNewInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static getLineCount = function() { #region static getLineCount = function() { #region
var l = 0; var l = 0;
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i += data_length ) { for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _path = getInputData(i); var _path = getInputData(i);
l += struct_has(_path, "getLineCount")? _path.getLineCount() : 1; l += struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
} }
@ -54,7 +25,7 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
} #endregion } #endregion
static getSegmentCount = function(ind = 0) { #region static getSegmentCount = function(ind = 0) { #region
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i += data_length ) { for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _path = getInputData(i); var _path = getInputData(i);
var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1; var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
@ -66,7 +37,7 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
} #endregion } #endregion
static getLength = function(ind = 0) { #region static getLength = function(ind = 0) { #region
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i += data_length ) { for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _path = getInputData(i); var _path = getInputData(i);
var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1; var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
@ -78,7 +49,7 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
} #endregion } #endregion
static getAccuLength = function(ind = 0) { #region static getAccuLength = function(ind = 0) { #region
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i += data_length ) { for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _path = getInputData(i); var _path = getInputData(i);
var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1; var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
@ -90,7 +61,7 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
} #endregion } #endregion
static getPointRatio = function(_rat, ind = 0) { #region static getPointRatio = function(_rat, ind = 0) { #region
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i += data_length ) { for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _path = getInputData(i); var _path = getInputData(i);
var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1; var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
@ -102,7 +73,7 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
} #endregion } #endregion
static getPointDistance = function(_dist, ind = 0) { #region static getPointDistance = function(_dist, ind = 0) { #region
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i += data_length ) { for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _path = getInputData(i); var _path = getInputData(i);
var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1; var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
@ -114,7 +85,7 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
} #endregion } #endregion
static getBoundary = function(ind = 0) { #region static getBoundary = function(ind = 0) { #region
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i += data_length ) { for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _path = getInputData(i); var _path = getInputData(i);
var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1; var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
@ -126,7 +97,7 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
} #endregion } #endregion
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i += data_length ) { for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _path = getInputData(i); var _path = getInputData(i);
if(!struct_has(_path, "drawOverlay")) continue; if(!struct_has(_path, "drawOverlay")) continue;

View file

@ -32,13 +32,15 @@ function Node_Path_L_System(_x, _y, _group = noone) : Node(_x, _y, _group) const
inputs[| 7] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, seed_random(6)) inputs[| 7] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, seed_random(6))
.setDisplay(VALUE_DISPLAY._default, { side_button : button(function() { inputs[| 7].setValue(seed_random(6)); }).setIcon(THEME.icon_random, 0, COLORS._main_icon) }); .setDisplay(VALUE_DISPLAY._default, { side_button : button(function() { inputs[| 7].setValue(seed_random(6)); }).setIcon(THEME.icon_random, 0, COLORS._main_icon) });
setIsDynamicInput(2); static createNewInput = function() {
static createNewInput = function() { #region
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index + 0] = nodeValue("Name " + string(index - input_fix_len), self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ); inputs[| index + 0] = nodeValue("Name " + string(index - input_fix_len), self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
inputs[| index + 1] = nodeValue("Rule " + string(index - input_fix_len), self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ); inputs[| index + 1] = nodeValue("Rule " + string(index - input_fix_len), self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
} #endregion
return inputs[| index + 0];
}
setDynamicInput(2, false);
if(!LOADING && !APPENDING) createNewInput(); if(!LOADING && !APPENDING) createNewInput();
outputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self); outputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self);
@ -138,12 +140,11 @@ function Node_Path_L_System(_x, _y, _group = noone) : Node(_x, _y, _group) const
createNewInput(); createNewInput();
} #endregion } #endregion
static onValueUpdate = function(index) { static onValueUpdate = function(index) { #region
if(LOADING || APPENDING) return; if(index > input_fix_len && !LOADING && !APPENDING)
refreshDynamicInput();
refreshDynamicInput();
} }
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
inputs[| 2].drawOverlay(hover, active, _x, _y, _s, _mx, _my, _snx, _sny); inputs[| 2].drawOverlay(hover, active, _x, _y, _s, _mx, _my, _snx, _sny);
@ -273,9 +274,11 @@ function Node_Path_L_System(_x, _y, _group = noone) : Node(_x, _y, _group) const
if(ds_list_size(inputs) < input_fix_len + 2) return; if(ds_list_size(inputs) < input_fix_len + 2) return;
var rules = {}; var rules = {};
for( var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length ) { for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
var _name = getInputData(i + 0); var _name = getInputData(i + 0);
var _rule = getInputData(i + 1); var _rule = getInputData(i + 1);
if(_name == "") continue;
if(!struct_has(rules, _name)) if(!struct_has(rules, _name))
rules[$ _name] = [ _rule ]; rules[$ _name] = [ _rule ];
else else

View file

@ -18,7 +18,7 @@ function Node_Path_Smooth(_x, _y, _group = noone) : Node(_x, _y, _group) constru
["Anchors", false], ["Anchors", false],
]; ];
setIsDynamicInput(1); setDynamicInput(1, false);
tools = [ tools = [
new NodeTool( "Anchor add / remove", THEME.path_tools_add ), new NodeTool( "Anchor add / remove", THEME.path_tools_add ),
@ -265,10 +265,10 @@ function Node_Path_Smooth(_x, _y, _group = noone) : Node(_x, _y, _group) constru
]; ];
} else { } else {
for( var i = 0, n = amo; i < n; i++ ) { for( var i = 0, n = amo; i < n; i++ ) {
var _a0 = array_safe_get_fast(anchors, i - 1,, ARRAY_OVERFLOW.loop); var _a0 = array_safe_get_fast(anchors, (i - 1) % n, [ 0, 0 ]);
var _a1 = array_safe_get_fast(anchors, i ,, ARRAY_OVERFLOW.loop); var _a1 = array_safe_get_fast(anchors, (i ) % n, [ 0, 0 ]);
var _a2 = array_safe_get_fast(anchors, i + 1,, ARRAY_OVERFLOW.loop); var _a2 = array_safe_get_fast(anchors, (i + 1) % n, [ 0, 0 ]);
var _dr = point_direction(_a0[0], _a0[1], _a2[0], _a2[1]); var _dr = point_direction(_a0[0], _a0[1], _a2[0], _a2[1]);
var _ds0 = point_distance(_a1[0], _a1[1], _a0[0], _a0[1]) / smot; var _ds0 = point_distance(_a1[0], _a1[1], _a0[0], _a0[1]) / smot;
var _ds2 = point_distance(_a1[0], _a1[1], _a2[0], _a2[1]) / smot; var _ds2 = point_distance(_a1[0], _a1[1], _a2[0], _a2[1]) / smot;

View file

@ -5,7 +5,7 @@ enum ARRAY_PROCESS {
expand_inv, expand_inv,
} }
#macro PROCESSOR_OVERLAY_CHECK if(array_length(current_data) != ds_list_size(inputs)) return; #macro PROCESSOR_OVERLAY_CHECK if(array_length(current_data) != ds_list_size(inputs)) return 0;
function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
attributes.array_process = ARRAY_PROCESS.loop; attributes.array_process = ARRAY_PROCESS.loop;

View file

@ -13,7 +13,7 @@ function Node_Rigid_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inlin
var _object = nodeBuild("Node_Rigid_Object", x, y); var _object = nodeBuild("Node_Rigid_Object", x, y);
var _output = nodeBuild("Node_Rigid_Render", x + 160, y); var _output = nodeBuild("Node_Rigid_Render", x + 160, y);
_output.inputs[| 2].setFrom(_object.outputs[| 0]) _output.dummy_input.setFrom(_object.outputs[| 0])
addNode(_object); addNode(_object);
addNode(_output); addNode(_output);

View file

@ -15,8 +15,6 @@ function Node_Rigid_Render(_x, _y, _group = noone) : Node(_x, _y, _group) constr
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
setIsDynamicInput(1);
attribute_surface_depth(); attribute_surface_depth();
attributes.show_objects = true; attributes.show_objects = true;
@ -31,36 +29,13 @@ function Node_Rigid_Render(_x, _y, _group = noone) : Node(_x, _y, _group) constr
static onInspector2Update = function() { clearCache(); } static onInspector2Update = function() { clearCache(); }
static createNewInput = function() { #region static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index] = nodeValue("Object", self, JUNCTION_CONNECT.input, VALUE_TYPE.rigid, noone ) inputs[| index] = nodeValue("Object", self, JUNCTION_CONNECT.input, VALUE_TYPE.rigid, noone )
.setVisible(true, true); .setVisible(true, true);
} if(!LOADING && !APPENDING) createNewInput(); #endregion
static refreshDynamicInput = function() { #region
var _l = ds_list_create();
for( var i = 0; i < ds_list_size(inputs); i++ ) {
if(i < input_fix_len || inputs[| i].value_from)
ds_list_add(_l, inputs[| i]);
else
delete inputs[| i];
}
for( var i = 0; i < ds_list_size(_l); i++ ) return inputs[| index];
_l[| i].index = i; } setDynamicInput(1, true, VALUE_TYPE.rigid);
ds_list_destroy(inputs);
inputs = _l;
createNewInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(index < input_fix_len) return;
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
var gr = is_instanceof(group, Node_Rigid_Group)? group : noone; var gr = is_instanceof(group, Node_Rigid_Group)? group : noone;
@ -98,7 +73,7 @@ function Node_Rigid_Render(_x, _y, _group = noone) : Node(_x, _y, _group) constr
draw_set_color(c_white); draw_set_color(c_white);
physics_world_draw_debug(flag); physics_world_draw_debug(flag);
} else { } else {
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) { for( var i = input_fix_len; i < ds_list_size(inputs); i++ ) {
var objNode = getInputData(i); var objNode = getInputData(i);
if(!is_array(objNode)) continue; if(!is_array(objNode)) continue;

View file

@ -13,8 +13,6 @@ function Node_Rigid_Render_Output(_x, _y, _group = noone) : Node_Group_Output(_x
inputs[| 1] = nodeValue("Round position", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false) inputs[| 1] = nodeValue("Round position", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false)
setIsDynamicInput(1);
attribute_surface_depth(); attribute_surface_depth();
attributes.show_objects = true; attributes.show_objects = true;
@ -24,11 +22,13 @@ function Node_Rigid_Render_Output(_x, _y, _group = noone) : Node_Group_Output(_x
attributes.show_objects = !attributes.show_objects; attributes.show_objects = !attributes.show_objects;
})]); })]);
static createNewInput = function() { #region static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index] = nodeValue("Object", self, JUNCTION_CONNECT.input, VALUE_TYPE.rigid, noone ) inputs[| index] = nodeValue("Object", self, JUNCTION_CONNECT.input, VALUE_TYPE.rigid, noone )
.setVisible(true, true); .setVisible(true, true);
} if(!LOADING && !APPENDING) createNewInput(); #endregion
return inputs[| index];
} setDynamicInput(1, true, VALUE_TYPE.rigid);
static createOutput = function() { #region static createOutput = function() { #region
if(group == noone) return; if(group == noone) return;
@ -47,31 +47,6 @@ function Node_Rigid_Render_Output(_x, _y, _group = noone) : Node_Group_Output(_x
group.sortIO(); group.sortIO();
} if(!LOADING && !APPENDING) createOutput(); #endregion } if(!LOADING && !APPENDING) createOutput(); #endregion
static refreshDynamicInput = function() { #region
var _l = ds_list_create();
for( var i = 0; i < ds_list_size(inputs); i++ ) {
if(i < input_fix_len || inputs[| i].value_from)
ds_list_add(_l, inputs[| i]);
else
delete inputs[| i];
}
for( var i = 0; i < ds_list_size(_l); i++ )
_l[| i].index = i;
ds_list_destroy(inputs);
inputs = _l;
createNewInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(index < input_fix_len) return;
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
var gr = is_instanceof(group, Node_Rigid_Group)? group : noone; var gr = is_instanceof(group, Node_Rigid_Group)? group : noone;
if(inline_context != noone) gr = inline_context; if(inline_context != noone) gr = inline_context;

View file

@ -17,15 +17,6 @@ function Node_Stack(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
inputs[| 3] = nodeValue("Padding", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0, 0, 0, 0 ]) inputs[| 3] = nodeValue("Padding", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0, 0, 0, 0 ])
.setDisplay(VALUE_DISPLAY.padding) .setDisplay(VALUE_DISPLAY.padding)
.rejectArray(); .rejectArray();
setIsDynamicInput(1);
static createNewInput = function() { #region
var index = ds_list_size(inputs);
inputs[| index] = nodeValue("Input", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, -1 )
.setVisible(true, true);
} #endregion
if(!LOADING && !APPENDING) createNewInput();
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
@ -33,33 +24,16 @@ function Node_Stack(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
temp_surface = [ noone, noone ]; temp_surface = [ noone, noone ];
static createNewInput = function() {
var index = ds_list_size(inputs);
inputs[| index] = nodeValue("Input", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, -1 )
.setVisible(true, true);
return inputs[| index];
} setDynamicInput(1, true, VALUE_TYPE.surface);
attribute_surface_depth(); attribute_surface_depth();
static refreshDynamicInput = function() { #region
var _l = ds_list_create();
for( var i = 0; i < ds_list_size(inputs); i++ ) {
if(i < input_fix_len || inputs[| i].value_from)
ds_list_add(_l, inputs[| i]);
else
delete inputs[| i];
}
for( var i = 0; i < ds_list_size(_l); i++ )
_l[| i].index = i;
ds_list_destroy(inputs);
inputs = _l;
createNewInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(index < input_fix_len) return;
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static step = function() { #region static step = function() { #region
var _axis = getInputData(0); var _axis = getInputData(0);
@ -76,7 +50,7 @@ function Node_Stack(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
var ww = 0; var ww = 0;
var hh = 0; var hh = 0;
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) { for( var i = input_fix_len; i < ds_list_size(inputs); i++ ) {
var _surf = getInputData(i); var _surf = getInputData(i);
if(!is_array(_surf)) _surf = [ _surf ]; if(!is_array(_surf)) _surf = [ _surf ];
@ -117,7 +91,7 @@ function Node_Stack(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
var ppind = 0; var ppind = 0;
var sx = 0, sy = 0; var sx = 0, sy = 0;
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) { for( var i = input_fix_len; i < ds_list_size(inputs); i++ ) {
var _surf = getInputData(i); var _surf = getInputData(i);
if(!is_array(_surf)) _surf = [ _surf ]; if(!is_array(_surf)) _surf = [ _surf ];

View file

@ -34,49 +34,16 @@ function Node_Statistic(_x, _y, _group = noone) : Node(_x, _y, _group) construct
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Sum", "Mean", "Median", "Max", "Min" ]) .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Sum", "Mean", "Median", "Max", "Min" ])
.rejectArray(); .rejectArray();
setIsDynamicInput(1); static createNewInput = function() {
static createNewInput = function() { #region
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index] = nodeValue("Input", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, -1 ) inputs[| index] = nodeValue("Input", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, -1 )
.setVisible(false, true); .setVisible(false, true);
} #endregion
if(!LOADING && !APPENDING) createNewInput(); return inputs[| index];
} setDynamicInput(1, true, VALUE_TYPE.float);
outputs[| 0] = nodeValue("Statistic", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, -1); outputs[| 0] = nodeValue("Statistic", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, -1);
static refreshDynamicInput = function() { #region
var _l = ds_list_create();
for( var i = 0; i < input_fix_len; i++ ) {
_l[| i] = inputs[| i];
}
for( var i = input_fix_len; i < ds_list_size(inputs); i++ ) {
if(inputs[| i].value_from) {
ds_list_add(_l, inputs[| i]);
inputs[| i].setVisible(true, true);
} else {
delete inputs[| i];
}
}
for( var i = 0; i < ds_list_size(_l); i++ ) {
_l[| i].index = i;
}
ds_list_destroy(inputs);
inputs = _l;
createNewInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static update = function(frame = CURRENT_FRAME) { #region static update = function(frame = CURRENT_FRAME) { #region
var type = getInputData(0); var type = getInputData(0);
var res = 0; var res = 0;

View file

@ -3,48 +3,16 @@ function Node_String_Merge(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
setDimension(96, 48); setDimension(96, 48);
setIsDynamicInput(1);
outputs[| 0] = nodeValue("Text", self, JUNCTION_CONNECT.output, VALUE_TYPE.text, ""); outputs[| 0] = nodeValue("Text", self, JUNCTION_CONNECT.output, VALUE_TYPE.text, "");
static createNewInput = function() { #region static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index] = nodeValue("Text", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ) inputs[| index] = nodeValue("Text", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" )
.setVisible(true, true); .setVisible(true, true);
return inputs[| index]; return inputs[| index];
} if(!LOADING && !APPENDING) createNewInput(); #endregion } setDynamicInput(1, true, VALUE_TYPE.text);
static refreshDynamicInput = function() { #region
var _l = ds_list_create();
for( var i = 0; i < input_fix_len; i++ )
_l[| i] = inputs[| i];
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
if(inputs[| i].value_from || inputs[| i].getValue() != "")
ds_list_add(_l, inputs[| i]);
}
for( var i = 0; i < ds_list_size(_l); i++ )
_l[| i].index = i;
ds_list_destroy(inputs);
inputs = _l;
createNewInput();
} #endregion
static onValueUpdate = function(index) { #region
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static onValueFromUpdate = function(index) { #region
if(LOADING || APPENDING) return;
refreshDynamicInput();
} #endregion
static processData = function(_output, _data, _index = 0) { static processData = function(_output, _data, _index = 0) {
var _str = ""; var _str = "";

View file

@ -11,10 +11,10 @@ function Node_Struct(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
inputs[| index + 1] = nodeValue("value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0 ) inputs[| index + 1] = nodeValue("value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0 )
.setVisible(false, false); .setVisible(false, false);
}
return inputs[| index + 0];
} setDynamicInput(2, false);
setIsDynamicInput(2);
if(!LOADING && !APPENDING) createNewInput(); if(!LOADING && !APPENDING) createNewInput();
static refreshDynamicInput = function() { static refreshDynamicInput = function() {

View file

@ -10,7 +10,13 @@ function Node_Switch(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
inputs[| 1] = nodeValue("Default value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0 ) inputs[| 1] = nodeValue("Default value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0 )
.setVisible(false, true); .setVisible(false, true);
static createNewInput = function() { #region outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0);
input_display_list = [ 0,
["Inputs", false], 1
]
static createNewInput = function() {
var index = ds_list_size(inputs); var index = ds_list_size(inputs);
inputs[| index + 0] = nodeValue("Case", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ); inputs[| index + 0] = nodeValue("Case", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
@ -19,15 +25,9 @@ function Node_Switch(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
array_push(input_display_list, index + 0); array_push(input_display_list, index + 0);
array_push(input_display_list, index + 1); array_push(input_display_list, index + 1);
} #endregion
return inputs[| index + 0];
outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0); } setDynamicInput(2, false);
input_display_list = [ 0,
["Inputs", false], 1
]
setIsDynamicInput(2);
if(!LOADING && !APPENDING) createNewInput(); if(!LOADING && !APPENDING) createNewInput();

View file

@ -2163,9 +2163,20 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
return controlNode.rendered; return controlNode.rendered;
} #endregion } #endregion
static setFrom = function(_valueFrom, _update = true, checkRecur = true, log = false) { #region static setFrom = function(_valueFrom, _update = true, checkRecur = true, log = false) { #region ////Set from
//print($"Connecting {_valueFrom.name} to {name}"); //print($"Connecting {_valueFrom.name} to {name}");
if(is_dummy) {
var _targ = dummy_get();
dummy_target = _targ;
UNDO_HOLDING = true;
var _res = _targ.setFrom(_valueFrom, _update, checkRecur, log);
UNDO_HOLDING = false;
recordAction(ACTION_TYPE.junction_connect, self, [ _targ, _valueFrom ]);
return _res;
}
if(_valueFrom == noone) if(_valueFrom == noone)
return removeFrom(); return removeFrom();
@ -2343,13 +2354,16 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
static drawJunction_fast = function(_s, _mx, _my) { #region static drawJunction_fast = function(_s, _mx, _my) { #region
INLINE INLINE
var hov = PANEL_GRAPH.pHOVER && (PANEL_GRAPH.node_hovering == noone || PANEL_GRAPH.node_hovering == node); var hov = PANEL_GRAPH.pHOVER && (PANEL_GRAPH.node_hovering == noone || PANEL_GRAPH.node_hovering == node);
var is_hover = hov && abs(_mx - x) + abs(_my - y) < _s; var _hov = hov && abs(_mx - x) + abs(_my - y) < _s;
var _aa = 0.75 + (!is_dummy * 0.25);
draw_set_color(draw_fg); draw_set_color(draw_fg);
draw_set_alpha(_aa);
draw_circle(x, y, _s, false); draw_circle(x, y, _s, false);
draw_set_alpha(1);
return is_hover;
return _hov;
} #endregion } #endregion
static drawJunction = function(_s, _mx, _my) { #region static drawJunction = function(_s, _mx, _my) { #region
@ -2363,7 +2377,10 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
var _bgS = THEME.node_junctions_bg; var _bgS = THEME.node_junctions_bg;
var _fgS = is_hover? THEME.node_junctions_outline_hover : THEME.node_junctions_outline; var _fgS = is_hover? THEME.node_junctions_outline_hover : THEME.node_junctions_outline;
if(type == VALUE_TYPE.action) { if(is_dummy) {
__draw_sprite_ext(THEME.node_junction_add, is_hover, x, y, _s, _s, 0, c_white, 0.5 + 0.5 * is_hover);
} else if(type == VALUE_TYPE.action) {
var _cbg = c_white; var _cbg = c_white;
if(draw_blend != -1) if(draw_blend != -1)
@ -2407,7 +2424,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
static drawName = function(_s, _mx, _my) { #region static drawName = function(_s, _mx, _my) { #region
var _draw_cc = COLORS._main_text; var _draw_cc = COLORS._main_text;
var _draw_aa = hover_in_graph? 1 : 0.8; var _draw_aa = 0.8 + hover_in_graph * 0.2;
draw_set_text(f_p1, fa_left, fa_center, _draw_cc); draw_set_text(f_p1, fa_left, fa_center, _draw_cc);
draw_set_alpha(_draw_aa); draw_set_alpha(_draw_aa);

View file

@ -25,6 +25,8 @@ function Inspector_Custom_Renderer(drawFn, registerFn = noone) : widget() constr
self.parent = parent; self.parent = parent;
} }
} }
static toString = function() { return $"Custon renderer"; }
} #endregion } #endregion
function Inspector_Sprite(spr) constructor { self.spr = spr; } function Inspector_Sprite(spr) constructor { self.spr = spr; }