diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 7bea213f3..954a1e954 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -316,7 +316,6 @@ {"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":"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_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",}, @@ -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_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_domain","order":3,"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_domain","order":4,"path":"scripts/node_FLIP_domain/node_FLIP_domain.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_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",}, diff --git a/datafiles/data/Nodes/Internal.zip b/datafiles/data/Nodes/Internal.zip index ffc8349de..d6f642f70 100644 Binary files a/datafiles/data/Nodes/Internal.zip and b/datafiles/data/Nodes/Internal.zip differ diff --git a/datafiles/data/Nodes/Internal/FLIP Fluid/Node_FLIP_to_VFX/info.json b/datafiles/data/Nodes/Internal/FLIP Fluid/Node_FLIP_to_VFX/info.json index a838f0df0..223ced036 100644 --- a/datafiles/data/Nodes/Internal/FLIP Fluid/Node_FLIP_to_VFX/info.json +++ b/datafiles/data/Nodes/Internal/FLIP Fluid/Node_FLIP_to_VFX/info.json @@ -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, "show_in_recent":false, - "baseNode":"Node_FLIP_to_VFX", "io":[ "fDomain", "particle" ], - "name":"FLIP to VFX" } \ No newline at end of file diff --git a/scripts/__VFX/__VFX.gml b/scripts/__VFX/__VFX.gml index cdad08f93..77e094478 100644 --- a/scripts/__VFX/__VFX.gml +++ b/scripts/__VFX/__VFX.gml @@ -37,7 +37,10 @@ function __particleObject() constructor { __temp_pt = [ 0, 0 ]; 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 _sh = surface_get_height(surf) * scy; diff --git a/scripts/globalvar_drawer/globalvar_drawer.gml b/scripts/globalvar_drawer/globalvar_drawer.gml index 87f422ebb..4828f726a 100644 --- a/scripts/globalvar_drawer/globalvar_drawer.gml +++ b/scripts/globalvar_drawer/globalvar_drawer.gml @@ -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); 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; hh += _pd_h; } @@ -121,9 +118,16 @@ function globalvar_viewer_draw(xx, yy, ww, _m, focus, hover, _scrollPane, rx, ry if(del != noone) array_delete(_node.inputs, del, 1); + } 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++ ) { - 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 mbRight = widg[1]; var widHov = widg[2]; diff --git a/scripts/nodeValue_drawer/nodeValue_drawer.gml b/scripts/nodeValue_drawer/nodeValue_drawer.gml index af0ed5c24..93c46919f 100644 --- a/scripts/nodeValue_drawer/nodeValue_drawer.gml +++ b/scripts/nodeValue_drawer/nodeValue_drawer.gml @@ -42,6 +42,8 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc #region left buttons var butx = xx; + var lb_x = xx + ui(20); + if(jun.connect_type == CONNECT_TYPE.input && jun.isAnimable() && !jun.expUse) { // Animation 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(index == 2) cc = COLORS._main_accent; - draw_sprite_ui_uniform(THEME.animate_clock, index, butx, lb_y, 1, cc, 0.8); - if(_hover && point_in_circle(_m[0], _m[1], butx, lb_y, ui(10))) { + var _hov = _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; if(anim_hold != noone) @@ -69,11 +73,12 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc } } } - + if(anim_hold != noone && mouse_release(mb_left)) anim_hold = noone; - butx += ui(20); if(!global_var) { // Visibility + butx += ui(20); + lb_x += ui(20); var _visi = jun.isVisible(); draw_sprite_ui_uniform(THEME.junc_visible, _visi, butx, lb_y, 1,, 0.8); @@ -87,15 +92,13 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc draw_sprite_ui_uniform(THEME.junc_visible, _visi, butx, lb_y, 1,, 1); TOOLTIP = __txt("Visibility"); - + if(mouse_press(mb_left, _focus)) { jun.setVisibleManual(_visi? -1 : 1); 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; @@ -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); var lb_w = ui(40 + 16) + string_width(_name); - var lb_x = ui(40) + xx; if(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 - #region label + #region draw name draw_text_add(lb_x, lb_y, _name); if(jun.tooltip != "") { // Tooltip diff --git a/scripts/node_VFX_group_inline/node_VFX_group_inline.gml b/scripts/node_VFX_group_inline/node_VFX_group_inline.gml index c02bb1541..c2f3095ac 100644 --- a/scripts/node_VFX_group_inline/node_VFX_group_inline.gml +++ b/scripts/node_VFX_group_inline/node_VFX_group_inline.gml @@ -14,6 +14,7 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline( is_simulation = true; update_on_frame = true; managedRenderOrder = true; + loopable = true; prev_nodes = []; @@ -51,7 +52,6 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline( if(!string_pos("Node_VFX", _ins)) continue; - if(_ins == "Node_VFX_Renderer" || _ins == "Node_VFX_Renderer_Output") continue; diff --git a/scripts/node_VFX_renderer/node_VFX_renderer.gml b/scripts/node_VFX_renderer/node_VFX_renderer.gml index 605e54f2e..190d4a4eb 100644 --- a/scripts/node_VFX_renderer/node_VFX_renderer.gml +++ b/scripts/node_VFX_renderer/node_VFX_renderer.gml @@ -42,7 +42,7 @@ function Node_VFX_Renderer(_x, _y, _group = noone) : Node(_x, _y, _group) constr array_push(input_display_list, ["Particle", false], index + 0, index + 1); return inputs[index + 1]; - } + } setDynamicInput(2, true, VALUE_TYPE.particle); dyna_input_check_shift = 1; @@ -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_h = surface_get_height_safe(_outSurf); - surface_set_shader(_outSurf, _type == PARTICLE_RENDER_TYPE.surface? sh_sample : noone); - if(_type == PARTICLE_RENDER_TYPE.surface) - shader_set_interpolation(_outSurf); + surface_set_shader(_outSurf, noone); + var blend, parts, part, _part; - for( var i = input_fix_len; i < array_length(inputs); i += data_length ) { - var blend = inputs[i + 0].getValue(_time); - var parts = inputs[i + 1].getValue(_time); + for( var i = input_fix_len, n = array_length(inputs); i < n; i += data_length ) { + blend = inputs[i + 0].getValue(_time); + parts = inputs[i + 1].getValue(_time); switch(blend) { 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[0])) parts = [ parts ]; - for(var j = 0; j < array_length(parts); j++) { - var part = parts[j]; + for( var j = 0, m = array_length(parts); j < m; 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.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); } } } diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index cc71f7813..e12981649 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -479,7 +479,7 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor { if(dummy_input) dummy_input.index = _ina; inputs = _in; - refreshNodeDisplay(); + setHeight(); if(input_display_dynamic == -1) input_display_list = _input_display_list; } diff --git a/scripts/panel_inspector/panel_inspector.gml b/scripts/panel_inspector/panel_inspector.gml index 49173532d..a30b9783d 100644 --- a/scripts/panel_inspector/panel_inspector.gml +++ b/scripts/panel_inspector/panel_inspector.gml @@ -226,10 +226,10 @@ function Panel_Inspector() : PanelContent() constructor { meta_steam_avatar = new checkBox(function() { STEAM_UGC_ITEM_AVATAR = !STEAM_UGC_ITEM_AVATAR; }); - global_buttons = [ - 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; PROJECT.globalNode.createValue(); } ).setIcon(THEME.add_16, 0, COLORS._main_value_positive), - ]; + global_button_edit = 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); + global_buttons = [ global_button_edit ]; + global_buttons_editing = [ global_button_edit, global_button_new ]; GM_Explore_draw_init(); #endregion @@ -450,17 +450,18 @@ function Panel_Inspector() : PanelContent() constructor { var _x1 = con_w; 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; 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_buttons[0].icon_blend = var_editing? COLORS._main_value_positive : COLORS._main_icon_light; + global_button_edit.icon = var_editing? THEME.accept_16 : THEME.gear_16; + 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); - var _b = global_buttons[j]; + var _b = _butts[j]; _b.setFocusHover(pFOCUS, _hover); _b.draw(_x1 + ui(2), _y1, _bw, _bh, _m, THEME.button_hide_fill); if(_b.inBBOX(_m)) contentPane.hover_content = true; diff --git a/scripts/render_data/render_data.gml b/scripts/render_data/render_data.gml index 219fe80e4..76daddde9 100644 --- a/scripts/render_data/render_data.gml +++ b/scripts/render_data/render_data.gml @@ -48,12 +48,11 @@ function NodeTopoSort() { } function NodeListSort(_nodeList) { - var _arr = []; - __topoSort(_arr, _nodeList); + var _arr = __topoSort([], _nodeList); return _arr; } -function __sortNode(_arr, _node, _sorted) { +function __sortNode(_arr, _node, _sorted, _nodeMap = undefined) { if(struct_has(_sorted, _node.node_id)) return; var _parents = []; @@ -62,7 +61,8 @@ function __sortNode(_arr, _node, _sorted) { for( var i = 0, n = array_length(_prev); i < n; i++ ) { var _in = _prev[i]; if(_in == noone || struct_has(_sorted, _in.node_id)) continue; - + if(_nodeMap != undefined && !struct_has(_nodeMap, _in.node_id)) continue; + array_push(_parents, _in); } @@ -72,7 +72,7 @@ function __sortNode(_arr, _node, _sorted) { __topoSort(_arr, _node.nodes, _sorted); 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; array_push(_arr, _node); @@ -83,39 +83,42 @@ function __sortNode(_arr, _node, _sorted) { // print($" > Adding > {_node.name} | {_arr}"); } -function __topoSort(_arr, _nodeArr, _sorted = {}) { - var _root = []; +function __topoSort(_arr = [], _nodeArr = [], _sorted = {}) { + var _leaf = []; var _leftOver = []; var _global = _nodeArr == PROJECT.nodes; + var _nodeMap = _global? undefined : {}; __temp_nodeList = _nodeArr; for( var i = 0, n = array_length(_nodeArr); i < n; 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(_node.attributes.show_update_trigger && !array_empty(_node.updatedOutTrigger.getJunctionTo())) { - _isRoot = false; + _isLeaf = false; } else { for( var j = 0, m = array_length(_node.outputs); j < m; j++ ) { var _to = _node.outputs[j].getJunctionTo(); - if(_global) _isRoot &= array_empty(_to); - else _isRoot &= !array_any(_to, function(_val) /*=>*/ {return array_exists(__temp_nodeList, _val.node)}); + if(_global) _isLeaf &= array_empty(_to); + 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++ ) - __sortNode(_arr, _root[i], _sorted); + for( var i = 0, n = array_length(_leaf); i < n; i++ ) + __sortNode(_arr, _leaf[i], _sorted, _nodeMap); for( var i = 0, n = array_length(_leftOver); i < n; i++ ) { if(!struct_has(_sorted, _leftOver[i].node_id)) @@ -123,6 +126,7 @@ function __topoSort(_arr, _nodeArr, _sorted = {}) { } __temp_nodeList = []; + return _arr; } function __nodeLeafList(_arr) {