From a5810b934548fc3bf533287ac50fa56274308bd3 Mon Sep 17 00:00:00 2001 From: Tanasart Date: Thu, 25 Jul 2024 16:43:51 +0700 Subject: [PATCH] - [Blend] Fix warning popup when input is empty in tile mode. --- .../node_action_object/node_action_object.gml | 21 +++++++++++-------- scripts/node_blend/node_blend.gml | 16 +++++++------- scripts/node_frame/node_frame.gml | 4 ++-- scripts/node_registry/node_registry.gml | 7 ++++--- scripts/node_value/node_value.gml | 10 ++++----- scripts/node_value_types/node_value_types.gml | 14 +++++++++++++ .../panel_action_create.gml | 6 +++++- .../surface_functions/surface_functions.gml | 4 ++-- 8 files changed, 52 insertions(+), 30 deletions(-) diff --git a/scripts/node_action_object/node_action_object.gml b/scripts/node_action_object/node_action_object.gml index bbf7cb130..d82f842d7 100644 --- a/scripts/node_action_object/node_action_object.gml +++ b/scripts/node_action_object/node_action_object.gml @@ -20,7 +20,7 @@ static getName = function() { return name; } static getTooltip = function() { return tooltip; } - static build = function(_x = 0, _y = 0, _group = PANEL_GRAPH.getCurrentContext(), _param = {}) { #region + static build = function(_x = 0, _y = 0, _group = PANEL_GRAPH.getCurrentContext(), _param = {}) { var _n = {}; for( var i = 0, n = array_length(nodes); i < n; i++ ) { @@ -40,6 +40,7 @@ var _setVal = _setVals[j]; var _input = is_string(_setVal.index)? _node.inputMap[? _setVal.index] : _node.inputs[| _setVal.index]; if(_input == undefined) continue; + if(!value_type_direct_settable(_input.type)) continue; if(struct_has(_setVal, "value")) _input.setValue(_setVal.value); if(struct_has(_setVal, "unit")) _input.unit.setMode(_setVal.unit); @@ -51,6 +52,7 @@ var _key = _keys[j]; var _input = _node.inputs[| _key]; if(_input == undefined) continue; + if(!value_type_direct_settable(_input.type)) continue; var _setVal = _setVals[$ _key]; @@ -76,14 +78,14 @@ } return _n; - } #endregion + } - static serialize = function() { #region + static serialize = function() { var map = { name, tooltip, nodes, connections, tags }; return map; - } #endregion + } - static deserialize = function(path) { #region + static deserialize = function(path) { var map = json_load_struct(path); name = struct_try_get(map, "name", ""); @@ -107,7 +109,7 @@ } return self; - } #endregion + } } function NodeAction_create() : NodeAction() constructor { @@ -118,21 +120,22 @@ static build = function() { PANEL_GRAPH.createAction(); } } - function __initNodeActions(list) { + function __initNodeActions() { var root = $"{DIRECTORY}Actions"; directory_verify(root); root += "/Nodes"; directory_verify(root); - ds_list_add(list, new NodeAction_create()); + ds_list_clear(NODE_ACTION_LIST); + ds_list_add(NODE_ACTION_LIST, new NodeAction_create()); var f = file_find_first(root + "/*", 0); while (f != "") { if(filename_ext(f) == ".json") { var _c = new NodeAction().deserialize($"{root}/{f}"); - ds_list_add(list, _c); + ds_list_add(NODE_ACTION_LIST, _c); if(_c.location != noone) { var _cat = array_safe_get(_c.location, 0, ""); diff --git a/scripts/node_blend/node_blend.gml b/scripts/node_blend/node_blend.gml index 1ed557d32..43dc3455e 100644 --- a/scripts/node_blend/node_blend.gml +++ b/scripts/node_blend/node_blend.gml @@ -93,7 +93,7 @@ function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con drag_mx = 0; drag_my = 0; - static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { #region + static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) { var _surf = outputs[| 0].getValue(); if(is_array(_surf)) _surf = array_safe_get_fast(_surf, preview_index); if(is_struct(_surf)) return; @@ -145,9 +145,9 @@ function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con } } else draw_rectangle(_rx, _ry, _rx + _rw, _ry + _rh, true); - } #endregion + } - static step = function() { #region + static step = function() { var _back = getSingleValue(0); var _fore = getSingleValue(1); var _fill = getSingleValue(5); @@ -160,9 +160,9 @@ function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con inputs[| 7].setVisible(_outp == 4); inputs[| 14].setVisible(_fill == 0 && !_atlas); - } #endregion + } - static processData = function(_outSurf, _data, _output_index, _array_index) { #region + static processData = function(_outSurf, _data, _output_index, _array_index) { var _back = _data[0]; var _fore = _data[1]; var _type = _data[2]; @@ -264,12 +264,12 @@ function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con } else if(_fill == NODE_BLEND_FILL.stretch) { surface_set_shader(_foreDraw, noone,, BLEND.over); - draw_surface_stretched(_fore, 0, 0, ww, hh); + draw_surface_stretched_safe(_fore, 0, 0, ww, hh); surface_reset_shader(); } else if(_fill == NODE_BLEND_FILL.tile) { surface_set_shader(_foreDraw, noone,, BLEND.over); - draw_surface_tiled(_fore, 0, 0); + draw_surface_tiled_safe(_fore); surface_reset_shader(); } @@ -296,5 +296,5 @@ function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con } return _outSurf; - } #endregion + } } \ No newline at end of file diff --git a/scripts/node_frame/node_frame.gml b/scripts/node_frame/node_frame.gml index d5109d3d5..d368eff20 100644 --- a/scripts/node_frame/node_frame.gml +++ b/scripts/node_frame/node_frame.gml @@ -27,7 +27,7 @@ function Node_Frame(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { tb_name.hide = true; tb_name.align = fa_center; - name_height = 16; + name_height = 18; draw_x0 = 0; draw_y0 = 0; @@ -121,7 +121,7 @@ function Node_Frame(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { draw_sprite_stretched_ext(nm_spr, 0, draw_x0, draw_y0, _w, name_height, color, alpha * .75); draw_set_text(f_p2, fa_center, fa_bottom, COLORS._main_text); - draw_text_cut((draw_x0 + draw_x1) / 2, draw_y0 + name_height + 2, txt, _w - 4); + draw_text_cut((draw_x0 + draw_x1) / 2, draw_y0 + name_height + 1, txt, _w - 4); if(point_in_rectangle(_mx, _my, draw_x0, draw_y0, draw_x0 + _w, draw_y0 + name_height)) { if(PANEL_GRAPH.pFOCUS && DOUBLE_CLICK) diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index 05ddd68a9..cd02b0678 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -1051,9 +1051,10 @@ function __initNodes() { // addNodeObject(node, "DLL", s_node_gui_out, "Node_DLL", [1, Node_DLL]).setVersion(11750); #endregion - var actions = ds_list_create(); - addNodeCatagory("Action", actions); - __initNodeActions(actions); + globalvar NODE_ACTION_LIST; + NODE_ACTION_LIST = ds_list_create(); + addNodeCatagory("Action", NODE_ACTION_LIST); + __initNodeActions(); var customs = ds_list_create(); addNodeCatagory("Custom", customs); diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index ce9e712ac..2b4d25baf 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -44,7 +44,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru } if(struct_has(node, "inputMap")) { - if(_connect == JUNCTION_CONNECT.input) node.inputMap[? internalName] = self; + if(_connect == JUNCTION_CONNECT.input) node.inputMap[? internalName] = self; else if(_connect == JUNCTION_CONNECT.output) node.outputMap[? internalName] = self; } @@ -1541,14 +1541,14 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru return true; } #endregion - static getString = function() { #region + static getString = function() { var val = showValue(); if(type == VALUE_TYPE.text) return val; return json_beautify(val); - } #endregion + } - static setString = function(str) { #region + static setString = function(str) { if(connect_type == JUNCTION_CONNECT.output) return; if(type == VALUE_TYPE.text) { setValue(str); return; } @@ -1558,7 +1558,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru _dat = [ _dat ]; setValue(_dat); - } #endregion + } /////=========== CONNECT =========== diff --git a/scripts/node_value_types/node_value_types.gml b/scripts/node_value_types/node_value_types.gml index 4ec172141..848c26631 100644 --- a/scripts/node_value_types/node_value_types.gml +++ b/scripts/node_value_types/node_value_types.gml @@ -370,6 +370,20 @@ function value_type_from_string(str) { return VALUE_TYPE.any; } +function value_type_direct_settable(type) { + switch(type) { + case VALUE_TYPE.integer : + case VALUE_TYPE.float : + case VALUE_TYPE.boolean : + case VALUE_TYPE.color : + case VALUE_TYPE.path : + case VALUE_TYPE.text : + return true; + } + + return false; +} + function typeArray(_type) { switch(_type) { case VALUE_DISPLAY.range : diff --git a/scripts/panel_action_create/panel_action_create.gml b/scripts/panel_action_create/panel_action_create.gml index cb5f73ad2..3deb43715 100644 --- a/scripts/panel_action_create/panel_action_create.gml +++ b/scripts/panel_action_create/panel_action_create.gml @@ -73,6 +73,8 @@ function Panel_Action_Create() : PanelContent() constructor { if(spr) surface_save(spr, $"{DIRECTORY}Actions/Nodes/{name}.png"); close(); + + __initNodeActions(); }); b_create.text = __txtx("new_action_create", "Create"); @@ -113,6 +115,8 @@ function Panel_Action_Create() : PanelContent() constructor { for(var j = 0; j < ds_list_size(_n.inputs); j++) { var _in = _n.inputs[| j]; + if(!value_type_direct_settable(_in.type)) continue; + var _vali = _val[$ j]; var _ttg = false; @@ -201,7 +205,7 @@ function Panel_Action_Create() : PanelContent() constructor { _vals[$ j] = {}; if(_in.value_from == noone || !struct_has(_nmap, _in.value_from.node.node_id)) { - var _vl = _in.getValue(); + var _vl = _in.getValue(, false); if(!isEqual(_vl, _in.def_val)) _vals[$ j].value = _vl; continue; diff --git a/scripts/surface_functions/surface_functions.gml b/scripts/surface_functions/surface_functions.gml index 380933020..9171d850c 100644 --- a/scripts/surface_functions/surface_functions.gml +++ b/scripts/surface_functions/surface_functions.gml @@ -52,7 +52,7 @@ __channel_pos(surface); } #endregion - function draw_surface_tiled_safe(surface, _x, _y) { #region + function draw_surface_tiled_safe(surface, _x = 0, _y = 0) { #region INLINE if(is_struct(surface)) { @@ -69,7 +69,7 @@ __channel_pos(surface); } #endregion - function draw_surface_tiled_ext_safe(surface, _x, _y, _xs = 1, _ys = 1, _rot = 0, _col = c_white, _alpha = 1) { #region + function draw_surface_tiled_ext_safe(surface, _x = 0, _y = 0, _xs = 1, _ys = 1, _rot = 0, _col = c_white, _alpha = 1) { #region INLINE if(is_struct(surface)) {