Add array spreading options

This commit is contained in:
Tanasart 2023-04-11 20:29:20 +02:00
parent edd2a86779
commit 6c3247a8b0
12 changed files with 51 additions and 33 deletions

View File

@ -40,7 +40,7 @@ function array_safe_get(arr, index, def = 0, overflow = ARRAY_OVERFLOW._default)
function array_exists(arr, val) {
for( var i = 0; i < array_length(arr); i++ ) {
if(arr[i] == val) return true;
if(isEqual(arr[i], val)) return true;
}
return false;
}
@ -51,7 +51,7 @@ function array_empty(arr) {
function array_find(arr, val) {
for( var i = 0; i < array_length(arr); i++ ) {
if(arr[i] == val) return i;
if(isEqual(arr[i], val)) return i;
}
return -1;
}

View File

@ -8,6 +8,9 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Any", "Surface", "Number", "Color", "Text" ])
.rejectArray();
inputs[| 1] = nodeValue("Spread array", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false )
.rejectArray();
array_adjust_tool = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) {
var _h = ui(48);
@ -53,7 +56,7 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
return _h;
});
input_display_list = [ 0, array_adjust_tool ];
input_display_list = [ 0, 1, array_adjust_tool ];
input_fix_len = ds_list_size(inputs);
input_display_list_len = array_length(input_display_list);
@ -64,12 +67,6 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
attributes[? "size"] = 1;
attributes[? "spread_value"] = false;
array_push(attributeEditors, "Node");
array_push(attributeEditors, ["Spread array", "spread_value",
new checkBox(function() {
attributes[? "spread_value"] = !attributes[? "spread_value"];
})]);
static getType = function() {
var _type = inputs[| 0].getValue();
@ -159,11 +156,12 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
outputs[| 0].type = _typ;
var res = [];
var ind = 0;
var spd = inputs[| 1].getValue();
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) {
var val = inputs[| i].getValue();
if(is_array(val) && attributes[? "spread_value"])
if(is_array(val) && spd)
array_append(res, val);
else
array_push(res, val);
@ -194,13 +192,4 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
}
}
static attributeSerialize = function() {
var att = ds_map_create();
ds_map_override(att, attributes);
return att;
}
static attributeDeserialize = function(attr) {
ds_map_override(attributes, attr);
}
}

View File

@ -9,6 +9,9 @@ function Node_Array_Add(_x, _y, _group = noone) : Node(_x, _y, _group) construct
inputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0)
.setVisible(true, true);
inputs[| 1] = nodeValue("Spread array", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false )
.rejectArray();
outputs[| 0] = nodeValue("Output", self, JUNCTION_CONNECT.output, VALUE_TYPE.integer, 0);
input_fix_len = ds_list_size(inputs);
@ -60,6 +63,8 @@ function Node_Array_Add(_x, _y, _group = noone) : Node(_x, _y, _group) construct
if(!is_array(_arr)) return;
var _type = inputs[| 0].value_from.type;
var spd = inputs[| 1].getValue();
inputs[| 0].type = _type;
outputs[| 0].type = _type;
@ -68,7 +73,7 @@ function Node_Array_Add(_x, _y, _group = noone) : Node(_x, _y, _group) construct
var _val = inputs[| i].getValue();
inputs[| i].type = _type;
if(is_array(_val))
if(is_array(_val) && spd)
array_append(_out, _val);
else
array_push(_out, _val);

View File

@ -14,6 +14,9 @@ function Node_Array_Insert(_x, _y, _group = noone) : Node(_x, _y, _group) constr
inputs[| 2] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0)
.setVisible(true, true);
inputs[| 3] = nodeValue("Spread array", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false )
.rejectArray();
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0);
static update = function(frame = ANIMATOR.current_frame) {
@ -27,6 +30,7 @@ function Node_Array_Insert(_x, _y, _group = noone) : Node(_x, _y, _group) constr
var index = inputs[| 1].getValue();
var value = inputs[| 2].getValue();
var spred = inputs[| 3].getValue();
var _len = array_length(_arr);
if(inputs[| 0].value_from != noone) {
@ -46,7 +50,7 @@ function Node_Array_Insert(_x, _y, _group = noone) : Node(_x, _y, _group) constr
} else {
if(index < 0) index = array_length(arr) + index;
if(is_array(value)) {
if(is_array(value) && spred) {
for( var i = 0; i < array_length(value); i++ )
array_insert(arr, index + i, value[i]);
} else {

View File

@ -18,6 +18,9 @@ function Node_Array_Remove(_x, _y, _group = noone) : Node(_x, _y, _group) constr
inputs[| 3] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0)
.setVisible(true, true);
inputs[| 4] = nodeValue("Spread array", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false )
.rejectArray();
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0);
static step = function() {
@ -47,6 +50,7 @@ function Node_Array_Remove(_x, _y, _group = noone) : Node(_x, _y, _group) constr
var type = inputs[| 1].getValue();
var index = inputs[| 2].getValue();
var value = inputs[| 3].getValue();
var spred = inputs[| 4].getValue();
var arr = array_clone(_arr);
@ -59,7 +63,7 @@ function Node_Array_Remove(_x, _y, _group = noone) : Node(_x, _y, _group) constr
array_delete(arr, index[i], 1);
}
} else {
if(!is_array(value)) value = [ value ];
if(!spred || !is_array(value)) value = [ value ];
for( var i = 0; i < array_length(value); i++ )
array_remove(arr, value[i]);

View File

@ -36,7 +36,10 @@ function Node_Flood_Fill(_x, _y, _group = noone) : Node_Processor(_x, _y, _group
attributes[? "fill_iteration"] = -1;
array_push(attributeEditors, "Algorithm");
array_push(attributeEditors, ["Fill iteration", "fill_iteration",
new textBox(TEXTBOX_INPUT.number, function(val) { attributes[? "fill_iteration"] = val; })]);
new textBox(TEXTBOX_INPUT.number, function(val) {
attributes[? "fill_iteration"] = val;
triggerRender();
})]);
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) {
inputs[| 4].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny);

