From be8d84a0ca03adf82e40fcb469f744f95c9be7d9 Mon Sep 17 00:00:00 2001 From: Tanasart Date: Sun, 5 Jan 2025 07:48:23 +0700 Subject: [PATCH] add node iconn --- PixelComposer.resource_order | 1 + PixelComposer.yyp | 1 + objects/o_dialog_add_node/Create_0.gml | 232 +- objects/o_dialog_add_node/Draw_64.gml | 23 +- scripts/node_registry/node_registry.gml | 1992 +++++++++++------ .../node_surface_data/node_surface_data.gml | 6 +- scripts/panel_collection/panel_collection.gml | 4 +- scripts/panel_graph/panel_graph.gml | 4 +- .../8d2b64e5-2b10-40b6-830f-04a67cd51a02.png | Bin 0 -> 1561 bytes .../4bedbb2f-de56-48f0-86f4-713ef2e9c681.png | Bin 0 -> 1561 bytes .../s_node_surface_data.yy | 90 + 11 files changed, 1504 insertions(+), 849 deletions(-) create mode 100644 sprites/s_node_surface_data/8d2b64e5-2b10-40b6-830f-04a67cd51a02.png create mode 100644 sprites/s_node_surface_data/layers/8d2b64e5-2b10-40b6-830f-04a67cd51a02/4bedbb2f-de56-48f0-86f4-713ef2e9c681.png create mode 100644 sprites/s_node_surface_data/s_node_surface_data.yy diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 01fb50a9c..d97a19c82 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -2625,6 +2625,7 @@ {"name":"s_node_struct_json_parse","order":84,"path":"sprites/s_node_struct_json_parse/s_node_struct_json_parse.yy",}, {"name":"s_node_struct_set","order":87,"path":"sprites/s_node_struct_set/s_node_struct_set.yy",}, {"name":"s_node_struct","order":85,"path":"sprites/s_node_struct/s_node_struct.yy",}, + {"name":"s_node_surface_data","order":137,"path":"sprites/s_node_surface_data/s_node_surface_data.yy",}, {"name":"s_node_surface_from_buffer","order":67,"path":"sprites/s_node_surface_from_buffer/s_node_surface_from_buffer.yy",}, {"name":"s_node_surface_replace","order":42,"path":"sprites/s_node_surface_replace/s_node_surface_replace.yy",}, {"name":"s_node_surface_to_buffer","order":68,"path":"sprites/s_node_surface_to_buffer/s_node_surface_to_buffer.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 34e57b5c3..b0ea71889 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -3299,6 +3299,7 @@ {"id":{"name":"s_node_struct_json_parse","path":"sprites/s_node_struct_json_parse/s_node_struct_json_parse.yy",},}, {"id":{"name":"s_node_struct_set","path":"sprites/s_node_struct_set/s_node_struct_set.yy",},}, {"id":{"name":"s_node_struct","path":"sprites/s_node_struct/s_node_struct.yy",},}, + {"id":{"name":"s_node_surface_data","path":"sprites/s_node_surface_data/s_node_surface_data.yy",},}, {"id":{"name":"s_node_surface_from_buffer","path":"sprites/s_node_surface_from_buffer/s_node_surface_from_buffer.yy",},}, {"id":{"name":"s_node_surface_replace","path":"sprites/s_node_surface_replace/s_node_surface_replace.yy",},}, {"id":{"name":"s_node_surface_to_buffer","path":"sprites/s_node_surface_to_buffer/s_node_surface_to_buffer.yy",},}, diff --git a/objects/o_dialog_add_node/Create_0.gml b/objects/o_dialog_add_node/Create_0.gml index c90a16f82..c34aaae47 100644 --- a/objects/o_dialog_add_node/Create_0.gml +++ b/objects/o_dialog_add_node/Create_0.gml @@ -3,28 +3,29 @@ event_inherited(); #region data draggable = false; + dialog_w = PREFERENCES.dialog_add_node_w; + dialog_h = PREFERENCES.dialog_add_node_h; + destroy_on_click_out = true; title = "Add node"; node_target_x = 0; node_target_y = 0; node_target_x_raw = 0; node_target_y_raw = 0; - node_called = noone; - junction_hovering = noone; - dialog_w = PREFERENCES.dialog_add_node_w; - dialog_h = PREFERENCES.dialog_add_node_h; - - destroy_on_click_out = true; + junction_called = noone; node_list = ds_list_create(); node_selecting = 0; node_focusing = -1; - node_show_connectable = true; + node_show_connectable = false; node_tooltip = noone; node_tooltip_x = 0; node_tooltip_y = 0; + node_icon = noone; + node_icon_x = 0; + node_icon_y = 0; anchor = ANCHOR.left | ANCHOR.top; node_menu_selecting = noone; @@ -44,7 +45,8 @@ event_inherited(); canvas = false; collapsed = {}; - subgroups = []; + subgroups = []; + subgroups_size = []; subgroup_index = 0; view_tooltip = new tooltipSelector("View", [ @@ -104,57 +106,14 @@ event_inherited(); menuCall("add_node_window_menu", menu, 0, 0, fa_left); } - function filtered(node) { - if(!node_show_connectable) return true; - if(node_called == noone && junction_hovering == noone) return true; - if(!struct_has(node, "node")) return true; - if(!struct_has(global.NODE_GUIDE, node.node)) return true; + function checkValid(node, skipConnect = false) { + if(!is(node, NodeObject)) return true; + if(node.patreon && !IS_PATREON) return false; + if(!node.show_in_global && is_global) return false; + if(skipConnect || junction_called == noone || !node_show_connectable) return true; - if(is_instanceof(node, NodeObject)) { - if(node.is_patreon_extra && !IS_PATREON) return true; - if(is_global && !node.show_in_global) return true; - } - - var io = global.NODE_GUIDE[$ node.node]; - - if(node_called) { - var call_in = node_called.connect_type == CONNECT_TYPE.input; - var ar = call_in? io.outputs : io.inputs; - var typ = node_called.type; - - for( var i = 0, n = array_length(ar); i < n; i++ ) { - if(!ar[i].visible) continue; - - var _in = call_in? node_called.type : ar[i].type; - var _ot = call_in? ar[i].type : node_called.type; - - if(typeCompatible(_in, _ot, false)) return true; - } - - return false; - } else if(junction_hovering) { - var to = junction_hovering.type; - var fr = junction_hovering.value_from.type; - - for( var i = 0, n = array_length(io.inputs); i < n; i++ ) { - var _in = fr; - var _ot = io.inputs[i].type; - if(!io.inputs[i].visible) continue; - - if(typeCompatible(_in, _ot, false)) return true; - } - - for( var i = 0, n = array_length(io.outputs); i < n; i++ ) { - var _in = io.outputs[i].type; - var _ot = to; - - if(typeCompatible(_in, _ot, false)) return true; - } - - return false; - } - - return false; + var _b = junction_called.connect == CONNECT_TYPE.input? node.output_type_mask : node.input_type_mask; + return bool(_b & value_bit(junction_called.type)); } function buildNode(_node, _param = {}) { @@ -170,14 +129,6 @@ event_inherited(); return; } - if(is_instanceof(_node, AddNodeItem)) { - _node.onClick({ - node_called, - junction_hovering - }); - return; - } - var _new_node = noone; var _inputs = []; var _outputs = []; @@ -257,61 +208,25 @@ event_inherited(); } } - //try to connect - if(node_called != noone) { //dragging from junction - var _call_input = node_called.connect_type == CONNECT_TYPE.input; - var _junc_list = _call_input? _outputs : _inputs; + if(junction_called == noone) return; + + //connect to called junction + var _call_input = junction_called.connect_type == CONNECT_TYPE.input; + var _junc_list = _call_input? _outputs : _inputs; + + for(var i = 0; i < array_length(_junc_list); i++) { + var _target = _junc_list[i]; + if(!_target.auto_connect) continue; - for(var i = 0; i < array_length(_junc_list); i++) { - var _target = _junc_list[i]; - if(!_target.auto_connect) continue; - - if(_call_input && node_called.isConnectableStrict(_junc_list[i]) == 1) { - node_called.setFrom(_junc_list[i]); - _new_node.x -= _new_node.w; - break; - } - - if(!_call_input && _junc_list[i].isConnectableStrict(node_called) == 1) { - _junc_list[i].setFrom(node_called); - break; - } - } + if(_call_input && junction_called.isConnectableStrict(_junc_list[i]) == 1) { + junction_called.setFrom(_junc_list[i]); + _new_node.x -= _new_node.w; + break; + } - } else if(junction_hovering != noone) { //right click on junction - var to = junction_hovering; - var from = junction_hovering.value_from; - - for( var i = 0; i < array_length(_inputs); i++ ) { - var _in = _inputs[i]; - if(_in.auto_connect && _in.isConnectableStrict(from)) { - _in.setFrom(from); - break; - } - } - - for( var i = 0; i < array_length(_outputs); i++ ) { - var _ot = _outputs[i]; - if(to.isConnectableStrict(_ot)) { - to.setFrom(_ot); - break; - } - } - - if(_new_node) { - var _fx = from.node.x, _fy = from.node.y; - var _tx = to.node.x, _ty = to.node.y; - var _ny = node_target_y_raw; - - if(_tx > _fx) { - var _rt = abs((_ny - _fy) / (_ty - _fy)); - - if(_rt < 0.3) _new_node.y = _fy; - else if(_rt > 0.7) { - _new_node.y = _ty; - // _new_node.x = min(_new_node.x, _tx - _new_node.w - 32); - } - } + if(!_call_input && _junc_list[i].isConnectableStrict(junction_called) == 1) { + _junc_list[i].setFrom(junction_called); + break; } } } @@ -339,10 +254,10 @@ event_inherited(); } else if(ADD_NODE_PAGE == NODE_PAGE_DEFAULT && category == NODE_CATEGORY) { // page 0 global context var sug = []; - if(node_called != noone) { + if(junction_called != noone) { array_append(sug, nodeReleatedQuery( - node_called.connect_type == CONNECT_TYPE.input? "connectTo" : "connectFrom", - node_called.type + junction_called.connect_type == CONNECT_TYPE.input? "connectTo" : "connectFrom", + junction_called.type )); } @@ -502,21 +417,23 @@ event_inherited(); var hh = 0 + ui(4); var hg = line_get_height(f_p2, 6); - var ww = subcatagory_pane.surface_w; + var ww = subcatagory_pane.surface_w; var _hover = subcatagory_pane.hover; var _active = subcatagory_pane.active; for( var i = 0, n = array_length(subgroups); i < n; i++ ) { - var _hv = _hover && point_in_rectangle(_m[0], _m[1], 0, yy, ww, yy + hg - ui(1)); + var _sz = array_safe_get(subgroups_size, i, 1); + if(_sz == 0) continue; if(_hv) { draw_sprite_stretched_add(THEME.ui_panel_bg, 0, ui(4), yy, ww - ui(4), hg, CDEF.main_white, .2); if(mouse_click(mb_left, _active)) setSubgroup(i); } - var _f = i == subgroup_index? f_p2b : f_p2; - var _c = i == subgroup_index? COLORS._main_text_accent : CDEF.main_ltgrey; + var _f = i == subgroup_index? f_p2b : f_p2; + var _bc = CDEF.main_ltgrey; + var _c = i == subgroup_index? COLORS._main_text_accent : _bc; draw_set_text(_f, fa_left, fa_top, _c); draw_text_add(ui(12), yy + ui(2), subgroups[i]); @@ -544,21 +461,23 @@ event_inherited(); } var _subg_cur = -1; + subgroups_size = array_create(array_length(subgroups), 0); + for( var i = 0, n = ds_list_size(node_list); i < n; i++ ) { var _n = node_list[| i]; - + if(!checkValid(_n)) continue; + if(PREFERENCES.dialog_add_node_grouping != 2 || array_empty(subgroups)) { ds_list_add(_list, _n); continue; } - if(is_string(_n) && !string_starts_with(_n, "/")) { + if(is_string(_n) && !string_starts_with(_n, "/")) _subg_cur++ - if(_subg_cur > subgroup_index) break; - - } else if(_subg_cur == subgroup_index) { + else if(_subg_cur == subgroup_index) ds_list_add(_list, _n); - } + + if(is(_n, NodeObject) && _subg_cur >= 0) subgroups_size[_subg_cur]++; } var node_count = ds_list_size(_list); @@ -586,7 +505,7 @@ event_inherited(); var _node = _list[| index]; if(is_undefined(_node)) continue; if(is_instanceof(_node, NodeObject)) { - if(_node.is_patreon_extra && !IS_PATREON) continue; + if(_node.patreon && !IS_PATREON) continue; if(is_global && !_node.show_in_global) continue; } @@ -620,8 +539,6 @@ event_inherited(); continue; } - if(!filtered(_node)) continue; - var _nx = grid_space + (grid_width + grid_space) * cProg; var _boxx = _nx + (grid_width - grid_size) / 2; var cc = c_white; @@ -772,7 +689,7 @@ event_inherited(); var _node = _list[| i]; if(is_undefined(_node)) continue; if(is_instanceof(_node, NodeObject)) { - if(_node.is_patreon_extra && !IS_PATREON) continue; + if(_node.patreon && !IS_PATREON) continue; if(is_global && !_node.show_in_global) continue; } @@ -804,12 +721,13 @@ event_inherited(); continue; } - if(!filtered(_node)) continue; - if(++bg_ind % 2) draw_sprite_stretched_add(THEME.node_bg, 0, pd, yy, list_width - pd * 2, list_height, c_white, 0.1); if(_hoverContent && point_in_rectangle(_m[0], _m[1], pd + ui(16 * 2), yy, list_width, yy + list_height - 1)) { content_pane.hover_content = true; + node_icon = _node.spr; + node_icon_x = content_pane.x + pd + list_height / 2 + ui(32); + node_icon_y = content_pane.y + yy + list_height / 2; draw_sprite_stretched_ext(THEME.node_bg, 1, pd, yy, list_width - pd * 2, list_height, COLORS._main_accent, 1); @@ -946,6 +864,7 @@ event_inherited(); ADD_NODE_PAGE = 0; setPage(ADD_NODE_PAGE); + run_in(1, function() /*=>*/ { setPage(ADD_NODE_PAGE) }); #endregion #region resize @@ -996,22 +915,19 @@ event_inherited(); var _content = cat.list; for(var j = 0; j < ds_list_size(_content); j++) { var _node = _content[| j]; - + if(is_string(_node)) continue; if(ds_map_exists(search_map, _node)) continue; var match = string_partial_match_res(string_lower(_node.getName()), search_lower, search_split); if(is_instanceof(_node, NodeObject)) { - if(_node.is_patreon_extra && !IS_PATREON) continue; - if(is_global && !_node.show_in_global) continue; - if(_node.deprecated) continue; - - if(match[0] > -9000 && struct_exists(global.FAV_NODES, _node.node)) match[0] += 10000; + if(_node.deprecated) continue; + if(match[0] > -9000 && struct_exists(global.FAV_NODES, _node.node)) + match[0] += 10000; } var param = ""; - for( var k = 0; k < array_length(_node.tags); k++ ) { var mat = string_partial_match_res(_node.tags[k], search_lower, search_split); if(mat[0] - 10 > match[0]) { @@ -1091,6 +1007,8 @@ event_inherited(); _mrng = s_res[2][1]; } else _node = s_res; + + if(!checkValid(_node, false)) continue; _param.search_string = highlight? search_string : 0; _param.query = _query; @@ -1218,28 +1136,29 @@ event_inherited(); var list_width = search_pane.surface_w; var list_height = ui(28); - var sy = _y + list_height / 2; - var pd = ui(8); - hh += list_height * (amo + 1); + var sy = _y + list_height / 2; + var pd = ui(8); + var ind = 0; for(var i = 0; i < amo; i++) { var s_res = search_list[| i]; - var yy = sy + list_height * i; + var yy = sy + list_height * ind; var _node = noone; var _param = {}; var _query = ""; var _mrng = noone; - if(yy < -list_height) continue; - if(yy > search_pane.h) break; - if(is_array(s_res)) { _node = s_res[0]; _query = s_res[1]; _mrng = s_res[2][1]; } else _node = s_res; + + if(!checkValid(_node, false)) continue; + ind++; + if(yy < -list_height || yy > search_pane.h) continue; _param.search_string = highlight? search_string : 0; _param.query = _query; _param.range = _mrng; @@ -1259,8 +1178,11 @@ event_inherited(); if(node_selecting == i) { draw_sprite_stretched_ext(THEME.node_bg, 1, pd, yy, list_width - pd * 2, list_height, COLORS._main_accent, 1); - if(keyboard_check_pressed(vk_enter)) - buildNode(_node, _param); + if(keyboard_check_pressed(vk_enter)) buildNode(_node, _param); + + node_icon = _node.spr; + node_icon_x = search_pane.x + pd + list_height / 2 + ui(32); + node_icon_y = search_pane.y + yy + list_height / 2; } var tx; @@ -1342,6 +1264,6 @@ event_inherited(); search_pane.scroll_y_to = min(search_pane.scroll_y_to, -list_height * node_selecting - s_sfz + search_pane.h); } - return hh; + return list_height * (ind + 1); }); #endregion \ No newline at end of file diff --git a/objects/o_dialog_add_node/Draw_64.gml b/objects/o_dialog_add_node/Draw_64.gml index 5f6ccf560..50c2be567 100644 --- a/objects/o_dialog_add_node/Draw_64.gml +++ b/objects/o_dialog_add_node/Draw_64.gml @@ -49,7 +49,7 @@ if(DIALOG_SHOW_FOCUS) DIALOG_DRAW_FOCUS tw -= ui(32); } - if(node_called != noone || junction_hovering != noone) tw -= ui(32); + if(junction_called != noone) tw -= ui(32); tb_search.draw(tx, ty, tw, th, search_string, mouse_ui); @@ -73,7 +73,7 @@ if(DIALOG_SHOW_FOCUS) DIALOG_DRAW_FOCUS } if(b == 2) mod_inc_mf0 PREFERENCES.dialog_add_node_grouping mod_inc_mf1 PREFERENCES.dialog_add_node_grouping mod_inc_mf2 3 mod_inc_mf3; - if(node_called != noone || junction_hovering != noone) { + if(junction_called != noone) { var txt = node_show_connectable? __txtx("add_node_show_connect", "Showing connectable") : __txtx("add_node_show_all", "Showing all"); var cc = node_show_connectable? COLORS._main_accent : COLORS._main_icon; bx -= ui(32); @@ -132,11 +132,26 @@ if(DIALOG_SHOW_FOCUS) DIALOG_DRAW_FOCUS draw_sprite_stretched(THEME.textbox, 3, x0, y0, ww, hh); draw_surface(tooltip_surface, x0, y0); draw_sprite_stretched(THEME.textbox, 0, x0, y0, ww, hh); + node_tooltip = noone; + } + + if(node_icon != noone) { + var _sx = node_icon_x - ui(16); + var _sy = node_icon_y; + + var _sw = sprite_get_width(node_icon) + ui(48); + var _sh = sprite_get_height(node_icon) + ui(48); + + var _bgx = _sx - _sw / 2; + var _bgy = _sy - _sh / 2; + + draw_sprite_stretched(s_node_junction_name_bg, 0, _bgx, _bgy, _sw, _sh); + draw_sprite_ext(node_icon, 0, _sx, _sy, 1, 1); + node_icon = noone; } - node_tooltip = noone; ADD_NODE_SCROLL = content_pane.scroll_y_to; if(mouse_release(mb_right)) right_free = true; -#endregion \ No newline at end of file +#endregion diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index ffc84bec3..d3e944b15 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -37,9 +37,12 @@ function NodeObject(_name, _spr, _node, _tooltip = "") constructor { show_in_recent = true; show_in_global = true; - is_patreon_extra = false; + patreon = false; testable = true; + input_type_mask = 0b0; + output_type_mask = 0b0; + _fn = registerFunctionLite("New node", _name, function(n) /*=>*/ { PANEL_GRAPH.createNodeHotkey(n); }, [ node ]); _fn.spr = _spr; @@ -61,6 +64,10 @@ function NodeObject(_name, _spr, _node, _tooltip = "") constructor { static setBuild = function(_fn) { createFn = _fn; return self; } static setParam = function(_par) { createParam = _par; return self; } + // static setIO = function(t) { for(var i = 0; i < argument_count; i++) input_type_mask |= value_bit(argument[i]); return self; } + // static setIO = function(t) { for(var i = 0; i < argument_count; i++) output_type_mask |= value_bit(argument[i]); return self; } + static setIO = function(t) { for(var i = 0; i < argument_count; i++) { input_type_mask |= value_bit(argument[i]); output_type_mask |= value_bit(argument[i]); } return self; } + static setVersion = function(version) { INLINE if(IS_CMD) return self; @@ -118,7 +125,7 @@ function NodeObject(_name, _spr, _node, _tooltip = "") constructor { INLINE if(IS_CMD) return self; - is_patreon_extra = true; + patreon = true; ds_list_add(SUPPORTER_NODES, self); return self; @@ -167,7 +174,7 @@ function NodeObject(_name, _spr, _node, _tooltip = "") constructor { var spr_x = _x + grid_size - 4; var spr_y = _y + 4; - if(IS_PATREON && is_patreon_extra) { + if(IS_PATREON && patreon) { BLEND_SUBTRACT gpu_set_colorwriteenable(0, 0, 0, 1); draw_sprite_ext(s_patreon_supporter, 0, spr_x, spr_y, 1, 1, 0, c_white, 1); @@ -237,7 +244,7 @@ function NodeObject(_name, _spr, _node, _tooltip = "") constructor { tx += string_width(_txt); } - if(IS_PATREON && is_patreon_extra) { + if(IS_PATREON && patreon) { var spr_x = tx + ui(4); var spr_y = _y + _h / 2 - ui(6); @@ -319,912 +326,1452 @@ function __initNodes() { NODE_PAGE_DEFAULT = ds_list_size(NODE_CATEGORY); ADD_NODE_PAGE = NODE_PAGE_DEFAULT; - + // NODE LIST var fav = ds_list_create(); NODE_ADD_CAT("Home", fav); - #region group - var group = ds_list_create(); +#region group + var group = ds_list_create(); NODE_ADD_CAT("Group", group, ["Node_Group"], COLORS.node_blend_collection); ds_list_add(group, "Groups"); - addNodeObject(group, "Input", Node_Group_Input).hideRecent(); - addNodeObject(group, "Output", Node_Group_Output).hideRecent(); - addNodeObject(group, "Thumbnail", Node_Group_Thumbnail).hideRecent(); - #endregion + addNodeObject(group, "Input", Node_Group_Input) + .setIO(VALUE_TYPE.any).hideRecent(); + addNodeObject(group, "Output", Node_Group_Output) + .setIO(VALUE_TYPE.any).hideRecent(); + addNodeObject(group, "Thumbnail", Node_Group_Thumbnail) + .setIO(VALUE_TYPE.surface).hideRecent(); +#endregion - #region for +#region for var iter = ds_list_create(); NODE_ADD_CAT("Loop", iter, ["Node_Iterate"], COLORS.node_blend_loop); //#For ds_list_add(iter, "Groups"); - addNodeObject(iter, "Loop Input", Node_Iterator_Input).setSpr(s_node_loop_input).hideRecent(); - addNodeObject(iter, "Loop Output", Node_Iterator_Output).setSpr(s_node_loop_output).hideRecent(); - addNodeObject(iter, "Input", Node_Group_Input).hideRecent(); - addNodeObject(iter, "Output", Node_Group_Output).hideRecent(); - addNodeObject(iter, "Thumbnail", Node_Group_Thumbnail).hideRecent(); + addNodeObject(iter, "Loop Input", Node_Iterator_Input) + .setIO(VALUE_TYPE.any).setSpr(s_node_loop_input).hideRecent(); + addNodeObject(iter, "Loop Output", Node_Iterator_Output) + .setIO(VALUE_TYPE.any).setSpr(s_node_loop_output).hideRecent(); + addNodeObject(iter, "Input", Node_Group_Input) + .setIO(VALUE_TYPE.any).hideRecent(); + addNodeObject(iter, "Output", Node_Group_Output) + .setIO(VALUE_TYPE.any).hideRecent(); + addNodeObject(iter, "Thumbnail", Node_Group_Thumbnail) + .setIO(VALUE_TYPE.surface).hideRecent(); ds_list_add(iter, "Loops"); - addNodeObject(iter, "Index", Node_Iterator_Index).hideRecent(); - addNodeObject(iter, "Loop amount", Node_Iterator_Length).setSpr(s_node_iterator_amount).hideRecent(); - #endregion + addNodeObject(iter, "Index", Node_Iterator_Index) + .setIO(VALUE_TYPE.float).hideRecent(); + addNodeObject(iter, "Loop amount", Node_Iterator_Length) + .setIO(VALUE_TYPE.float).setSpr(s_node_iterator_amount).hideRecent(); +#endregion - #region for inline +#region for inline var iter_il = ds_list_create(); NODE_ADD_CAT("Loop", iter_il, ["Node_Iterate_Inline"], COLORS.node_blend_loop); //#For inline ds_list_add(iter_il, "Loops"); - addNodeObject(iter_il, "Index", Node_Iterator_Index).hideRecent(); - addNodeObject(iter_il, "Loop amount", Node_Iterator_Length).setSpr(s_node_iterator_amount).hideRecent(); - #endregion + addNodeObject(iter_il, "Index", Node_Iterator_Index) + .setIO(VALUE_TYPE.float).hideRecent(); + addNodeObject(iter_il, "Loop amount", Node_Iterator_Length) + .setIO(VALUE_TYPE.float).setSpr(s_node_iterator_amount).hideRecent(); +#endregion - #region for each +#region for each var itere = ds_list_create(); NODE_ADD_CAT("Loop", itere, ["Node_Iterate_Each"], COLORS.node_blend_loop); //#Foreach ds_list_add(itere, "Groups"); - addNodeObject(itere, "Input", Node_Group_Input).hideRecent(); - addNodeObject(itere, "Output", Node_Group_Output).hideRecent(); - addNodeObject(itere, "Thumbnail", Node_Group_Thumbnail).hideRecent(); + addNodeObject(itere, "Input", Node_Group_Input) + .setIO(VALUE_TYPE.any).hideRecent(); + addNodeObject(itere, "Output", Node_Group_Output) + .setIO(VALUE_TYPE.any).hideRecent(); + addNodeObject(itere, "Thumbnail", Node_Group_Thumbnail) + .setIO(VALUE_TYPE.surface).hideRecent(); ds_list_add(itere, "Loops"); - addNodeObject(itere, "Index", Node_Iterator_Index).hideRecent(); - addNodeObject(itere, "Array Length", Node_Iterator_Each_Length).setSpr(s_node_iterator_length).hideRecent(); - #endregion + addNodeObject(itere, "Index", Node_Iterator_Index) + .setIO(VALUE_TYPE.float).hideRecent(); + addNodeObject(itere, "Array Length", Node_Iterator_Each_Length) + .setIO(VALUE_TYPE.float).setSpr(s_node_iterator_length).hideRecent(); +#endregion - #region for each inline +#region for each inline var itere_il = ds_list_create(); NODE_ADD_CAT("Loop", itere_il, ["Node_Iterate_Each_Inline"], COLORS.node_blend_loop); //#Foreach inline ds_list_add(itere_il, "Loops"); - addNodeObject(itere_il, "Index", Node_Iterator_Index).hideRecent(); - addNodeObject(itere_il, "Array Length", Node_Iterator_Length).hideRecent(); - #endregion + addNodeObject(itere_il, "Index", Node_Iterator_Index) + .setIO(VALUE_TYPE.float).hideRecent(); + addNodeObject(itere_il, "Array Length", Node_Iterator_Length) + .setIO(VALUE_TYPE.float).hideRecent(); +#endregion - #region iterate filter +#region iterate filter var filter = ds_list_create(); NODE_ADD_CAT("Filter", filter, ["Node_Iterate_Filter"], COLORS.node_blend_loop); //#Loop filter ds_list_add(filter, "Groups"); - addNodeObject(filter, "Input", Node_Group_Input).hideRecent(); - addNodeObject(filter, "Output", Node_Group_Output).hideRecent(); - addNodeObject(filter, "Thumbnail", Node_Group_Thumbnail).hideRecent(); + addNodeObject(filter, "Input", Node_Group_Input) + .setIO(VALUE_TYPE.any).hideRecent(); + addNodeObject(filter, "Output", Node_Group_Output) + .setIO(VALUE_TYPE.any).hideRecent(); + addNodeObject(filter, "Thumbnail", Node_Group_Thumbnail) + .setIO(VALUE_TYPE.surface).hideRecent(); ds_list_add(filter, "Loops"); - addNodeObject(filter, "Index", Node_Iterator_Index).hideRecent(); - addNodeObject(filter, "Array Length", Node_Iterator_Each_Length).setSpr(s_node_iterator_length).hideRecent(); - #endregion + addNodeObject(filter, "Index", Node_Iterator_Index) + .setIO(VALUE_TYPE.float).hideRecent(); + addNodeObject(filter, "Array Length", Node_Iterator_Each_Length) + .setIO(VALUE_TYPE.float).setSpr(s_node_iterator_length).hideRecent(); +#endregion - #region iterate filter inline +#region iterate filter inline var filter_il = ds_list_create(); NODE_ADD_CAT("Filter", filter_il, ["Node_Iterate_Filter_Inline"], COLORS.node_blend_loop); //#Loop filter inline ds_list_add(filter_il, "Loops"); - addNodeObject(filter_il, "Index", Node_Iterator_Index).hideRecent(); - addNodeObject(filter_il, "Array Length", Node_Iterator_Length).hideRecent(); - #endregion + addNodeObject(filter_il, "Index", Node_Iterator_Index) + .setIO(VALUE_TYPE.float).hideRecent(); + addNodeObject(filter_il, "Array Length", Node_Iterator_Length) + .setIO(VALUE_TYPE.float).hideRecent(); +#endregion - #region iterate feedback +#region iterate feedback var feed = ds_list_create(); NODE_ADD_CAT("Feedback", feed, ["Node_Feedback"], COLORS.node_blend_feedback); //#Feedback ds_list_add(feed, "Groups"); - addNodeObject(feed, "Input", Node_Feedback_Input).hideRecent(); - addNodeObject(feed, "Output", Node_Feedback_Output).hideRecent(); - addNodeObject(feed, "Thumbnail", Node_Group_Thumbnail).hideRecent(); - #endregion + addNodeObject(feed, "Input", Node_Feedback_Input) + .setIO(VALUE_TYPE.any).hideRecent(); + addNodeObject(feed, "Output", Node_Feedback_Output) + .setIO(VALUE_TYPE.any).hideRecent(); + addNodeObject(feed, "Thumbnail", Node_Group_Thumbnail) + .setIO(VALUE_TYPE.surface).hideRecent(); +#endregion - #region vfx +#region vfx var vfx = ds_list_create(); NODE_ADD_CAT("VFX", vfx, ["Node_VFX_Group", "Node_VFX_Group_Inline"], COLORS.node_blend_vfx); ds_list_add(vfx, "Groups"); - addNodeObject(vfx, "Input", Node_Group_Input).hideRecent().hideGlobal(); - addNodeObject(vfx, "Output", Node_Group_Output).hideRecent().hideGlobal(); - addNodeObject(vfx, "Renderer", Node_VFX_Renderer_Output).setSpr(s_node_vfx_render_output).hideRecent().hideGlobal(); + addNodeObject(vfx, "Input", Node_Group_Input) + .setIO(VALUE_TYPE.any).hideRecent().hideGlobal(); + addNodeObject(vfx, "Output", Node_Group_Output) + .setIO(VALUE_TYPE.any).hideRecent().hideGlobal(); + addNodeObject(vfx, "Renderer", Node_VFX_Renderer_Output) + .setIO(VALUE_TYPE.surface, VALUE_TYPE.particle).setSpr(s_node_vfx_render_output).hideRecent().hideGlobal(); ds_list_add(vfx, "Main"); - addNodeObject(vfx, "Spawner", Node_VFX_Spawner, "Spawn new particles.").setSpr(s_node_vfx_spawn).hideRecent(); - addNodeObject(vfx, "Renderer", Node_VFX_Renderer, "Render particle objects to surface.").setSpr(s_node_vfx_render).hideRecent(); + addNodeObject(vfx, "Spawner", Node_VFX_Spawner, "Spawn new particles.") + .setIO(VALUE_TYPE.particle).setSpr(s_node_vfx_spawn).hideRecent(); + addNodeObject(vfx, "Renderer", Node_VFX_Renderer, "Render particle objects to surface.") + .setIO(VALUE_TYPE.particle).setSpr(s_node_vfx_render).hideRecent(); ds_list_add(vfx, "Affectors"); - addNodeObject(vfx, "Accelerate", Node_VFX_Accelerate, "Change the speed of particle in range.").hideRecent(); - addNodeObject(vfx, "Destroy", Node_VFX_Destroy, "Destroy particle in range.").hideRecent(); - addNodeObject(vfx, "Attract", Node_VFX_Attract, "Attract particle in range to one point.").hideRecent(); - addNodeObject(vfx, "Wind", Node_VFX_Wind, "Move particle in range.").hideRecent(); - addNodeObject(vfx, "Vortex", Node_VFX_Vortex, "Rotate particle around a point.").hideRecent(); - addNodeObject(vfx, "Turbulence", Node_VFX_Turbulence, "Move particle in range randomly.").hideRecent(); - addNodeObject(vfx, "Repel", Node_VFX_Repel, "Move particle away from point.").hideRecent(); - addNodeObject(vfx, "Oscillate", Node_VFX_Oscillate, "Swing particle around its original trajectory.").hideRecent().setVersion(11560); - addNodeObject(vfx, "Boids", Node_VFX_Boids, "Apply boids algorithm to create a flock behaviour.").hideRecent().setVersion(1_18_01_0); + addNodeObject(vfx, "Accelerate", Node_VFX_Accelerate, "Change the speed of particle in range.") + .setIO(VALUE_TYPE.particle).hideRecent(); + addNodeObject(vfx, "Destroy", Node_VFX_Destroy, "Destroy particle in range.") + .setIO(VALUE_TYPE.particle).hideRecent(); + addNodeObject(vfx, "Attract", Node_VFX_Attract, "Attract particle in range to one point.") + .setIO(VALUE_TYPE.particle).hideRecent(); + addNodeObject(vfx, "Wind", Node_VFX_Wind, "Move particle in range.") + .setIO(VALUE_TYPE.particle).hideRecent(); + addNodeObject(vfx, "Vortex", Node_VFX_Vortex, "Rotate particle around a point.") + .setIO(VALUE_TYPE.particle).hideRecent(); + addNodeObject(vfx, "Turbulence", Node_VFX_Turbulence, "Move particle in range randomly.") + .setIO(VALUE_TYPE.particle).hideRecent(); + addNodeObject(vfx, "Repel", Node_VFX_Repel, "Move particle away from point.") + .setIO(VALUE_TYPE.particle).hideRecent(); + addNodeObject(vfx, "Oscillate", Node_VFX_Oscillate, "Swing particle around its original trajectory.") + .setIO(VALUE_TYPE.particle).hideRecent().setVersion(11560); + addNodeObject(vfx, "Boids", Node_VFX_Boids, "Apply boids algorithm to create a flock behaviour.") + .setIO(VALUE_TYPE.particle).hideRecent().setVersion(1_18_01_0); ds_list_add(vfx, "Generates"); - addNodeObject(vfx, "VFX Trail", Node_VFX_Trail, "Generate path from particle movement.").hideRecent().setVersion(11560); - addNodeObject(vfx, "VFX Triangulate", Node_VFX_Triangulate, "Render line between particles.").hideRecent().setVersion(11670); + addNodeObject(vfx, "VFX Trail", Node_VFX_Trail, "Generate path from particle movement.") + .setIO(VALUE_TYPE.particle).hideRecent().setVersion(11560); + addNodeObject(vfx, "VFX Triangulate", Node_VFX_Triangulate, "Render line between particles.") + .setIO(VALUE_TYPE.particle).hideRecent().setVersion(11670); ds_list_add(vfx, "Variables"); - addNodeObject(vfx, "VFX Variable", Node_VFX_Variable, "Extract variable from particle objects.").hideRecent().setVersion(1120); - addNodeObject(vfx, "VFX Override", Node_VFX_Override, "Replace particle variable with a new one.").hideRecent().setVersion(1120); - #endregion + addNodeObject(vfx, "VFX Variable", Node_VFX_Variable, "Extract variable from particle objects.") + .setIO(VALUE_TYPE.particle).hideRecent().setVersion(1120); + addNodeObject(vfx, "VFX Override", Node_VFX_Override, "Replace particle variable with a new one.") + .setIO(VALUE_TYPE.particle).hideRecent().setVersion(1120); +#endregion - #region rigidSim +#region rigidSim var rigidSim = ds_list_create(); NODE_ADD_CAT("RigidSim", rigidSim, ["Node_Rigid_Group", "Node_Rigid_Group_Inline"], COLORS.node_blend_simulation); ds_list_add(rigidSim, "Group"); - addNodeObject(rigidSim, "Input", Node_Group_Input).hideRecent().hideGlobal(); - addNodeObject(rigidSim, "Output", Node_Group_Output).hideRecent().hideGlobal(); - addNodeObject(rigidSim, "Render", Node_Rigid_Render_Output).hideRecent().hideGlobal(); - addNodeObject(rigidSim, "RigidSim Global", Node_Rigid_Global).setVersion(1110).hideRecent(); + addNodeObject(rigidSim, "Input", Node_Group_Input) + .setIO(VALUE_TYPE.any).hideRecent().hideGlobal(); + addNodeObject(rigidSim, "Output", Node_Group_Output) + .setIO(VALUE_TYPE.any).hideRecent().hideGlobal(); + addNodeObject(rigidSim, "Render", Node_Rigid_Render_Output) + .setIO(VALUE_TYPE.rigid, VALUE_TYPE.surface).hideRecent().hideGlobal(); + addNodeObject(rigidSim, "RigidSim Global", Node_Rigid_Global) + .setIO(VALUE_TYPE.rigid).setVersion(1110).hideRecent(); ds_list_add(rigidSim, "RigidSim"); - addNodeObject(rigidSim, "Object", Node_Rigid_Object, "Spawn a rigidbody object.").hideRecent().setVersion(1110); - addNodeObject(rigidSim, "Object Spawner", Node_Rigid_Object_Spawner, "Spawn multiple rigidbody objects.").hideRecent().setVersion(1110); - addNodeObject(rigidSim, "Wall", Node_Rigid_Wall).hideRecent().setVersion(11680); - addNodeObject(rigidSim, "Render", Node_Rigid_Render, "Render rigidbody object to surface.").hideRecent().setVersion(1110); - addNodeObject(rigidSim, "Apply Force", Node_Rigid_Force_Apply, "Apply force to objects.").hideRecent().setVersion(1110); - addNodeObject(rigidSim, "Activate Physics", Node_Rigid_Activate, "Enable or disable rigidbody object.").hideRecent().setVersion(1110); + addNodeObject(rigidSim, "Object", Node_Rigid_Object, "Spawn a rigidbody object.") + .setIO(VALUE_TYPE.rigid).hideRecent().setVersion(1110); + addNodeObject(rigidSim, "Object Spawner", Node_Rigid_Object_Spawner, "Spawn multiple rigidbody objects.") + .setIO(VALUE_TYPE.rigid).hideRecent().setVersion(1110); + addNodeObject(rigidSim, "Wall", Node_Rigid_Wall) + .setIO(VALUE_TYPE.rigid).hideRecent().setVersion(11680); + addNodeObject(rigidSim, "Render", Node_Rigid_Render, "Render rigidbody object to surface.") + .setIO(VALUE_TYPE.rigid).hideRecent().setVersion(1110); + addNodeObject(rigidSim, "Apply Force", Node_Rigid_Force_Apply, "Apply force to objects.") + .setIO(VALUE_TYPE.rigid).hideRecent().setVersion(1110); + addNodeObject(rigidSim, "Activate Physics", Node_Rigid_Activate, "Enable or disable rigidbody object.") + .setIO(VALUE_TYPE.rigid).hideRecent().setVersion(1110); ds_list_add(rigidSim, "Variables"); - addNodeObject(rigidSim, "Rigidbody Variable", Node_Rigid_Variable, "Extract veriable from rigidbody object.").hideRecent().setVersion(1120); - addNodeObject(rigidSim, "Rigidbody Override", Node_Rigid_Override, "Replace rigidbody object variable with a new one.").hideRecent().setVersion(1120); - #endregion + addNodeObject(rigidSim, "Rigidbody Variable", Node_Rigid_Variable, "Extract veriable from rigidbody object.") + .setIO(VALUE_TYPE.rigid).hideRecent().setVersion(1120); + addNodeObject(rigidSim, "Rigidbody Override", Node_Rigid_Override, "Replace rigidbody object variable with a new one.") + .setIO(VALUE_TYPE.rigid).hideRecent().setVersion(1120); +#endregion - #region smokeSim +#region smokeSim var smokeSim = ds_list_create(); NODE_ADD_CAT("SmokeSim", smokeSim, ["Node_Smoke_Group", "Node_Smoke_Group_Inline"], COLORS.node_blend_smoke); ds_list_add(smokeSim, "Group"); - addNodeObject(smokeSim, "Input", Node_Group_Input).hideRecent().hideGlobal(); - addNodeObject(smokeSim, "Output", Node_Group_Output).hideRecent().hideGlobal(); - addNodeObject(smokeSim, "Render Domain", Node_Smoke_Render_Output).hideRecent().setVersion(11540).hideGlobal(); + addNodeObject(smokeSim, "Input", Node_Group_Input) + .setIO(VALUE_TYPE.any).hideRecent().hideGlobal(); + addNodeObject(smokeSim, "Output", Node_Group_Output) + .setIO(VALUE_TYPE.any).hideRecent().hideGlobal(); + addNodeObject(smokeSim, "Render Domain", Node_Smoke_Render_Output) + .setIO(VALUE_TYPE.sdomain, VALUE_TYPE.surface).hideRecent().setVersion(11540).hideGlobal(); ds_list_add(smokeSim, "Domain"); - addNodeObject(smokeSim, "Domain", Node_Smoke_Domain).hideRecent().setVersion(1120); - addNodeObject(smokeSim, "Update Domain", Node_Smoke_Update, "Run smoke by one step.").hideRecent().setVersion(1120); - addNodeObject(smokeSim, "Render Domain", Node_Smoke_Render, "Render smoke to surface. This node also have update function build in.").hideRecent().setVersion(1120); - addNodeObject(smokeSim, "Queue Domain", Node_Smoke_Domain_Queue, "Sync multiple domains to be render at the same time.").hideRecent().setVersion(1120); + addNodeObject(smokeSim, "Domain", Node_Smoke_Domain) + .setIO(VALUE_TYPE.sdomain).hideRecent().setVersion(1120); + addNodeObject(smokeSim, "Update Domain", Node_Smoke_Update, "Run smoke by one step.") + .setIO(VALUE_TYPE.sdomain).hideRecent().setVersion(1120); + addNodeObject(smokeSim, "Render Domain", Node_Smoke_Render, "Render smoke to surface. This node also have update function build in.") + .setIO(VALUE_TYPE.sdomain).hideRecent().setVersion(1120); + addNodeObject(smokeSim, "Queue Domain", Node_Smoke_Domain_Queue, "Sync multiple domains to be render at the same time.") + .setIO(VALUE_TYPE.sdomain).hideRecent().setVersion(1120); ds_list_add(smokeSim, "Smoke"); - addNodeObject(smokeSim, "Add Emitter", Node_Smoke_Add, "Add smoke emitter.").hideRecent().setVersion(1120); - addNodeObject(smokeSim, "Apply Velocity", Node_Smoke_Apply_Velocity, "Apply velocity to smoke.").hideRecent().setVersion(1120); - addNodeObject(smokeSim, "Add Collider", Node_Smoke_Add_Collider, "Add solid object that smoke can collides to.").hideRecent().setVersion(1120); - addNodeObject(smokeSim, "Vortex", Node_Smoke_Vortex, "Apply rotational force around a point.").hideRecent().setVersion(1120); - addNodeObject(smokeSim, "Repulse", Node_Smoke_Repulse, "Spread smoke away from a point.").hideRecent().setVersion(1120); - addNodeObject(smokeSim, "Turbulence", Node_Smoke_Turbulence, "Apply random velocity map to the smoke.").hideRecent().setVersion(1120); - #endregion + addNodeObject(smokeSim, "Add Emitter", Node_Smoke_Add, "Add smoke emitter.") + .setIO(VALUE_TYPE.sdomain).hideRecent().setVersion(1120); + addNodeObject(smokeSim, "Apply Velocity", Node_Smoke_Apply_Velocity, "Apply velocity to smoke.") + .setIO(VALUE_TYPE.sdomain).hideRecent().setVersion(1120); + addNodeObject(smokeSim, "Add Collider", Node_Smoke_Add_Collider, "Add solid object that smoke can collides to.") + .setIO(VALUE_TYPE.sdomain).hideRecent().setVersion(1120); + addNodeObject(smokeSim, "Vortex", Node_Smoke_Vortex, "Apply rotational force around a point.") + .setIO(VALUE_TYPE.sdomain).hideRecent().setVersion(1120); + addNodeObject(smokeSim, "Repulse", Node_Smoke_Repulse, "Spread smoke away from a point.") + .setIO(VALUE_TYPE.sdomain).hideRecent().setVersion(1120); + addNodeObject(smokeSim, "Turbulence", Node_Smoke_Turbulence, "Apply random velocity map to the smoke.") + .setIO(VALUE_TYPE.sdomain).hideRecent().setVersion(1120); +#endregion - #region flipSim +#region flipSim var flipSim = ds_list_create(); NODE_ADD_CAT("FLIP Fluid", flipSim, ["Node_FLIP_Group_Inline"], COLORS.node_blend_fluid); ds_list_add(flipSim, "Domain"); - addNodeObject(flipSim, "Domain", Node_FLIP_Domain).hideRecent().setVersion(11620); - addNodeObject(flipSim, "Render", Node_FLIP_Render).hideRecent().setVersion(11620); - addNodeObject(flipSim, "Update", Node_FLIP_Update).hideRecent().setVersion(11620); + addNodeObject(flipSim, "Domain", Node_FLIP_Domain) + .setIO(VALUE_TYPE.fdomain).hideRecent().setVersion(11620); + addNodeObject(flipSim, "Render", Node_FLIP_Render) + .setIO(VALUE_TYPE.fdomain, VALUE_TYPE.surface).hideRecent().setVersion(11620); + addNodeObject(flipSim, "Update", Node_FLIP_Update) + .setIO(VALUE_TYPE.fdomain).hideRecent().setVersion(11620); ds_list_add(flipSim, "Fluid"); - addNodeObject(flipSim, "Spawner", Node_FLIP_Spawner).hideRecent().setVersion(11620); - addNodeObject(flipSim, "Destroy", Node_FLIP_Destroy).hideRecent().setVersion(11680); + addNodeObject(flipSim, "Spawner", Node_FLIP_Spawner) + .setIO(VALUE_TYPE.fdomain).hideRecent().setVersion(11620); + addNodeObject(flipSim, "Destroy", Node_FLIP_Destroy) + .setIO(VALUE_TYPE.fdomain).hideRecent().setVersion(11680); ds_list_add(flipSim, "Affectors"); - addNodeObject(flipSim, "Apply Velocity", Node_FLIP_Apply_Velocity).hideRecent().setVersion(11620); - addNodeObject(flipSim, "Add Collider", Node_FLIP_Apply_Force).hideRecent().setVersion(11620); + addNodeObject(flipSim, "Apply Velocity", Node_FLIP_Apply_Velocity) + .setIO(VALUE_TYPE.fdomain).hideRecent().setVersion(11620); + addNodeObject(flipSim, "Add Collider", Node_FLIP_Apply_Force) + .setIO(VALUE_TYPE.fdomain).hideRecent().setVersion(11620); //addNodeObject(flipSim, "Add Rigidbody", Node_FLIP_Add_Rigidbody).hideRecent().setVersion(11680); - addNodeObject(flipSim, "Repel", Node_FLIP_Repel).hideRecent().setVersion(11680); - addNodeObject(flipSim, "Vortex", Node_FLIP_Vortex).hideRecent().setVersion(11680); + addNodeObject(flipSim, "Repel", Node_FLIP_Repel) + .setIO(VALUE_TYPE.fdomain).hideRecent().setVersion(11680); + addNodeObject(flipSim, "Vortex", Node_FLIP_Vortex) + .setIO(VALUE_TYPE.fdomain).hideRecent().setVersion(11680); ds_list_add(flipSim, "Misc"); - addNodeObject(flipSim, "FLIP to VFX", Node_FLIP_to_VFX).hideRecent().setVersion(11680); - #endregion + addNodeObject(flipSim, "FLIP to VFX", Node_FLIP_to_VFX) + .setIO(VALUE_TYPE.fdomain, VALUE_TYPE.particle).hideRecent().setVersion(11680); +#endregion - #region strandSim +#region strandSim var strandSim = ds_list_create(); NODE_ADD_CAT("StrandSim", strandSim, ["Node_Strand_Group", "Node_Strand_Group_Inline"], COLORS.node_blend_strand); ds_list_add(strandSim, "Group"); - addNodeObject(strandSim, "Input", Node_Group_Input).hideRecent().hideGlobal(); - addNodeObject(strandSim, "Output", Node_Group_Output).hideRecent().hideGlobal(); + addNodeObject(strandSim, "Input", Node_Group_Input) + .setIO(VALUE_TYPE.any).hideRecent().hideGlobal(); + addNodeObject(strandSim, "Output", Node_Group_Output) + .setIO(VALUE_TYPE.any).hideRecent().hideGlobal(); ds_list_add(strandSim, "System"); - addNodeObject(strandSim, "Strand Create", Node_Strand_Create, "Create strands from point, path, or mesh.").hideRecent().setVersion(1140); - addNodeObject(strandSim, "Strand Update", Node_Strand_Update, "Update strands by one step.").hideRecent().setVersion(1140); - addNodeObject(strandSim, "Strand Render", Node_Strand_Render, "Render strands to surface as a single path.").hideRecent().setVersion(1140); - addNodeObject(strandSim, "Strand Render Texture", Node_Strand_Render_Texture, "Render strands to surface as a textured path.").hideRecent().setVersion(1140); + addNodeObject(strandSim, "Strand Create", Node_Strand_Create, "Create strands from point, path, or mesh.") + .setIO(VALUE_TYPE.strands).hideRecent().setVersion(1140); + addNodeObject(strandSim, "Strand Update", Node_Strand_Update, "Update strands by one step.") + .setIO(VALUE_TYPE.strands).hideRecent().setVersion(1140); + addNodeObject(strandSim, "Strand Render", Node_Strand_Render, "Render strands to surface as a single path.") + .setIO(VALUE_TYPE.strands).hideRecent().setVersion(1140); + addNodeObject(strandSim, "Strand Render Texture", Node_Strand_Render_Texture, "Render strands to surface as a textured path.") + .setIO(VALUE_TYPE.strands).hideRecent().setVersion(1140); ds_list_add(strandSim, "Affectors"); - addNodeObject(strandSim, "Strand Gravity", Node_Strand_Gravity, "Apply downward acceleration to strands.").hideRecent().setVersion(1140); - addNodeObject(strandSim, "Strand Force Apply", Node_Strand_Force_Apply, "Apply general force to strands.").hideRecent().setVersion(1140); - addNodeObject(strandSim, "Strand Break", Node_Strand_Break, "Detach strands from its origin.").hideRecent().setVersion(1140); - addNodeObject(strandSim, "Strand Length Adjust", Node_Strand_Length_Adjust, "Adjust length of strands in area.").hideRecent().setVersion(1140); - addNodeObject(strandSim, "Strand Collision", Node_Strand_Collision, "Create solid object for strands to collides to.").hideRecent().setVersion(1140); - #endregion + addNodeObject(strandSim, "Strand Gravity", Node_Strand_Gravity, "Apply downward acceleration to strands.") + .setIO(VALUE_TYPE.strands).hideRecent().setVersion(1140); + addNodeObject(strandSim, "Strand Force Apply", Node_Strand_Force_Apply, "Apply general force to strands.") + .setIO(VALUE_TYPE.strands).hideRecent().setVersion(1140); + addNodeObject(strandSim, "Strand Break", Node_Strand_Break, "Detach strands from its origin.") + .setIO(VALUE_TYPE.strands).hideRecent().setVersion(1140); + addNodeObject(strandSim, "Strand Length Adjust", Node_Strand_Length_Adjust, "Adjust length of strands in area.") + .setIO(VALUE_TYPE.strands).hideRecent().setVersion(1140); + addNodeObject(strandSim, "Strand Collision", Node_Strand_Collision, "Create solid object for strands to collides to.") + .setIO(VALUE_TYPE.strands).hideRecent().setVersion(1140); +#endregion //\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\//\ global.__startPage = ds_list_size(NODE_CATEGORY); - #region io +#region io var input = ds_list_create(); addNodeCatagory("IO", input); ds_list_add(input, "Images"); ds_list_add(input, "/Importers"); - addNodeObject(input, "Image", Node_Image, "Load a single image from your computer.").setBuild(Node_create_Image); - addNodeObject(input, "Image GIF", Node_Image_gif, "Load animated .gif from your computer.").setBuild(Node_create_Image_gif); - addNodeObject(input, "Image Array", Node_Image_Sequence, "Load multiple images from your computer as array.").setBuild(Node_create_Image_Sequence); - addNodeObject(input, "Animation", Node_Image_Animated, "Load multiple images from your computer as animation.").setBuild(Node_create_Image_Animated); - addNodeObject(input, "SVG", Node_SVG, "Load a SVG file."); + addNodeObject(input, "Image", Node_Image, "Load a single image from your computer.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Image); + addNodeObject(input, "Image GIF", Node_Image_gif, "Load animated .gif from your computer.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Image_gif); + addNodeObject(input, "Image Array", Node_Image_Sequence, "Load multiple images from your computer as array.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Image_Sequence); + addNodeObject(input, "Animation", Node_Image_Animated, "Load multiple images from your computer as animation.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Image_Animated); + addNodeObject(input, "SVG", Node_SVG, "Load a SVG file.") + .setIO(VALUE_TYPE.surface); ds_list_add(input, "/Converters"); - addNodeObject(input, "Splice Spritesheet", Node_Image_Sheet, "Cut up spritesheet into animation or image array."); - addNodeObject(input, "Array to Anim", Node_Sequence_Anim, "Convert array of images into animation."); + addNodeObject(input, "Splice Spritesheet", Node_Image_Sheet, "Cut up spritesheet into animation or image array.") + .setIO(VALUE_TYPE.surface); + addNodeObject(input, "Array to Anim", Node_Sequence_Anim, "Convert array of images into animation.") + .setIO(VALUE_TYPE.surface); if(!DEMO) { ds_list_add(input, "/Exporters"); - addNodeObject(input, "Export", Node_Export, "Export image, image array to file, image sequence, animation.").setBuild(Node_create_Export); + addNodeObject(input, "Export", Node_Export, "Export image, image array to file, image sequence, animation.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Export); } ds_list_add(input, "Canvas"); - addNodeObject(input, "Canvas", Node_Canvas, "Draw on surface using brush, eraser, etc.").setTags(["draw"]); - addNodeObject(input, "Canvas Group", Node_Canvas_Group, "Create a group that combines multiple canvas nodes a layers.").setTags(["draw"]).setVersion(11740); - addNodeObject(input, "Active Canvas", Node_Active_Canvas, "Draw using parameterized brush.").setTags(["draw"]).setVersion(11570); + addNodeObject(input, "Canvas", Node_Canvas, "Draw on surface using brush, eraser, etc.") + .setIO(VALUE_TYPE.surface).setTags(["draw"]); + addNodeObject(input, "Canvas Group", Node_Canvas_Group, "Create a group that combines multiple canvas nodes a layers.") + .setIO(VALUE_TYPE.surface).setTags(["draw"]).setVersion(11740); + addNodeObject(input, "Active Canvas", Node_Active_Canvas, "Draw using parameterized brush.").setTags(["draw"]) + .setIO(VALUE_TYPE.surface).setVersion(11570); ds_list_add(input, "Tileset"); ds_list_add(input, "/Creators"); - addNodeObject(input, "Tileset", Node_Tile_Tileset, "Create tileset object.").setVersion(1_18_03_0); - addNodeObject(input, "Tile Drawer", Node_Tile_Drawer, "Draw using tileset.").setVersion(1_18_03_0); - addNodeObject(input, "Tile Rule", Node_Tile_Rule, "Apply tileset rules.").setVersion(1_18_03_0); - addNodeObject(input, "Convert to Tilemap", Node_Tile_Convert, "Convert color image to tile data.").setVersion(1_18_03_0); + addNodeObject(input, "Tileset", Node_Tile_Tileset, "Create tileset object.") + .setIO(VALUE_TYPE.surface, VALUE_TYPE.tileset).setVersion(1_18_03_0); + addNodeObject(input, "Tile Drawer", Node_Tile_Drawer, "Draw using tileset.") + .setIO(VALUE_TYPE.surface, VALUE_TYPE.tileset).setVersion(1_18_03_0); + addNodeObject(input, "Tile Rule", Node_Tile_Rule, "Apply tileset rules.") + .setIO(VALUE_TYPE.surface).setVersion(1_18_03_0); + addNodeObject(input, "Convert to Tilemap", Node_Tile_Convert, "Convert color image to tile data.") + .setIO(VALUE_TYPE.surface).setVersion(1_18_03_0); ds_list_add(input, "/Exporters"); - addNodeObject(input, "Render Tilemap", Node_Tile_Render, "Render tilemap to image.").setVersion(1_18_03_0); - addNodeObject(input, "Export Tilemap", Node_Tile_Tilemap_Export, "Export tilemap to file.").setVersion(1_18_03_0); + addNodeObject(input, "Render Tilemap", Node_Tile_Render, "Render tilemap to image.") + .setIO(VALUE_TYPE.surface).setVersion(1_18_03_0); + addNodeObject(input, "Export Tilemap", Node_Tile_Tilemap_Export, "Export tilemap to file.") + .setIO(VALUE_TYPE.surface).setVersion(1_18_03_0); ds_list_add(input, "Files"); - addNodeObject(input, "Text File In", Node_Text_File_Read, "Load .txt in as text.").setTags(["txt"]).setVersion(1080); - addNodeObject(input, "Text File Out", Node_Text_File_Write, "Save text as a .txt file.").setTags(["txt"]).setVersion(1090); - addNodeObject(input, "CSV File In", Node_CSV_File_Read, "Load .csv as text, number array.").setTags(["comma separated value"]).setVersion(1090); - addNodeObject(input, "CSV File Out", Node_CSV_File_Write, "Save array as .csv file.").setTags(["comma separated value"]).setVersion(1090); - addNodeObject(input, "JSON File In", Node_Json_File_Read, "Load .json file using keys.").setVersion(1090); - addNodeObject(input, "JSON File Out", Node_Json_File_Write, "Save data to .json file.").setVersion(1090); - addNodeObject(input, "WAV File In", Node_WAV_File_Read, "Load wav audio file.").setBuild(Node_create_WAV_File_Read).setVersion(1144); - addNodeObject(input, "WAV File Out", Node_WAV_File_Write, "Save wav audio file.").setVersion(1145); - addNodeObject(input, "XML File In", Node_XML_File_Read, "Load xml file.").setBuild(Node_create_XML_File_Read).setVersion(11720); - addNodeObject(input, "XML File Out", Node_XML_File_Write, "Write struct to xml file.").setVersion(11720); - addNodeObject(input, "Byte File In", Node_Byte_File_Read, "Load any file to buffer.").setVersion(11670); - addNodeObject(input, "Byte File Out", Node_Byte_File_Write, "Save buffer content to a file.").setVersion(11670); - addNodeObject(input, "Directory Search", Node_Directory_Search, "Search for files in directory.").setBuild(Node_create_Directory_Search).setVersion(11710); + addNodeObject(input, "Text File In", Node_Text_File_Read, "Load .txt in as text.") + .setIO(VALUE_TYPE.text).setTags(["txt"]).setVersion(1080); + addNodeObject(input, "Text File Out", Node_Text_File_Write, "Save text as a .txt file.") + .setIO(VALUE_TYPE.text).setTags(["txt"]).setVersion(1090); + addNodeObject(input, "CSV File In", Node_CSV_File_Read, "Load .csv as text, number array.") + .setIO(VALUE_TYPE.text, VALUE_TYPE.float).setTags(["comma separated value"]).setVersion(1090); + addNodeObject(input, "CSV File Out", Node_CSV_File_Write, "Save array as .csv file.") + .setIO(VALUE_TYPE.text, VALUE_TYPE.float).setTags(["comma separated value"]).setVersion(1090); + addNodeObject(input, "JSON File In", Node_Json_File_Read, "Load .json file using keys.") + .setIO(VALUE_TYPE.text, VALUE_TYPE.struct).setVersion(1090); + addNodeObject(input, "JSON File Out", Node_Json_File_Write, "Save data to .json file.") + .setIO(VALUE_TYPE.text, VALUE_TYPE.struct).setVersion(1090); + addNodeObject(input, "WAV File In", Node_WAV_File_Read, "Load wav audio file.") + .setIO(VALUE_TYPE.text, VALUE_TYPE.audioBit).setBuild(Node_create_WAV_File_Read).setVersion(1144); + addNodeObject(input, "WAV File Out", Node_WAV_File_Write, "Save wav audio file.") + .setIO(VALUE_TYPE.text, VALUE_TYPE.audioBit).setVersion(1145); + addNodeObject(input, "XML File In", Node_XML_File_Read, "Load xml file.") + .setIO(VALUE_TYPE.text, VALUE_TYPE.struct).setBuild(Node_create_XML_File_Read).setVersion(11720); + addNodeObject(input, "XML File Out", Node_XML_File_Write, "Write struct to xml file.") + .setIO(VALUE_TYPE.text, VALUE_TYPE.struct).setVersion(11720); + addNodeObject(input, "Byte File In", Node_Byte_File_Read, "Load any file to buffer.") + .setIO(VALUE_TYPE.text, VALUE_TYPE.buffer).setVersion(11670); + addNodeObject(input, "Byte File Out", Node_Byte_File_Write, "Save buffer content to a file.") + .setIO(VALUE_TYPE.text, VALUE_TYPE.buffer).setVersion(11670); + addNodeObject(input, "Directory Search", Node_Directory_Search, "Search for files in directory.") + .setIO(VALUE_TYPE.text).setBuild(Node_create_Directory_Search).setVersion(11710); ds_list_add(input, "Aseprite"); - addNodeObject(input, "ASE File In", Node_ASE_File_Read, "Load Aseprite file with support for layers, tags.").setBuild(Node_create_ASE_File_Read).setVersion(1100); - addNodeObject(input, "ASE Layer", Node_ASE_layer, "Load Aseprite project file").setVersion(1100); - addNodeObject(input, "ASE Tag", Node_ASE_Tag, "Read tag from ASE file.").setSpr(s_node_ase_layer).setVersion(1_18_03_0); + addNodeObject(input, "ASE File In", Node_ASE_File_Read, "Load Aseprite file with support for layers, tags.") + .setBuild(Node_create_ASE_File_Read).setIO(VALUE_TYPE.surface).setVersion(1100); + addNodeObject(input, "ASE Layer", Node_ASE_layer, "Load Aseprite project file") + .setIO(VALUE_TYPE.surface).setVersion(1100); + addNodeObject(input, "ASE Tag", Node_ASE_Tag, "Read tag from ASE file.") + .setSpr(s_node_ase_layer).setIO(VALUE_TYPE.surface).setVersion(1_18_03_0); ds_list_add(input, "External"); - addNodeObject(input, "Websocket Receiver", Node_Websocket_Receiver, "Create websocket server to receive data from the network.").setVersion(1145); - addNodeObject(input, "Websocket Sender", Node_Websocket_Sender, "Create websocket server to send data to the network.").setVersion(1145); - addNodeObject(input, "Spout Sender", Node_Spout_Send, "Send surface through Spout.").setVersion(11600); - addNodeObject(input, "MIDI In", Node_MIDI_In, "Receive MIDI message.").setVersion(11630).notTest(); - addNodeObject(input, "HTTP", Node_HTTP_request, "Request data from the internet.").setVersion(11780); + addNodeObject(input, "Websocket Receiver", Node_Websocket_Receiver, "Create websocket server to receive data from the network.") + .setVersion(1145); + addNodeObject(input, "Websocket Sender", Node_Websocket_Sender, "Create websocket server to send data to the network.") + .setVersion(1145); + addNodeObject(input, "Spout Sender", Node_Spout_Send, "Send surface through Spout.") + .setIO(VALUE_TYPE.surface).setVersion(11600); + addNodeObject(input, "MIDI In", Node_MIDI_In, "Receive MIDI message.") + .setVersion(11630).notTest(); + addNodeObject(input, "HTTP", Node_HTTP_request, "Request data from the internet.") + .setVersion(11780); ds_list_add(input, "Gamemaker"); addNodeObject(input, "GMRoom", Node_GMRoom).setSpr(s_gmroom).setVersion(1_18_04_1); - #endregion +#endregion - #region transform +#region transform var transform = ds_list_create(); addNodeCatagory("Transform", transform); ds_list_add(transform, "Transforms"); - addNodeObject(transform, "Transform", Node_Transform, "Move, rotate, and scale image.").setTags(["move", "rotate", "scale"]); - addNodeObject(transform, "Scale", Node_Scale, "Simple node for scaling image.").setTags(["resize"]); - addNodeObject(transform, "Scale Algorithm", Node_Scale_Algo, "Scale image using pixel-art based scaling algorithms.").setBuild(Node_create_Scale_Algo).setTags(["scale2x", "scale3x", "cleanedge"]); - addNodeObject(transform, "Flip", Node_Flip, "Flip image horizontally or vertically.").setTags(["mirror"]); - addNodeObject(transform, "Offset", Node_Offset, "Shift image with tiling.").setTags(["shift"]); - addNodeObject(transform, "Mirror", Node_Mirror, "Reflect the image along a reflection line.").setVersion(1070); - addNodeObject(transform, "Polar Mirror", Node_Mirror_Polar, "Reflect the image along multiple reflection lines.").setTags(["kaleidoscope"]).setVersion(1_18_06_2); + addNodeObject(transform, "Transform", Node_Transform, "Move, rotate, and scale image.") + .setIO(VALUE_TYPE.surface).setTags(["move", "rotate", "scale"]); + addNodeObject(transform, "Scale", Node_Scale, "Simple node for scaling image.") + .setIO(VALUE_TYPE.surface).setTags(["resize"]); + addNodeObject(transform, "Scale Algorithm", Node_Scale_Algo, "Scale image using pixel-art based scaling algorithms.") + .setBuild(Node_create_Scale_Algo).setIO(VALUE_TYPE.surface).setTags(["scale2x", "scale3x", "cleanedge"]); + addNodeObject(transform, "Flip", Node_Flip, "Flip image horizontally or vertically.") + .setIO(VALUE_TYPE.surface).setTags(["mirror"]); + addNodeObject(transform, "Offset", Node_Offset, "Shift image with tiling.") + .setIO(VALUE_TYPE.surface).setTags(["shift"]); + addNodeObject(transform, "Mirror", Node_Mirror, "Reflect the image along a reflection line.") + .setIO(VALUE_TYPE.surface).setVersion(1070); + addNodeObject(transform, "Polar Mirror", Node_Mirror_Polar, "Reflect the image along multiple reflection lines.") + .setIO(VALUE_TYPE.surface).setTags(["kaleidoscope"]).setVersion(1_18_06_2); ds_list_add(transform, "Crops"); - addNodeObject(transform, "Crop", Node_Crop, "Crop out image to create smaller ones."); - addNodeObject(transform, "Crop Content", Node_Crop_Content, "Crop out empty pixel from the image."); + addNodeObject(transform, "Crop", Node_Crop, "Crop out image to create smaller ones.") + .setIO(VALUE_TYPE.surface); + addNodeObject(transform, "Crop Content", Node_Crop_Content, "Crop out empty pixel from the image.") + .setIO(VALUE_TYPE.surface); ds_list_add(transform, "Warps"); - addNodeObject(transform, "Warp", Node_Warp, "Warp image by freely moving the corners.").setTags(["warp corner"]); + addNodeObject(transform, "Warp", Node_Warp, "Warp image by freely moving the corners.") + .setIO(VALUE_TYPE.surface).setTags(["warp corner"]); // addNodeObject(transform, "Perspective Warp",Node_Warp_Perspective, "Warp image by modifying perspective.").setTags(["warp perspective"]); - addNodeObject(transform, "Skew", Node_Skew, "Skew image horizontally, or vertically.").setTags(["shear"]); + addNodeObject(transform, "Skew", Node_Skew, "Skew image horizontally, or vertically.") + .setIO(VALUE_TYPE.surface).setTags(["shear"]); // addNodeObject(transform, "Grid Warp", Node_Grid_Warp, "Wrap image by modifying mesh lacttice."); - addNodeObject(transform, "Bend", Node_Bend, "Warp an image into a predefined shape.").setVersion(11650); - addNodeObject(transform, "Mesh Warp", Node_Mesh_Warp, "Wrap image by converting it to mesh, and using control points."); - addNodeObject(transform, "Polar", Node_Polar, "Convert image to polar coordinate."); - addNodeObject(transform, "Area Warp", Node_Wrap_Area, "Wrap image to fit an area value."); + addNodeObject(transform, "Bend", Node_Bend, "Warp an image into a predefined shape.") + .setIO(VALUE_TYPE.surface).setVersion(11650); + addNodeObject(transform, "Mesh Warp", Node_Mesh_Warp, "Wrap image by converting it to mesh, and using control points.") + .setIO(VALUE_TYPE.surface); + addNodeObject(transform, "Polar", Node_Polar, "Convert image to polar coordinate.") + .setIO(VALUE_TYPE.surface); + addNodeObject(transform, "Area Warp", Node_Wrap_Area, "Wrap image to fit an area value.") + .setIO(VALUE_TYPE.surface); ds_list_add(transform, "Others"); - addNodeObject(transform, "Composite", Node_Composite, "Combine multiple images with controllable position, rotation, scale.").setTags(["merge"]); - addNodeObject(transform, "Nine Slice", Node_9Slice, "Cut image into 3x3 parts, and scale/repeat only the middle part.").setTags(["9 slice", "splice", "nine patch"]); - addNodeObject(transform, "Padding", Node_Padding, "Make image bigger by adding space in 4 directions."); - addNodeObject(transform, "Tile Random", Node_Tile_Random, "Repeat images on a larger surface randomly.").setVersion(11780); - #endregion + addNodeObject(transform, "Composite", Node_Composite, "Combine multiple images with controllable position, rotation, scale.") + .setIO(VALUE_TYPE.surface).setTags(["merge"]); + addNodeObject(transform, "Nine Slice", Node_9Slice, "Cut image into 3x3 parts, and scale/repeat only the middle part.") + .setIO(VALUE_TYPE.surface).setTags(["9 slice", "splice", "nine patch"]); + addNodeObject(transform, "Padding", Node_Padding, "Make image bigger by adding space in 4 directions.") + .setIO(VALUE_TYPE.surface); + addNodeObject(transform, "Tile Random", Node_Tile_Random, "Repeat images on a larger surface randomly.") + .setIO(VALUE_TYPE.surface).setVersion(11780); +#endregion - #region filter +#region filter var filter = ds_list_create(); addNodeCatagory("Filter", filter); ds_list_add(filter, "Combines"); - addNodeObject(filter, "Blend", Node_Blend, "Blend 2 images using different blend modes.").setBuild(Node_create_Blend).setTags(global.node_blend_keys); - addNodeObject(filter, "RGBA Combine", Node_Combine_RGB, "Combine 4 image in to one. Each image use to control RGBA channel.").setVersion(1070); - addNodeObject(filter, "HSV Combine", Node_Combine_HSV, "Combine 4 image in to one. Each image use to control HSVA channel.").setVersion(1070); - addNodeObject(filter, "Override Channel", Node_Override_Channel, "Replace RGBA value of one surface with another.").setVersion(11640); + addNodeObject(filter, "Blend", Node_Blend, "Blend 2 images using different blend modes.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Blend).setTags(global.node_blend_keys); + addNodeObject(filter, "RGBA Combine", Node_Combine_RGB, "Combine 4 image in to one. Each image use to control RGBA channel.") + .setIO(VALUE_TYPE.surface).setVersion(1070); + addNodeObject(filter, "HSV Combine", Node_Combine_HSV, "Combine 4 image in to one. Each image use to control HSVA channel.") + .setIO(VALUE_TYPE.surface).setVersion(1070); + addNodeObject(filter, "Override Channel", Node_Override_Channel, "Replace RGBA value of one surface with another.") + .setIO(VALUE_TYPE.surface).setVersion(11640); ds_list_add(filter, "Blurs"); ds_list_add(filter, "/Kernel-based"); - addNodeObject(filter, "Blur", Node_Blur, "Blur image smoothly.").setTags(["gaussian blur"]); - addNodeObject(filter, "Non-Uniform Blur", Node_Blur_Simple, "Blur image using simpler algorithm. Allowing for variable blur strength.").setVersion(1070); - addNodeObject(filter, "Contrast Blur", Node_Blur_Contrast, "Blur only pixel of a similiar color."); - addNodeObject(filter, "Box Blur", Node_Blur_Box, "Blur pixel in square area uniformly.").setVersion(1_18_06_2); - addNodeObject(filter, "Shape Blur", Node_Blur_Shape, "Blur image using another image as blur map.").setVersion(11650); - addNodeObject(filter, "High Pass", Node_High_Pass, "Apply high pass filter").setTags(["sharpen"]).setVersion(1_18_01_0); + addNodeObject(filter, "Blur", Node_Blur, "Blur image smoothly.") + .setIO(VALUE_TYPE.surface).setTags(["gaussian blur"]); + addNodeObject(filter, "Non-Uniform Blur", Node_Blur_Simple, "Blur image using simpler algorithm. Allowing for variable blur strength.") + .setIO(VALUE_TYPE.surface).setVersion(1070); + addNodeObject(filter, "Contrast Blur", Node_Blur_Contrast, "Blur only pixel of a similiar color.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Box Blur", Node_Blur_Box, "Blur pixel in square area uniformly.") + .setIO(VALUE_TYPE.surface).setVersion(1_18_06_2); + addNodeObject(filter, "Shape Blur", Node_Blur_Shape, "Blur image using another image as blur map.") + .setIO(VALUE_TYPE.surface).setVersion(11650); + addNodeObject(filter, "High Pass", Node_High_Pass, "Apply high pass filter") + .setIO(VALUE_TYPE.surface).setTags(["sharpen"]).setVersion(1_18_01_0); ds_list_add(filter, "/Linear"); - addNodeObject(filter, "Directional Blur", Node_Blur_Directional, "Blur image given a direction.").setTags(["motion blur"]); - addNodeObject(filter, "Slope Blur", Node_Blur_Slope, "Blur along a gradient of a slope map.").setTags(["motion blur"]).setVersion(11640); - addNodeObject(filter, "Zoom Blur", Node_Blur_Zoom, "Blur image by zooming in/out from a mid point."); - addNodeObject(filter, "Radial Blur", Node_Blur_Radial, "Blur image by rotating around a mid point.").setVersion(1110); - addNodeObject(filter, "Path Blur", Node_Blur_Path, "Blur pixel along path.").setVersion(11750); - addNodeObject(filter, "Smear", Node_Smear, "Stretch out brighter pixel in one direction.").setVersion(11670); + addNodeObject(filter, "Directional Blur", Node_Blur_Directional, "Blur image given a direction.") + .setIO(VALUE_TYPE.surface).setTags(["motion blur"]); + addNodeObject(filter, "Slope Blur", Node_Blur_Slope, "Blur along a gradient of a slope map.") + .setIO(VALUE_TYPE.surface).setTags(["motion blur"]).setVersion(11640); + addNodeObject(filter, "Zoom Blur", Node_Blur_Zoom, "Blur image by zooming in/out from a mid point.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Radial Blur", Node_Blur_Radial, "Blur image by rotating around a mid point.") + .setIO(VALUE_TYPE.surface).setVersion(1110); + addNodeObject(filter, "Path Blur", Node_Blur_Path, "Blur pixel along path.") + .setIO(VALUE_TYPE.surface).setVersion(11750); + addNodeObject(filter, "Smear", Node_Smear, "Stretch out brighter pixel in one direction.") + .setIO(VALUE_TYPE.surface).setVersion(11670); ds_list_add(filter, "/Non-Linear"); - addNodeObject(filter, "Lens Blur", Node_Blur_Bokeh, "Create bokeh effect. Blur lighter color in a lens-like manner.").setTags(["bokeh"]).setVersion(1110); - addNodeObject(filter, "Average", Node_Average, "Average color of every pixels in the image.").setVersion(1110); - addNodeObject(filter, "Kuwahara", Node_Kuwahara, "Apply Kuwahara filter. Creating a watercolor-like effect.").setVersion(11660); - addNodeObject(filter, "Brush", Node_Brush_Linear, "Apply brush effect.").patreonExtra(); + addNodeObject(filter, "Lens Blur", Node_Blur_Bokeh, "Create bokeh effect. Blur lighter color in a lens-like manner.") + .setIO(VALUE_TYPE.surface).setTags(["bokeh"]).setVersion(1110); + addNodeObject(filter, "Average", Node_Average, "Average color of every pixels in the image.") + .setIO(VALUE_TYPE.surface).setVersion(1110); + addNodeObject(filter, "Kuwahara", Node_Kuwahara, "Apply Kuwahara filter. Creating a watercolor-like effect.") + .setIO(VALUE_TYPE.surface).setVersion(11660); + addNodeObject(filter, "Brush", Node_Brush_Linear, "Apply brush effect.") + .setIO(VALUE_TYPE.surface).patreonExtra(); ds_list_add(filter, "Warps"); ds_list_add(filter, "/Effects"); - addNodeObject(filter, "Mirror", Node_Mirror, "Reflect the image along a reflection line."); + addNodeObject(filter, "Mirror", Node_Mirror, "Reflect the image along a reflection line.") + .setIO(VALUE_TYPE.surface); addNodeObject(filter, "Polar Mirror", Node_Mirror_Polar, "Reflect the image around multiple radial reflection lines."); - addNodeObject(filter, "Twirl", Node_Twirl, "Twist the image around a mid point.").setTags(["twist"]); - addNodeObject(filter, "Dilate", Node_Dilate, "Expand the image around a mid point.").setTags(["inflate"]); - addNodeObject(filter, "Spherize", Node_Spherize, "Wrap a texture on to sphere.").setVersion(11630); - addNodeObject(filter, "Displace", Node_Displace, "Distort image using another image as a map.").setTags(["distort"]); - addNodeObject(filter, "Morph Surface", Node_Morph_Surface, "Morph pixel between two surfaces.").setVersion(1141); - addNodeObject(filter, "Liquefy", Node_Liquefy, "Distort image using variety of tools.").setVersion(1_18_02_0); + addNodeObject(filter, "Twirl", Node_Twirl, "Twist the image around a mid point.") + .setIO(VALUE_TYPE.surface).setTags(["twist"]); + addNodeObject(filter, "Dilate", Node_Dilate, "Expand the image around a mid point.") + .setIO(VALUE_TYPE.surface).setTags(["inflate"]); + addNodeObject(filter, "Spherize", Node_Spherize, "Wrap a texture on to sphere.") + .setIO(VALUE_TYPE.surface).setVersion(11630); + addNodeObject(filter, "Displace", Node_Displace, "Distort image using another image as a map.") + .setIO(VALUE_TYPE.surface).setTags(["distort"]); + addNodeObject(filter, "Morph Surface", Node_Morph_Surface, "Morph pixel between two surfaces.") + .setIO(VALUE_TYPE.surface).setVersion(1141); + addNodeObject(filter, "Liquefy", Node_Liquefy, "Distort image using variety of tools.") + .setIO(VALUE_TYPE.surface).setVersion(1_18_02_0); ds_list_add(filter, "/Mappers"); - addNodeObject(filter, "Texture Remap", Node_Texture_Remap, "Remap image using texture map. Where red channel control x position and green channel control y position."); - addNodeObject(filter, "Time Remap", Node_Time_Remap, "Remap image using texture as time map. Where brighter pixel in time map means using pixel from an older frame."); - addNodeObject(filter, "Shape Map", Node_Shape_Map, "Map image into shapes.").setVersion(11660); + addNodeObject(filter, "Texture Remap", Node_Texture_Remap, "Remap image using texture map. Where red channel control x position and green channel control y position.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Time Remap", Node_Time_Remap, "Remap image using texture as time map. Where brighter pixel in time map means using pixel from an older frame.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Shape Map", Node_Shape_Map, "Map image into shapes.") + .setIO(VALUE_TYPE.surface).setVersion(11660); ds_list_add(filter, "Effects"); ds_list_add(filter, "/Basics"); - addNodeObject(filter, "Outline", Node_Outline, "Add border to the image.").setTags(["border"]); - addNodeObject(filter, "Glow", Node_Glow, "Apply glow to the border of the image."); - addNodeObject(filter, "Shadow", Node_Shadow, "Apply shadow behind the image."); - addNodeObject(filter, "Blobify", Node_Blobify, "Round off sharp corner in BW image by bluring and thresholding.").setVersion(11650); - addNodeObject(filter, "SDF", Node_SDF, "Create signed distance field using jump flooding algorithm.").setVersion(1130); - addNodeObject(filter, "Replace Image", Node_Surface_Replace, "Replace instances of an image with a new one.").setTags(["image replace"]).setVersion(1140); + addNodeObject(filter, "Outline", Node_Outline, "Add border to the image.") + .setIO(VALUE_TYPE.surface).setTags(["border"]); + addNodeObject(filter, "Glow", Node_Glow, "Apply glow to the border of the image.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Shadow", Node_Shadow, "Apply shadow behind the image.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Blobify", Node_Blobify, "Round off sharp corner in BW image by bluring and thresholding.") + .setIO(VALUE_TYPE.surface).setVersion(11650); + addNodeObject(filter, "SDF", Node_SDF, "Create signed distance field using jump flooding algorithm.") + .setIO(VALUE_TYPE.surface).setVersion(1130); + addNodeObject(filter, "Replace Image", Node_Surface_Replace, "Replace instances of an image with a new one.") + .setIO(VALUE_TYPE.surface).setTags(["image replace"]).setVersion(1140); ds_list_add(filter, "/Post Processing"); - addNodeObject(filter, "Bloom", Node_Bloom, "Apply bloom effect, blurring and brighten the bright part of the image."); - addNodeObject(filter, "Blend Edge", Node_Blend_Edge, "Blend the edges of an image to create tilable patterns.").setVersion(11740); + addNodeObject(filter, "Bloom", Node_Bloom, "Apply bloom effect, blurring and brighten the bright part of the image.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Blend Edge", Node_Blend_Edge, "Blend the edges of an image to create tilable patterns.") + .setIO(VALUE_TYPE.surface).setVersion(11740); addNodeObject(filter, "Chromatic Aberration", Node_Chromatic_Aberration, "Apply chromatic aberration effect to the image."); - addNodeObject(filter, "FXAA", Node_FXAA, "Apply fast approximate anti-aliasing to te image.").setTags(["anti aliasing"]); - addNodeObject(filter, "Vignette", Node_Vignette, "Apply vignette effect to the border.").setVersion(11630); - addNodeObject(filter, "JPEG", Node_JPEG, "Apply JPEG compression to the image.").setVersion(11730); - addNodeObject(filter, "Grain", Node_Grain, "Add noise pattern to the image.").setVersion(11770); + addNodeObject(filter, "FXAA", Node_FXAA, "Apply fast approximate anti-aliasing to te image.") + .setIO(VALUE_TYPE.surface).setTags(["anti aliasing"]); + addNodeObject(filter, "Vignette", Node_Vignette, "Apply vignette effect to the border.") + .setIO(VALUE_TYPE.surface).setVersion(11630); + addNodeObject(filter, "JPEG", Node_JPEG, "Apply JPEG compression to the image.") + .setIO(VALUE_TYPE.surface).setVersion(11730); + addNodeObject(filter, "Grain", Node_Grain, "Add noise pattern to the image.") + .setIO(VALUE_TYPE.surface).setVersion(11770); ds_list_add(filter, "/Convolutions"); - addNodeObject(filter, "Convolution", Node_Convolution, "Apply convolution operation on each pixel using a custom 3x3 kernel.").setTags(["kernel"]).setVersion(1090); - addNodeObject(filter, "Edge Detect", Node_Edge_Detect, "Edge detect by applying Sobel, Prewitt, or Laplacian kernel."); - addNodeObject(filter, "Local Analyze", Node_Local_Analyze, "Apply non-linear operation (minimum, maximum) on each pixel locally.").setVersion(1110); - addNodeObject(filter, "Erode", Node_Erode, "Remove pixel that are close to the border of the image."); - addNodeObject(filter, "Round Corner", Node_Corner, "Round out sharp corner of the image.").setVersion(1110); + addNodeObject(filter, "Convolution", Node_Convolution, "Apply convolution operation on each pixel using a custom 3x3 kernel.") + .setIO(VALUE_TYPE.surface).setTags(["kernel"]).setVersion(1090); + addNodeObject(filter, "Edge Detect", Node_Edge_Detect, "Edge detect by applying Sobel, Prewitt, or Laplacian kernel.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Local Analyze", Node_Local_Analyze, "Apply non-linear operation (minimum, maximum) on each pixel locally.") + .setIO(VALUE_TYPE.surface).setVersion(1110); + addNodeObject(filter, "Erode", Node_Erode, "Remove pixel that are close to the border of the image.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Round Corner", Node_Corner, "Round out sharp corner of the image.") + .setIO(VALUE_TYPE.surface).setVersion(1110); ds_list_add(filter, "/Pixel Operations"); - addNodeObject(filter, "Pixel Math", Node_Pixel_Math, "Apply mathematical operation directly on RGBA value.").setBuild(Node_create_Pixel_Math).setTags(global.node_math_keys).setVersion(1_18_02_0); - addNodeObject(filter, "Pixel Expand", Node_Atlas, "Replace transparent pixel with the closest non-transparent pixel.").setTags(["atlas"]); - addNodeObject(filter, "Pixel Cloud", Node_Pixel_Cloud, "Displace each pixel of the image randomly."); - addNodeObject(filter, "Pixel Sort", Node_Pixel_Sort, "Sort pixel by brightness in horizontal, or vertial axis."); - addNodeObject(filter, "Shuffle", Node_Shuffle, "Shuffle image while keeping pixel colors.").setVersion(1_18_05_6); + addNodeObject(filter, "Pixel Math", Node_Pixel_Math, "Apply mathematical operation directly on RGBA value.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Pixel_Math).setTags(global.node_math_keys).setVersion(1_18_02_0); + addNodeObject(filter, "Pixel Expand", Node_Atlas, "Replace transparent pixel with the closest non-transparent pixel.") + .setIO(VALUE_TYPE.surface).setTags(["atlas"]); + addNodeObject(filter, "Pixel Cloud", Node_Pixel_Cloud, "Displace each pixel of the image randomly.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Pixel Sort", Node_Pixel_Sort, "Sort pixel by brightness in horizontal, or vertial axis.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Shuffle", Node_Shuffle, "Shuffle image while keeping pixel colors.") + .setIO(VALUE_TYPE.surface).setVersion(1_18_05_6); ds_list_add(filter, "/Lights"); - addNodeObject(filter, "2D Light", Node_2D_light, "Apply different shaped light on the image."); - addNodeObject(filter, "Cast Shadow", Node_Shadow_Cast, "Apply light that casts shadow.").setTags(["raycast"]).setVersion(1100); + addNodeObject(filter, "2D Light", Node_2D_light, "Apply different shaped light on the image.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Cast Shadow", Node_Shadow_Cast, "Apply light that casts shadow.") + .setIO(VALUE_TYPE.surface).setTags(["raycast"]).setVersion(1100); ds_list_add(filter, "/Animations"); - addNodeObject(filter, "Interlace", Node_Interlaced, "Apply interlace effect to an image.").setVersion(11760); - addNodeObject(filter, "Trail", Node_Trail, "Blend animation by filling in the pixel 'in-between' two or more frames.").setVersion(1130); + addNodeObject(filter, "Interlace", Node_Interlaced, "Apply interlace effect to an image.") + .setIO(VALUE_TYPE.surface).setVersion(11760); + addNodeObject(filter, "Trail", Node_Trail, "Blend animation by filling in the pixel 'in-between' two or more frames.") + .setIO(VALUE_TYPE.surface).setVersion(1130); ds_list_add(filter, "Colors"); ds_list_add(filter, "/Replacements"); - addNodeObject(filter, "Replace Palette", Node_Color_replace, "Match image to a palette then remap it to another palette.").setTags(["isolate colors", "select colors", "palette swap", "colors replace"]); - addNodeObject(filter, "Replace Colors", Node_Colors_Replace, "Replace selected colors with a new one.").setTags(["isolate colors", "select color", "palette swap"]); - addNodeObject(filter, "Remove Color", Node_Color_Remove, "Remove color that match a palette.").setTags(["delete color"]); - addNodeObject(filter, "Separate Color", Node_Color_Separate, "Generate array of surfaces for each color."); + addNodeObject(filter, "Replace Palette", Node_Color_replace, "Match image to a palette then remap it to another palette.") + .setIO(VALUE_TYPE.surface).setTags(["isolate colors", "select colors", "palette swap", "colors replace"]); + addNodeObject(filter, "Replace Colors", Node_Colors_Replace, "Replace selected colors with a new one.") + .setIO(VALUE_TYPE.surface).setTags(["isolate colors", "select color", "palette swap"]); + addNodeObject(filter, "Remove Color", Node_Color_Remove, "Remove color that match a palette.") + .setIO(VALUE_TYPE.surface).setTags(["delete color"]); + addNodeObject(filter, "Separate Color", Node_Color_Separate, "Generate array of surfaces for each color.") + .setIO(VALUE_TYPE.surface); ds_list_add(filter, "/Colorizers"); - addNodeObject(filter, "Colorize", Node_Colorize, "Map brightness of a pixel to a color from a gradient.").setTags(["recolor"]); - addNodeObject(filter, "Posterize", Node_Posterize, "Reduce and remap color to match a palette."); - addNodeObject(filter, "Dither", Node_Dither, "Reduce color and use dithering to preserve original color."); - addNodeObject(filter, "Error Diffuse Dither", Node_Dither_Diffuse, "Dither image using error diffusion algorithm.").setVersion(1_18_05_1); - addNodeObject(filter, "Palette Shift", Node_Palette_Shift, "Shift the order of color in palette.").setVersion(1147); + addNodeObject(filter, "Colorize", Node_Colorize, "Map brightness of a pixel to a color from a gradient.") + .setIO(VALUE_TYPE.surface).setTags(["recolor"]); + addNodeObject(filter, "Posterize", Node_Posterize, "Reduce and remap color to match a palette.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Dither", Node_Dither, "Reduce color and use dithering to preserve original color.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Error Diffuse Dither", Node_Dither_Diffuse, "Dither image using error diffusion algorithm.") + .setIO(VALUE_TYPE.surface).setVersion(1_18_05_1); + addNodeObject(filter, "Palette Shift", Node_Palette_Shift, "Shift the order of color in palette.") + .setIO(VALUE_TYPE.surface).setVersion(1147); ds_list_add(filter, "/Conversions"); - addNodeObject(filter, "BW", Node_BW, "Convert color image to black and white.").setTags(["black and white"]); - addNodeObject(filter, "Greyscale", Node_Greyscale, "Convert color image to greyscale.").setTags(["grayscale"]); - addNodeObject(filter, "RGBA Extract", Node_RGB_Channel, "Extract RGBA channel on an image, each channel becomes its own image.").setTags(["channel extract"]); - addNodeObject(filter, "HSV Extract", Node_HSV_Channel, "Extract HSVA channel on an image, each channel becomes its own image.").setVersion(1070); - addNodeObject(filter, "Alpha to Grey", Node_Alpha_Grey, "Convert alpha value into solid greyscale.").setTags(["alpha to gray"]); - addNodeObject(filter, "Grey to Alpha", Node_Grey_Alpha, "Convert greyscale to alpha value.").setTags(["gray to alpha"]); + addNodeObject(filter, "BW", Node_BW, "Convert color image to black and white.") + .setIO(VALUE_TYPE.surface).setTags(["black and white"]); + addNodeObject(filter, "Greyscale", Node_Greyscale, "Convert color image to greyscale.") + .setIO(VALUE_TYPE.surface).setTags(["grayscale"]); + addNodeObject(filter, "RGBA Extract", Node_RGB_Channel, "Extract RGBA channel on an image, each channel becomes its own image.") + .setIO(VALUE_TYPE.surface).setTags(["channel extract"]); + addNodeObject(filter, "HSV Extract", Node_HSV_Channel, "Extract HSVA channel on an image, each channel becomes its own image.") + .setIO(VALUE_TYPE.surface).setVersion(1070); + addNodeObject(filter, "Alpha to Grey", Node_Alpha_Grey, "Convert alpha value into solid greyscale.") + .setIO(VALUE_TYPE.surface).setTags(["alpha to gray"]); + addNodeObject(filter, "Grey to Alpha", Node_Grey_Alpha, "Convert greyscale to alpha value.") + .setIO(VALUE_TYPE.surface).setTags(["gray to alpha"]); ds_list_add(filter, "/Adjustments"); - addNodeObject(filter, "Color Adjust", Node_Color_adjust, "Adjust brightness, contrast, hue, saturation, value, alpha, and blend image with color.").setTags(["brightness", "contrast", "hue", "saturation", "value", "color blend", "alpha"]); - addNodeObject(filter, "Level", Node_Level, "Adjust brightness of an image by changing its brightness range."); - addNodeObject(filter, "Level Selector", Node_Level_Selector, "Isolate part of the image that falls in the selected brightness range."); - addNodeObject(filter, "Curve", Node_Curve, "Adjust brightness of an image using curves.").setVersion(1120); - addNodeObject(filter, "HSV Curve", Node_Curve_HSV, "Adjust hsv values of an image using curves.").setVersion(11720); - addNodeObject(filter, "Invert", Node_Invert, "Invert color.").setTags(["negate"]); - addNodeObject(filter, "Threshold", Node_Threshold, "Set a threshold where pixel darker will becomes black, and brighter to white. Also works with alpha.").setVersion(1080); - addNodeObject(filter, "Alpha Cutoff", Node_Alpha_Cutoff, "Remove pixel with low alpha value.").setTags(["remove alpha"]); - addNodeObject(filter, "Normalize", Node_Normalize, "Normalize image ranges (brightness, RGB channels) in to [0, 1] range.").setVersion(11710); - addNodeObject(filter, "Gamma Map", Node_Gamma_Map, "Apply gamma approximation (pow(2.2)) to an image.").setTags(["srgb"]).setVersion(11660); - addNodeObject(filter, "ACE", Node_Tonemap_ACE, "Apply ACE tonemapping.").setVersion(11710); + addNodeObject(filter, "Color Adjust", Node_Color_adjust, "Adjust brightness, contrast, hue, saturation, value, alpha, and blend image with color.") + .setIO(VALUE_TYPE.surface).setTags(["brightness", "contrast", "hue", "saturation", "value", "color blend", "alpha"]); + addNodeObject(filter, "Level", Node_Level, "Adjust brightness of an image by changing its brightness range.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Level Selector", Node_Level_Selector, "Isolate part of the image that falls in the selected brightness range.") + .setIO(VALUE_TYPE.surface); + addNodeObject(filter, "Curve", Node_Curve, "Adjust brightness of an image using curves.") + .setIO(VALUE_TYPE.surface).setVersion(1120); + addNodeObject(filter, "HSV Curve", Node_Curve_HSV, "Adjust hsv values of an image using curves.") + .setIO(VALUE_TYPE.surface).setVersion(11720); + addNodeObject(filter, "Invert", Node_Invert, "Invert color.") + .setIO(VALUE_TYPE.surface).setTags(["negate"]); + addNodeObject(filter, "Threshold", Node_Threshold, "Set a threshold where pixel darker will becomes black, and brighter to white. Also works with alpha.") + .setIO(VALUE_TYPE.surface).setVersion(1080); + addNodeObject(filter, "Alpha Cutoff", Node_Alpha_Cutoff, "Remove pixel with low alpha value.") + .setIO(VALUE_TYPE.surface).setTags(["remove alpha"]); + addNodeObject(filter, "Normalize", Node_Normalize, "Normalize image ranges (brightness, RGB channels) in to [0, 1] range.") + .setIO(VALUE_TYPE.surface).setVersion(11710); + addNodeObject(filter, "Gamma Map", Node_Gamma_Map, "Apply gamma approximation (pow(2.2)) to an image.") + .setIO(VALUE_TYPE.surface).setTags(["srgb"]).setVersion(11660); + addNodeObject(filter, "ACE", Node_Tonemap_ACE, "Apply ACE tonemapping.") + .setIO(VALUE_TYPE.surface).setVersion(11710); ds_list_add(filter, "Fixes"); - addNodeObject(filter, "De-Corner", Node_De_Corner, "Attempt to remove single pixel corner from the image.").setTags(["decorner"]); - addNodeObject(filter, "De-Stray", Node_De_Stray, "Attempt to remove orphan pixel.").setTags(["destray"]); - #endregion + addNodeObject(filter, "De-Corner", Node_De_Corner, "Attempt to remove single pixel corner from the image.") + .setIO(VALUE_TYPE.surface).setTags(["decorner"]); + addNodeObject(filter, "De-Stray", Node_De_Stray, "Attempt to remove orphan pixel.") + .setIO(VALUE_TYPE.surface).setTags(["destray"]); +#endregion - #region d3d +#region d3d var d3d = ds_list_create(); addNodeCatagory("3D", d3d); ds_list_add(d3d, "2D Operations"); - addNodeObject(d3d, "Transform 3D", Node_3D_Transform_Image, "Transform image in 3D space").setTags(["3d transform"]).setVersion(11600); - addNodeObject(d3d, "Normal", Node_Normal, "Create normal map using greyscale value as height."); - addNodeObject(d3d, "Normal Light", Node_Normal_Light, "Light up the image using normal mapping."); - addNodeObject(d3d, "Bevel", Node_Bevel, "Apply 2D bevel on the image."); - addNodeObject(d3d, "Sprite Stack", Node_Sprite_Stack, "Create sprite stack either from repeating a single image or stacking different images using array."); - addNodeObject(d3d, "Ambient Occlusion", Node_Ambient_Occlusion, "Apply simple 2D AO effect using height map.").setTags(["ao"]).patreonExtra(); + addNodeObject(d3d, "Transform 3D", Node_3D_Transform_Image, "Transform image in 3D space") + .setIO(VALUE_TYPE.surface).setTags(["3d transform"]).setVersion(11600); + addNodeObject(d3d, "Normal", Node_Normal, "Create normal map using greyscale value as height.") + .setIO(VALUE_TYPE.surface); + addNodeObject(d3d, "Normal Light", Node_Normal_Light, "Light up the image using normal mapping.") + .setIO(VALUE_TYPE.surface); + addNodeObject(d3d, "Bevel", Node_Bevel, "Apply 2D bevel on the image.") + .setIO(VALUE_TYPE.surface); + addNodeObject(d3d, "Sprite Stack", Node_Sprite_Stack, "Create sprite stack either from repeating a single image or stacking different images using array.") + .setIO(VALUE_TYPE.surface); + addNodeObject(d3d, "Ambient Occlusion", Node_Ambient_Occlusion, "Apply simple 2D AO effect using height map.") + .setIO(VALUE_TYPE.surface).setTags(["ao"]).patreonExtra(); ds_list_add(d3d, "Scenes"); - addNodeObject(d3d, "3D Camera", Node_3D_Camera, "Create 3D camera that render scene to surface.").setVersion(11510); - addNodeObject(d3d, "3D Camera Set", Node_3D_Camera_Set, "3D camera with built-in key and fill directional lights.").setVersion(11571); - addNodeObject(d3d, "3D Scene", Node_3D_Scene, "Combine multiple 3D objects into a single junction.").setVersion(11510); + addNodeObject(d3d, "3D Camera", Node_3D_Camera, "Create 3D camera that render scene to surface.") + .setIO(VALUE_TYPE.d3Mesh, VALUE_TYPE.surface).setVersion(11510); + addNodeObject(d3d, "3D Camera Set", Node_3D_Camera_Set, "3D camera with built-in key and fill directional lights.") + .setIO(VALUE_TYPE.d3Mesh, VALUE_TYPE.surface).setVersion(11571); + addNodeObject(d3d, "3D Scene", Node_3D_Scene, "Combine multiple 3D objects into a single junction.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11510); ds_list_add(d3d, "Materials"); - addNodeObject(d3d, "3D Material", Node_3D_Material, "Create 3D material with adjustable parameters.").setVersion(11510); + addNodeObject(d3d, "3D Material", Node_3D_Material, "Create 3D material with adjustable parameters.") + .setIO(VALUE_TYPE.d3Mesh, VALUE_TYPE.surface).setVersion(11510); ds_list_add(d3d, "Meshes"); ds_list_add(d3d, "/Creators"); - addNodeObject(d3d, "3D Object", Node_3D_Mesh_Obj, "Load .obj file from your computer as a 3D object.").setBuild(Node_create_3D_Obj).setVersion(11510); - addNodeObject(d3d, "3D Plane", Node_3D_Mesh_Plane, "Put 2D image on a plane in 3D space.").setVersion(11510); - addNodeObject(d3d, "3D Cube", Node_3D_Mesh_Cube, "Create 3D cube mesh.").setVersion(11510); - addNodeObject(d3d, "3D Cylinder", Node_3D_Mesh_Cylinder, "Create 3D cylinder mesh").setVersion(11510); - addNodeObject(d3d, "3D UV Sphere", Node_3D_Mesh_Sphere_UV, "Create 3D uv sphere mesh").setVersion(11510); - addNodeObject(d3d, "3D Icosphere", Node_3D_Mesh_Sphere_Ico, "Create 3D icosphere mesh").setVersion(11510); - addNodeObject(d3d, "3D Cone", Node_3D_Mesh_Cone, "Create 3D cone mesh").setVersion(11510); - addNodeObject(d3d, "3D Torus", Node_3D_Mesh_Torus, "Create 3D torus mesh").setVersion(1_18_01_0); - addNodeObject(d3d, "3D Terrain", Node_3D_Mesh_Terrain, "Create 3D terrain from height map.").setVersion(11560); - addNodeObject(d3d, "3D Wall Builder", Node_3D_Mesh_Wall_Builder, "Create 3D wall be extruding 2D path.").setVersion(1_18_01_0); - addNodeObject(d3d, "Surface Extrude", Node_3D_Mesh_Extrude, "Extrude 2D image into 3D object.").setVersion(11510); - addNodeObject(d3d, "Path Extrude", Node_3D_Mesh_Path_Extrude, "Extrude path into 3D object.").setVersion(11750); + addNodeObject(d3d, "3D Object", Node_3D_Mesh_Obj, "Load .obj file from your computer as a 3D object.") + .setIO(VALUE_TYPE.d3Mesh).setBuild(Node_create_3D_Obj).setVersion(11510); + addNodeObject(d3d, "3D Plane", Node_3D_Mesh_Plane, "Put 2D image on a plane in 3D space.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11510); + addNodeObject(d3d, "3D Cube", Node_3D_Mesh_Cube, "Create 3D cube mesh.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11510); + addNodeObject(d3d, "3D Cylinder", Node_3D_Mesh_Cylinder, "Create 3D cylinder mesh") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11510); + addNodeObject(d3d, "3D UV Sphere", Node_3D_Mesh_Sphere_UV, "Create 3D uv sphere mesh") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11510); + addNodeObject(d3d, "3D Icosphere", Node_3D_Mesh_Sphere_Ico, "Create 3D icosphere mesh") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11510); + addNodeObject(d3d, "3D Cone", Node_3D_Mesh_Cone, "Create 3D cone mesh") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11510); + addNodeObject(d3d, "3D Torus", Node_3D_Mesh_Torus, "Create 3D torus mesh") + .setIO(VALUE_TYPE.d3Mesh).setVersion(1_18_01_0); + addNodeObject(d3d, "3D Terrain", Node_3D_Mesh_Terrain, "Create 3D terrain from height map.") + .setIO(VALUE_TYPE.d3Mesh, VALUE_TYPE.surface).setVersion(11560); + addNodeObject(d3d, "3D Wall Builder", Node_3D_Mesh_Wall_Builder, "Create 3D wall be extruding 2D path.") + .setIO(VALUE_TYPE.d3Mesh, VALUE_TYPE.pathnode).setVersion(1_18_01_0); + addNodeObject(d3d, "Surface Extrude", Node_3D_Mesh_Extrude, "Extrude 2D image into 3D object.") + .setIO(VALUE_TYPE.d3Mesh, VALUE_TYPE.surface).setVersion(11510); + addNodeObject(d3d, "Path Extrude", Node_3D_Mesh_Path_Extrude, "Extrude path into 3D object.") + .setIO(VALUE_TYPE.d3Mesh, VALUE_TYPE.pathnode).setVersion(11750); ds_list_add(d3d, "/Exporters"); - addNodeObject(d3d, "Mesh Export", Node_3D_Mesh_Export, "Export 3D mesh as .obj file").setVersion(11740); - addNodeObject(d3d, "Slice Stack", Node_3D_Mesh_Stack_Slice, "Slice 3D object into array of 2d images.").setVersion(11750); + addNodeObject(d3d, "Mesh Export", Node_3D_Mesh_Export, "Export 3D mesh as .obj file") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11740); + addNodeObject(d3d, "Slice Stack", Node_3D_Mesh_Stack_Slice, "Slice 3D object into array of 2d images.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11750); ds_list_add(d3d, "Light"); - addNodeObject(d3d, "Directional Light", Node_3D_Light_Directional, "Create directional light directed at the origin point.").setVersion(11510); - addNodeObject(d3d, "Point Light", Node_3D_Light_Point, "Create point light to illuminate surrounding area.").setVersion(11510); + addNodeObject(d3d, "Directional Light", Node_3D_Light_Directional, "Create directional light directed at the origin point.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11510); + addNodeObject(d3d, "Point Light", Node_3D_Light_Point, "Create point light to illuminate surrounding area.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11510); ds_list_add(d3d, "Modify"); ds_list_add(d3d, "/Meshes"); - addNodeObject(d3d, "Transform", Node_3D_Transform, "Transform 3D object.").setVersion(11570); - addNodeObject(d3d, "Transform Scene", Node_3D_Transform_Scene, "Transform 3D scene, accepts array of transformations for each objects.").setVersion(11570); - addNodeObject(d3d, "Discretize vertex", Node_3D_Round_Vertex, "Round out vertex position to a specified step.").setVersion(11560); - addNodeObject(d3d, "3D Displace", Node_3D_Displace, "Shift vertex of 3D mesh using 2D map.").setVersion(1_18_01_0); - addNodeObject(d3d, "3D Subdivide", Node_3D_Subdivide, "Subdivide faces in mesh.").setVersion(1_18_03_0); + addNodeObject(d3d, "Transform", Node_3D_Transform, "Transform 3D object.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11570); + addNodeObject(d3d, "Transform Scene", Node_3D_Transform_Scene, "Transform 3D scene, accepts array of transformations for each objects.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11570); + addNodeObject(d3d, "Discretize vertex", Node_3D_Round_Vertex, "Round out vertex position to a specified step.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11560); + addNodeObject(d3d, "3D Displace", Node_3D_Displace, "Shift vertex of 3D mesh using 2D map.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(1_18_01_0); + addNodeObject(d3d, "3D Subdivide", Node_3D_Subdivide, "Subdivide faces in mesh.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(1_18_03_0); ds_list_add(d3d, "/Instances"); - addNodeObject(d3d, "3D Repeat", Node_3D_Repeat, "Repeat the same 3D mesh multiple times.").setVersion(11510); + addNodeObject(d3d, "3D Repeat", Node_3D_Repeat, "Repeat the same 3D mesh multiple times.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11510); // addNodeObject(d3d, "3D Instancer", Node_3D_Instancer).setVersion(11560); // addNodeObject(d3d, "3D Particle", Node_3D_Particle).setVersion(11560); ds_list_add(d3d, "/Materials"); - addNodeObject(d3d, "Set Material", Node_3D_Set_Material, "Replace mesh material with a new one.").setVersion(11560); - addNodeObject(d3d, "UV Remap", Node_3D_UV_Remap, "Remap UV map using plane.").setVersion(11570); + addNodeObject(d3d, "Set Material", Node_3D_Set_Material, "Replace mesh material with a new one.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11560); + addNodeObject(d3d, "UV Remap", Node_3D_UV_Remap, "Remap UV map using plane.") + .setIO(VALUE_TYPE.d3Mesh).setVersion(11570); ds_list_add(d3d, "Points"); - addNodeObject(d3d, "Point Affector", Node_3D_Point_Affector, "Generate array of 3D points interpolating between two values based on the distance.").setVersion(11570); + addNodeObject(d3d, "Point Affector", Node_3D_Point_Affector, "Generate array of 3D points interpolating between two values based on the distance.") + .setIO(VALUE_TYPE.float).setVersion(11570); ds_list_add(d3d, "Ray Marching"); - addNodeObject(d3d, "RM Primitive", Node_RM_Primitive, "Create SDF object.").setBuild(Node_create_RM_Primitive).setTags(global.node_rm_primitive_keys).setVersion(11720); - addNodeObject(d3d, "RM Combine", Node_RM_Combine, "Combine 2 SDF objects using boolean operation.").setTags(["ray marching", "rm boolean"]).setVersion(11740); - addNodeObject(d3d, "RM Render", Node_RM_Render, "Render SDF object.").setTags(["ray marching"]).setVersion(11740); - addNodeObject(d3d, "RM Terrain", Node_RM_Terrain, "Generate SDF image from height map.").setTags(["ray marching"]).setVersion(11720); - addNodeObject(d3d, "RM Cloud", Node_RM_Cloud, "Generate distance field cloud texture.").patreonExtra(); - #endregion + addNodeObject(d3d, "RM Primitive", Node_RM_Primitive, "Create SDF object.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_RM_Primitive).setTags(global.node_rm_primitive_keys).setVersion(11720); + addNodeObject(d3d, "RM Combine", Node_RM_Combine, "Combine 2 SDF objects using boolean operation.") + .setIO(VALUE_TYPE.surface).setTags(["ray marching", "rm boolean"]).setVersion(11740); + addNodeObject(d3d, "RM Render", Node_RM_Render, "Render SDF object.") + .setIO(VALUE_TYPE.surface).setTags(["ray marching"]).setVersion(11740); + addNodeObject(d3d, "RM Terrain", Node_RM_Terrain, "Generate SDF image from height map.") + .setIO(VALUE_TYPE.surface).setTags(["ray marching"]).setVersion(11720); + addNodeObject(d3d, "RM Cloud", Node_RM_Cloud, "Generate distance field cloud texture.") + .setIO(VALUE_TYPE.surface).patreonExtra(); +#endregion - #region generator +#region generator var generator = ds_list_create(); addNodeCatagory("Generate", generator); ds_list_add(generator, "Colors"); - addNodeObject(generator, "Solid", Node_Solid, "Create image of a single color."); - addNodeObject(generator, "Draw Gradient", Node_Gradient, "Create image from gradient."); - addNodeObject(generator, "Draw 4 Points Gradient", Node_Gradient_Points, "Create image from 4 color points."); - addNodeObject(generator, "Sky", Node_Sky, "Generate sky texture using different model."); + addNodeObject(generator, "Solid", Node_Solid, "Create image of a single color.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Draw Gradient", Node_Gradient, "Create image from gradient.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Draw 4 Points Gradient", Node_Gradient_Points, "Create image from 4 color points.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Sky", Node_Sky, "Generate sky texture using different model.") + .setIO(VALUE_TYPE.surface); ds_list_add(generator, "Drawer"); - addNodeObject(generator, "Draw Line", Node_Line, "Draw line on an image. Connect path data to it to draw line from path."); - addNodeObject(generator, "Draw Text", Node_Text, "Draw text on an image."); - addNodeObject(generator, "Draw Shape", Node_Shape, "Draw simple shapes using signed distance field.").setBuild(Node_create_Shape).setTags(global.node_shape_keys); - addNodeObject(generator, "Draw Shape Polygon", Node_Shape_Polygon, "Draw polygonal shapes.").setVersion(1130); - addNodeObject(generator, "Draw Random Shape", Node_Random_Shape, "Generate random shape, use for testing purposes.").setVersion(1147); - addNodeObject(generator, "Draw Bar / Graph", Node_Plot_Linear, "Plot graph or bar chart from array of number.").setBuild(Node_create_Plot_Linear).setTags(global.node_plot_linear_keys).setVersion(1144); - addNodeObject(generator, "Draw Path Profile", Node_Path_Profile, "Fill-in an area on one side of a path.").setVersion(11660); - addNodeObject(generator, "Draw Cross Section", Node_Cross_Section, "Map the brightness of pixels on a linear axis into a surface.").setVersion(11710); - addNodeObject(generator, "Interpret Number", Node_Interpret_Number, "Convert array of number into surface.").setVersion(11530); - addNodeObject(generator, "Pixel Builder", Node_Pixel_Builder, "Will break, do not create. please. Why is it here??").setVersion(11540); - addNodeObject(generator, "Tile Drawer", Node_Tile_Drawer, "Draw using tileset.").setVersion(1_18_03_0); + addNodeObject(generator, "Draw Line", Node_Line, "Draw line on an image. Connect path data to it to draw line from path.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Draw Text", Node_Text, "Draw text on an image.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Draw Shape", Node_Shape, "Draw simple shapes using signed distance field.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Shape).setTags(global.node_shape_keys); + addNodeObject(generator, "Draw Shape Polygon", Node_Shape_Polygon, "Draw polygonal shapes.") + .setIO(VALUE_TYPE.surface).setVersion(1130); + addNodeObject(generator, "Draw Random Shape", Node_Random_Shape, "Generate random shape, use for testing purposes.") + .setIO(VALUE_TYPE.surface).setVersion(1147); + addNodeObject(generator, "Draw Bar / Graph", Node_Plot_Linear, "Plot graph or bar chart from array of number.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Plot_Linear).setTags(global.node_plot_linear_keys).setVersion(1144); + addNodeObject(generator, "Draw Path Profile", Node_Path_Profile, "Fill-in an area on one side of a path.") + .setIO(VALUE_TYPE.surface).setVersion(11660); + addNodeObject(generator, "Draw Cross Section", Node_Cross_Section, "Map the brightness of pixels on a linear axis into a surface.") + .setIO(VALUE_TYPE.surface).setVersion(11710); + addNodeObject(generator, "Interpret Number", Node_Interpret_Number, "Convert array of number into surface.") + .setIO(VALUE_TYPE.surface).setVersion(11530); + addNodeObject(generator, "Pixel Builder", Node_Pixel_Builder, "Will break, do not create. please. Why is it here??") + .setIO(VALUE_TYPE.surface).setVersion(11540); + addNodeObject(generator, "Tile Drawer", Node_Tile_Drawer, "Draw using tileset.") + .setIO(VALUE_TYPE.surface).setVersion(1_18_03_0); ds_list_add(generator, "Noises"); ds_list_add(generator, "/Basics"); - addNodeObject(generator, "Noise", Node_Noise, "Generate white noise."); - addNodeObject(generator, "Perlin Noise", Node_Perlin, "Generate perlin noise."); - addNodeObject(generator, "Simplex Noise", Node_Noise_Simplex, "Generate simplex noise, similiar to perlin noise with better fidelity but non-tilable.").setTags(["perlin"]).setVersion(1080); - addNodeObject(generator, "Cellular Noise", Node_Cellular, "Generate voronoi pattern.").setTags(["voronoi", "worley"]); - addNodeObject(generator, "Anisotropic Noise", Node_Noise_Aniso, "Generate anisotropic noise."); + addNodeObject(generator, "Noise", Node_Noise, "Generate white noise.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Perlin Noise", Node_Perlin, "Generate perlin noise.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Simplex Noise", Node_Noise_Simplex, "Generate simplex noise, similiar to perlin noise with better fidelity but non-tilable.") + .setIO(VALUE_TYPE.surface).setTags(["perlin"]).setVersion(1080); + addNodeObject(generator, "Cellular Noise", Node_Cellular, "Generate voronoi pattern.") + .setIO(VALUE_TYPE.surface).setTags(["voronoi", "worley"]); + addNodeObject(generator, "Anisotropic Noise", Node_Noise_Aniso, "Generate anisotropic noise.") + .setIO(VALUE_TYPE.surface); // addNodeObject(generator, "Blue Noise", Node_Noise_Blue, "Generate blue noise texture").setVersion(1_18_06_2); - addNodeObject(generator, "Extra Perlins", Node_Perlin_Extra, "Random perlin noise made with different algorithms.").setTags(["noise"]).patreonExtra(); - addNodeObject(generator, "Extra Voronoi", Node_Voronoi_Extra, "Random voronoi noise made with different algorithms.").setTags(["noise"]).patreonExtra(); + addNodeObject(generator, "Extra Perlins", Node_Perlin_Extra, "Random perlin noise made with different algorithms.") + .setIO(VALUE_TYPE.surface).setTags(["noise"]).patreonExtra(); + addNodeObject(generator, "Extra Voronoi", Node_Voronoi_Extra, "Random voronoi noise made with different algorithms.") + .setIO(VALUE_TYPE.surface).setTags(["noise"]).patreonExtra(); ds_list_add(generator, "/Artistics"); - addNodeObject(generator, "Fold Noise", Node_Fold_Noise, "Generate cloth fold noise").setVersion(11650); - addNodeObject(generator, "Strand Noise", Node_Noise_Strand, "Generate random srtands noise.").setVersion(11650); - addNodeObject(generator, "Gabor Noise", Node_Gabor_Noise, "Generate Gabor noise").patreonExtra(); - addNodeObject(generator, "Shard Noise", Node_Shard_Noise, "Generate glass shard-looking noise").patreonExtra(); - addNodeObject(generator, "Wavelet Noise", Node_Wavelet_Noise, "Generate wavelet noise").patreonExtra(); - addNodeObject(generator, "Caustic", Node_Caustic, "Generate caustic noise").patreonExtra(); - addNodeObject(generator, "Bubble Noise", Node_Noise_Bubble, "Generate bubble noise").patreonExtra(); - addNodeObject(generator, "Flow Noise", Node_Flow_Noise, "Generate fluid flow noise").patreonExtra(); - addNodeObject(generator, "Cristal Noise", Node_Noise_Cristal, "Generate Cristal noise").patreonExtra(); - addNodeObject(generator, "Honeycomb Noise", Node_Honeycomb_Noise, "Generate honeycomb noise").patreonExtra(); + addNodeObject(generator, "Fold Noise", Node_Fold_Noise, "Generate cloth fold noise") + .setIO(VALUE_TYPE.surface).setVersion(11650); + addNodeObject(generator, "Strand Noise", Node_Noise_Strand, "Generate random srtands noise.") + .setIO(VALUE_TYPE.surface).setVersion(11650); + addNodeObject(generator, "Gabor Noise", Node_Gabor_Noise, "Generate Gabor noise") + .setIO(VALUE_TYPE.surface).patreonExtra(); + addNodeObject(generator, "Shard Noise", Node_Shard_Noise, "Generate glass shard-looking noise") + .setIO(VALUE_TYPE.surface).patreonExtra(); + addNodeObject(generator, "Wavelet Noise", Node_Wavelet_Noise, "Generate wavelet noise") + .setIO(VALUE_TYPE.surface).patreonExtra(); + addNodeObject(generator, "Caustic", Node_Caustic, "Generate caustic noise") + .setIO(VALUE_TYPE.surface).patreonExtra(); + addNodeObject(generator, "Bubble Noise", Node_Noise_Bubble, "Generate bubble noise") + .setIO(VALUE_TYPE.surface).patreonExtra(); + addNodeObject(generator, "Flow Noise", Node_Flow_Noise, "Generate fluid flow noise") + .setIO(VALUE_TYPE.surface).patreonExtra(); + addNodeObject(generator, "Cristal Noise", Node_Noise_Cristal, "Generate Cristal noise") + .setIO(VALUE_TYPE.surface).patreonExtra(); + addNodeObject(generator, "Honeycomb Noise", Node_Honeycomb_Noise, "Generate honeycomb noise") + .setIO(VALUE_TYPE.surface).patreonExtra(); ds_list_add(generator, "Patterns"); ds_list_add(generator, "/Basics"); - addNodeObject(generator, "Stripe", Node_Stripe, "Generate stripe pattern."); - addNodeObject(generator, "Zigzag", Node_Zigzag, "Generate zigzag pattern."); - addNodeObject(generator, "Checker", Node_Checker, "Generate checkerboard pattern."); + addNodeObject(generator, "Stripe", Node_Stripe, "Generate stripe pattern.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Zigzag", Node_Zigzag, "Generate zigzag pattern.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Checker", Node_Checker, "Generate checkerboard pattern.") + .setIO(VALUE_TYPE.surface); ds_list_add(generator, "/Grids"); - addNodeObject(generator, "Grid", Node_Grid, "Generate grid pattern.").setTags(["tile", "mosaic"]); - addNodeObject(generator, "Triangular Grid", Node_Grid_Tri, "Generate triangular grid pattern."); - addNodeObject(generator, "Hexagonal Grid", Node_Grid_Hex, "Generate hexagonal grid pattern."); - addNodeObject(generator, "Pentagonal Grid", Node_Grid_Pentagonal, "Generate Pentagonal grid pattern.").patreonExtra(); + addNodeObject(generator, "Grid", Node_Grid, "Generate grid pattern.") + .setIO(VALUE_TYPE.surface).setTags(["tile", "mosaic"]); + addNodeObject(generator, "Triangular Grid", Node_Grid_Tri, "Generate triangular grid pattern.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Hexagonal Grid", Node_Grid_Hex, "Generate hexagonal grid pattern.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Pentagonal Grid", Node_Grid_Pentagonal, "Generate Pentagonal grid pattern.") + .setIO(VALUE_TYPE.surface).patreonExtra(); ds_list_add(generator, "/Tiles"); - addNodeObject(generator, "Pytagorean Tile", Node_Pytagorean_Tile, "Generate Pytagorean tile pattern.").patreonExtra(); - addNodeObject(generator, "Herringbone Tile", Node_Herringbone_Tile, "Generate Herringbone tile pattern.").patreonExtra(); - addNodeObject(generator, "Random Tile", Node_Random_Tile, "Generate Random tile pattern.").patreonExtra(); + addNodeObject(generator, "Pytagorean Tile", Node_Pytagorean_Tile, "Generate Pytagorean tile pattern.") + .setIO(VALUE_TYPE.surface).patreonExtra(); + addNodeObject(generator, "Herringbone Tile", Node_Herringbone_Tile, "Generate Herringbone tile pattern.") + .setIO(VALUE_TYPE.surface).patreonExtra(); + addNodeObject(generator, "Random Tile", Node_Random_Tile, "Generate Random tile pattern.") + .setIO(VALUE_TYPE.surface).patreonExtra(); ds_list_add(generator, "/Others"); - addNodeObject(generator, "Box Pattern", Node_Box_Pattern, "Generate square-based patterns..").setVersion(11750); - addNodeObject(generator, "Quasicrystal", Node_Quasicrystal, "Generate Quasicrystal pattern.").setVersion(11660); - addNodeObject(generator, "Pixel Sampler", Node_Pixel_Sampler, "Map image on to each individual pixels of another image.").setVersion(11730); - addNodeObject(generator, "Julia", Node_Julia_Set, "Generate Julia fractal.").setVersion(1_18_05_6); + addNodeObject(generator, "Box Pattern", Node_Box_Pattern, "Generate square-based patterns.") + .setIO(VALUE_TYPE.surface).setVersion(11750); + addNodeObject(generator, "Quasicrystal", Node_Quasicrystal, "Generate Quasicrystal pattern.") + .setIO(VALUE_TYPE.surface).setVersion(11660); + addNodeObject(generator, "Pixel Sampler", Node_Pixel_Sampler, "Map image on to each individual pixels of another image.") + .setIO(VALUE_TYPE.surface).setVersion(11730); + addNodeObject(generator, "Julia", Node_Julia_Set, "Generate Julia fractal.") + .setIO(VALUE_TYPE.surface).setVersion(1_18_05_6); ds_list_add(generator, "Populate"); - addNodeObject(generator, "Repeat", Node_Repeat, "Repeat image multiple times linearly, or in grid pattern.").setBuild(Node_create_Repeat).setTags(global.node_repeat_keys).setVersion(1100); - addNodeObject(generator, "Scatter", Node_Scatter, "Scatter image randomly multiple times."); - addNodeObject(generator, "Repeat Texture", Node_Repeat_Texture, "Repeat texture over larger surface without repeating patterns."); + addNodeObject(generator, "Repeat", Node_Repeat, "Repeat image multiple times linearly, or in grid pattern.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Repeat).setTags(global.node_repeat_keys).setVersion(1100); + addNodeObject(generator, "Scatter", Node_Scatter, "Scatter image randomly multiple times.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Repeat Texture", Node_Repeat_Texture, "Repeat texture over larger surface without repeating patterns.") + .setIO(VALUE_TYPE.surface); ds_list_add(generator, "Simulation"); - addNodeObject(generator, "Particle", Node_Particle, "Generate particle effect."); - addNodeObject(generator, "VFX", Node_VFX_Group_Inline, "Create VFX group, which generate particles that can be manipulated using different force nodes.").setSpr(s_node_vfx); - addNodeObject(generator, "RigidSim", Node_Rigid_Group_Inline, "Create group for rigidbody simulation.").setSpr(s_node_rigid).setVersion(1110); - addNodeObject(generator, "FLIP Fluid", Node_FLIP_Group_Inline, "Create group for fluid simulation.").setSpr(s_node_flip_group).setVersion(11620); - addNodeObject(generator, "SmokeSim", Node_Smoke_Group_Inline, "Create group for smoke simulation.").setSpr(s_node_smoke_group).setVersion(1120); - addNodeObject(generator, "StrandSim", Node_Strand_Group_Inline, "Create group for hair simulation.").setSpr(s_node_strand).setTags(["hair"]).setVersion(1140); - addNodeObject(generator, "Diffuse", Node_Diffuse, "Simulate diffusion like simulation.").setVersion(11640); - addNodeObject(generator, "Reaction Diffusion", Node_RD, "Simulate reaction diffusion effect.").setSpr(s_node_reaction_diffusion).setVersion(11630); + addNodeObject(generator, "Particle", Node_Particle, "Generate particle effect.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "VFX", Node_VFX_Group_Inline, "Create VFX group, which generate particles that can be manipulated using different force nodes.") + .setIO(VALUE_TYPE.surface).setSpr(s_node_vfx); + addNodeObject(generator, "RigidSim", Node_Rigid_Group_Inline, "Create group for rigidbody simulation.") + .setIO(VALUE_TYPE.surface).setSpr(s_node_rigid).setVersion(1110); + addNodeObject(generator, "FLIP Fluid", Node_FLIP_Group_Inline, "Create group for fluid simulation.") + .setIO(VALUE_TYPE.surface).setSpr(s_node_flip_group).setVersion(11620); + addNodeObject(generator, "SmokeSim", Node_Smoke_Group_Inline, "Create group for smoke simulation.") + .setIO(VALUE_TYPE.surface).setSpr(s_node_smoke_group).setVersion(1120); + addNodeObject(generator, "StrandSim", Node_Strand_Group_Inline, "Create group for hair simulation.") + .setIO(VALUE_TYPE.surface).setSpr(s_node_strand).setTags(["hair"]).setVersion(1140); + addNodeObject(generator, "Diffuse", Node_Diffuse, "Simulate diffusion like simulation.") + .setIO(VALUE_TYPE.surface).setVersion(11640); + addNodeObject(generator, "Reaction Diffusion", Node_RD, "Simulate reaction diffusion effect.") + .setIO(VALUE_TYPE.surface).setSpr(s_node_reaction_diffusion).setVersion(11630); ds_list_add(generator, "Region"); - addNodeObject(generator, "Separate Shape", Node_Seperate_Shape, "Separate disconnected pixel each into an image in an image array."); - addNodeObject(generator, "Region Fill", Node_Region_Fill, "Fill connected pixel with colors.").setVersion(1147); - addNodeObject(generator, "Flood Fill", Node_Flood_Fill, "Filled connected pixel given position and color.").setVersion(1133); + addNodeObject(generator, "Separate Shape", Node_Seperate_Shape, "Separate disconnected pixel each into an image in an image array.") + .setIO(VALUE_TYPE.surface); + addNodeObject(generator, "Region Fill", Node_Region_Fill, "Fill connected pixel with colors.") + .setIO(VALUE_TYPE.surface).setVersion(1147); + addNodeObject(generator, "Flood Fill", Node_Flood_Fill, "Filled connected pixel given position and color.") + .setIO(VALUE_TYPE.surface).setVersion(1133); ds_list_add(generator, "MK Effects"); - addNodeObject(generator, "MK Rain", Node_MK_Rain, "Generate deterministic rain.").setVersion(11600); - addNodeObject(generator, "MK GridBalls", Node_MK_GridBalls, "Generate controllable grid of spheres.").setVersion(11600); - addNodeObject(generator, "MK GridFlip", Node_MK_GridFlip, "Generate controllable grid of planes.").setVersion(11600); - addNodeObject(generator, "MK Saber", Node_MK_Saber, "Generate glowing saber from 2 points.").setVersion(11600); - addNodeObject(generator, "MK Tile", Node_MK_Tile, "Generate game engines-ready tileset.").setVersion(11600); - addNodeObject(generator, "MK Flag", Node_MK_Flag, "Generate waving flag.").setVersion(11600); - addNodeObject(generator, "MK Brownian", Node_MK_Brownian, "Generate random particle.").setVersion(11630); - addNodeObject(generator, "MK Fall", Node_MK_Fall, "Generate leaves falling effects.").setTags(["Leaf", "Leaves"]).setVersion(11630); - addNodeObject(generator, "MK Blinker", Node_MK_Blinker, "Flicker regions of the selected colors randomly.").setVersion(11630); - addNodeObject(generator, "MK Lens Flare", Node_MK_Flare, "Generate lens flare.").setVersion(11630); - addNodeObject(generator, "MK Delay Machine", Node_MK_Delay_Machine, "Combines multiple frames of animation into one.").setVersion(11680); - addNodeObject(generator, "MK Fracture", Node_MK_Fracture, "Deterministically fracture and image and apply basic physics.").patreonExtra(); - addNodeObject(generator, "MK Sparkle", Node_MK_Sparkle, "Generate random star animation.").patreonExtra(); - addNodeObject(generator, "MK Subpixel", Node_MK_Subpixel, "Apply subpixel filter on top of a surface.").setVersion(1_17_11_0); - #endregion + addNodeObject(generator, "MK Rain", Node_MK_Rain, "Generate deterministic rain.") + .setIO(VALUE_TYPE.surface).setVersion(11600); + addNodeObject(generator, "MK GridBalls", Node_MK_GridBalls, "Generate controllable grid of spheres.") + .setIO(VALUE_TYPE.surface).setVersion(11600); + addNodeObject(generator, "MK GridFlip", Node_MK_GridFlip, "Generate controllable grid of planes.") + .setIO(VALUE_TYPE.surface).setVersion(11600); + addNodeObject(generator, "MK Saber", Node_MK_Saber, "Generate glowing saber from 2 points.") + .setIO(VALUE_TYPE.surface).setVersion(11600); + addNodeObject(generator, "MK Tile", Node_MK_Tile, "Generate game engines-ready tileset.") + .setIO(VALUE_TYPE.surface).setVersion(11600); + addNodeObject(generator, "MK Flag", Node_MK_Flag, "Generate waving flag.") + .setIO(VALUE_TYPE.surface).setVersion(11600); + addNodeObject(generator, "MK Brownian", Node_MK_Brownian, "Generate random particle.") + .setIO(VALUE_TYPE.surface).setVersion(11630); + addNodeObject(generator, "MK Fall", Node_MK_Fall, "Generate leaves falling effects.") + .setIO(VALUE_TYPE.surface).setTags(["Leaf", "Leaves"]).setVersion(11630); + addNodeObject(generator, "MK Blinker", Node_MK_Blinker, "Flicker regions of the selected colors randomly.") + .setIO(VALUE_TYPE.surface).setVersion(11630); + addNodeObject(generator, "MK Lens Flare", Node_MK_Flare, "Generate lens flare.") + .setIO(VALUE_TYPE.surface).setVersion(11630); + addNodeObject(generator, "MK Delay Machine", Node_MK_Delay_Machine, "Combines multiple frames of animation into one.") + .setIO(VALUE_TYPE.surface).setVersion(11680); + addNodeObject(generator, "MK Fracture", Node_MK_Fracture, "Deterministically fracture and image and apply basic physics.") + .setIO(VALUE_TYPE.surface).patreonExtra(); + addNodeObject(generator, "MK Sparkle", Node_MK_Sparkle, "Generate random star animation.") + .setIO(VALUE_TYPE.surface).patreonExtra(); + addNodeObject(generator, "MK Subpixel", Node_MK_Subpixel, "Apply subpixel filter on top of a surface.") + .setIO(VALUE_TYPE.surface).setVersion(1_17_11_0); +#endregion - #region compose +#region compose var compose = ds_list_create(); addNodeCatagory("Compose", compose); ds_list_add(compose, "Composes"); - addNodeObject(compose, "Blend", Node_Blend, "Combine 2 images using different blend modes."); - addNodeObject(compose, "Composite", Node_Composite, "Combine multiple images with custom transformation."); - addNodeObject(compose, "Stack", Node_Stack, "Place image next to each other linearly, or on top of each other.").setVersion(1070); - addNodeObject(compose, "Image Grid", Node_Image_Grid, "Place image next to each other in grid pattern.").setVersion(11640); - addNodeObject(compose, "Camera", Node_Camera, "Create camera that crop image to fix dimension with control of position, zoom. Also can be use to create parallax effect."); - addNodeObject(compose, "Render Spritesheet", Node_Render_Sprite_Sheet, "Create spritesheet from image array or animation."); - addNodeObject(compose, "Pack Sprites", Node_Pack_Sprites, "Combine array of images with different dimension using different algorithms.").setVersion(1140); + addNodeObject(compose, "Blend", Node_Blend, "Combine 2 images using different blend modes.") + .setIO(VALUE_TYPE.surface); + addNodeObject(compose, "Composite", Node_Composite, "Combine multiple images with custom transformation.") + .setIO(VALUE_TYPE.surface); + addNodeObject(compose, "Stack", Node_Stack, "Place image next to each other linearly, or on top of each other.") + .setIO(VALUE_TYPE.surface).setVersion(1070); + addNodeObject(compose, "Image Grid", Node_Image_Grid, "Place image next to each other in grid pattern.") + .setIO(VALUE_TYPE.surface).setVersion(11640); + addNodeObject(compose, "Camera", Node_Camera, "Create camera that crop image to fix dimension with control of position, zoom. Also can be use to create parallax effect.") + .setIO(VALUE_TYPE.surface); + addNodeObject(compose, "Render Spritesheet", Node_Render_Sprite_Sheet, "Create spritesheet from image array or animation.") + .setIO(VALUE_TYPE.surface); + addNodeObject(compose, "Pack Sprites", Node_Pack_Sprites, "Combine array of images with different dimension using different algorithms.") + .setIO(VALUE_TYPE.surface).setVersion(1140); ds_list_add(compose, "Armature"); ds_list_add(compose, "/Basics"); - addNodeObject(compose, "Armature Create", Node_Armature, "Create new armature system." ).setTags(["rigging", "bone"]).setVersion(1146); - addNodeObject(compose, "Armature Pose", Node_Armature_Pose, "Pose armature system." ).setTags(["rigging", "bone"]).setVersion(1146); - addNodeObject(compose, "Armature Bind", Node_Armature_Bind, "Bind and render image to an armature system." ).setTags(["rigging", "bone"]).setVersion(1146); - addNodeObject(compose, "Armature Mesh Rig", Node_Armature_Mesh_Rig, "Rig mesh to armature system." ).setTags(["rigging", "bone"]).setVersion(1_18_04_0); + addNodeObject(compose, "Armature Create", Node_Armature, "Create new armature system.") + .setIO(VALUE_TYPE.surface).setTags(["rigging", "bone"]).setVersion(1146); + addNodeObject(compose, "Armature Pose", Node_Armature_Pose, "Pose armature system.") + .setIO(VALUE_TYPE.surface).setTags(["rigging", "bone"]).setVersion(1146); + addNodeObject(compose, "Armature Bind", Node_Armature_Bind, "Bind and render image to an armature system.") + .setIO(VALUE_TYPE.surface).setTags(["rigging", "bone"]).setVersion(1146); + addNodeObject(compose, "Armature Mesh Rig", Node_Armature_Mesh_Rig, "Rig mesh to armature system.") + .setIO(VALUE_TYPE.surface).setTags(["rigging", "bone"]).setVersion(1_18_04_0); ds_list_add(compose, "/Convertors"); - addNodeObject(compose, "Armature Path", Node_Armature_Path, "Generate path from armature system." ).setTags(["rigging", "bone"]).setVersion(1146); - addNodeObject(compose, "Armature Sample", Node_Armature_Sample, "Sample point from armature system." ).setTags(["rigging", "bone"]).setVersion(1147); + addNodeObject(compose, "Armature Path", Node_Armature_Path, "Generate path from armature system.") + .setIO(VALUE_TYPE.surface).setTags(["rigging", "bone"]).setVersion(1146); + addNodeObject(compose, "Armature Sample", Node_Armature_Sample, "Sample point from armature system.") + .setIO(VALUE_TYPE.surface).setTags(["rigging", "bone"]).setVersion(1147); if(!DEMO) { ds_list_add(compose, "Export"); - addNodeObject(compose, "Export", Node_Export, "Export image/animation to file(s).").setBuild(Node_create_Export); + addNodeObject(compose, "Export", Node_Export, "Export image/animation to file(s).") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Export); } - #endregion +#endregion - #region values +#region values var values = ds_list_create(); addNodeCatagory("Values", values); ds_list_add(values, "Raw data"); - addNodeObject(values, "Number", Node_Number, "Generate number data."); - addNodeObject(values, "Boolean", Node_Boolean, "Generate boolean (true, false) data.").setVersion(1090); - addNodeObject(values, "Text", Node_String, "Generate text/string data."); - addNodeObject(values, "Path", Node_Path, "Generate path."); - addNodeObject(values, "Area", Node_Area, "Generate area data."); + addNodeObject(values, "Number", Node_Number, "Generate number data.") + .setIO(VALUE_TYPE.float); + addNodeObject(values, "Boolean", Node_Boolean, "Generate boolean (true, false) data.") + .setIO(VALUE_TYPE.boolean).setVersion(1090); + addNodeObject(values, "Text", Node_String, "Generate text/string data.") + .setIO(VALUE_TYPE.text); + addNodeObject(values, "Path", Node_Path, "Generate path.") + .setIO(VALUE_TYPE.float); + addNodeObject(values, "Area", Node_Area, "Generate area data.") + .setIO(VALUE_TYPE.float); ds_list_add(values, "Numbers"); ds_list_add(values, "/Creators"); - addNodeObject(values, "Number", Node_Number, "Generate number data."); - addNodeObject(values, "To Number", Node_To_Number, "Convert string to number, supports scientific format (e.g. 1e-2 = 0.02).").setVersion(1145); - addNodeObject(values, "Random", Node_Random, "Generate pseudorandom value based on seed."); - addNodeObject(values, "Scatter Points", Node_Scatter_Points, "Generate array of vector 2 points.").setVersion(1120); - addNodeObject(values, "Transform Array", Node_Transform_Array, "Generate transfomation array.").setVersion(1146); + addNodeObject(values, "Number", Node_Number, "Generate number data.") + .setIO(VALUE_TYPE.float); + addNodeObject(values, "To Number", Node_To_Number, "Convert string to number, supports scientific format (e.g. 1e-2 = 0.02).") + .setIO(VALUE_TYPE.float).setVersion(1145); + addNodeObject(values, "Random", Node_Random, "Generate pseudo-random value based on seed.") + .setIO(VALUE_TYPE.float); + addNodeObject(values, "Scatter Points", Node_Scatter_Points, "Generate array of vector 2 points.") + .setIO(VALUE_TYPE.float).setVersion(1120); + addNodeObject(values, "Transform Array", Node_Transform_Array, "Generate transfomation array.") + .setIO(VALUE_TYPE.float).setVersion(1146); ds_list_add(values, "/Operators"); - addNodeObject(values, "Math", Node_Math, "Apply mathematical function to number(s).").setBuild(Node_create_Math).setTags(global.node_math_keys); - addNodeObject(values, "Equation", Node_Equation, "Evaluate string of equation. With an option for setting variables.").setBuild(Node_create_Equation); - addNodeObject(values, "Statistic", Node_Statistic, "Apply statistical operation (sum, average, median, etc.) to array of numbers.").setBuild(Node_create_Statistic).setTags(global.node_statistic_keys); - addNodeObject(values, "Convert Base", Node_Base_Convert, "Convert number from one base to another.").setTags(["binary", "hexadecimal"]).setVersion(1140); - addNodeObject(values, "FFT", Node_FFT, "Perform fourier transform on number array.").setTags(["frequency analysis"]).setVersion(1144); + addNodeObject(values, "Math", Node_Math, "Apply mathematical function to number(s).") + .setIO(VALUE_TYPE.float).setBuild(Node_create_Math).setTags(global.node_math_keys); + addNodeObject(values, "Equation", Node_Equation, "Evaluate string of equation. With an option for setting variables.") + .setIO(VALUE_TYPE.float).setBuild(Node_create_Equation); + addNodeObject(values, "Statistic", Node_Statistic, "Apply statistical operation (sum, average, median, etc.) to array of numbers.") + .setIO(VALUE_TYPE.float).setBuild(Node_create_Statistic).setTags(global.node_statistic_keys); + addNodeObject(values, "Convert Base", Node_Base_Convert, "Convert number from one base to another.") + .setIO(VALUE_TYPE.float).setTags(["binary", "hexadecimal"]).setVersion(1140); + addNodeObject(values, "FFT", Node_FFT, "Perform fourier transform on number array.") + .setIO(VALUE_TYPE.float).setTags(["frequency analysis"]).setVersion(1144); ds_list_add(values, "Vector"); ds_list_add(values, "/Creators"); - addNodeObject(values, "Vector2", Node_Vector2, "Genearte vector composite of 2 members."); - addNodeObject(values, "Vector3", Node_Vector3, "Genearte vector composite of 3 members."); - addNodeObject(values, "Vector4", Node_Vector4, "Genearte vector composite of 4 members."); + addNodeObject(values, "Vector2", Node_Vector2, "Genearte vector composite of 2 members.") + .setIO(VALUE_TYPE.float); + addNodeObject(values, "Vector3", Node_Vector3, "Genearte vector composite of 3 members.") + .setIO(VALUE_TYPE.float); + addNodeObject(values, "Vector4", Node_Vector4, "Genearte vector composite of 4 members.") + .setIO(VALUE_TYPE.float); ds_list_add(values, "/Components"); - addNodeObject(values, "Vector Split", Node_Vector_Split, "Split vector (up to 4) into individual components."); - addNodeObject(values, "Swizzle", Node_Vector_Swizzle, "Rearrange vector using string containing axis indicies (x, y, z, w).").setTags(["swap axis"]).setVersion(1_17_10_0); + addNodeObject(values, "Vector Split", Node_Vector_Split, "Split vector (up to 4) into individual components.") + .setIO(VALUE_TYPE.float); + addNodeObject(values, "Swizzle", Node_Vector_Swizzle, "Rearrange vector using string containing axis indicies (x, y, z, w).") + .setIO(VALUE_TYPE.float).setTags(["swap axis"]).setVersion(1_17_10_0); ds_list_add(values, "/Operators"); - addNodeObject(values, "Magnitude", Node_Vector_Magnitude, "Calculate magnitude (length) of a vector.").setTags(["vector length", "vector magnitude"]).setVersion(1_17_10_0); - addNodeObject(values, "Dot product", Node_Vector_Dot, "Calculate dot product between vectors.").setVersion(1141); - addNodeObject(values, "Cross product 2D", Node_Vector_Cross_2D, "Calculate cross product of 2 vec2s.").setVersion(1141); - addNodeObject(values, "Cross product 3D", Node_Vector_Cross_3D, "Calculate cross product of 2 vec3s.").setVersion(1141); + addNodeObject(values, "Magnitude", Node_Vector_Magnitude, "Calculate magnitude (length) of a vector.") + .setIO(VALUE_TYPE.float).setTags(["vector length", "vector magnitude"]).setVersion(1_17_10_0); + addNodeObject(values, "Dot product", Node_Vector_Dot, "Calculate dot product between vectors.") + .setIO(VALUE_TYPE.float).setVersion(1141); + addNodeObject(values, "Cross product 2D", Node_Vector_Cross_2D, "Calculate cross product of 2 vec2s.") + .setIO(VALUE_TYPE.float).setVersion(1141); + addNodeObject(values, "Cross product 3D", Node_Vector_Cross_3D, "Calculate cross product of 2 vec3s.") + .setIO(VALUE_TYPE.float).setVersion(1141); ds_list_add(values, "/Points"); - addNodeObject(values, "Translate Point", Node_Move_Point, "Translate array of points.").setVersion(1141); - addNodeObject(values, "Point in Area", Node_Point_In_Area, "Check whether a point lies in an area.").setVersion(1_17_10_0); + addNodeObject(values, "Translate Point", Node_Move_Point, "Translate array of points.") + .setIO(VALUE_TYPE.float).setVersion(1141); + addNodeObject(values, "Point in Area", Node_Point_In_Area, "Check whether a point lies in an area.") + .setIO(VALUE_TYPE.float).setVersion(1_17_10_0); ds_list_add(values, "Texts"); ds_list_add(values, "/Creators"); - addNodeObject(values, "Text", Node_String, "Generate text/string data."); - addNodeObject(values, "To Text", Node_To_Text, "Convert string to number.").setVersion(1145); - addNodeObject(values, "Unicode", Node_Unicode, "Convert unicode id into string."); + addNodeObject(values, "Text", Node_String, "Generate text/string data.") + .setIO(VALUE_TYPE.text); + addNodeObject(values, "To Text", Node_To_Text, "Convert string to number.") + .setIO(VALUE_TYPE.text).setVersion(1145); + addNodeObject(values, "Unicode", Node_Unicode, "Convert unicode id into string.") + .setIO(VALUE_TYPE.text); ds_list_add(values, "/Info"); - addNodeObject(values, "Text Length", Node_String_Length, "Return number of character in a string.").setVersion(1138); - addNodeObject(values, "Get Character", Node_String_Get_Char, "Get a nth character in a string.").setVersion(1100); + addNodeObject(values, "Text Length", Node_String_Length, "Return number of character in a string.") + .setIO(VALUE_TYPE.text, VALUE_TYPE.float).setVersion(1138); + addNodeObject(values, "Get Character", Node_String_Get_Char, "Get a nth character in a string.") + .setIO(VALUE_TYPE.text).setVersion(1100); ds_list_add(values, "/Operators"); - addNodeObject(values, "Combine Texts", Node_String_Merge, "Combine multiple strings into one long string.").setTags(["join text", "concatenate text"]); - addNodeObject(values, "Join Text Array", Node_String_Join, "Combine string array with an option to add extra string in-between.").setVersion(1120); - addNodeObject(values, "Split Text", Node_String_Split, "Split string into arrays of substring based on delimiter."); - addNodeObject(values, "Trim Text", Node_String_Trim, "Remove first and last n character(s) from a string.").setVersion(1080); + addNodeObject(values, "Combine Texts", Node_String_Merge, "Combine multiple strings into one long string.") + .setIO(VALUE_TYPE.text).setTags(["join text", "concatenate text"]); + addNodeObject(values, "Join Text Array", Node_String_Join, "Combine string array with an option to add extra string in-between.") + .setIO(VALUE_TYPE.text).setVersion(1120); + addNodeObject(values, "Split Text", Node_String_Split, "Split string into arrays of substring based on delimiter.") + .setIO(VALUE_TYPE.text); + addNodeObject(values, "Trim Text", Node_String_Trim, "Remove first and last n character(s) from a string.") + .setIO(VALUE_TYPE.text).setVersion(1080); ds_list_add(values, "/RegEx"); - addNodeObject(values, "RegEx Match", Node_String_Regex_Match, "Check whether regular expression pattern exist in a string.").setVersion(1140); - addNodeObject(values, "RegEx Search", Node_String_Regex_Search, "Search for instances in a string using regular expression.").setVersion(1140); - addNodeObject(values, "RegEx Replace", Node_String_Regex_Replace, "Replace instances of a string with another using regular expression.").setVersion(1140); + addNodeObject(values, "RegEx Match", Node_String_Regex_Match, "Check whether regular expression pattern exist in a string.") + .setIO(VALUE_TYPE.text).setVersion(1140); + addNodeObject(values, "RegEx Search", Node_String_Regex_Search, "Search for instances in a string using regular expression.") + .setIO(VALUE_TYPE.text).setVersion(1140); + addNodeObject(values, "RegEx Replace", Node_String_Regex_Replace, "Replace instances of a string with another using regular expression.") + .setIO(VALUE_TYPE.text).setVersion(1140); ds_list_add(values, "/Filename"); - addNodeObject(values, "Separate File Path", Node_Path_Separate_Folder, "Separate path string into a pair of directory and filename.").setVersion(1145); + addNodeObject(values, "Separate File Path", Node_Path_Separate_Folder, "Separate path string into a pair of directory and filename.") + .setIO(VALUE_TYPE.text).setVersion(1145); ds_list_add(values, "Arrays"); ds_list_add(values, "/Creators"); - addNodeObject(values, "Array", Node_Array, "Create an array."); - addNodeObject(values, "Array Range", Node_Array_Range, "Create array of numbers by setting start, end and step length."); - addNodeObject(values, "Parse CSV", Node_Array_CSV_Parse, "Parse CSV string into array.").setVersion(1145); + addNodeObject(values, "Array", Node_Array, "Create an array.") + .setIO(VALUE_TYPE.any); + addNodeObject(values, "Array Range", Node_Array_Range, "Create array of numbers by setting start, end and step length.") + .setIO(VALUE_TYPE.float); + addNodeObject(values, "Parse CSV", Node_Array_CSV_Parse, "Parse CSV string into array.") + .setIO(VALUE_TYPE.text).setVersion(1145); ds_list_add(values, "/Info"); - addNodeObject(values, "Array Length", Node_Array_Length, "Returns number of members in an array."); - addNodeObject(values, "Array Get", Node_Array_Get, "Returns nth member in an array."); - addNodeObject(values, "Array Sample", Node_Array_Sample, "Sample member from an array to create smaller one.").setVersion(11540); - addNodeObject(values, "Array Find", Node_Array_Find, "Returns index of an array member that match a condition.").setVersion(1120); + addNodeObject(values, "Array Length", Node_Array_Length, "Returns number of members in an array.") + .setIO(VALUE_TYPE.any); + addNodeObject(values, "Array Get", Node_Array_Get, "Returns nth member in an array.") + .setIO(VALUE_TYPE.any); + addNodeObject(values, "Array Sample", Node_Array_Sample, "Sample member from an array to create smaller one.") + .setIO(VALUE_TYPE.any).setVersion(11540); + addNodeObject(values, "Array Find", Node_Array_Find, "Returns index of an array member that match a condition.") + .setIO(VALUE_TYPE.any).setVersion(1120); ds_list_add(values, "/Operators"); - addNodeObject(values, "Array Set", Node_Array_Set, "Set array member based on index.").setVersion(1120); - addNodeObject(values, "Array Add", Node_Array_Add, "Add elements into an array."); - addNodeObject(values, "Array Split", Node_Array_Split, "Split array members into individual outputs."); - addNodeObject(values, "Array Insert", Node_Array_Insert, "Insert member into an array at any position.").setVersion(1120); - addNodeObject(values, "Array Remove", Node_Array_Remove, "Remove member in an array.").setTags(["delete array"]).setVersion(1120); - addNodeObject(values, "Array Reverse", Node_Array_Reverse, "Reverse array order").setVersion(1120); - addNodeObject(values, "Array Shift", Node_Array_Shift, "Shift all member in an array.").setVersion(1137); - addNodeObject(values, "Array Rearrange", Node_Array_Rearrange, "Rearrange array member manually.").setVersion(11640); - addNodeObject(values, "Array Zip", Node_Array_Zip, "Combine multiple arrays into higher dimension array by grouping member of the same indicies.").setVersion(1138); - addNodeObject(values, "Array Copy", Node_Array_Copy, "Copy array or subarray.").setVersion(1144); - addNodeObject(values, "Array Convolute", Node_Array_Convolute, "Apply convolution between 2 number arrays.").setVersion(11540); - addNodeObject(values, "Array Composite", Node_Array_Composite, "Create 2D array by multiplying each member in the first 1D array with the second 1D array.").setVersion(11540); - addNodeObject(values, "Shuffle Array", Node_Array_Shuffle, "Randomly rearrange the array members.").setVersion(1120); + addNodeObject(values, "Array Set", Node_Array_Set, "Set array member based on index.") + .setIO(VALUE_TYPE.any).setVersion(1120); + addNodeObject(values, "Array Add", Node_Array_Add, "Add elements into an array.") + .setIO(VALUE_TYPE.any); + addNodeObject(values, "Array Split", Node_Array_Split, "Split array members into individual outputs.") + .setIO(VALUE_TYPE.any); + addNodeObject(values, "Array Insert", Node_Array_Insert, "Insert member into an array at any position.") + .setIO(VALUE_TYPE.any).setVersion(1120); + addNodeObject(values, "Array Remove", Node_Array_Remove, "Remove member in an array.") + .setIO(VALUE_TYPE.any).setTags(["delete array"]).setVersion(1120); + addNodeObject(values, "Array Reverse", Node_Array_Reverse, "Reverse array order") + .setIO(VALUE_TYPE.any).setVersion(1120); + addNodeObject(values, "Array Shift", Node_Array_Shift, "Shift all member in an array.") + .setIO(VALUE_TYPE.any).setVersion(1137); + addNodeObject(values, "Array Rearrange", Node_Array_Rearrange, "Rearrange array member manually.") + .setIO(VALUE_TYPE.any).setVersion(11640); + addNodeObject(values, "Array Zip", Node_Array_Zip, "Combine multiple arrays into higher dimension array by grouping member of the same indicies.") + .setIO(VALUE_TYPE.any).setVersion(1138); + addNodeObject(values, "Array Copy", Node_Array_Copy, "Copy array or subarray.") + .setIO(VALUE_TYPE.any).setVersion(1144); + addNodeObject(values, "Array Convolute", Node_Array_Convolute, "Apply convolution between 2 number arrays.") + .setIO(VALUE_TYPE.any).setVersion(11540); + addNodeObject(values, "Array Composite", Node_Array_Composite, "Create 2D array by multiplying each member in the first 1D array with the second 1D array.") + .setIO(VALUE_TYPE.any).setVersion(11540); + addNodeObject(values, "Shuffle Array", Node_Array_Shuffle, "Randomly rearrange the array members.") + .setIO(VALUE_TYPE.any).setVersion(1120); ds_list_add(values, "/Group Operators"); - addNodeObject(values, "Sort Array", Node_Array_Sort, "Sort array using default comparison.").setVersion(1120); - addNodeObject(values, "Loop Array", Node_Iterate_Each_Inline, "Create group that iterate to each member in an array.").setSpr(s_node_loop_array).setTags(["iterate each", "for each"]); - addNodeObject(values, "Filter Array", Node_Iterate_Filter_Inline, "Filter array using condition.").setSpr(s_node_filter_array).setVersion(1140); - addNodeObject(values, "Sort Array Inline", Node_Iterate_Sort_Inline, "Sort array using node graph.").setSpr(s_node_sort_array).setVersion(1143); + addNodeObject(values, "Sort Array", Node_Array_Sort, "Sort array using default comparison.") + .setIO(VALUE_TYPE.any).setVersion(1120); + addNodeObject(values, "Loop Array", Node_Iterate_Each_Inline, "Create group that iterate to each member in an array.") + .setIO(VALUE_TYPE.any).setSpr(s_node_loop_array).setTags(["iterate each", "for each"]); + addNodeObject(values, "Filter Array", Node_Iterate_Filter_Inline, "Filter array using condition.") + .setIO(VALUE_TYPE.any).setSpr(s_node_filter_array).setVersion(1140); + addNodeObject(values, "Sort Array Inline", Node_Iterate_Sort_Inline, "Sort array using node graph.") + .setIO(VALUE_TYPE.any).setSpr(s_node_sort_array).setVersion(1143); ds_list_add(values, "Paths"); ds_list_add(values, "/Creators"); - addNodeObject(values, "Path", Node_Path, "Create path using bezier curve."); - addNodeObject(values, "Smooth Path", Node_Path_Smooth, "Create path with automatic smoothness.").setVersion(11640); - addNodeObject(values, "Shape Path", Node_Path_Shape, "Create path with predefined shape.").setVersion(1_18_05_6); - addNodeObject(values, "Path Builder", Node_Path_Builder, "Create path from array of vec2 points.").setVersion(1137); - addNodeObject(values, "L system", Node_Path_L_System, "Generate path using Lindenmayer system.").setVersion(1137); - addNodeObject(values, "Path from Mask", Node_Path_From_Mask, "Create path that wrap around a mask.").setVersion(11640); - addNodeObject(values, "Plot Path", Node_Path_Plot, "Create path from parametric equations.").setVersion(1138); - addNodeObject(values, "3D Path", Node_Path_3D, "Create path in 3D space.").setVersion(11750); - addNodeObject(values, "Path Anchor", Node_Path_Anchor, "Create path anchor data.").setVersion(1140); + addNodeObject(values, "Path", Node_Path, "Create path using bezier curve.") + .setIO(VALUE_TYPE.pathnode, VALUE_TYPE.float); + addNodeObject(values, "Smooth Path", Node_Path_Smooth, "Create path with automatic smoothness.") + .setIO(VALUE_TYPE.pathnode).setVersion(11640); + addNodeObject(values, "Shape Path", Node_Path_Shape, "Create path with predefined shape.") + .setIO(VALUE_TYPE.pathnode).setVersion(1_18_05_6); + addNodeObject(values, "Path Builder", Node_Path_Builder, "Create path from array of vec2 points.") + .setIO(VALUE_TYPE.pathnode).setVersion(1137); + addNodeObject(values, "L system", Node_Path_L_System, "Generate path using Lindenmayer system.") + .setIO(VALUE_TYPE.pathnode).setVersion(1137); + addNodeObject(values, "Path from Mask", Node_Path_From_Mask, "Create path that wrap around a mask.") + .setIO(VALUE_TYPE.pathnode, VALUE_TYPE.surface).setVersion(11640); + addNodeObject(values, "Plot Path", Node_Path_Plot, "Create path from parametric equations.") + .setIO(VALUE_TYPE.pathnode).setVersion(1138); + addNodeObject(values, "3D Path", Node_Path_3D, "Create path in 3D space.") + .setIO(VALUE_TYPE.pathnode).setVersion(11750); + addNodeObject(values, "Path Anchor", Node_Path_Anchor, "Create path anchor data.") + .setIO(VALUE_TYPE.pathnode, VALUE_TYPE.float).setVersion(1140); ds_list_add(values, "/Modifiers"); - addNodeObject(values, "Transform Path", Node_Path_Transform, "Move rotate and scale a path.").setVersion(1130); - addNodeObject(values, "Remap Path", Node_Path_Map_Area, "Scale path to fit a given area.").setVersion(1130); - addNodeObject(values, "Shift Path", Node_Path_Shift, "Move path along its normal.").setVersion(1130); - addNodeObject(values, "Trim Path", Node_Path_Trim, "Trim path.").setVersion(1130); - addNodeObject(values, "Wave Path", Node_Path_Wave, "Apply wave effect along the path.").setTags(["zigzag path"]).setVersion(1130); - addNodeObject(values, "Path Combine", Node_Path_Array, "Combine multiple path into one.").setTags(["array path"]).setVersion(1137); - addNodeObject(values, "Reverse Path", Node_Path_Reverse, "Reverse path direction.").setVersion(1130); + addNodeObject(values, "Transform Path", Node_Path_Transform, "Move rotate and scale a path.") + .setIO(VALUE_TYPE.pathnode).setVersion(1130); + addNodeObject(values, "Remap Path", Node_Path_Map_Area, "Scale path to fit a given area.") + .setIO(VALUE_TYPE.pathnode).setVersion(1130); + addNodeObject(values, "Shift Path", Node_Path_Shift, "Move path along its normal.") + .setIO(VALUE_TYPE.pathnode).setVersion(1130); + addNodeObject(values, "Trim Path", Node_Path_Trim, "Trim path.") + .setIO(VALUE_TYPE.pathnode).setVersion(1130); + addNodeObject(values, "Wave Path", Node_Path_Wave, "Apply wave effect along the path.") + .setIO(VALUE_TYPE.pathnode).setTags(["zigzag path"]).setVersion(1130); + addNodeObject(values, "Path Combine", Node_Path_Array, "Combine multiple path into one.") + .setIO(VALUE_TYPE.pathnode).setTags(["array path"]).setVersion(1137); + addNodeObject(values, "Reverse Path", Node_Path_Reverse, "Reverse path direction.") + .setIO(VALUE_TYPE.pathnode).setVersion(1130); ds_list_add(values, "/Combine"); - addNodeObject(values, "Repeat Path", Node_Path_Repeat, "Repeat paths.").setVersion(1_18_05_6); - addNodeObject(values, "Scatter Path", Node_Path_Scatter, "Scatter paths along another path.").setVersion(11740); - addNodeObject(values, "Bridge Path", Node_Path_Bridge, "Create new paths that connect multiple paths at the same sample positions.").setVersion(11640); - addNodeObject(values, "Blend Path", Node_Path_Blend, "Blend between 2 paths."); + addNodeObject(values, "Repeat Path", Node_Path_Repeat, "Repeat paths.") + .setIO(VALUE_TYPE.pathnode).setVersion(1_18_05_6); + addNodeObject(values, "Scatter Path", Node_Path_Scatter, "Scatter paths along another path.") + .setIO(VALUE_TYPE.pathnode).setVersion(11740); + addNodeObject(values, "Bridge Path", Node_Path_Bridge, "Create new paths that connect multiple paths at the same sample positions.") + .setIO(VALUE_TYPE.pathnode).setVersion(11640); + addNodeObject(values, "Blend Path", Node_Path_Blend, "Blend between 2 paths.") + .setIO(VALUE_TYPE.pathnode); ds_list_add(values, "/To Number"); - addNodeObject(values, "Sample Path", Node_Path_Sample, "Sample a 2D position from a path"); - addNodeObject(values, "Bake Path", Node_Path_Bake, "Bake path data into array of vec2 points.").setVersion(11640); + addNodeObject(values, "Sample Path", Node_Path_Sample, "Sample a 2D position from a path") + .setIO(VALUE_TYPE.pathnode, VALUE_TYPE.float); + addNodeObject(values, "Bake Path", Node_Path_Bake, "Bake path data into array of vec2 points.") + .setIO(VALUE_TYPE.pathnode, VALUE_TYPE.float).setVersion(11640); ds_list_add(values, "/To Surface"); - addNodeObject(values, "Fill Path", Node_Path_Fill, "Fill area inside path.").setVersion(1_18_06_2); - addNodeObject(values, "Map Path", Node_Path_Map, "Map a texture between multiple paths.").setVersion(11640); - addNodeObject(values, "Morph Path", Node_Path_Morph, "Draw gradient connecting 2 paths.").setVersion(1_18_06_2); + addNodeObject(values, "Fill Path", Node_Path_Fill, "Fill area inside path.") + .setIO(VALUE_TYPE.float).setVersion(1_18_06_2); + addNodeObject(values, "Map Path", Node_Path_Map, "Map a texture between multiple paths.") + .setIO(VALUE_TYPE.pathnode, VALUE_TYPE.surface).setVersion(11640); + addNodeObject(values, "Morph Path", Node_Path_Morph, "Draw gradient connecting 2 paths.") + .setIO(VALUE_TYPE.pathnode, VALUE_TYPE.surface).setVersion(1_18_06_2); ds_list_add(values, "/Segments"); - addNodeObject(values, "Filter Segments", Node_Segment_Filter, "Filter segment (vec2 array) based on a conditions.").setVersion(11780); + addNodeObject(values, "Filter Segments", Node_Segment_Filter, "Filter segment (vec2 array) based on a conditions.") + .setIO(VALUE_TYPE.float).setVersion(11780); ds_list_add(values, "Boolean"); - addNodeObject(values, "Boolean", Node_Boolean); - addNodeObject(values, "Compare", Node_Compare, "Compare 2 numbers.").setBuild(Node_create_Compare).setTags(global.node_compare_keys); - addNodeObject(values, "Logic Opr", Node_Logic, "Apply logic operation (and, or, not, etc.) to boolean(s).").setBuild(Node_create_Logic).setTags(global.node_logic_keys); + addNodeObject(values, "Boolean", Node_Boolean) + .setIO(VALUE_TYPE.boolean); + addNodeObject(values, "Compare", Node_Compare, "Compare 2 numbers.") + .setIO(VALUE_TYPE.boolean, VALUE_TYPE.float).setBuild(Node_create_Compare).setTags(global.node_compare_keys); + addNodeObject(values, "Logic Opr", Node_Logic, "Apply logic operation (and, or, not, etc.) to boolean(s).") + .setIO(VALUE_TYPE.boolean, VALUE_TYPE.float).setBuild(Node_create_Logic).setTags(global.node_logic_keys); ds_list_add(values, "Trigger"); - addNodeObject(values, "Trigger", Node_Trigger, "Create trigger value.").setVersion(1140); - addNodeObject(values, "Boolean Trigger", Node_Trigger_Bool, "Create trigger based on boolean condition.").setVersion(1140); + addNodeObject(values, "Trigger", Node_Trigger, "Create trigger value.") + .setIO(VALUE_TYPE.boolean, VALUE_TYPE.trigger).setVersion(1140); + addNodeObject(values, "Boolean Trigger", Node_Trigger_Bool, "Create trigger based on boolean condition.") + .setIO(VALUE_TYPE.boolean, VALUE_TYPE.trigger).setVersion(1140); ds_list_add(values, "Struct"); - addNodeObject(values, "Struct", Node_Struct, "Create key-value pair struct."); - addNodeObject(values, "Struct Get", Node_Struct_Get, "Get value from struct and key."); - addNodeObject(values, "Struct Set", Node_Struct_Set, "Modify struct"); - addNodeObject(values, "Parse JSON", Node_Struct_JSON_Parse, "Parse json string into struct/array.").setVersion(1145); + addNodeObject(values, "Struct", Node_Struct, "Create key-value pair struct.") + .setIO(VALUE_TYPE.struct); + addNodeObject(values, "Struct Get", Node_Struct_Get, "Get value from struct and key.") + .setIO(VALUE_TYPE.struct); + addNodeObject(values, "Struct Set", Node_Struct_Set, "Modify struct") + .setIO(VALUE_TYPE.struct); + addNodeObject(values, "Parse JSON", Node_Struct_JSON_Parse, "Parse json string into struct/array.") + .setIO(VALUE_TYPE.struct, VALUE_TYPE.text).setVersion(1145); ds_list_add(values, "Mesh"); - addNodeObject(values, "Path to Mesh", Node_Mesh_Create_Path, "Create mesh from path.").setVersion(1140); - addNodeObject(values, "Mesh Transform", Node_Mesh_Transform, "Transform (move, rotate, scale) mesh.").setVersion(1140); + addNodeObject(values, "Path to Mesh", Node_Mesh_Create_Path, "Create mesh from path.") + .setIO(VALUE_TYPE.pathnode, VALUE_TYPE.mesh).setVersion(1140); + addNodeObject(values, "Mesh Transform", Node_Mesh_Transform, "Transform (move, rotate, scale) mesh.") + .setIO(VALUE_TYPE.mesh).setVersion(1140); ds_list_add(values, "Atlas"); - addNodeObject(values, "Draw Atlas", Node_Atlas_Draw, "Render image atlas to a surface.").setVersion(1141); - addNodeObject(values, "Atlas Get", Node_Atlas_Get, "Extract atlas data.").setVersion(1141); - addNodeObject(values, "Atlas Set", Node_Atlas_Set, "Modify atlas data.").setVersion(1141); - addNodeObject(values, "Atlas to Struct", Node_Atlas_Struct, "Convert atlas into generic struct.").setVersion(11710); + addNodeObject(values, "Draw Atlas", Node_Atlas_Draw, "Render image atlas to a surface.") + .setIO(VALUE_TYPE.surface).setVersion(1141); + addNodeObject(values, "Atlas Get", Node_Atlas_Get, "Extract atlas data.") + .setIO(VALUE_TYPE.surface).setVersion(1141); + addNodeObject(values, "Atlas Set", Node_Atlas_Set, "Modify atlas data.") + .setIO(VALUE_TYPE.surface).setVersion(1141); + addNodeObject(values, "Atlas to Struct", Node_Atlas_Struct, "Convert atlas into generic struct.") + .setIO(VALUE_TYPE.surface).setVersion(11710); ds_list_add(values, "Surface"); - addNodeObject(values, "Surface Data", Node_Surface_data, "Extract information about a surface").setTags(["surface info"]).setVersion(1_18_07_0); + addNodeObject(values, "Surface Data", Node_Surface_data, "Extract information about a surface") + .setIO(VALUE_TYPE.surface).setTags(["surface info"]).setVersion(1_18_07_0); // addNodeObject(values, "Dynamic Surface", Node_dynaSurf).setVersion(11520); - addNodeObject(values, "IsoSurf", Node_IsoSurf, "Create a dynamic surface that changes its texture based on rotation.").setVersion(11520); - addNodeObject(values, "Surface from Buffer", Node_Surface_From_Buffer, "Create surface from a valid buffer.").setTags(["buffer to surface"]).setVersion(1146); + addNodeObject(values, "IsoSurf", Node_IsoSurf, "Create a dynamic surface that changes its texture based on rotation.") + .setIO(VALUE_TYPE.surface).setVersion(11520); + addNodeObject(values, "Surface from Buffer", Node_Surface_From_Buffer, "Create surface from a valid buffer.") + .setIO(VALUE_TYPE.surface, VALUE_TYPE.buffer).setTags(["buffer to surface"]).setVersion(1146); ds_list_add(values, "Buffer"); - addNodeObject(values, "Buffer from Surface", Node_Surface_To_Buffer, "Create buffer from a surface.").setTags(["surface to buffer"]).setVersion(1146); - #endregion + addNodeObject(values, "Buffer from Surface", Node_Surface_To_Buffer, "Create buffer from a surface.") + .setIO(VALUE_TYPE.surface, VALUE_TYPE.buffer).setTags(["surface to buffer"]).setVersion(1146); +#endregion - #region color +#region color var color = ds_list_create(); addNodeCatagory("Color", color); ds_list_add(color, "Colors"); ds_list_add(color, "/Creators"); - addNodeObject(color, "Color", Node_Color, "Create color value.").setSpr(s_node_color_out); - addNodeObject(color, "RGB Color", Node_Color_RGB, "Create (rgb) color from value in RGB color space.").setSpr(s_node_color_from_rgb); - addNodeObject(color, "HSV Color", Node_Color_HSV, "Create (rgb) color from value in HSV color space.").setSpr(s_node_color_from_hsv); - addNodeObject(color, "OKLCH Color", Node_Color_OKLCH, "Create (rgb) color from value in OKLCH color space.").setSpr(s_node_color_from_oklch).setTags(["oklab"]); + addNodeObject(color, "Color", Node_Color, "Create color value.") + .setIO(VALUE_TYPE.color).setSpr(s_node_color_out); + addNodeObject(color, "RGB Color", Node_Color_RGB, "Create (rgb) color from value in RGB color space.") + .setIO(VALUE_TYPE.color).setSpr(s_node_color_from_rgb); + addNodeObject(color, "HSV Color", Node_Color_HSV, "Create (rgb) color from value in HSV color space.") + .setIO(VALUE_TYPE.color).setSpr(s_node_color_from_hsv); + addNodeObject(color, "OKLCH Color", Node_Color_OKLCH, "Create (rgb) color from value in OKLCH color space.") + .setIO(VALUE_TYPE.color).setSpr(s_node_color_from_oklch).setTags(["oklab"]); ds_list_add(color, "/Data"); - addNodeObject(color, "Color Data", Node_Color_Data, "Get data (rgb, hsv, brightness) from color.").setTags(["red", "green", "blue", "alpha", "brightness", "luminance"]); + addNodeObject(color, "Color Data", Node_Color_Data, "Get data (rgb, hsv, brightness) from color.") + .setIO(VALUE_TYPE.color).setTags(["red", "green", "blue", "alpha", "brightness", "luminance"]); ds_list_add(color, "/Operators"); - addNodeObject(color, "Mix Color", Node_Color_Mix, "Combine two colors.").setVersion(1140); + addNodeObject(color, "Mix Color", Node_Color_Mix, "Combine two colors.") + .setIO(VALUE_TYPE.color).setVersion(1140); ds_list_add(color, "/Surfaces"); - addNodeObject(color, "Sampler", Node_Sampler, "Sample color from an image."); - addNodeObject(color, "Find pixel", Node_Find_Pixel, "Get the position of the first pixel with a given color.").setVersion(1130); + addNodeObject(color, "Sampler", Node_Sampler, "Sample color from an image.") + .setIO(VALUE_TYPE.color, VALUE_TYPE.surface); + addNodeObject(color, "Find pixel", Node_Find_Pixel, "Get the position of the first pixel with a given color.") + .setIO(VALUE_TYPE.color, VALUE_TYPE.surface, VALUE_TYPE.float).setVersion(1130); ds_list_add(color, "Palettes"); - addNodeObject(color, "Palette", Node_Palette, "Create palette value. Note that palette is simple an array of colors."); - addNodeObject(color, "Sort Palette", Node_Palette_Sort, "Sort palette with specified order.").setVersion(1130); - addNodeObject(color, "Shrink Palette", Node_Palette_Shrink, "Reduce palette size by collapsing similiar colors.").setVersion(1_18_03_0); - addNodeObject(color, "Palette Extract", Node_Palette_Extract, "Extract palette from an image.").setVersion(1100); - addNodeObject(color, "Palette Replace", Node_Palette_Replace, "Replace colors in a palette with new one.").setVersion(1120); + addNodeObject(color, "Palette", Node_Palette, "Create palette value. Note that palette is simple an array of colors.") + .setIO(VALUE_TYPE.color); + addNodeObject(color, "Sort Palette", Node_Palette_Sort, "Sort palette with specified order.") + .setIO(VALUE_TYPE.color).setVersion(1130); + addNodeObject(color, "Shrink Palette", Node_Palette_Shrink, "Reduce palette size by collapsing similiar colors.") + .setIO(VALUE_TYPE.color).setVersion(1_18_03_0); + addNodeObject(color, "Palette Extract", Node_Palette_Extract, "Extract palette from an image.") + .setIO(VALUE_TYPE.color).setVersion(1100); + addNodeObject(color, "Palette Replace", Node_Palette_Replace, "Replace colors in a palette with new one.") + .setIO(VALUE_TYPE.color).setVersion(1120); ds_list_add(color, "Gradient"); - addNodeObject(color, "Gradient", Node_Gradient_Out, "Create gradient object"); - addNodeObject(color, "Palette to Gradient", Node_Gradient_Palette, "Create gradient from palette.").setVersion(1135); - addNodeObject(color, "Gradient Shift", Node_Gradient_Shift, "Move gradients keys."); - addNodeObject(color, "Gradient Replace", Node_Gradient_Replace_Color, "Replace color inside a gradient.").setVersion(1135); - addNodeObject(color, "Gradient Data", Node_Gradient_Extract, "Get palatte and array of key positions from gradient.").setVersion(1135); - addNodeObject(color, "Sample Gradient", Node_Gradient_Sample, "Sample gradient into palette.").setVersion(1_18_04_1); - #endregion + addNodeObject(color, "Gradient", Node_Gradient_Out, "Create gradient object") + .setIO(VALUE_TYPE.gradient); + addNodeObject(color, "Palette to Gradient", Node_Gradient_Palette, "Create gradient from palette.") + .setIO(VALUE_TYPE.gradient).setVersion(1135); + addNodeObject(color, "Gradient Shift", Node_Gradient_Shift, "Move gradients keys.") + .setIO(VALUE_TYPE.gradient); + addNodeObject(color, "Gradient Replace", Node_Gradient_Replace_Color, "Replace color inside a gradient.") + .setIO(VALUE_TYPE.gradient).setVersion(1135); + addNodeObject(color, "Gradient Data", Node_Gradient_Extract, "Get palatte and array of key positions from gradient.") + .setIO(VALUE_TYPE.gradient).setVersion(1135); + addNodeObject(color, "Sample Gradient", Node_Gradient_Sample, "Sample gradient into palette.") + .setIO(VALUE_TYPE.gradient, VALUE_TYPE.particle).setVersion(1_18_04_1); +#endregion - #region animation +#region animation var animation = ds_list_create(); addNodeCatagory("Animation", animation); ds_list_add(animation, "Animations"); - addNodeObject(animation, "Frame Index", Node_Counter, "Output current frame as frame index, or animation progress (0 - 1).").setTags(["current frame", "counter"]); - addNodeObject(animation, "Rate Remap", Node_Rate_Remap, "Remap animation to a new framerate.").setVersion(1147); - addNodeObject(animation, "Delay", Node_Delay, "Delay the animation by fix amount of frames.").setVersion(11640); - addNodeObject(animation, "Stagger", Node_Stagger, "Delay the animation based on array index.").setVersion(11640); - addNodeObject(animation, "Reverse", Node_Revert, "Cache the entire animation and replay backward.").setVersion(1_17_11_0); + addNodeObject(animation, "Frame Index", Node_Counter, "Output current frame as frame index, or animation progress (0 - 1).") + .setIO(VALUE_TYPE.float).setTags(["current frame", "counter"]); + addNodeObject(animation, "Rate Remap", Node_Rate_Remap, "Remap animation to a new framerate.") + .setIO(VALUE_TYPE.surface).setVersion(1147); + addNodeObject(animation, "Delay", Node_Delay, "Delay the animation by fix amount of frames.") + .setIO(VALUE_TYPE.surface).setVersion(11640); + addNodeObject(animation, "Stagger", Node_Stagger, "Delay the animation based on array index.") + .setIO(VALUE_TYPE.surface).setVersion(11640); + addNodeObject(animation, "Reverse", Node_Revert, "Cache the entire animation and replay backward.") + .setIO(VALUE_TYPE.surface).setVersion(1_17_11_0); ds_list_add(animation, "Value"); - addNodeObject(animation, "Evaluate Curve", Node_Anim_Curve, "Evaluate value from an animation curve."); - addNodeObject(animation, "WaveTable", Node_Fn_WaveTable, "Create value changing overtime in wave pattern.").setVersion(11720); - addNodeObject(animation, "Wiggler", Node_Wiggler, "Create random value smoothly changing over time."); - addNodeObject(animation, "Ease", Node_Fn_Ease, "Create easing function.").setVersion(11720); - addNodeObject(animation, "Math", Node_Fn_Math, "Apply mathematic operation of wave value.").setVersion(11720); - addNodeObject(animation, "SmoothStep", Node_Fn_SmoothStep, "Apply smoothstop function to a value.").setVersion(11720); + addNodeObject(animation, "Evaluate Curve", Node_Anim_Curve, "Evaluate value from an animation curve.") + .setIO(VALUE_TYPE.float); + addNodeObject(animation, "WaveTable", Node_Fn_WaveTable, "Create value changing overtime in wave pattern.") + .setIO(VALUE_TYPE.float).setVersion(11720); + addNodeObject(animation, "Wiggler", Node_Wiggler, "Create random value smoothly changing over time.") + .setIO(VALUE_TYPE.float); + addNodeObject(animation, "Ease", Node_Fn_Ease, "Create easing function.") + .setIO(VALUE_TYPE.float).setVersion(11720); + addNodeObject(animation, "Math", Node_Fn_Math, "Apply mathematic operation of wave value.") + .setIO(VALUE_TYPE.float).setVersion(11720); + addNodeObject(animation, "SmoothStep", Node_Fn_SmoothStep, "Apply smoothstop function to a value.") + .setIO(VALUE_TYPE.float).setVersion(11720); ds_list_add(animation, "Audio"); ds_list_add(animation, "/Files"); - addNodeObject(animation, "WAV File In", Node_WAV_File_Read, "Load wav audio file.").setBuild(Node_create_WAV_File_Read).setVersion(1144); - addNodeObject(animation, "WAV File Out", Node_WAV_File_Write, "Save wav audio file.").setVersion(1145); + addNodeObject(animation, "WAV File In", Node_WAV_File_Read, "Load wav audio file.") + .setIO(VALUE_TYPE.audioBit, VALUE_TYPE.text).setBuild(Node_create_WAV_File_Read).setVersion(1144); + addNodeObject(animation, "WAV File Out", Node_WAV_File_Write, "Save wav audio file.") + .setIO(VALUE_TYPE.audioBit, VALUE_TYPE.text).setVersion(1145); ds_list_add(animation, "/Analyzers"); - addNodeObject(animation, "Audio Window", Node_Audio_Window, "Take a slice of an audio array based on the current frame.").setVersion(1144); - addNodeObject(animation, "Audio Volume", Node_Audio_Loudness, "Calculate volume of an audio bit array.").setVersion(11540); - addNodeObject(animation, "FFT", Node_FFT, "Perform fourier transform on number array.").setTags(["frequency analysis"]).setVersion(1144); + addNodeObject(animation, "Audio Window", Node_Audio_Window, "Take a slice of an audio array based on the current frame.") + .setIO(VALUE_TYPE.audioBit, VALUE_TYPE.float).setVersion(1144); + addNodeObject(animation, "Audio Volume", Node_Audio_Loudness, "Calculate volume of an audio bit array.") + .setIO(VALUE_TYPE.audioBit, VALUE_TYPE.float).setVersion(11540); + addNodeObject(animation, "FFT", Node_FFT, "Perform fourier transform on number array.") + .setIO(VALUE_TYPE.audioBit, VALUE_TYPE.float).setTags(["frequency analysis"]) + .setVersion(1144); ds_list_add(animation, "/Renders"); - addNodeObject(animation, "Bar / Graph", Node_Plot_Linear, "Plot graph or bar chart from array of number.").setBuild(Node_create_Plot_Linear).setTags(global.node_plot_linear_keys).setVersion(1144); - #endregion + addNodeObject(animation, "Bar / Graph", Node_Plot_Linear, "Plot graph or bar chart from array of number.") + .setIO(VALUE_TYPE.surface, VALUE_TYPE.float).setBuild(Node_create_Plot_Linear).setTags(global.node_plot_linear_keys).setVersion(1144); +#endregion - #region misc +#region misc var node = ds_list_create(); addNodeCatagory("Misc", node); ds_list_add(node, "Control"); - addNodeObject(node, "Condition", Node_Condition, "Output value based on conditions."); - addNodeObject(node, "Switch", Node_Switch, "Output value based on index.").setVersion(1090); - addNodeObject(node, "Animation Control", Node_Animation_Control, "Control animation state with triggers.").setVersion(1145); + addNodeObject(node, "Condition", Node_Condition, "Output value based on conditions.") + .setIO(VALUE_TYPE.any); + addNodeObject(node, "Switch", Node_Switch, "Output value based on index.") + .setIO(VALUE_TYPE.any).setVersion(1090); + addNodeObject(node, "Animation Control", Node_Animation_Control, "Control animation state with triggers.") + .setIO(VALUE_TYPE.any).setVersion(1145); ds_list_add(node, "Groups"); - addNodeObject(node, "Group", Node_Group); - addNodeObject(node, "Feedback", Node_Feedback, "Create a group that reuse output from last frame to the current one.").isDeprecated(); - addNodeObject(node, "Loop", Node_Iterate, "Create group that reuse output as input repeatedly in one frame.").isDeprecated(); - addNodeObject(node, "Loop Array", Node_Iterate_Each_Inline, "Create group that iterate to each member in an array.").setSpr(s_node_loop_array).setTags(["iterate each", "for each", "array loop"]); - addNodeObject(node, "Filter Array",Node_Iterate_Filter_Inline, "Filter array using condition.").setSpr(s_node_filter_array).setVersion(1140); + addNodeObject(node, "Group", Node_Group) + .setIO(VALUE_TYPE.any); + addNodeObject(node, "Feedback", Node_Feedback, "Create a group that reuse output from last frame to the current one.") + .setIO(VALUE_TYPE.any).isDeprecated(); + addNodeObject(node, "Loop", Node_Iterate, "Create group that reuse output as input repeatedly in one frame.") + .setIO(VALUE_TYPE.any).isDeprecated(); + addNodeObject(node, "Loop Array", Node_Iterate_Each_Inline, "Create group that iterate to each member in an array.") + .setIO(VALUE_TYPE.any).setSpr(s_node_loop_array).setTags(["iterate each", "for each", "array loop"]); + addNodeObject(node, "Filter Array",Node_Iterate_Filter_Inline, "Filter array using condition.") + .setIO(VALUE_TYPE.any).setSpr(s_node_filter_array).setVersion(1140); if(OS == os_windows) { ds_list_add(node, "Lua"); - addNodeObject(node, "Lua Global", Node_Lua_Global, "Execute lua script in global scope without returning any data.").setVersion(1090); - addNodeObject(node, "Lua Surface", Node_Lua_Surface, "Execute lua script on a surface.").setVersion(1090); - addNodeObject(node, "Lua Compute", Node_Lua_Compute, "Execute lua function and returns a data.").setVersion(1090); + addNodeObject(node, "Lua Global", Node_Lua_Global, "Execute lua script in global scope without returning any data.") + .setIO(VALUE_TYPE.any).setVersion(1090); + addNodeObject(node, "Lua Surface", Node_Lua_Surface, "Execute lua script on a surface.") + .setIO(VALUE_TYPE.any).setVersion(1090); + addNodeObject(node, "Lua Compute", Node_Lua_Compute, "Execute lua function and returns a data.") + .setIO(VALUE_TYPE.any).setVersion(1090); ds_list_add(node, "Shader"); - addNodeObject(node, "HLSL", Node_HLSL, "Execute HLSL shader on a surface.").setVersion(11520); + addNodeObject(node, "HLSL", Node_HLSL, "Execute HLSL shader on a surface.") + .setIO(VALUE_TYPE.any).setVersion(11520); } ds_list_add(node, "Organize"); - addNodeObject(node, "Pin", Node_Pin, "Create a pin to organize your connection. Can be create by double clicking on a connection line."); - addNodeObject(node, "Array Pin", Node_Array_Pin, "Create a pin that can receive multiple values and return an array.").setVersion(11770); - addNodeObject(node, "Frame", Node_Frame, "Create frame surrounding nodes."); - addNodeObject(node, "Tunnel In", Node_Tunnel_In, "Create tunnel for sending value based on key matching."); - addNodeObject(node, "Tunnel Out", Node_Tunnel_Out, "Receive value from tunnel in of the same key."); - addNodeObject(node, "Display Text", Node_Display_Text, "Display text on the graph."); - addNodeObject(node, "Display Image", Node_Display_Image, "Display image on the graph.").setBuild(Node_create_Display_Image).setSpr(s_node_image); + addNodeObject(node, "Pin", Node_Pin, "Create a pin to organize your connection. Can be create by double clicking on a connection line.") + .setIO(VALUE_TYPE.any); + addNodeObject(node, "Array Pin", Node_Array_Pin, "Create a pin that can receive multiple values and return an array.") + .setIO(VALUE_TYPE.any).setVersion(11770); + addNodeObject(node, "Frame", Node_Frame, "Create frame surrounding nodes.") + .setIO(VALUE_TYPE.any); + addNodeObject(node, "Tunnel In", Node_Tunnel_In, "Create tunnel for sending value based on key matching.") + .setIO(VALUE_TYPE.any); + addNodeObject(node, "Tunnel Out", Node_Tunnel_Out, "Receive value from tunnel in of the same key.") + .setIO(VALUE_TYPE.any); + addNodeObject(node, "Display Text", Node_Display_Text, "Display text on the graph.") + .setIO(VALUE_TYPE.text); + addNodeObject(node, "Display Image", Node_Display_Image, "Display image on the graph.") + .setIO(VALUE_TYPE.surface).setBuild(Node_create_Display_Image).setSpr(s_node_image); ds_list_add(node, "Cache"); - addNodeObject(node, "Cache", Node_Cache, "Store current animation. Cache persisted between save.").setVersion(1134); - addNodeObject(node, "Cache Array", Node_Cache_Array, "Store current animation as array. Cache persisted between save.").setVersion(1130); + addNodeObject(node, "Cache", Node_Cache, "Store current animation. Cache persisted between save.") + .setIO(VALUE_TYPE.any).setVersion(1134); + addNodeObject(node, "Cache Array", Node_Cache_Array, "Store current animation as array. Cache persisted between save.") + .setIO(VALUE_TYPE.any).setVersion(1130); ds_list_add(node, "Debug"); - addNodeObject(node, "Print", Node_Print, "Display text to notification.").setTags(["debug log"]).setVersion(1145); - addNodeObject(node, "Widget Test", Node_Widget_Test).setSpr(s_node_print); - addNodeObject(node, "Graph Preview", Node_Graph_Preview).setSpr(s_node_image); - addNodeObject(node, "Slideshow", Node_Slideshow).setSpr(s_node_image); + addNodeObject(node, "Print", Node_Print, "Display text to notification.") + .setIO(VALUE_TYPE.text).setTags(["debug log"]).setVersion(1145); + addNodeObject(node, "Widget Test", Node_Widget_Test) + .setSpr(s_node_print); + addNodeObject(node, "Graph Preview", Node_Graph_Preview) + .setIO(VALUE_TYPE.surface).setSpr(s_node_image); + addNodeObject(node, "Slideshow", Node_Slideshow) + .setIO(VALUE_TYPE.any).setSpr(s_node_image); //addNodeObject(node, "Module Test", s_node_print, Node_Module_Test); ds_list_add(node, "Project"); - addNodeObject(node, "Project Data", Node_Project_Data).setVersion(11650); + addNodeObject(node, "Project Data", Node_Project_Data) + .setIO(VALUE_TYPE.text).setVersion(11650); ds_list_add(node, "System"); - addNodeObject(node, "Argument", Node_Argument).setVersion(11660); - addNodeObject(node, "Terminal trigger", Node_Terminal_Trigger).setVersion(11660); - addNodeObject(node, "Execute Shell", Node_Shell, "Execute shell script.").setTags(["terminal", "execute", "run", "console"]).setVersion(11530); - addNodeObject(node, "Monitor Capture", Node_Monitor_Capture).notTest(); - addNodeObject(node, "GUI In", Node_Application_In).setSpr(s_node_gui_in).notTest(); - addNodeObject(node, "GUI Out", Node_Application_Out).setSpr(s_node_gui_out).notTest(); - addNodeObject(node, "Assert", Node_Assert).setSpr(s_node_shell); + addNodeObject(node, "Argument", Node_Argument) + .setIO(VALUE_TYPE.any).setVersion(11660); + addNodeObject(node, "Terminal trigger", Node_Terminal_Trigger) + .setIO(VALUE_TYPE.any).setVersion(11660); + addNodeObject(node, "Execute Shell", Node_Shell, "Execute shell script.") + .setIO(VALUE_TYPE.any).setTags(["terminal", "execute", "run", "console"]).setVersion(11530); + addNodeObject(node, "Monitor Capture", Node_Monitor_Capture) + .setIO(VALUE_TYPE.any).notTest(); + addNodeObject(node, "GUI In", Node_Application_In) + .setIO(VALUE_TYPE.any).setSpr(s_node_gui_in).notTest(); + addNodeObject(node, "GUI Out", Node_Application_Out) + .setIO(VALUE_TYPE.any).setSpr(s_node_gui_out).notTest(); + addNodeObject(node, "Assert", Node_Assert) + .setIO(VALUE_TYPE.any).setSpr(s_node_shell); // addNodeObject(node, "DLL", s_node_gui_out, Node_DLL).setVersion(11750); - #endregion +#endregion globalvar NODE_ACTION_LIST; NODE_ACTION_LIST = ds_list_create(); @@ -1243,151 +1790,226 @@ function __initNodes() { //////////////////////////////////////////////////////////// PIXEL BUILDER //////////////////////////////////////////////////////////// - #region pb_group +#region pb_group var pb_group = ds_list_create(); addNodePBCatagory("Group", pb_group); //#PB Group ds_list_add(pb_group, "Groups"); - addNodeObject(pb_group, "Input", Node_Group_Input).hideRecent(); - addNodeObject(pb_group, "Output", Node_Group_Output).hideRecent(); - #endregion + addNodeObject(pb_group, "Input", Node_Group_Input) + .setIO(VALUE_TYPE.any).hideRecent(); + addNodeObject(pb_group, "Output", Node_Group_Output) + .setIO(VALUE_TYPE.any).hideRecent(); +#endregion - #region pb_draw +#region pb_draw var pb_draw = ds_list_create(); addNodePBCatagory("Draw", pb_draw); //#PB Draw ds_list_add(pb_draw, "Fill"); - addNodeObject(pb_draw, "Fill", Node_PB_Draw_Fill).hideRecent(); + addNodeObject(pb_draw, "Fill", Node_PB_Draw_Fill) + .setIO(VALUE_TYPE.pbBox).hideRecent(); ds_list_add(pb_draw, "Shape"); - addNodeObject(pb_draw, "Rectangle", Node_PB_Draw_Rectangle).hideRecent(); - addNodeObject(pb_draw, "Round Rectangle", Node_PB_Draw_Round_Rectangle).hideRecent(); - addNodeObject(pb_draw, "Trapezoid", Node_PB_Draw_Trapezoid).hideRecent(); - addNodeObject(pb_draw, "Diamond", Node_PB_Draw_Diamond).hideRecent(); - addNodeObject(pb_draw, "Ellipse", Node_PB_Draw_Ellipse).hideRecent(); - addNodeObject(pb_draw, "Semi-Ellipse", Node_PB_Draw_Semi_Ellipse).hideRecent(); - addNodeObject(pb_draw, "Line", Node_PB_Draw_Line).hideRecent(); - addNodeObject(pb_draw, "Angle", Node_PB_Draw_Angle).hideRecent(); - addNodeObject(pb_draw, "Blob", Node_PB_Draw_Blob).hideRecent(); - #endregion + addNodeObject(pb_draw, "Rectangle", Node_PB_Draw_Rectangle) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_draw, "Round Rectangle", Node_PB_Draw_Round_Rectangle) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_draw, "Trapezoid", Node_PB_Draw_Trapezoid) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_draw, "Diamond", Node_PB_Draw_Diamond) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_draw, "Ellipse", Node_PB_Draw_Ellipse) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_draw, "Semi-Ellipse", Node_PB_Draw_Semi_Ellipse) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_draw, "Line", Node_PB_Draw_Line) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_draw, "Angle", Node_PB_Draw_Angle) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_draw, "Blob", Node_PB_Draw_Blob) + .setIO(VALUE_TYPE.pbBox).hideRecent(); +#endregion - #region pb_box +#region pb_box var pb_box = ds_list_create(); addNodePBCatagory("Box", pb_box); //#PB Box ds_list_add(pb_box, "Layer"); - addNodeObject(pb_box, "Layer", Node_PB_Layer).hideRecent(); + addNodeObject(pb_box, "Layer", Node_PB_Layer) + .setIO(VALUE_TYPE.pbBox).hideRecent(); ds_list_add(pb_box, "Box"); - addNodeObject(pb_box, "Transform", Node_PB_Box_Transform).hideRecent(); - addNodeObject(pb_box, "Mirror", Node_PB_Box_Mirror).hideRecent(); - addNodeObject(pb_box, "Inset", Node_PB_Box_Inset).hideRecent(); - addNodeObject(pb_box, "Split", Node_PB_Box_Split).hideRecent(); - addNodeObject(pb_box, "Divide", Node_PB_Box_Divide).hideRecent(); - addNodeObject(pb_box, "Divide Grid", Node_PB_Box_Divide_Grid).hideRecent(); - addNodeObject(pb_box, "Contract", Node_PB_Box_Contract).hideRecent(); - #endregion + addNodeObject(pb_box, "Transform", Node_PB_Box_Transform) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_box, "Mirror", Node_PB_Box_Mirror) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_box, "Inset", Node_PB_Box_Inset) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_box, "Split", Node_PB_Box_Split) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_box, "Divide", Node_PB_Box_Divide) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_box, "Divide Grid", Node_PB_Box_Divide_Grid) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_box, "Contract", Node_PB_Box_Contract) + .setIO(VALUE_TYPE.pbBox).hideRecent(); +#endregion - #region pb_fx +#region pb_fx var pb_fx = ds_list_create(); addNodePBCatagory("Effects", pb_fx); //#PB Effects ds_list_add(pb_fx, "Effect"); - addNodeObject(pb_fx, "Outline", Node_PB_Fx_Outline).hideRecent(); - addNodeObject(pb_fx, "Stack", Node_PB_Fx_Stack).hideRecent(); - addNodeObject(pb_fx, "Radial", Node_PB_Fx_Radial).hideRecent(); + addNodeObject(pb_fx, "Outline", Node_PB_Fx_Outline) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_fx, "Stack", Node_PB_Fx_Stack) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_fx, "Radial", Node_PB_Fx_Radial) + .setIO(VALUE_TYPE.pbBox).hideRecent(); ds_list_add(pb_fx, "Lighting"); - addNodeObject(pb_fx, "Highlight", Node_PB_Fx_Highlight).hideRecent(); - addNodeObject(pb_fx, "Shading", Node_PB_Fx_Shading).hideRecent(); + addNodeObject(pb_fx, "Highlight", Node_PB_Fx_Highlight) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_fx, "Shading", Node_PB_Fx_Shading) + .setIO(VALUE_TYPE.pbBox).hideRecent(); ds_list_add(pb_fx, "Texture"); - addNodeObject(pb_fx, "Hashing", Node_PB_Fx_Hash).hideRecent(); - addNodeObject(pb_fx, "Strip", Node_PB_Fx_Strip).hideRecent(); - addNodeObject(pb_fx, "Brick", Node_PB_Fx_Brick).hideRecent(); + addNodeObject(pb_fx, "Hashing", Node_PB_Fx_Hash) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_fx, "Strip", Node_PB_Fx_Strip) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_fx, "Brick", Node_PB_Fx_Brick) + .setIO(VALUE_TYPE.pbBox).hideRecent(); ds_list_add(pb_fx, "Blend"); - addNodeObject(pb_fx, "Add", Node_PB_Fx_Add).hideRecent(); - addNodeObject(pb_fx, "Subtract", Node_PB_Fx_Subtract).hideRecent(); - addNodeObject(pb_fx, "Intersect", Node_PB_Fx_Intersect).hideRecent(); - #endregion + addNodeObject(pb_fx, "Add", Node_PB_Fx_Add) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_fx, "Subtract", Node_PB_Fx_Subtract) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_fx, "Intersect", Node_PB_Fx_Intersect) + .setIO(VALUE_TYPE.pbBox).hideRecent(); +#endregion - #region pb_arr +#region pb_arr var pb_arr = ds_list_create(); addNodePBCatagory("Array", pb_arr); //#PB Array - addNodeObject(pb_arr, "Array", Node_Array).hideRecent(); - addNodeObject(pb_arr, "Array Get", Node_Array_Get).setTags(["get array"]).hideRecent(); - addNodeObject(pb_arr, "Array Set", Node_Array_Set).setTags(["set array"]).hideRecent().setVersion(1120); - addNodeObject(pb_arr, "Array Insert", Node_Array_Insert).setTags(["insert array"]).hideRecent().setVersion(1120); - addNodeObject(pb_arr, "Array Remove", Node_Array_Remove).setTags(["remove array", "delete array", "array delete"]).hideRecent().setVersion(1120); - #endregion + addNodeObject(pb_arr, "Array", Node_Array) + .setIO(VALUE_TYPE.pbBox).hideRecent(); + addNodeObject(pb_arr, "Array Get", Node_Array_Get) + .setIO(VALUE_TYPE.pbBox).setTags(["get array"]).hideRecent(); + addNodeObject(pb_arr, "Array Set", Node_Array_Set) + .setIO(VALUE_TYPE.pbBox).setTags(["set array"]).hideRecent().setVersion(1120); + addNodeObject(pb_arr, "Array Insert", Node_Array_Insert) + .setIO(VALUE_TYPE.pbBox).setTags(["insert array"]).hideRecent().setVersion(1120); + addNodeObject(pb_arr, "Array Remove", Node_Array_Remove) + .setIO(VALUE_TYPE.pbBox).setTags(["remove array", "delete array", "array delete"]).hideRecent().setVersion(1120); +#endregion /////////////////////////////////////////////////////////////// PCX NODE /////////////////////////////////////////////////////////////// - #region pcx_var +#region pcx_var var pcx_var = ds_list_create(); addNodePCXCatagory("Variable", pcx_var); - addNodeObject(pcx_var, "Variable", Node_PCX_var).setSpr(s_node_array).hideRecent(); - addNodeObject(pcx_var, "Fn Variable", Node_PCX_fn_var).setSpr(s_node_array).hideRecent(); - #endregion + addNodeObject(pcx_var, "Variable", Node_PCX_var) + .setIO(VALUE_TYPE.pbBox).setSpr(s_node_array).hideRecent(); + addNodeObject(pcx_var, "Fn Variable", Node_PCX_fn_var) + .setIO(VALUE_TYPE.pbBox).setSpr(s_node_array).hideRecent(); +#endregion - #region pcx_fn +#region pcx_fn var pcx_fn = ds_list_create(); addNodePCXCatagory("Functions", pcx_fn); - addNodeObject(pcx_fn, "Equation", Node_PCX_Equation).setSpr(s_node_array).hideRecent(); + addNodeObject(pcx_fn, "Equation", Node_PCX_Equation) + .setIO(VALUE_TYPE.pbBox).setSpr(s_node_array).hideRecent(); ds_list_add(pcx_fn, "Numbers"); - addNodeObject(pcx_fn, "Math", Node_PCX_fn_Math).setSpr(s_node_array).hideRecent(); - addNodeObject(pcx_fn, "Random", Node_PCX_fn_Random).setSpr(s_node_array).hideRecent(); + addNodeObject(pcx_fn, "Math", Node_PCX_fn_Math) + .setIO(VALUE_TYPE.pbBox).setSpr(s_node_array).hideRecent(); + addNodeObject(pcx_fn, "Random", Node_PCX_fn_Random) + .setIO(VALUE_TYPE.pbBox).setSpr(s_node_array).hideRecent(); ds_list_add(pcx_fn, "Surface"); - addNodeObject(pcx_fn, "Surface Width", Node_PCX_fn_Surface_Width).setSpr(s_node_array).hideRecent(); - addNodeObject(pcx_fn, "Surface Height", Node_PCX_fn_Surface_Height).setSpr(s_node_array).hideRecent(); + addNodeObject(pcx_fn, "Surface Width", Node_PCX_fn_Surface_Width) + .setIO(VALUE_TYPE.pbBox).setSpr(s_node_array).hideRecent(); + addNodeObject(pcx_fn, "Surface Height", Node_PCX_fn_Surface_Height) + .setIO(VALUE_TYPE.pbBox).setSpr(s_node_array).hideRecent(); ds_list_add(pcx_fn, "Array"); - addNodeObject(pcx_fn, "Array Get", Node_PCX_Array_Get).setSpr(s_node_array).hideRecent(); - addNodeObject(pcx_fn, "Array Set", Node_PCX_Array_Set).setSpr(s_node_array).hideRecent(); - #endregion + addNodeObject(pcx_fn, "Array Get", Node_PCX_Array_Get) + .setIO(VALUE_TYPE.pbBox).setSpr(s_node_array).hideRecent(); + addNodeObject(pcx_fn, "Array Set", Node_PCX_Array_Set) + .setIO(VALUE_TYPE.pbBox).setSpr(s_node_array).hideRecent(); +#endregion - #region pcx_flow +#region pcx_flow var pcx_flow = ds_list_create(); addNodePCXCatagory("Flow Control", pcx_flow); - addNodeObject(pcx_flow, "Condition", Node_PCX_Condition).setSpr(s_node_array).hideRecent(); - #endregion + addNodeObject(pcx_flow, "Condition", Node_PCX_Condition) + .setIO(VALUE_TYPE.pbBox).setSpr(s_node_array).hideRecent(); +#endregion //////////////////////////////////////////////////////////////// HIDDEN //////////////////////////////////////////////////////////////// - #region hid +#region hid var hid = ds_list_create(); addNodeCatagory("Hidden", hid, ["Hidden"]); - addNodeObject(hid, "Input", Node_Iterator_Each_Input).setSpr(s_node_loop_input).hideRecent(); - addNodeObject(hid, "Output", Node_Iterator_Each_Output).setSpr(s_node_loop_output).hideRecent(); - addNodeObject(hid, "Input", Node_Iterator_Filter_Input).setSpr(s_node_loop_input).hideRecent(); - addNodeObject(hid, "Output", Node_Iterator_Filter_Output).setSpr(s_node_loop_output).hideRecent(); - addNodeObject(hid, "Grid Noise", Node_Grid_Noise).hideRecent(); - addNodeObject(hid, "Triangular Noise", Node_Noise_Tri).setSpr(s_node_grid_tri_noise).hideRecent().setVersion(1090); - addNodeObject(hid, "Hexagonal Noise", Node_Noise_Hex).setSpr(s_node_grid_hex_noise).hideRecent().setVersion(1090); - addNodeObject(hid, "Sort Input", Node_Iterator_Sort_Input).setSpr(s_node_grid_hex_noise).hideRecent(); - addNodeObject(hid, "Sort Output", Node_Iterator_Sort_Output).setSpr(s_node_grid_hex_noise).hideRecent(); - addNodeObject(hid, "Onion Skin", Node_Onion_Skin).setSpr(s_node_cache).setVersion(1147).hideRecent(); - addNodeObject(hid, "RigidSim", Node_Rigid_Group, "Create group for rigidbody simulation.").setSpr(s_node_rigid).setVersion(1110).hideRecent(); - addNodeObject(hid, "SmokeSim", Node_Smoke_Group, "Create group for fluid simulation.").setSpr(s_node_smoke_group).setVersion(1120).hideRecent(); - addNodeObject(hid, "StrandSim", Node_Strand_Group, "Create group for hair simulation.").setSpr(s_node_strand).setVersion(1140).hideRecent(); - addNodeObject(hid, "Feedback", Node_Feedback_Inline).setSpr(s_node_feedback).hideRecent(); - addNodeObject(hid, "Loop", Node_Iterate_Inline).setSpr(s_node_iterate).hideRecent(); - addNodeObject(hid, "VFX", Node_VFX_Group).setSpr(s_node_vfx).hideRecent(); + addNodeObject(hid, "Input", Node_Iterator_Each_Input) + .setSpr(s_node_loop_input).hideRecent(); + addNodeObject(hid, "Output", Node_Iterator_Each_Output) + .setSpr(s_node_loop_output).hideRecent(); + addNodeObject(hid, "Input", Node_Iterator_Filter_Input) + .setSpr(s_node_loop_input).hideRecent(); + addNodeObject(hid, "Output", Node_Iterator_Filter_Output) + .setSpr(s_node_loop_output).hideRecent(); + addNodeObject(hid, "Grid Noise", Node_Grid_Noise) + .hideRecent(); + addNodeObject(hid, "Triangular Noise", Node_Noise_Tri) + .setSpr(s_node_grid_tri_noise).hideRecent().setVersion(1090); + addNodeObject(hid, "Hexagonal Noise", Node_Noise_Hex) + .setSpr(s_node_grid_hex_noise).hideRecent().setVersion(1090); + addNodeObject(hid, "Sort Input", Node_Iterator_Sort_Input) + .setSpr(s_node_grid_hex_noise).hideRecent(); + addNodeObject(hid, "Sort Output", Node_Iterator_Sort_Output) + .setSpr(s_node_grid_hex_noise).hideRecent(); + addNodeObject(hid, "Onion Skin", Node_Onion_Skin) + .setSpr(s_node_cache).setVersion(1147).hideRecent(); + addNodeObject(hid, "RigidSim", Node_Rigid_Group, "Create group for rigidbody simulation.") + .setSpr(s_node_rigid).setVersion(1110).hideRecent(); + addNodeObject(hid, "SmokeSim", Node_Smoke_Group, "Create group for fluid simulation.") + .setSpr(s_node_smoke_group).setVersion(1120).hideRecent(); + addNodeObject(hid, "StrandSim", Node_Strand_Group, "Create group for hair simulation.") + .setSpr(s_node_strand).setVersion(1140).hideRecent(); + addNodeObject(hid, "Feedback", Node_Feedback_Inline) + .setSpr(s_node_feedback).hideRecent(); + addNodeObject(hid, "Loop", Node_Iterate_Inline) + .setSpr(s_node_iterate).hideRecent(); + addNodeObject(hid, "VFX", Node_VFX_Group) + .setSpr(s_node_vfx).hideRecent(); - addNodeObject(hid, "Loop Array", Node_Iterate_Each).setSpr(s_node_loop_array).hideRecent(); - addNodeObject(hid, "Loop Input", Node_Iterator_Each_Inline_Input).setSpr(s_node_loop_array).hideRecent(); - addNodeObject(hid, "Loop Output", Node_Iterator_Each_Inline_Output).setSpr(s_node_loop_array).hideRecent(); - addNodeObject(hid, "Filter Array", Node_Iterate_Filter, "Filter array using condition.").setSpr(s_node_filter_array).hideRecent(); - addNodeObject(hid, "Filter Input", Node_Iterator_Filter_Inline_Input).setSpr(s_node_filter_array).hideRecent(); - addNodeObject(hid, "Filter Output", Node_Iterator_Filter_Inline_Output).setSpr(s_node_filter_array).hideRecent(); - addNodeObject(hid, "Sort Array", Node_Iterate_Sort, "Sort array using node graph.").setSpr(s_node_sort_array).hideRecent(); - addNodeObject(hid, "Sort Input", Node_Iterator_Sort_Inline_Input).setSpr(s_node_sort_array).hideRecent(); - addNodeObject(hid, "Sort Output", Node_Iterator_Sort_Inline_Output).setSpr(s_node_sort_array).hideRecent(); + addNodeObject(hid, "Loop Array", Node_Iterate_Each) + .setSpr(s_node_loop_array).hideRecent(); + addNodeObject(hid, "Loop Input", Node_Iterator_Each_Inline_Input) + .setSpr(s_node_loop_array).hideRecent(); + addNodeObject(hid, "Loop Output", Node_Iterator_Each_Inline_Output) + .setSpr(s_node_loop_array).hideRecent(); + addNodeObject(hid, "Filter Array", Node_Iterate_Filter, "Filter array using condition.") + .setSpr(s_node_filter_array).hideRecent(); + addNodeObject(hid, "Filter Input", Node_Iterator_Filter_Inline_Input) + .setSpr(s_node_filter_array).hideRecent(); + addNodeObject(hid, "Filter Output", Node_Iterator_Filter_Inline_Output) + .setSpr(s_node_filter_array).hideRecent(); + addNodeObject(hid, "Sort Array", Node_Iterate_Sort, "Sort array using node graph.") + .setSpr(s_node_sort_array).hideRecent(); + addNodeObject(hid, "Sort Input", Node_Iterator_Sort_Inline_Input) + .setSpr(s_node_sort_array).hideRecent(); + addNodeObject(hid, "Sort Output", Node_Iterator_Sort_Inline_Output) + .setSpr(s_node_sort_array).hideRecent(); ds_list_add(hid, "DynaSurf"); - addNodeObject(hid, "Input", Node_DynaSurf_In).setSpr(s_node_pixel_builder).hideRecent(); - addNodeObject(hid, "Output", Node_DynaSurf_Out).setSpr(s_node_pixel_builder).hideRecent(); - addNodeObject(hid, "getWidth", Node_DynaSurf_Out_Width).setSpr(s_node_pixel_builder).hideRecent(); - addNodeObject(hid, "getHeight", Node_DynaSurf_Out_Height).setSpr(s_node_pixel_builder).hideRecent(); - #endregion - + addNodeObject(hid, "Input", Node_DynaSurf_In) + .setSpr(s_node_pixel_builder).hideRecent(); + addNodeObject(hid, "Output", Node_DynaSurf_Out) + .setSpr(s_node_pixel_builder).hideRecent(); + addNodeObject(hid, "getWidth", Node_DynaSurf_Out_Width) + .setSpr(s_node_pixel_builder).hideRecent(); + addNodeObject(hid, "getHeight", Node_DynaSurf_Out_Height) + .setSpr(s_node_pixel_builder).hideRecent(); +#endregion + } diff --git a/scripts/node_surface_data/node_surface_data.gml b/scripts/node_surface_data/node_surface_data.gml index edc3c0c83..028a22a7f 100644 --- a/scripts/node_surface_data/node_surface_data.gml +++ b/scripts/node_surface_data/node_surface_data.gml @@ -1,6 +1,5 @@ function Node_Surface_data(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { name = "Surface data"; - color = COLORS.node_blend_number; newInput(0, nodeValue_Surface("Surface", self)); @@ -40,4 +39,9 @@ function Node_Surface_data(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro return _outData; } + + static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { + var bbox = drawGetBbox(xx, yy, _s); + draw_sprite_bbox_uniform(s_node_surface_data, 0, bbox); + } } \ No newline at end of file diff --git a/scripts/panel_collection/panel_collection.gml b/scripts/panel_collection/panel_collection.gml index 43db9c4f5..9636219dc 100644 --- a/scripts/panel_collection/panel_collection.gml +++ b/scripts/panel_collection/panel_collection.gml @@ -245,7 +245,7 @@ function Panel_Collection() : PanelContent() constructor { if(is_string(_node)) continue; if(ds_map_exists(search_map, _node)) continue; if(!is_instanceof(_node, NodeObject)) continue; - if(_node.is_patreon_extra && !IS_PATREON) continue; + if(_node.patreon && !IS_PATREON) continue; if(_node.deprecated) continue; var match = string_partial_match(string_lower(_node.getName()), search_lower); @@ -638,7 +638,7 @@ function Panel_Collection() : PanelContent() constructor { var _node = _list[| index]; if(!is_instanceof(_node, NodeObject)) continue; - if(_node.is_patreon_extra && !IS_PATREON) continue; + if(_node.patreon && !IS_PATREON) continue; if(_node.deprecated) continue; i = floor(ii / col); diff --git a/scripts/panel_graph/panel_graph.gml b/scripts/panel_graph/panel_graph.gml index 3dde2879b..70ff36d25 100644 --- a/scripts/panel_graph/panel_graph.gml +++ b/scripts/panel_graph/panel_graph.gml @@ -1917,7 +1917,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { node_target_y = other.mouse_grid_y; node_target_x_raw = other.mouse_grid_x; node_target_y_raw = other.mouse_grid_y; - node_called = other.value_dragging; + junction_called = other.value_dragging; alarm[0] = 1; } @@ -2137,7 +2137,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { node_target_y = other.mouse_grid_y; node_target_x_raw = other.mouse_grid_x; node_target_y_raw = other.mouse_grid_y; - junction_hovering = other.junction_hovering; + junction_called = other.junction_hovering; resetPosition(); alarm[0] = 1; diff --git a/sprites/s_node_surface_data/8d2b64e5-2b10-40b6-830f-04a67cd51a02.png b/sprites/s_node_surface_data/8d2b64e5-2b10-40b6-830f-04a67cd51a02.png new file mode 100644 index 0000000000000000000000000000000000000000..325b6a3f811c3a2ff89c27dd961a3180776c1da6 GIT binary patch literal 1561 zcmZ{kdpOez7{`Cx+UBsiB)1Y;l!eYvl;pC;I4+Sb=GK;3i4mjRBS+@sh|{Shxd1@yHULQa9RQZ4R?;{CMBxBHL-+2rSyR~ z>O>>}Yd@yoUdcrOfTJ76BGvUWI~aEb-IsL< z&O;&HkFA(HugFPKS7Gh@KFBd7Xu0+DU*-%}aK`FTQ#tEFM0HLBcS~qLd2y*oZ0Hjg zH!Z#}K>x1m68bD*DyC;~V*ldau{@7bj}q7G7EuDDkyEg_LJ%4+qX{+pyYNX`o1@a# zZYJ~cgEG;WcVcJ*x7%eF1hI7s4OoBj0?DfNSK<0ngVJLi^R~u`tIk?DWtn2Bc2;E?Lz9co}No%Lu|H$++VSMEc)~pVS8#YSw*1$ z%*gP4YSb_0?c6t-3A{P_Xiax=J`oEbkhSGg|Z55964 zgda{yd|&9sh9Mh+LPHVM*x0L1oboIO-Oo!2YJDd<#9HM2Sd3{Z%F=8HD}$ykS?o+F zVAwJkyzctKR_jb!2+yOJkz0Px=0R7%4#@G~xEvdu%3@1JndbrlqXcX+^ZONgp$i3? zsL7-qfImycZ+W@^bhK^0V-3?{^NS`SSMm>Tu;hG0>7Qd8UR<@)rnHpG=tU)e`oyRW ziMd_+uCGsBPEIcPiJGda`ld|=9980;7FaEFz~1nb;)TwR-m*9Kr^9#!Op}HOGc%Of z*v53iOA7VGiK|aJ6@6Mkpa`Kuy}yh6`O9g|B)=yATV-X+*%F)TrZ{Uf8a>!dS>k$N zvV~nav{&It@L6{uj*5*c6~Tm&#gn5CPpOTIMD*#Qa+O(1(F^&bRsPNX^KV%@E=A~C zr3B7uoC5ZBqYQ^3{uP{|A@jE_330Z$0>S2WP)JYyS{~hGf^<{k%m5155R*%vkjJ4? zqF0z6vlMS{3<{-rqp+}WJ!DB$9hpa2T7md($bR_Bi0+C5DRvsWkgdSK?_wxobvh#Fq)lyLmTo^!N4+@goY_mI(5S8T~xW0%#C zSE~nw$vMdeP62v1A5WXuR$6RcB@>*9^l~nm@oJRMmr+)}c)46j37$u{3M>@)>2TIw zjrP1WV6i95Ixu)*XK+U5>e0vkWOL}Bs?Hq3D5V?OCJ#0u$2&&OazR(%NIJhYHN;m8 zm1k2_@@aB*#T_v)o!t#lvJNG8tNkwyz(4VCa*B&_H8u0Tt%xd1@yHULQa9RQZ4R?;{CMBxBHL-+2rSyR~ z>O>>}Yd@yoUdcrOfTJ76BGvUWI~aEb-IsL< z&O;&HkFA(HugFPKS7Gh@KFBd7Xu0+DU*-%}aK`FTQ#tEFM0HLBcS~qLd2y*oZ0Hjg zH!Z#}K>x1m68bD*DyC;~V*ldau{@7bj}q7G7EuDDkyEg_LJ%4+qX{+pyYNX`o1@a# zZYJ~cgEG;WcVcJ*x7%eF1hI7s4OoBj0?DfNSK<0ngVJLi^R~u`tIk?DWtn2Bc2;E?Lz9co}No%Lu|H$++VSMEc)~pVS8#YSw*1$ z%*gP4YSb_0?c6t-3A{P_Xiax=J`oEbkhSGg|Z55964 zgda{yd|&9sh9Mh+LPHVM*x0L1oboIO-Oo!2YJDd<#9HM2Sd3{Z%F=8HD}$ykS?o+F zVAwJkyzctKR_jb!2+yOJkz0Px=0R7%4#@G~xEvdu%3@1JndbrlqXcX+^ZONgp$i3? zsL7-qfImycZ+W@^bhK^0V-3?{^NS`SSMm>Tu;hG0>7Qd8UR<@)rnHpG=tU)e`oyRW ziMd_+uCGsBPEIcPiJGda`ld|=9980;7FaEFz~1nb;)TwR-m*9Kr^9#!Op}HOGc%Of z*v53iOA7VGiK|aJ6@6Mkpa`Kuy}yh6`O9g|B)=yATV-X+*%F)TrZ{Uf8a>!dS>k$N zvV~nav{&It@L6{uj*5*c6~Tm&#gn5CPpOTIMD*#Qa+O(1(F^&bRsPNX^KV%@E=A~C zr3B7uoC5ZBqYQ^3{uP{|A@jE_330Z$0>S2WP)JYyS{~hGf^<{k%m5155R*%vkjJ4? zqF0z6vlMS{3<{-rqp+}WJ!DB$9hpa2T7md($bR_Bi0+C5DRvsWkgdSK?_wxobvh#Fq)lyLmTo^!N4+@goY_mI(5S8T~xW0%#C zSE~nw$vMdeP62v1A5WXuR$6RcB@>*9^l~nm@oJRMmr+)}c)46j37$u{3M>@)>2TIw zjrP1WV6i95Ixu)*XK+U5>e0vkWOL}Bs?Hq3D5V?OCJ#0u$2&&OazR(%NIJhYHN;m8 zm1k2_@@aB*#T_v)o!t#lvJNG8tNkwyz(4VCa*B&_H8u0Tt%":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "resourceVersion":"2.0", + }, + "eventStubScript":null, + "eventToFunction":{}, + "length":1.0, + "lockOrigin":false, + "moments":{ + "$KeyframeStore":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "resourceVersion":"2.0", + }, + "name":"s_node_surface_data", + "playback":1, + "playbackSpeed":30.0, + "playbackSpeedType":0, + "resourceType":"GMSequence", + "resourceVersion":"2.0", + "showBackdrop":true, + "showBackdropImage":false, + "timeUnits":1, + "tracks":[ + {"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore":"","Keyframes":[ + {"$Keyframe":"","Channels":{ + "0":{"$SpriteFrameKeyframe":"","Id":{"name":"8d2b64e5-2b10-40b6-830f-04a67cd51a02","path":"sprites/s_node_surface_data/s_node_surface_data.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"8c52e1c7-ad40-4dcd-82d5-d333b4d9e093","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe","resourceVersion":"2.0","Stretch":false,}, + ],"resourceType":"KeyframeStore","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange":null, + "volume":1.0, + "xorigin":32, + "yorigin":32, + }, + "swatchColours":null, + "swfPrecision":0.5, + "textureGroupId":{ + "name":"Default", + "path":"texturegroups/Default", + }, + "type":0, + "VTile":false, + "width":64, +} \ No newline at end of file