Pixel-Composer/scripts/node_array_split/node_array_split.gml

56 lines
1.3 KiB
Plaintext
Raw Normal View History

function Node_Array_Split(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
2024-05-17 10:05:24 +02:00
name = "Array Split";
setDimension(96, 0);
draw_padding = 4;
2024-08-20 10:15:53 +02:00
newInput(0, nodeValue("Array", self, CONNECT_TYPE.input, VALUE_TYPE.any, []))
2024-05-17 10:05:24 +02:00
.setVisible(true, true);
2024-09-04 03:57:11 +02:00
newOutput(0, nodeValue_Output("val 0", self, VALUE_TYPE.any, 0));
2024-05-17 10:05:24 +02:00
attributes.output_amount = 1;
static update = function() {
var _inp = getInputData(0);
2024-08-08 06:57:51 +02:00
var type = inputs[0].value_from == noone? VALUE_TYPE.any : inputs[0].value_from.type;
inputs[0].setType(type);
inputs[0].resetDisplay();
2024-05-17 10:05:24 +02:00
if(!is_array(_inp)) {
attributes.output_amount = 0;
return;
}
var amo = array_length(_inp);
for (var i = 0; i < amo; i++) {
2024-08-08 06:57:51 +02:00
if(i >= array_length(outputs))
2024-09-04 03:57:11 +02:00
newOutput(i, nodeValue_Output($"val {i}", self, type, 0))
2024-05-17 10:05:24 +02:00
2024-08-08 06:57:51 +02:00
outputs[i].setValue(_inp[i]);
2024-05-17 10:05:24 +02:00
}
2024-08-08 06:57:51 +02:00
while(array_length(outputs) > amo)
array_delete(outputs, array_length(outputs) - 1, 1);
2024-05-17 10:05:24 +02:00
for (var i = 0, n = amo; i < n; i++) {
2024-08-08 06:57:51 +02:00
outputs[i].setType(type);
outputs[i].resetDisplay();
2024-05-17 10:05:24 +02:00
}
attributes.output_amount = amo;
}
static preApplyDeserialize = function() {
if(!struct_has(attributes, "output_amount")) return;
var _outAmo = attributes.output_amount;
var _ind = 0;
repeat(_outAmo) {
2024-09-04 03:57:11 +02:00
newOutput(_ind, nodeValue_Output($"val {_ind}", self, VALUE_TYPE.any, 0));
2024-05-17 10:05:24 +02:00
_ind++;
}
}
}