mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-11-11 04:54:06 +01:00
112 lines
2.6 KiB
Plaintext
112 lines
2.6 KiB
Plaintext
enum ARRAY_PROCESS {
|
|
loop,
|
|
hold
|
|
}
|
|
|
|
function Node_Processor(_x, _y) : Node(_x, _y) constructor {
|
|
array_process = ARRAY_PROCESS.loop;
|
|
current_data = [];
|
|
|
|
icon = s_node_processor;
|
|
|
|
function process_data(_outSurf, _data, _output_index) { return _outSurf; }
|
|
|
|
function update() {
|
|
var len = 0;
|
|
for(var i = 0; i < ds_list_size(inputs); i++) {
|
|
var _in = inputs[| i].getValue();
|
|
if(is_array(_in)) {
|
|
if(inputs[| i].isArray())
|
|
len = max(len, array_length(_in));
|
|
}
|
|
}
|
|
|
|
for(var _oi = 0; _oi < ds_list_size(outputs); _oi++) {
|
|
if(outputs[| _oi].type != VALUE_TYPE.surface) continue;
|
|
var outSurfs = outputs[| _oi].getValue();
|
|
|
|
if(len) {
|
|
if(!is_array(outSurfs))
|
|
outSurfs = array_create(len);
|
|
else if(array_length(outSurfs) != len)
|
|
array_resize(outSurfs, len);
|
|
|
|
for(var i = 0; i < len; i++) {
|
|
var ww = 1, hh = 1;
|
|
|
|
if(inputs[| 0].type == VALUE_TYPE.surface) {
|
|
var base_s = getData(0, i);
|
|
|
|
if(is_surface(base_s)) {
|
|
var ww = surface_get_width(base_s);
|
|
var hh = surface_get_height(base_s);
|
|
}
|
|
}
|
|
|
|
if(!is_surface(outSurfs[i]))
|
|
outSurfs[i] = surface_create(ww, hh);
|
|
else
|
|
surface_size_to(outSurfs[i], ww, hh)
|
|
|
|
var _data = getDataArray(i);
|
|
process_data(outSurfs[i], _data, _oi);
|
|
if(i == preview_index) current_data = _data;
|
|
}
|
|
|
|
outputs[| _oi].setValue(outSurfs);
|
|
} else {
|
|
var ww = 1, hh = 1;
|
|
|
|
if(inputs[| 0].type == VALUE_TYPE.surface) {
|
|
var base_texture = inputs[| 0].getValue();
|
|
|
|
if(is_surface(base_texture)) {
|
|
ww = surface_get_width(base_texture);
|
|
hh = surface_get_height(base_texture);
|
|
}
|
|
}
|
|
|
|
if(is_array(outSurfs)) {
|
|
for(var i = 1; i < array_length(outSurfs); i++) {
|
|
if(is_surface(outSurfs[i]))
|
|
surface_free(outSurfs[i]);
|
|
}
|
|
outSurfs = outSurfs[0];
|
|
outputs[| _oi].setValue(outSurfs);
|
|
}
|
|
|
|
if(!is_surface(outSurfs)) {
|
|
outSurfs = surface_create(ww, hh);
|
|
outputs[| _oi].setValue(outSurfs);
|
|
} else
|
|
surface_size_to(outSurfs, ww, hh);
|
|
|
|
var _data = getDataArray(0);
|
|
process_data(outSurfs, _data, _oi);
|
|
current_data = _data;
|
|
}
|
|
}
|
|
}
|
|
|
|
function getDataArray(index) {
|
|
var _data = array_create(ds_list_size(inputs));
|
|
for(var i = 0; i < array_length(_data); i++) {
|
|
_data[i] = getData(i, index);
|
|
}
|
|
return _data;
|
|
}
|
|
|
|
function getData(data, index) {
|
|
var _data = 0;
|
|
|
|
var val = inputs[| data].getValue();
|
|
|
|
if(inputs[| data].isArray()) {
|
|
if(array_length(val) == 0) return 0;
|
|
_data = val[safe_mod(index, array_length(val))];
|
|
} else
|
|
_data = val;
|
|
|
|
return _data;
|
|
}
|
|
} |