mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2025-02-11 12:45:17 +01:00
[Flip to VFX] Fix freeze on connect,
This commit is contained in:
parent
1b4c4acd7f
commit
5ecca493fb
11 changed files with 74 additions and 61 deletions
|
@ -316,7 +316,6 @@
|
||||||
{"name":"_addon_custom","order":4,"path":"objects/_addon_custom/_addon_custom.yy",},
|
{"name":"_addon_custom","order":4,"path":"objects/_addon_custom/_addon_custom.yy",},
|
||||||
{"name":"_p_dialog_undo_block","order":1,"path":"objects/_p_dialog_undo_block/_p_dialog_undo_block.yy",},
|
{"name":"_p_dialog_undo_block","order":1,"path":"objects/_p_dialog_undo_block/_p_dialog_undo_block.yy",},
|
||||||
{"name":"addon","order":1,"path":"objects/addon/addon.yy",},
|
{"name":"addon","order":1,"path":"objects/addon/addon.yy",},
|
||||||
{"name":"FLIP_Domain","order":5,"path":"objects/FLIP_Domain/FLIP_Domain.yy",},
|
|
||||||
{"name":"o_dialog_add_image","order":3,"path":"objects/o_dialog_add_image/o_dialog_add_image.yy",},
|
{"name":"o_dialog_add_image","order":3,"path":"objects/o_dialog_add_image/o_dialog_add_image.yy",},
|
||||||
{"name":"o_dialog_add_node","order":1,"path":"objects/o_dialog_add_node/o_dialog_add_node.yy",},
|
{"name":"o_dialog_add_node","order":1,"path":"objects/o_dialog_add_node/o_dialog_add_node.yy",},
|
||||||
{"name":"o_dialog_assetbox","order":4,"path":"objects/o_dialog_assetbox/o_dialog_assetbox.yy",},
|
{"name":"o_dialog_assetbox","order":4,"path":"objects/o_dialog_assetbox/o_dialog_assetbox.yy",},
|
||||||
|
@ -851,8 +850,9 @@
|
||||||
{"name":"node_FLIP_apply_force","order":8,"path":"scripts/node_FLIP_apply_force/node_FLIP_apply_force.yy",},
|
{"name":"node_FLIP_apply_force","order":8,"path":"scripts/node_FLIP_apply_force/node_FLIP_apply_force.yy",},
|
||||||
{"name":"node_FLIP_apply_velocity","order":7,"path":"scripts/node_FLIP_apply_velocity/node_FLIP_apply_velocity.yy",},
|
{"name":"node_FLIP_apply_velocity","order":7,"path":"scripts/node_FLIP_apply_velocity/node_FLIP_apply_velocity.yy",},
|
||||||
{"name":"node_FLIP_destroy","order":11,"path":"scripts/node_FLIP_destroy/node_FLIP_destroy.yy",},
|
{"name":"node_FLIP_destroy","order":11,"path":"scripts/node_FLIP_destroy/node_FLIP_destroy.yy",},
|
||||||
{"name":"node_FLIP_domain","order":3,"path":"scripts/node_FLIP_domain/node_FLIP_domain.yy",},
|
{"name":"node_FLIP_domain","order":4,"path":"scripts/node_FLIP_domain/node_FLIP_domain.yy",},
|
||||||
{"name":"node_FLIP_render","order":4,"path":"scripts/node_FLIP_render/node_FLIP_render.yy",},
|
{"name":"node_FLIP_group_inline","order":3,"path":"scripts/node_FLIP_group_inline/node_FLIP_group_inline.yy",},
|
||||||
|
{"name":"node_FLIP_render","order":5,"path":"scripts/node_FLIP_render/node_FLIP_render.yy",},
|
||||||
{"name":"node_FLIP_repel","order":12,"path":"scripts/node_FLIP_repel/node_FLIP_repel.yy",},
|
{"name":"node_FLIP_repel","order":12,"path":"scripts/node_FLIP_repel/node_FLIP_repel.yy",},
|
||||||
{"name":"node_FLIP_spawner","order":6,"path":"scripts/node_FLIP_spawner/node_FLIP_spawner.yy",},
|
{"name":"node_FLIP_spawner","order":6,"path":"scripts/node_FLIP_spawner/node_FLIP_spawner.yy",},
|
||||||
{"name":"node_FLIP_to_VFX","order":14,"path":"scripts/node_FLIP_to_VFX/node_FLIP_to_VFX.yy",},
|
{"name":"node_FLIP_to_VFX","order":14,"path":"scripts/node_FLIP_to_VFX/node_FLIP_to_VFX.yy",},
|
||||||
|
|
Binary file not shown.
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"spr":"s_node_icon",
|
"name":"FLIP to VFX",
|
||||||
|
"baseNode":"Node_FLIP_to_VFX",
|
||||||
|
"spr":"s_node_flip_to_VFX",
|
||||||
"pxc_version":11680.0,
|
"pxc_version":11680.0,
|
||||||
"show_in_recent":false,
|
"show_in_recent":false,
|
||||||
"baseNode":"Node_FLIP_to_VFX",
|
|
||||||
"io":[
|
"io":[
|
||||||
"fDomain",
|
"fDomain",
|
||||||
"particle"
|
"particle"
|
||||||
],
|
],
|
||||||
"name":"FLIP to VFX"
|
|
||||||
}
|
}
|
|
@ -37,7 +37,10 @@ function __particleObject() constructor {
|
||||||
|
|
||||||
__temp_pt = [ 0, 0 ];
|
__temp_pt = [ 0, 0 ];
|
||||||
static draw = function(exact, surf_w, surf_h) {
|
static draw = function(exact, surf_w, surf_h) {
|
||||||
if(!surface_exists(surf)) return;
|
if(!is_surface(surf)) {
|
||||||
|
draw_point_color(x, y, blend);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var _sw = surface_get_width(surf) * scx;
|
var _sw = surface_get_width(surf) * scx;
|
||||||
var _sh = surface_get_height(surf) * scy;
|
var _sh = surface_get_height(surf) * scy;
|
||||||
|
|
|
@ -48,9 +48,6 @@ function globalvar_viewer_draw(xx, yy, ww, _m, focus, hover, _scrollPane, rx, ry
|
||||||
var_drag_insert = max(0, j > var_dragging? j : j - 1);
|
var_drag_insert = max(0, j > var_dragging? j : j - 1);
|
||||||
|
|
||||||
if(j) {
|
if(j) {
|
||||||
// draw_set_color(merge_color(c_black, COLORS.panel_toolbar_separator, 0.75));
|
|
||||||
// draw_line_round(wd_x + ui(8), yy, wd_x + wd_w - ui(16), yy, 2);
|
|
||||||
|
|
||||||
yy += _pd_h;
|
yy += _pd_h;
|
||||||
hh += _pd_h;
|
hh += _pd_h;
|
||||||
}
|
}
|
||||||
|
@ -121,9 +118,16 @@ function globalvar_viewer_draw(xx, yy, ww, _m, focus, hover, _scrollPane, rx, ry
|
||||||
|
|
||||||
if(del != noone)
|
if(del != noone)
|
||||||
array_delete(_node.inputs, del, 1);
|
array_delete(_node.inputs, del, 1);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
padd = viewMode == INSP_VIEW_MODE.spacious? ui(8) : ui(4);
|
||||||
|
if(viewMode == INSP_VIEW_MODE.compact) {
|
||||||
|
yy += ui(4);
|
||||||
|
hh += ui(4);
|
||||||
|
}
|
||||||
|
|
||||||
for( var j = 0; j < array_length(_node.inputs); j++ ) {
|
for( var j = 0; j < array_length(_node.inputs); j++ ) {
|
||||||
var widg = drawWidget(xx, yy, ww, _m, _node.inputs[j], true, focus, hover, _scrollPane, rx, ry);
|
var widg = drawWidget(xx, yy, ww, _m, _node.inputs[j], true, hover, focus, _scrollPane, rx, ry);
|
||||||
var widH = widg[0];
|
var widH = widg[0];
|
||||||
var mbRight = widg[1];
|
var mbRight = widg[1];
|
||||||
var widHov = widg[2];
|
var widHov = widg[2];
|
||||||
|
|
|
@ -42,6 +42,8 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
|
||||||
|
|
||||||
#region left buttons
|
#region left buttons
|
||||||
var butx = xx;
|
var butx = xx;
|
||||||
|
var lb_x = xx + ui(20);
|
||||||
|
|
||||||
if(jun.connect_type == CONNECT_TYPE.input && jun.isAnimable() && !jun.expUse) { // Animation
|
if(jun.connect_type == CONNECT_TYPE.input && jun.isAnimable() && !jun.expUse) { // Animation
|
||||||
var index = jun.hasJunctionFrom()? 2 : jun.is_anim;
|
var index = jun.hasJunctionFrom()? 2 : jun.is_anim;
|
||||||
|
|
||||||
|
@ -49,8 +51,10 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
|
||||||
if(jun.is_anim) cc = COLORS._main_value_positive;
|
if(jun.is_anim) cc = COLORS._main_value_positive;
|
||||||
if(index == 2) cc = COLORS._main_accent;
|
if(index == 2) cc = COLORS._main_accent;
|
||||||
|
|
||||||
draw_sprite_ui_uniform(THEME.animate_clock, index, butx, lb_y, 1, cc, 0.8);
|
var _hov = _hover && point_in_circle(_m[0], _m[1], butx, lb_y, ui(10));
|
||||||
if(_hover && point_in_circle(_m[0], _m[1], butx, lb_y, ui(10))) {
|
draw_sprite_ui_uniform(THEME.animate_clock, index, butx, lb_y, 1, cc, .8 + .2 * _hov);
|
||||||
|
|
||||||
|
if(_hov) {
|
||||||
cHov = true;
|
cHov = true;
|
||||||
|
|
||||||
if(anim_hold != noone)
|
if(anim_hold != noone)
|
||||||
|
@ -72,8 +76,9 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
|
||||||
|
|
||||||
if(anim_hold != noone && mouse_release(mb_left)) anim_hold = noone;
|
if(anim_hold != noone && mouse_release(mb_left)) anim_hold = noone;
|
||||||
|
|
||||||
butx += ui(20);
|
|
||||||
if(!global_var) { // Visibility
|
if(!global_var) { // Visibility
|
||||||
|
butx += ui(20);
|
||||||
|
lb_x += ui(20);
|
||||||
var _visi = jun.isVisible();
|
var _visi = jun.isVisible();
|
||||||
|
|
||||||
draw_sprite_ui_uniform(THEME.junc_visible, _visi, butx, lb_y, 1,, 0.8);
|
draw_sprite_ui_uniform(THEME.junc_visible, _visi, butx, lb_y, 1,, 0.8);
|
||||||
|
@ -93,9 +98,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
|
||||||
visi_hold = jun.visible_manual;
|
visi_hold = jun.visible_manual;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else
|
|
||||||
draw_sprite_ui_uniform(THEME.node_use_expression, 0, butx, lb_y, 1,, 0.8);
|
|
||||||
|
|
||||||
if(visi_hold != noone && mouse_release(mb_left)) visi_hold = noone;
|
if(visi_hold != noone && mouse_release(mb_left)) visi_hold = noone;
|
||||||
|
|
||||||
|
@ -114,7 +117,6 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
|
||||||
|
|
||||||
draw_set_text(_font, fa_left, fa_center, cc);
|
draw_set_text(_font, fa_left, fa_center, cc);
|
||||||
var lb_w = ui(40 + 16) + string_width(_name);
|
var lb_w = ui(40 + 16) + string_width(_name);
|
||||||
var lb_x = ui(40) + xx;
|
|
||||||
|
|
||||||
if(jun.color != -1) {
|
if(jun.color != -1) {
|
||||||
draw_sprite_ext(THEME.timeline_color, 1, lb_x + ui(8), lb_y, 1, 1, 0, jun.color, 1);
|
draw_sprite_ext(THEME.timeline_color, 1, lb_x + ui(8), lb_y, 1, 1, 0, jun.color, 1);
|
||||||
|
@ -143,7 +145,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region label
|
#region draw name
|
||||||
draw_text_add(lb_x, lb_y, _name);
|
draw_text_add(lb_x, lb_y, _name);
|
||||||
|
|
||||||
if(jun.tooltip != "") { // Tooltip
|
if(jun.tooltip != "") { // Tooltip
|
||||||
|
|
|
@ -14,6 +14,7 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline(
|
||||||
is_simulation = true;
|
is_simulation = true;
|
||||||
update_on_frame = true;
|
update_on_frame = true;
|
||||||
managedRenderOrder = true;
|
managedRenderOrder = true;
|
||||||
|
loopable = true;
|
||||||
|
|
||||||
prev_nodes = [];
|
prev_nodes = [];
|
||||||
|
|
||||||
|
@ -51,7 +52,6 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline(
|
||||||
|
|
||||||
if(!string_pos("Node_VFX", _ins))
|
if(!string_pos("Node_VFX", _ins))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(_ins == "Node_VFX_Renderer" || _ins == "Node_VFX_Renderer_Output")
|
if(_ins == "Node_VFX_Renderer" || _ins == "Node_VFX_Renderer_Output")
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -80,13 +80,12 @@ function Node_VFX_Renderer(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
var surf_w = surface_get_width_safe(_outSurf);
|
var surf_w = surface_get_width_safe(_outSurf);
|
||||||
var surf_h = surface_get_height_safe(_outSurf);
|
var surf_h = surface_get_height_safe(_outSurf);
|
||||||
|
|
||||||
surface_set_shader(_outSurf, _type == PARTICLE_RENDER_TYPE.surface? sh_sample : noone);
|
surface_set_shader(_outSurf, noone);
|
||||||
if(_type == PARTICLE_RENDER_TYPE.surface)
|
var blend, parts, part, _part;
|
||||||
shader_set_interpolation(_outSurf);
|
|
||||||
|
|
||||||
for( var i = input_fix_len; i < array_length(inputs); i += data_length ) {
|
for( var i = input_fix_len, n = array_length(inputs); i < n; i += data_length ) {
|
||||||
var blend = inputs[i + 0].getValue(_time);
|
blend = inputs[i + 0].getValue(_time);
|
||||||
var parts = inputs[i + 1].getValue(_time);
|
parts = inputs[i + 1].getValue(_time);
|
||||||
|
|
||||||
switch(blend) {
|
switch(blend) {
|
||||||
case PARTICLE_BLEND_MODE.normal: BLEND_NORMAL break;
|
case PARTICLE_BLEND_MODE.normal: BLEND_NORMAL break;
|
||||||
|
@ -97,16 +96,16 @@ function Node_VFX_Renderer(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
if(!is_array(parts) || array_length(parts) == 0) continue;
|
if(!is_array(parts) || array_length(parts) == 0) continue;
|
||||||
if(!is_array(parts[0])) parts = [ parts ];
|
if(!is_array(parts[0])) parts = [ parts ];
|
||||||
|
|
||||||
for(var j = 0; j < array_length(parts); j++) {
|
for( var j = 0, m = array_length(parts); j < m; j++ ) {
|
||||||
var part = parts[j];
|
part = parts[j];
|
||||||
|
|
||||||
for(var k = 0; k < array_length(part); k++) {
|
|
||||||
var _part = part[k];
|
|
||||||
|
|
||||||
|
for( var k = 0, p = array_length(part); k < p; k++ ) {
|
||||||
|
_part = part[k];
|
||||||
_part.render_type = _type;
|
_part.render_type = _type;
|
||||||
_part.line_draw = _llife;
|
_part.line_draw = _llife;
|
||||||
|
|
||||||
if(_part.active || _type) _part.draw(_exact, surf_w, surf_h);
|
if(_part.active || _type)
|
||||||
|
_part.draw(_exact, surf_w, surf_h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -479,7 +479,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor {
|
||||||
|
|
||||||
if(dummy_input) dummy_input.index = _ina;
|
if(dummy_input) dummy_input.index = _ina;
|
||||||
inputs = _in;
|
inputs = _in;
|
||||||
refreshNodeDisplay();
|
setHeight();
|
||||||
|
|
||||||
if(input_display_dynamic == -1) input_display_list = _input_display_list;
|
if(input_display_dynamic == -1) input_display_list = _input_display_list;
|
||||||
}
|
}
|
||||||
|
|
|
@ -226,10 +226,10 @@ function Panel_Inspector() : PanelContent() constructor {
|
||||||
|
|
||||||
meta_steam_avatar = new checkBox(function() { STEAM_UGC_ITEM_AVATAR = !STEAM_UGC_ITEM_AVATAR; });
|
meta_steam_avatar = new checkBox(function() { STEAM_UGC_ITEM_AVATAR = !STEAM_UGC_ITEM_AVATAR; });
|
||||||
|
|
||||||
global_buttons = [
|
global_button_edit = button(function() /*=>*/ { meta_display[2][1] = false; var_editing = !var_editing; }).setIcon(THEME.gear_16, 0, COLORS._main_icon_light);
|
||||||
button(function() /*=>*/ { meta_display[2][1] = false; var_editing = !var_editing; } ).setIcon(THEME.gear_16, 0, COLORS._main_icon_light),
|
global_button_new = button(function() /*=>*/ { meta_display[2][1] = false; PROJECT.globalNode.createValue(); }).setIcon(THEME.add_16, 0, COLORS._main_value_positive);
|
||||||
button(function() /*=>*/ { meta_display[2][1] = false; PROJECT.globalNode.createValue(); } ).setIcon(THEME.add_16, 0, COLORS._main_value_positive),
|
global_buttons = [ global_button_edit ];
|
||||||
];
|
global_buttons_editing = [ global_button_edit, global_button_new ];
|
||||||
|
|
||||||
GM_Explore_draw_init();
|
GM_Explore_draw_init();
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -450,17 +450,18 @@ function Panel_Inspector() : PanelContent() constructor {
|
||||||
var _x1 = con_w;
|
var _x1 = con_w;
|
||||||
var _y1 = yy + ui(2);
|
var _y1 = yy + ui(2);
|
||||||
|
|
||||||
var _amo = array_length(global_buttons);
|
var _butts = var_editing? global_buttons_editing : global_buttons;
|
||||||
|
var _amo = array_length(_butts);
|
||||||
var _tw = (_bw + ui(4)) * _amo;
|
var _tw = (_bw + ui(4)) * _amo;
|
||||||
draw_sprite_stretched_ext(THEME.box_r5_clr, 0, con_w - _tw, yy, _tw, lbh, COLORS.panel_inspector_group_bg, 1);
|
draw_sprite_stretched_ext(THEME.box_r5_clr, 0, con_w - _tw, yy, _tw, lbh, COLORS.panel_inspector_group_bg, 1);
|
||||||
|
|
||||||
global_buttons[0].icon = var_editing? THEME.accept_16 : THEME.gear_16;
|
global_button_edit.icon = var_editing? THEME.accept_16 : THEME.gear_16;
|
||||||
global_buttons[0].icon_blend = var_editing? COLORS._main_value_positive : COLORS._main_icon_light;
|
global_button_edit.icon_blend = var_editing? COLORS._main_value_positive : COLORS._main_icon_light;
|
||||||
|
|
||||||
for (var j = 0, m = array_length(global_buttons); j < m; j++) {
|
for (var j = 0, m = array_length(_butts); j < m; j++) {
|
||||||
_x1 -= _bw + ui(4);
|
_x1 -= _bw + ui(4);
|
||||||
|
|
||||||
var _b = global_buttons[j];
|
var _b = _butts[j];
|
||||||
_b.setFocusHover(pFOCUS, _hover);
|
_b.setFocusHover(pFOCUS, _hover);
|
||||||
_b.draw(_x1 + ui(2), _y1, _bw, _bh, _m, THEME.button_hide_fill);
|
_b.draw(_x1 + ui(2), _y1, _bw, _bh, _m, THEME.button_hide_fill);
|
||||||
if(_b.inBBOX(_m)) contentPane.hover_content = true;
|
if(_b.inBBOX(_m)) contentPane.hover_content = true;
|
||||||
|
|
|
@ -48,12 +48,11 @@ function NodeTopoSort() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function NodeListSort(_nodeList) {
|
function NodeListSort(_nodeList) {
|
||||||
var _arr = [];
|
var _arr = __topoSort([], _nodeList);
|
||||||
__topoSort(_arr, _nodeList);
|
|
||||||
return _arr;
|
return _arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
function __sortNode(_arr, _node, _sorted) {
|
function __sortNode(_arr, _node, _sorted, _nodeMap = undefined) {
|
||||||
if(struct_has(_sorted, _node.node_id)) return;
|
if(struct_has(_sorted, _node.node_id)) return;
|
||||||
|
|
||||||
var _parents = [];
|
var _parents = [];
|
||||||
|
@ -62,6 +61,7 @@ function __sortNode(_arr, _node, _sorted) {
|
||||||
for( var i = 0, n = array_length(_prev); i < n; i++ ) {
|
for( var i = 0, n = array_length(_prev); i < n; i++ ) {
|
||||||
var _in = _prev[i];
|
var _in = _prev[i];
|
||||||
if(_in == noone || struct_has(_sorted, _in.node_id)) continue;
|
if(_in == noone || struct_has(_sorted, _in.node_id)) continue;
|
||||||
|
if(_nodeMap != undefined && !struct_has(_nodeMap, _in.node_id)) continue;
|
||||||
|
|
||||||
array_push(_parents, _in);
|
array_push(_parents, _in);
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ function __sortNode(_arr, _node, _sorted) {
|
||||||
__topoSort(_arr, _node.nodes, _sorted);
|
__topoSort(_arr, _node.nodes, _sorted);
|
||||||
|
|
||||||
for( var i = 0, n = array_length(_parents); i < n; i++ )
|
for( var i = 0, n = array_length(_parents); i < n; i++ )
|
||||||
__sortNode(_arr, _parents[i], _sorted);
|
__sortNode(_arr, _parents[i], _sorted, _nodeMap);
|
||||||
|
|
||||||
if(struct_has(_sorted, _node.node_id)) return;
|
if(struct_has(_sorted, _node.node_id)) return;
|
||||||
array_push(_arr, _node);
|
array_push(_arr, _node);
|
||||||
|
@ -83,39 +83,42 @@ function __sortNode(_arr, _node, _sorted) {
|
||||||
// print($" > Adding > {_node.name} | {_arr}");
|
// print($" > Adding > {_node.name} | {_arr}");
|
||||||
}
|
}
|
||||||
|
|
||||||
function __topoSort(_arr, _nodeArr, _sorted = {}) {
|
function __topoSort(_arr = [], _nodeArr = [], _sorted = {}) {
|
||||||
var _root = [];
|
var _leaf = [];
|
||||||
var _leftOver = [];
|
var _leftOver = [];
|
||||||
var _global = _nodeArr == PROJECT.nodes;
|
var _global = _nodeArr == PROJECT.nodes;
|
||||||
|
var _nodeMap = _global? undefined : {};
|
||||||
__temp_nodeList = _nodeArr;
|
__temp_nodeList = _nodeArr;
|
||||||
|
|
||||||
for( var i = 0, n = array_length(_nodeArr); i < n; i++ ) {
|
for( var i = 0, n = array_length(_nodeArr); i < n; i++ ) {
|
||||||
var _node = _nodeArr[i];
|
var _node = _nodeArr[i];
|
||||||
var _isRoot = true;
|
var _isLeaf = true;
|
||||||
|
|
||||||
|
if(!_global) _nodeMap[$ _node.node_id] = 1;
|
||||||
|
|
||||||
if(is_instanceof(_node, Node_Collection_Inline) && !_node.is_root) { array_push(_leftOver, _node); continue; }
|
if(is_instanceof(_node, Node_Collection_Inline) && !_node.is_root) { array_push(_leftOver, _node); continue; }
|
||||||
|
|
||||||
if(_node.attributes.show_update_trigger && !array_empty(_node.updatedOutTrigger.getJunctionTo())) {
|
if(_node.attributes.show_update_trigger && !array_empty(_node.updatedOutTrigger.getJunctionTo())) {
|
||||||
_isRoot = false;
|
_isLeaf = false;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
for( var j = 0, m = array_length(_node.outputs); j < m; j++ ) {
|
for( var j = 0, m = array_length(_node.outputs); j < m; j++ ) {
|
||||||
var _to = _node.outputs[j].getJunctionTo();
|
var _to = _node.outputs[j].getJunctionTo();
|
||||||
|
|
||||||
if(_global) _isRoot &= array_empty(_to);
|
if(_global) _isLeaf &= array_empty(_to);
|
||||||
else _isRoot &= !array_any(_to, function(_val) /*=>*/ {return array_exists(__temp_nodeList, _val.node)});
|
else _isLeaf &= !array_any(_to, function(_val) /*=>*/ {return array_exists(__temp_nodeList, _val.node)});
|
||||||
|
|
||||||
if(!_isRoot) break;
|
if(!_isLeaf) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_isRoot) array_push(_root, _node);
|
if(_isLeaf) array_push(_leaf, _node);
|
||||||
}
|
}
|
||||||
|
|
||||||
// print($"Root: {_root}");
|
// print($"Leaf: {_leaf}");
|
||||||
|
|
||||||
for( var i = 0, n = array_length(_root); i < n; i++ )
|
for( var i = 0, n = array_length(_leaf); i < n; i++ )
|
||||||
__sortNode(_arr, _root[i], _sorted);
|
__sortNode(_arr, _leaf[i], _sorted, _nodeMap);
|
||||||
|
|
||||||
for( var i = 0, n = array_length(_leftOver); i < n; i++ ) {
|
for( var i = 0, n = array_length(_leftOver); i < n; i++ ) {
|
||||||
if(!struct_has(_sorted, _leftOver[i].node_id))
|
if(!struct_has(_sorted, _leftOver[i].node_id))
|
||||||
|
@ -123,6 +126,7 @@ function __topoSort(_arr, _nodeArr, _sorted = {}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
__temp_nodeList = [];
|
__temp_nodeList = [];
|
||||||
|
return _arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
function __nodeLeafList(_arr) {
|
function __nodeLeafList(_arr) {
|
||||||
|
|
Loading…
Reference in a new issue