Pixel-Composer/scripts/node_iterate_each/node_iterate_each.gml

71 lines
1.8 KiB
Text
Raw Normal View History

2023-02-28 09:43:01 +01:00
function Node_Iterate_Each(_x, _y, _group = noone) : Node_Collection(_x, _y, _group) constructor {
2023-02-14 11:40:24 +01:00
name = "Loop Array";
color = COLORS.node_blend_loop;
icon = THEME.loop;
2023-02-19 13:49:20 +01:00
combine_render_time = false;
2023-02-14 11:40:24 +01:00
iterated = 0;
inputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, [] )
.setVisible(true, true);
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, [] );
custom_input_index = ds_list_size(inputs);
custom_output_index = ds_list_size(inputs);
loop_start_time = 0;
ALWAYS_FULL = true;
if(!LOADING && !APPENDING && !CLONING) {
var input = nodeBuild("Node_Iterator_Each_Input", -256, -32, self);
var output = nodeBuild("Node_Iterator_Each_Output", 256, -32, self);
output.inputs[| 0].setFrom(input.outputs[| 0]);
}
static getNextNodes = function() {
2023-02-28 09:43:01 +01:00
__nodeLeafList(getNodeList(), RENDER_QUEUE);
2023-02-14 11:40:24 +01:00
initLoop();
}
static onStep = function() {
var type = inputs[| 0].value_from == noone? VALUE_TYPE.any : inputs[| 0].value_from.type;
inputs[| 0].type = type;
}
static initLoop = function() {
iterated = 0;
loop_start_time = get_timer();
2023-02-19 13:49:20 +01:00
var arrIn = inputs[| 0].getValue();
var arrOut = outputs[| 0].getValue();
2023-02-14 11:40:24 +01:00
2023-02-19 13:49:20 +01:00
if(array_length(arrOut) != array_length(arrIn)) {
surface_array_free(arrOut);
outputs[| 0].setValue([])
}
2023-02-14 11:40:24 +01:00
printIf(global.RENDER_LOG, " > Loop begin");
}
static iterationStatus = function() {
var iter = true;
var arrIn = inputs[| 0].getValue();
var maxIter = is_array(arrIn)? array_length(arrIn) : 0;
if(!is_real(maxIter)) maxIter = 1;
iterated++;
2023-03-13 10:45:56 +01:00
//print("Iterating " + string(iterated) + "/" + string(maxIter))
2023-02-14 11:40:24 +01:00
if(iterated >= maxIter) {
render_time = get_timer() - loop_start_time;
iterated = 0;
return ITERATION_STATUS.complete;
}
resetAllRenderStatus();
return ITERATION_STATUS.loop;
}
2023-03-08 14:59:54 +01:00
PATCH_STATIC
2023-02-14 11:40:24 +01:00
}