View File

@ -46,9 +46,9 @@ function Node_Iterate_Filter(_x, _y, _group = noone) : Node_Collection(_x, _y, _
surface_array_free(arrOut);
outputs[| 0].setValue([])
LOG("Loop begin");
LOG_LINE_IF(global.RENDER_LOG, "Loop begin");
var _val = outputs[| 0].getValue();
LOG("Output original value " + string(_val));
LOG_LINE_IF(global.RENDER_LOG, "Output original value " + string(_val));
}
static getIterationCount = function() {

View File

@ -78,7 +78,7 @@ function Node_Iterator_Filter_Output(_x, _y, _group = noone) : Node(_x, _y, _gro
array_push(_val, _new_val);
}
LOG("Value " + string(val) + " filter result " + string(res) + " to array " + string(_val));
LOG_IF(global.RENDER_LOG, "Value " + string(val) + " filter result " + string(res) + " to array " + string(_val));
group.outputs[| 0].setValue(_val);
group.iterationUpdate();

View File

@ -21,7 +21,11 @@ function Node_Processor(_x, _y, _group = noone) : Node(_x, _y, _group) construct
array_push(attributeEditors, "Array processor");
array_push(attributeEditors, [ "Array process type", "array_process",
new scrollBox([ "Loop", "Hold", "Expand", "Expand inverse" ], function(val) { attributes[? "array_process"] = val; }, false) ]);
new scrollBox([ "Loop", "Hold", "Expand", "Expand inverse" ],
function(val) {
attributes[? "array_process"] = val;
triggerRender();
}, false) ]);
static process_data = function(_outSurf, _data, _output_index, _array_index = 0) { return _outSurf; }

View File

@ -37,7 +37,10 @@ function Node_Seperate_Shape(_x, _y, _group = noone) : Node(_x, _y, _group) cons
attributes[? "max_shape"] = 32;
array_push(attributeEditors, ["Maximum shapes", "max_shape",
new textBox(TEXTBOX_INPUT.number, function(val) { attributes[? "max_shape"] = val; })]);
new textBox(TEXTBOX_INPUT.number, function(val) {
attributes[? "max_shape"] = val;
triggerRender();
})]);
function get_color_buffer(_x, _y) {
buffer_seek(surface_buffer, buffer_seek_start, (surface_w * _y + _x) * 4);

View File

@ -55,7 +55,10 @@ function Node_Mesh_Warp(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
attributes[? "iteration"] = 4;
array_push(attributeEditors, ["Iteration", "iteration",
new textBox(TEXTBOX_INPUT.number, function(val) { attributes[? "iteration"] = val; })]);
new textBox(TEXTBOX_INPUT.number, function(val) {
attributes[? "iteration"] = val;
triggerRender();
})]);
tools = [
new NodeTool( "Add / Remove (+ Shift) control point", THEME.control_add ),

View File

@ -3,9 +3,9 @@ function Panel_Graph() : PanelContent() constructor {
context_str = "Graph";
icon = THEME.panel_graph;
scale = [ 0.25, 0.33, 0.5, 0.65, 0.8, 1, 1.2, 1.35, 1.5];
graph_s_index = 5;
graph_s = ui(scale[graph_s_index]);
scale = [ 0.01, 0.02, 0.05, 0.10, 0.15, 0.20, 0.25, 0.33, 0.5, 0.65, 0.8, 1, 1.2, 1.35, 1.5, 2.0];
graph_s_index = array_find(scale, 1);
graph_s = 1;
graph_s_to = graph_s;
graph_line_s = 32;
grid_color = c_white;
@ -348,9 +348,12 @@ function Panel_Graph() : PanelContent() constructor {
}
function drawGrid() {
var gls = graph_line_s;
if(graph_s <= 0.15) gls *= 10;
var gr_x = graph_x * graph_s;
var gr_y = graph_y * graph_s;
var gr_ls = graph_line_s * graph_s;
var gr_ls = gls * graph_s;
var xx = -gr_ls, xs = safe_mod(gr_x, gr_ls);
var yy = -gr_ls, ys = safe_mod(gr_y, gr_ls);