- [Array loop] Fix output junction detached from the node once group IO is rearranged.

This commit is contained in:
Tanasart 2023-11-06 18:49:57 +07:00
parent c21b14e44c
commit b6fe38a0ba
5 changed files with 33 additions and 20 deletions

View file

@ -9,12 +9,16 @@ if(!MOUSE_WRAPPING) {
else if(slide_da == 0 && abs(_ady) > abs(_adx) + 8 && abs(mouse_my - slide_dy) > 64) slide_da = 1;
else if(slide_da == 1 && abs(_adx) > abs(_ady) + 8 && abs(mouse_mx - slide_dx) > 64) slide_da = 0;
var spd = (slide_da? _ady : _adx) * tb.slide_speed;
var _val = value_snap(tb.slide_sv + spd, tb.slide_speed);
var _s = tb.slide_speed;
if(key_mod_press(CTRL)) _s *= 10;
if(key_mod_press(ALT)) _s /= 10;
var spd = (slide_da? _ady : _adx) * _s;
var _val = value_snap(tb.slide_sv + spd, _s);
draw_set_text(f_p0b, fa_center, fa_center, COLORS._main_text);
var _stp_sz = 50 * tb.slide_speed;
var _stp_sz = 50 * _s;
var _stp_fl = round(_val / _stp_sz) * _stp_sz;
var _stp_md = _val - _stp_fl;
@ -24,9 +28,9 @@ if(!MOUSE_WRAPPING) {
_tw = max(_tw, string_width(_v) + 16);
}
var _snp_s = 50 * tb.slide_speed;
var _snp_s = 50 * _s;
var _snp_v = round(_val / _snp_s) * _snp_s;
if(abs(_val - _snp_v) < 5 * tb.slide_speed)
if(abs(_val - _snp_v) < 5 * _s)
_val = _snp_v;
if(slide_da) {
@ -41,11 +45,11 @@ if(!MOUSE_WRAPPING) {
var _v = _stp_fl + i * _stp_sz;
draw_set_alpha(0.4 - abs(i) * 0.1);
draw_text(slide_dx, slide_dy - (_v - tb.slide_sv) / tb.slide_speed, _v);
draw_text(slide_dx, slide_dy - (_v - tb.slide_sv) / _s, _v);
}
draw_set_alpha(1);
draw_text(slide_dx, slide_dy - (_val - tb.slide_sv) / tb.slide_speed, _val);
draw_text(slide_dx, slide_dy - (_val - tb.slide_sv) / _s, _val);
} else {
var _sdw = 240;
var _sdh = 48;
@ -58,11 +62,11 @@ if(!MOUSE_WRAPPING) {
var _v = _stp_fl + i * _stp_sz;
draw_set_alpha(0.4 - abs(i) * 0.1);
draw_text(slide_dx + (_v - tb.slide_sv) / tb.slide_speed, slide_dy, _v);
draw_text(slide_dx + (_v - tb.slide_sv) / _s, slide_dy, _v);
}
draw_set_alpha(1);
draw_text(slide_dx + (_val - tb.slide_sv) / tb.slide_speed, slide_dy, _val);
draw_text(slide_dx + (_val - tb.slide_sv) / _s, slide_dy, _val);
}
tb._input_text = string_real(_val);

View file

@ -468,11 +468,13 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
for( var i = siz - 1; i >= custom_output_index; i-- )
ds_list_delete(outputs, i);
for( var i = 0; i < siz; i++ )
array_push(output_display_list, i);
for( var i = custom_output_index; i < siz; i++ ) {
var _jout = ds_priority_delete_min(ar);
_jout.index = i;
ds_list_add(outputs, _jout);
array_push(output_display_list, i);
}
ds_priority_destroy(ar);

View file

@ -13,7 +13,7 @@ function Node_Iterate_Each(_x, _y, _group = noone) : Node_Iterator(_x, _y, _grou
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, [] );
custom_input_index = ds_list_size(inputs);
custom_input_index = ds_list_size(inputs);
custom_output_index = ds_list_size(inputs);
loop_start_time = 0;
ALWAYS_FULL = true;

View file

@ -8,23 +8,23 @@ function Node_Iterator_Each_Output(_x, _y, _group = noone) : Node(_x, _y, _group
.setVisible(true, true);
outputs[| 0] = nodeValue("Preview", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0 )
.setVisible(false);
.setVisible(false, false);
static getNextNodes = function() {
static getNextNodes = function() { #region
if(!struct_has(group, "outputNextNode")) return [];
return group.outputNextNode();
}
} #endregion
static step = function() {
static step = function() { #region
if(!variable_struct_exists(group, "iterated")) return;
var type = inputs[| 0].isLeaf()? VALUE_TYPE.any : inputs[| 0].value_from.type;
inputs[| 0].setType(type);
group.outputs[| 0].setType(type);
outputs[| 0].setType(type);
}
} #endregion
static cloneValue = function(_prev_val, _val) {
static cloneValue = function(_prev_val, _val) { #region
if(inputs[| 0].isLeaf()) return _prev_val;
var is_surf = inputs[| 0].value_from.type == VALUE_TYPE.surface;
@ -35,9 +35,9 @@ function Node_Iterator_Each_Output(_x, _y, _group = noone) : Node(_x, _y, _group
else _new_val = array_clone(_val);
return _new_val;
}
} #endregion
static update = function(frame = CURRENT_FRAME) {
static update = function(frame = CURRENT_FRAME) { #region
if(inputs[| 0].isLeaf()) {
group.iterationUpdate();
return;
@ -55,7 +55,7 @@ function Node_Iterator_Each_Output(_x, _y, _group = noone) : Node(_x, _y, _group
outputs[| 0].setValue(_val);
group.outputs[| 0].setValue(_val);
group.iterationUpdate();
}
} #endregion
static onLoadGroup = function() { #region
if(group == noone) nodeDelete(self);

View file

@ -37,6 +37,8 @@ function Node_Number(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
inputs[| 4] = nodeValue("Step", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.01)
inputs[| 5] = nodeValue("Clamp to range", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true)
outputs[| 0] = nodeValue("Number", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0);
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
@ -57,6 +59,7 @@ function Node_Number(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
case 0 :
inputs[| 3].setVisible(false);
inputs[| 4].setVisible(false);
inputs[| 5].setVisible(false);
break;
case 1 :
if(inputs[| 0].isLeaf()) {
@ -65,6 +68,7 @@ function Node_Number(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
}
inputs[| 3].setVisible(true);
inputs[| 4].setVisible(true);
inputs[| 5].setVisible(true);
break;
case 2 :
if(inputs[| 0].isLeaf()) {
@ -73,6 +77,7 @@ function Node_Number(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
}
inputs[| 3].setVisible(false);
inputs[| 4].setVisible(false);
inputs[| 5].setVisible(false);
break;
}
@ -97,6 +102,7 @@ function Node_Number(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
var disp = getInputData(2);
var rang = getInputData(3);
var stp = getInputData(4);
var cmp = getInputData(5);
var _col = getColor();
if(inputs[| 0].value_from != noone || disp == 0) { #region
@ -147,6 +153,7 @@ function Node_Number(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
var _valM = (_mx - sl_x0) / (sl_x1 - sl_x0);
var _valL = lerp(_minn, _maxx, _valM);
_valL = value_snap(_valL, stp);
if(cmp) _valL = clamp(_valL, _minn, _maxx);
inputs[| 0].setValue(_valL);
if(mouse_release(mb_left))