From cbf3c51db930db48c445e890bf874195bdc9470a Mon Sep 17 00:00:00 2001 From: Tanasart Date: Thu, 13 Feb 2025 10:29:34 +0700 Subject: [PATCH] csv --- PixelComposer.resource_order | 2 + PixelComposer.yyp | 2 + datafiles/data/Nodes/Internal.zip | Bin 9101824 -> 9102148 bytes .../Array/Node_Array_Flattern/info.json | 10 ++ datafiles/data/Nodes/display_data.json | 1 + objects/o_dialog_arrayBox/Create_0.gml | 49 ++++-- scripts/globals/globals.gml | 2 +- .../node_array_csv_parse.gml | 139 +++++++++++++++++- .../node_array_flattern.gml | 31 ++++ .../node_array_flattern.yy | 14 ++ .../node_csv_file_read/node_csv_file_read.gml | 23 ++- scripts/node_group_input/node_group_input.gml | 111 +++++++------- scripts/node_stagger/node_stagger.gml | 15 +- scripts/textArea/textArea.gml | 6 +- scripts/textArrayBox/textArrayBox.gml | 123 +++++++++++----- .../119dc552-4005-46ba-98cb-42697347e056.png | Bin 0 -> 1868 bytes .../1fe4c9ea-5e40-468d-85ac-3aeacbc2e89e.png | Bin 0 -> 1868 bytes .../s_node_array_flattern.yy | 90 ++++++++++++ 18 files changed, 474 insertions(+), 144 deletions(-) create mode 100644 datafiles/data/Nodes/Internal/Values/Array/Node_Array_Flattern/info.json create mode 100644 scripts/node_array_flattern/node_array_flattern.gml create mode 100644 scripts/node_array_flattern/node_array_flattern.yy create mode 100644 sprites/s_node_array_flattern/119dc552-4005-46ba-98cb-42697347e056.png create mode 100644 sprites/s_node_array_flattern/layers/119dc552-4005-46ba-98cb-42697347e056/1fe4c9ea-5e40-468d-85ac-3aeacbc2e89e.png create mode 100644 sprites/s_node_array_flattern/s_node_array_flattern.yy diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 92e2ad620..cb00074da 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -733,6 +733,7 @@ {"name":"node_array_copy","order":14,"path":"scripts/node_array_copy/node_array_copy.yy",}, {"name":"node_array_csv_parse","order":15,"path":"scripts/node_array_csv_parse/node_array_csv_parse.yy",}, {"name":"node_array_find","order":1,"path":"scripts/node_array_find/node_array_find.yy",}, + {"name":"node_array_flattern","order":24,"path":"scripts/node_array_flattern/node_array_flattern.yy",}, {"name":"node_array_get","order":7,"path":"scripts/node_array_get/node_array_get.yy",}, {"name":"node_array_length","order":8,"path":"scripts/node_array_length/node_array_length.yy",}, {"name":"node_array_pin","order":22,"path":"scripts/node_array_pin/node_array_pin.yy",}, @@ -1955,6 +1956,7 @@ {"name":"s_node_array_copy","order":4,"path":"sprites/s_node_array_copy/s_node_array_copy.yy",}, {"name":"s_node_array_csv_parse","order":19,"path":"sprites/s_node_array_csv_parse/s_node_array_csv_parse.yy",}, {"name":"s_node_array_find","order":5,"path":"sprites/s_node_array_find/s_node_array_find.yy",}, + {"name":"s_node_array_flattern","order":24,"path":"sprites/s_node_array_flattern/s_node_array_flattern.yy",}, {"name":"s_node_array_get","order":6,"path":"sprites/s_node_array_get/s_node_array_get.yy",}, {"name":"s_node_array_insert","order":7,"path":"sprites/s_node_array_insert/s_node_array_insert.yy",}, {"name":"s_node_array_length","order":8,"path":"sprites/s_node_array_length/s_node_array_length.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index c9066b591..d2b3f7b1f 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -1903,6 +1903,7 @@ {"id":{"name":"node_array_copy","path":"scripts/node_array_copy/node_array_copy.yy",},}, {"id":{"name":"node_array_csv_parse","path":"scripts/node_array_csv_parse/node_array_csv_parse.yy",},}, {"id":{"name":"node_array_find","path":"scripts/node_array_find/node_array_find.yy",},}, + {"id":{"name":"node_array_flattern","path":"scripts/node_array_flattern/node_array_flattern.yy",},}, {"id":{"name":"node_array_get","path":"scripts/node_array_get/node_array_get.yy",},}, {"id":{"name":"node_array_insert","path":"scripts/node_array_insert/node_array_insert.yy",},}, {"id":{"name":"node_array_length","path":"scripts/node_array_length/node_array_length.yy",},}, @@ -3291,6 +3292,7 @@ {"id":{"name":"s_node_array_copy","path":"sprites/s_node_array_copy/s_node_array_copy.yy",},}, {"id":{"name":"s_node_array_csv_parse","path":"sprites/s_node_array_csv_parse/s_node_array_csv_parse.yy",},}, {"id":{"name":"s_node_array_find","path":"sprites/s_node_array_find/s_node_array_find.yy",},}, + {"id":{"name":"s_node_array_flattern","path":"sprites/s_node_array_flattern/s_node_array_flattern.yy",},}, {"id":{"name":"s_node_array_get","path":"sprites/s_node_array_get/s_node_array_get.yy",},}, {"id":{"name":"s_node_array_insert","path":"sprites/s_node_array_insert/s_node_array_insert.yy",},}, {"id":{"name":"s_node_array_length","path":"sprites/s_node_array_length/s_node_array_length.yy",},}, diff --git a/datafiles/data/Nodes/Internal.zip b/datafiles/data/Nodes/Internal.zip index 0629f937db68c640d1991c6f7ff60840d88c8b89..6089c5b5373838489f587d4a70130c6cd83df8e9 100644 GIT binary patch delta 4554 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/ { + for( var i = 0, n = array_length(__sort); i < n; i++ ) { + var _srt = __sort[i]; + var _res = _srt[0]? sortValueAsc(a, b, _srt[1]) : sortValueDec(a, b, _srt[1]); + if(_res != 0) return _res; + } + + return 0; + }); + + ////- OUTPUT + + if(_struct && _head != noone) { + if(!array_empty(_ocol)) { + var _a = []; + + for( var i = 0, n = array_length(_sarr); i < n; i++ ) { + var _rw = {}; + for( var j = 0, m = array_length(outCol); j < m; j++ ) + _rw[$ outCol[j]] = _sarr[i][$ outCol[j]]; + _a[i] = _rw; + } + + outputs[0].setValue(_a); + + } else + outputs[0].setValue(_sarr); + + } else { + var outCol = array_empty(_ocol)? _head : _ocol; + var _a = []; + + for( var i = 0, n = array_length(_sarr); i < n; i++ ) { + var _rw = []; + for( var j = 0, m = array_length(outCol); j < m; j++ ) + _rw[j] = _sarr[i][$ outCol[j]]; + _a[i] = _rw; + } + + outputs[0].setValue(_a); + } } static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { diff --git a/scripts/node_array_flattern/node_array_flattern.gml b/scripts/node_array_flattern/node_array_flattern.gml new file mode 100644 index 000000000..be7647b54 --- /dev/null +++ b/scripts/node_array_flattern/node_array_flattern.gml @@ -0,0 +1,31 @@ +function Node_Array_Flattern(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Array Flattern"; + setDimension(96, 48); + + newInput(0, nodeValue("Array in", self, CONNECT_TYPE.input, VALUE_TYPE.any, [])) + .setVisible(true, true); + + newOutput(0, nodeValue_Output("Flatterned Array", self, VALUE_TYPE.any, [])); + + static update = function(frame = CURRENT_FRAME) { + var arr = getInputData(0); + + inputs[0].setType(VALUE_TYPE.any); + outputs[0].setType(VALUE_TYPE.any); + + if(!is_array(arr)) return; + + if(inputs[0].value_from != noone) { + inputs[0].setType(inputs[0].value_from.type); + outputs[0].setType(inputs[0].value_from.type); + } + + var _arr = array_spread(arr); + outputs[0].setValue(_arr); + } + + static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { + var bbox = drawGetBbox(xx, yy, _s); + draw_sprite_fit(s_node_array_flattern, 0, bbox.xc, bbox.yc, bbox.w, bbox.h); + } +} \ No newline at end of file diff --git a/scripts/node_array_flattern/node_array_flattern.yy b/scripts/node_array_flattern/node_array_flattern.yy new file mode 100644 index 000000000..290292e7f --- /dev/null +++ b/scripts/node_array_flattern/node_array_flattern.yy @@ -0,0 +1,14 @@ +{ + "$GMScript":"v1", + "%Name":"node_array_flattern", + "isCompatibility":false, + "isDnD":false, + "name":"node_array_flattern", + "parent":{ + "name":"array", + "path":"folders/nodes/data/value/array.yy", + }, + "resourceType":"GMScript", + "resourceVersion":"2.0", + "tags":[], +} \ No newline at end of file diff --git a/scripts/node_csv_file_read/node_csv_file_read.gml b/scripts/node_csv_file_read/node_csv_file_read.gml index 56a690812..00882330d 100644 --- a/scripts/node_csv_file_read/node_csv_file_read.gml +++ b/scripts/node_csv_file_read/node_csv_file_read.gml @@ -28,14 +28,13 @@ function Node_create_CSV_File_Read_path(_x, _y, path) { function Node_CSV_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { name = "CSV File In"; color = COLORS.node_blend_input; - - w = 128; + w = 128; newInput(0, nodeValue_Path("Path", self, "")) .setDisplay(VALUE_DISPLAY.path_load, { filter: "CSV file|*.csv" }) .rejectArray(); - newInput(1, nodeValue_Bool("Convert to number", self, false)) + newInput(1, nodeValue_Bool("Convert to Number", self, false)) .rejectArray(); newOutput(0, nodeValue_Output("Content", self, VALUE_TYPE.text, "")); @@ -43,22 +42,21 @@ function Node_CSV_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const newOutput(1, nodeValue_Output("Path", self, VALUE_TYPE.path, "")) .setVisible(true, true); + input_display_list = [ 0, + ["Data", false], 1, + ]; + content = ""; path_current = ""; edit_time = 0; attributes.file_checker = true; - array_push(attributeEditors, [ "File Watcher", function() { return attributes.file_checker; }, - new checkBox(function() { attributes.file_checker = !attributes.file_checker; }) ]); + array_push(attributeEditors, [ "File Watcher", function() /*=>*/ {return attributes.file_checker}, new checkBox(function() /*=>*/ { attributes.file_checker = !attributes.file_checker; }) ]); first_update = false; on_drop_file = function(path) { - if(updatePaths(path)) { - doUpdate(); - return true; - } - + if(updatePaths(path)) { doUpdate(); return true; } return false; } @@ -66,13 +64,12 @@ function Node_CSV_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const path = path_get(path); if(path == -1) return false; - var ext = string_lower(filename_ext(path)); - var _name = string_replace(filename_name(path), filename_ext(path), ""); + var ext = string_lower(filename_ext(path)); + var _name = filename_name_only(path); if(ext != ".csv") return false; outputs[1].setValue(path); - content = file_text_read_all_lines(path); var convert = getInputData(1); diff --git a/scripts/node_group_input/node_group_input.gml b/scripts/node_group_input/node_group_input.gml index 9db77f628..4ed3f499e 100644 --- a/scripts/node_group_input/node_group_input.gml +++ b/scripts/node_group_input/node_group_input.gml @@ -8,7 +8,7 @@ globalvar GROUP_IO_TYPE_NAME, GROUP_IO_TYPE_MAP, GROUP_IO_DISPLAY; -1, "3D Mesh", "3D Light", "3D Camera", "3D Scene", "3D Material", -1, "PCX", "Audio", "Fluid Domain", - "SDF", + "SDF", "Gradient", ]; GROUP_IO_TYPE_MAP = [ VALUE_TYPE.integer, VALUE_TYPE.float, VALUE_TYPE.boolean, VALUE_TYPE.color, VALUE_TYPE.surface, @@ -18,50 +18,51 @@ globalvar GROUP_IO_TYPE_NAME, GROUP_IO_TYPE_MAP, GROUP_IO_DISPLAY; noone, VALUE_TYPE.d3Mesh, VALUE_TYPE.d3Light, VALUE_TYPE.d3Camera, VALUE_TYPE.d3Scene, VALUE_TYPE.d3Material, noone, VALUE_TYPE.PCXnode, VALUE_TYPE.audioBit, VALUE_TYPE.fdomain, - VALUE_TYPE.sdf, + VALUE_TYPE.sdf, VALUE_TYPE.gradient, ]; GROUP_IO_DISPLAY = [ - /*Integer*/ [ "Default", "Range", "Rotation", "Rotation range", "Slider", "Slider range", "Padding", "Vector", "Vector range", "Area", "Enum button", "Menu scroll" ], - /*Float*/ [ "Default", "Range", "Rotation", "Rotation range", "Slider", "Slider range", "Padding", "Vector", "Vector range", "Area" ], - /*Boolean*/ [ "Default" ], - /*Color*/ [ "Default", "Gradient", "Palette" ], - /*Surface*/ [ "Default" ], + /*Integer*/ [ "Integer", "Range", "Rotation", "Rotation range", "Slider", "Slider range", "Padding", "Vector", "Vector range", "Area", "Enum button", "Menu scroll" ], + /*Float*/ [ "Float", "Range", "Rotation", "Rotation range", "Slider", "Slider range", "Padding", "Vector", "Vector range", "Area" ], + /*Boolean*/ [ "Boolean" ], + /*Color*/ [ "Color", "Palette" ], + /*Surface*/ [ "Surface" ], - /*Path*/ [ "Default" ], + /*Path*/ [ "Path" ], /*Curve*/ [ "Curve", ], - /*Text*/ [ "Default" ], - /*Object*/ [ "Default" ], - /*Node*/ [ "Default" ], + /*Text*/ [ "Text" ], + /*Object*/ [ "Object" ], + /*Node*/ [ "Node" ], - /*3D*/ [ "Default" ], - /*Any*/ [ "Default" ], - /*Pathnode*/ [ "Default" ], - /*Particle*/ [ "Default" ], - /*Rigid*/ [ "Default" ], + /*3D*/ [ "-" ], + /*Any*/ [ "Any" ], + /*Pathnode*/ [ "Pathnode" ], + /*Particle*/ [ "Particle" ], + /*Rigid*/ [ "Rigidbody Object" ], - /*Sdomain*/ [ "Default" ], - /*Struct*/ [ "Default" ], - /*Strand*/ [ "Default" ], - /*Mesh*/ [ "Default" ], - /*Trigger*/ [ "Default" ], + /*Sdomain*/ [ "Domain" ], + /*Struct*/ [ "Struct" ], + /*Strand*/ [ "Strand" ], + /*Mesh*/ [ "Mesh" ], + /*Trigger*/ [ "Trigger" ], //=========================// - /*Noone*/ [ "Default" ], - /*3D Mesh*/ [ "Default" ], - /*3D Light*/ [ "Default" ], - /*3D Camera*/ [ "Default" ], - /*3D Scene*/ [ "Default" ], + /*Noone*/ [ "-" ], + /*3D Mesh*/ [ "3D Mesh" ], + /*3D Light*/ [ "3D Light" ], + /*3D Camera*/ [ "3D Camera" ], + /*3D Scene*/ [ "3D Scene" ], - /*3D Material*/ [ "Default" ], - /*noone*/ [ "Default" ], - /*PCX*/ [ "Default" ], - /*Audio*/ [ "Default" ], - /*Fdomain*/ [ "Default" ], + /*3D Material*/ [ "3D Material" ], + /*noone*/ [ "-" ], + /*PCX*/ [ "PCX" ], + /*Audio*/ [ "Audio" ], + /*Fdomain*/ [ "Fdomain" ], - /*SDF*/ [ "Default" ], + /*SDF*/ [ "SDF" ], + /*Gradient*/ [ "Gradient" ], ]; #endregion @@ -146,42 +147,31 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru attributes.inherit_type = false; var ind = array_find(GROUP_IO_TYPE_MAP, juncTo.type); - if(ind == -1) return; - outputs[0].setType(juncTo.type); - inputs[2].setValue(ind); + + if(ind != -1) inputs[2].setValue(ind); switch(instanceof(juncTo)) { case "__NodeValue_Vec2" : case "__NodeValue_Dimension" : - inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Vector")); - inputs[4].setValue(0); - break; + inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Vector")); inputs[4].setValue(0); break; case "__NodeValue_Vec2_Range" : - inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Vector range")); - inputs[4].setValue(0); - break; + inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Vector range")); inputs[4].setValue(0); break; case "__NodeValue_Vec3" : - inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Vector")); - inputs[4].setValue(1); - break; + inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Vector")); inputs[4].setValue(1); break; case "__NodeValue_Vec3_Range" : - inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Vector range")); - inputs[4].setValue(1); - break; + inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Vector range")); inputs[4].setValue(1); break; case "__NodeValue_Vec4" : - inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Vector")); - inputs[4].setValue(2); - break; + inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Vector")); inputs[4].setValue(2); break; case "__NodeValue_Rotation" : - inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Rotation")); - inputs[4].setValue(2); - break; + inputs[0].setValue(array_find(GROUP_IO_DISPLAY[0], "Rotation")); inputs[4].setValue(2); break; + + case "__NodeValue_Palette" : inputs[0].setValue(1); break; } juncTo.value_from = noone; @@ -274,12 +264,9 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru if(index == 2) { if(outputs[0].type != _val_type) { - var _o = outputs[0]; - for(var j = 0; j < array_length(_o.value_to); j++) { - var _to = _o.value_to[j]; - if(_to.value_from == _o) - _to.removeFrom(); - } + var _to = outputs[0].getJunctionTo(); + for( var i = 0, n = array_length(_to); i < n; i++ ) + _to[i].removeFrom(); } inputs[0].setValue(0); @@ -307,6 +294,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru inParent.def_val = 0; inParent.setDisplay(VALUE_DISPLAY.slider, { range: [_range[0], _range[1], _step] }); break; + case "Slider range" : if(!is_array(_val) || array_length(_val) != 2) inParent.animator = new valueAnimator([0, 0], inParent); @@ -355,12 +343,14 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru inParent.def_val = [0, 0]; break; + case 1 : if(!is_array(_val) || array_length(_val) != 3) inParent.animator = new valueAnimator([0, 0, 0], inParent); inParent.def_val = [0, 0, 0]; break; + case 2 : if(!is_array(_val) || array_length(_val) != 4) inParent.animator = new valueAnimator([0, 0, 0, 0], inParent); @@ -399,8 +389,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru outputs[0].setType(inParent.type); inParent.animator = new valueAnimator(new gradientObject(cola(c_white)), inParent); - - inParent.def_val = new gradientObject(cola(c_white)); + inParent.def_val = new gradientObject(cola(c_white)); inParent.setDisplay(VALUE_DISPLAY._default); break; diff --git a/scripts/node_stagger/node_stagger.gml b/scripts/node_stagger/node_stagger.gml index c7b5eeaf3..899355b48 100644 --- a/scripts/node_stagger/node_stagger.gml +++ b/scripts/node_stagger/node_stagger.gml @@ -3,9 +3,9 @@ function Node_Stagger(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c newInput(0, nodeValue_Surface("Surface", self)); - newInput(1, nodeValue_Int("Delay Step", self, 1)); + newInput(1, nodeValue_Float("Delay Step", self, 1)); - newInput(2, nodeValue_Int("Delay Amount", self, 1)); + newInput(2, nodeValue_Float("Delay Amount", self, 1)); newInput(3, nodeValue_Curve("Stagger Curve", self, CURVE_DEF_01)); @@ -47,22 +47,19 @@ function Node_Stagger(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c var _sh = surface_get_height_safe(_surf); surf_indexes[_array_index][_time] = surface_verify(surf_indexes[_array_index][_time], _sw, _sh); - surface_set_target(surf_indexes[_array_index][_time]); - DRAW_CLEAR + surface_set_shader(surf_indexes[_array_index][_time]); draw_surface_safe(_surf); - surface_reset_target(); + surface_reset_shader(); _output = surface_verify(_output, _sw, _sh); - surface_set_target(_output); - DRAW_CLEAR - + surface_set_shader(_output); if(0 <= _frtm && _frtm < TOTAL_FRAMES) { draw_surface_safe(surf_indexes[_array_index][_frtm]); surface_free(surf_indexes[_array_index][_frtm]); surf_indexes[_array_index][_frtm] = 0; } - surface_reset_target(); + surface_reset_shader(); return _output; } diff --git a/scripts/textArea/textArea.gml b/scripts/textArea/textArea.gml index 10b648422..e4085ba90 100644 --- a/scripts/textArea/textArea.gml +++ b/scripts/textArea/textArea.gml @@ -1012,7 +1012,7 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor text_y_max = max(0, total_h - hh + 16); text_y = lerp_float(text_y, text_y_to, 5); - if(hover) { + if(ihover) { if(mouse_wheel_down()) text_y_to = clamp(text_y_to - ui(64) * SCROLL_SPEED, -text_y_max, 0); if(mouse_wheel_up()) text_y_to = clamp(text_y_to + ui(64) * SCROLL_SPEED, -text_y_max, 0); } @@ -1034,12 +1034,12 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor } if(text_y_max) { - var hov = hover && point_in_rectangle(_m[0], _m[1], scr_x - 3, _y, _x + _w, _y + _h); + var hov = ihover && point_in_rectangle(_m[0], _m[1], scr_x - 3, _y, _x + _w, _y + _h); draw_sprite_stretched_ext(THEME.ui_scrollbar, 0, scr_x, scr_y, scr_w, scr_h, COLORS.scrollbar_bg, 1); draw_sprite_stretched_ext(THEME.ui_scrollbar, 0, scr_x, bar_y, scr_w, bar_h, hov || text_scrolling? COLORS.scrollbar_hover : COLORS.scrollbar_idle, 1); - if(mouse_press(mb_left, hov && active)) { + if(hov && mouse_press(mb_left, iactive)) { text_scrolling = true; text_scroll_sy = text_y; text_scroll_my = _m[1]; diff --git a/scripts/textArrayBox/textArrayBox.gml b/scripts/textArrayBox/textArrayBox.gml index 044b56d9b..6b65da1ef 100644 --- a/scripts/textArrayBox/textArrayBox.gml +++ b/scripts/textArrayBox/textArrayBox.gml @@ -7,10 +7,13 @@ function textArrayBox(arraySet, data, onModify = noone) : widget() constructor { hide = false; open = false; + mode = 0; + + pressed = false; + dragging = noone; static drawParam = function(params) { setParam(params); - return draw(params.x, params.y, params.w, params.h, params.m, params.rx, params.ry); } @@ -21,67 +24,111 @@ function textArrayBox(arraySet, data, onModify = noone) : widget() constructor { if(getArray != noone) arraySet = getArray(); - var tx = _x + ui(4); - var ty = _y + ui(4); - var hh = line_get_height(font, ui(4)); - var th = hh + ui(8); - - draw_set_text(font, fa_left, fa_center, COLORS._main_text); - for( var i = 0, n = array_length(arraySet); i < n; i++ ) { - var ww = string_width(arraySet[i]) + ui(16); - if(tx + ww + ui(2) > _x + _w - ui(8)) { - tx = _x + ui(4); - ty += hh + ui(2); - th += hh + ui(2); - } - tx += ww + ui(2); - } - - h = th; - - draw_sprite_stretched_ext(THEME.textbox, 3, _x, _y, _w, th, boxColor); + draw_sprite_stretched_ext(THEME.textbox, 3, _x, _y, _w, h, boxColor); if(open) { - draw_sprite_stretched_ext(THEME.textbox, 2, _x, _y, _w, th, COLORS._main_accent, 1); + draw_sprite_stretched_ext(THEME.textbox, 2, _x, _y, _w, h, COLORS._main_accent, 1); } else { - if(hover && point_in_rectangle(_m[0], _m[1], _x, _y, _x + _w, _y + th)) { - draw_sprite_stretched_ext(THEME.textbox, 1, _x, _y, _w, th, boxColor, 0.5 + !hide * 0.5); - if(mouse_press(mb_left, active)) { - with(dialogCall(o_dialog_arrayBox, _rx + _x, _ry + _y + th)) { + if(hover && point_in_rectangle(_m[0], _m[1], _x, _y, _x + _w, _y + h)) { + draw_sprite_stretched_ext(THEME.textbox, 1, _x, _y, _w, h, boxColor, 0.5 + !hide * 0.5); + if(mouse_press(mb_left, active)) pressed = true; + + if(pressed && mouse_release(mb_left, active)) { + with(dialogCall(o_dialog_arrayBox, _rx + _x, _ry + _y + h)) { arrayBox = other; dialog_w = other.w; font = other.font; + mode = other.mode; } } } else if(!hide) - draw_sprite_stretched_ext(THEME.textbox, 0, _x, _y, _w, th, boxColor, 0.5 + 0.5 * interactable); + draw_sprite_stretched_ext(THEME.textbox, 0, _x, _y, _w, h, boxColor, 0.5 + 0.5 * interactable); } + if(mouse_release(mb_left)) pressed = false; + + var ww, hh = line_get_height(font, ui(4)); var tx = _x + ui(4); var ty = _y + ui(4); - var hh = line_get_height(font, ui(4)); + var th = hh + ui(8); + var hovi = noone; draw_set_text(font, fa_left, fa_center, COLORS._main_text); for( var i = 0, n = array_length(arraySet); i < n; i++ ) { - var ww = string_width(arraySet[i]) + ui(16); - if(tx + ww + ui(2) > _x + _w - ui(8)) { - tx = _x + ui(4); - ty += hh + ui(2); + var _txt = arraySet[i]; + + switch(mode) { + case 0 : + ww = string_width(_txt) + ui(16); + break; + + case 1 : + var _type = string_char_at(_txt, 1); + + _txt = string_copy(_txt, 2, string_length(_txt) - 1); + ww = ui(24) + string_width(_txt) + ui(16); + break; } - draw_sprite_stretched_ext(THEME.box_r5_clr, 0, tx, ty, ww, hh, COLORS._main_icon, 1); - draw_text_add(tx + ui(8), ty + hh / 2, arraySet[i]); + if(tx + ww + ui(2) > _x + _w - ui(8)) { + tx = _x + ui(4); + ty += hh + ui(2); + th += hh + ui(2); + } + + var _hov = hover && point_in_rectangle(_m[0], _m[1], tx, ty, tx + ww, ty + hh); + if(_hov) hovi = [i, tx, ty, tx + ww, ty + hh]; + + draw_sprite_stretched_ext(THEME.box_r5_clr, _hov, tx, ty, ww, hh, COLORS._main_icon, 1); + draw_set_color(dragging == i? COLORS._main_text_accent : COLORS._main_text); + + switch(mode) { + case 0 : + draw_text_add(tx + ui(8), ty + hh / 2, _txt); + break; + + case 1 : + if(_type == "+") draw_sprite_ext(THEME.arrow, 1, tx + ui(16), ty + hh / 2, 1, 1, 0, COLORS._main_value_positive, 1); + else if(_type == "-") draw_sprite_ext(THEME.arrow, 3, tx + ui(16), ty + hh / 2 + ui(2), 1, 1, 0, COLORS._main_value_negative, 1); + + draw_text_add(tx + ui(32), ty + hh / 2, _txt); + break; + } + + if(_hov && mouse_press(mb_left, active)) { + pressed = false; + dragging = i; + } tx += ww + ui(2); } + if(dragging != noone) { + if(hovi != noone && hovi[0] != dragging) { + draw_set_color(COLORS._main_accent); + var _tx = hovi[0] > dragging? hovi[3] : hovi[1]; + draw_line_width(_tx, hovi[2], _tx, hovi[4], 2); + } + + if(mouse_release(mb_left)) { + if(hovi != noone && hovi[0] != dragging) { + var _val = arraySet[dragging]; + + array_delete(arraySet, dragging, 1); + array_insert(arraySet, hovi[0], _val); + + onModify(); + } + + dragging = noone; + } + } + + h = th; + resetFocus(); return th; } - static clone = function() { - var cln = new textArrayBox(getArray, data, onModify); - - return cln; - } + static clone = function() /*=>*/ {return new textArrayBox(getArray, data, onModify)}; } \ No newline at end of file diff --git a/sprites/s_node_array_flattern/119dc552-4005-46ba-98cb-42697347e056.png b/sprites/s_node_array_flattern/119dc552-4005-46ba-98cb-42697347e056.png new file mode 100644 index 0000000000000000000000000000000000000000..62bae3ac81df238032008981a9731133a46ed346 GIT binary patch literal 1868 zcmZ{lX*8P&7ssDO6I8hO~4TgbKC2%FKvr5la(98MTC|8bxfSQPG+~ z6}7ZEMjJyOplhYOSJ-CS%E)etFNC4|DFh_kYg)pWnIX+zQPEygBx%?Z9nN|uyj?4ch*b7b?nw;|I6E+aXm%{r}~?G@55&Prvg7i}t5BD6Qt1o6JXzv^b?g?W3=O53Vc3Rnnjhb)Giy2Tv@yJx;t zcEvmEnWYWGZTL3MI9Kpd@*7n{NFhbGHID;b9D`6CJH%{tRms8&`PWZlLk*?4)3 zwo#aG{$}~w_iw}WTAULJ3og02!gE=aK;zo4VdBoh5}V{}dbu=|4XP&C#QE272>-xf z*(NiXRFzyXyc3kM_cd``lS#?g;hRp^J#8#J3zxzxHIHEP+^h@)t(vLY&1bS~Zx0Y# z5NHSeIUl8fKu`NdM2T2;1$qf(H}XI}KMuH1dD2cOZhCNj2x7tPLap~-pR<}Wr^Vmd zXTu;Jbj>SnoWojj&en>wc*?306Y}!5c{TI^4;dBL^V2d&d4Q!AX-eUt%nMV302qw= zpbEAgpNoKm*!-r=(3Q)^5-S;|Ggh!|s5Vf3S!f90HOJNQ5wS3bp(snN^${`G=p%4k7LUpsb5B+5|Y(-9whs~PK zF~U+Ac*O4F#JoM>C>!W=wQ!8diFYc>?DYcsCgJxX>nd@p@AmpPsb#fl69uJQN-(=8 z4@|yBAOP3-_Qzl1$0TI@NQ zT|^QWNhMs3GlP&|>9ySCas8aHMy0kD-X%`m9%p2%xf4I75y5%LW>3$PGV*7k7a}#7 zPv$|_kuQs>yy|;N@$ogK?T#>yj{SiY2yi!m`;s8ecCkA4=r4!{pSPsu^USY4BY)SM zGoOy+dk>46N`VE@X>e6>cm~wJU>JypeDkgg^m)Jb zyfyDZNo11}NDxO%zyEpJgFM)*i0+;^{GH(mpN{rN{*T*9z}8+ac=P9F8FJ?r54X6t zQ0KSf3+dY$Rf^=wvFeg`$BdWZ+V1T0q8-(=Y_IKgm=>;|*TSy+wAO@(3>%_NhTcte zl5N~)v@(jkHrAkxmi?*LjaUktUFHeGryt(xu>a#}>hpOWp+NMiN}vZRsnL^8FsPo& zkG``=)n`E{GlnrLNA)Zeem87p+%1p#o#v#}c3|XY^O5{y>1wmGw*G0G8PPa7KAytc z%mn%4;PYF0Z7DZye@ve|UA=#lni1Ow5u${e2`YYCBWmeip_kDWQVDXbuHHenJ}X|5 zCr7o)Rf{|y#!C6&M_v)~mb+HPQ<%T|@wMRr8P4C?&Tb$Z)5FAs#>^B4X6@eS#d4+@ zS=Ghmelz#4tVF6=>O9@=J;n0qB#DHapl#Ot&WIQEmz!9W-|<=D=E)v%5zxue%-Q0x@CudQH`j@9<^TF7ekO$d zX}SPS(4TGTn#Dvv#?nvtk1+>l(5vX|PD>$EF*-1m1r(G`B)Q&irHI1J9h z6oWIx;=M6AYn-Ju-qHkvvBqEy%L_jI1BjwtqJ;eT??AF|iiZR+`u_wvCF*i4Jt&Iy V?~Jj1V4j2lh~JVN8owc@{|_>+Ri^*| literal 0 HcmV?d00001 diff --git a/sprites/s_node_array_flattern/layers/119dc552-4005-46ba-98cb-42697347e056/1fe4c9ea-5e40-468d-85ac-3aeacbc2e89e.png b/sprites/s_node_array_flattern/layers/119dc552-4005-46ba-98cb-42697347e056/1fe4c9ea-5e40-468d-85ac-3aeacbc2e89e.png new file mode 100644 index 0000000000000000000000000000000000000000..62bae3ac81df238032008981a9731133a46ed346 GIT binary patch literal 1868 zcmZ{lX*8P&7ssDO6I8hO~4TgbKC2%FKvr5la(98MTC|8bxfSQPG+~ z6}7ZEMjJyOplhYOSJ-CS%E)etFNC4|DFh_kYg)pWnIX+zQPEygBx%?Z9nN|uyj?4ch*b7b?nw;|I6E+aXm%{r}~?G@55&Prvg7i}t5BD6Qt1o6JXzv^b?g?W3=O53Vc3Rnnjhb)Giy2Tv@yJx;t zcEvmEnWYWGZTL3MI9Kpd@*7n{NFhbGHID;b9D`6CJH%{tRms8&`PWZlLk*?4)3 zwo#aG{$}~w_iw}WTAULJ3og02!gE=aK;zo4VdBoh5}V{}dbu=|4XP&C#QE272>-xf z*(NiXRFzyXyc3kM_cd``lS#?g;hRp^J#8#J3zxzxHIHEP+^h@)t(vLY&1bS~Zx0Y# z5NHSeIUl8fKu`NdM2T2;1$qf(H}XI}KMuH1dD2cOZhCNj2x7tPLap~-pR<}Wr^Vmd zXTu;Jbj>SnoWojj&en>wc*?306Y}!5c{TI^4;dBL^V2d&d4Q!AX-eUt%nMV302qw= zpbEAgpNoKm*!-r=(3Q)^5-S;|Ggh!|s5Vf3S!f90HOJNQ5wS3bp(snN^${`G=p%4k7LUpsb5B+5|Y(-9whs~PK zF~U+Ac*O4F#JoM>C>!W=wQ!8diFYc>?DYcsCgJxX>nd@p@AmpPsb#fl69uJQN-(=8 z4@|yBAOP3-_Qzl1$0TI@NQ zT|^QWNhMs3GlP&|>9ySCas8aHMy0kD-X%`m9%p2%xf4I75y5%LW>3$PGV*7k7a}#7 zPv$|_kuQs>yy|;N@$ogK?T#>yj{SiY2yi!m`;s8ecCkA4=r4!{pSPsu^USY4BY)SM zGoOy+dk>46N`VE@X>e6>cm~wJU>JypeDkgg^m)Jb zyfyDZNo11}NDxO%zyEpJgFM)*i0+;^{GH(mpN{rN{*T*9z}8+ac=P9F8FJ?r54X6t zQ0KSf3+dY$Rf^=wvFeg`$BdWZ+V1T0q8-(=Y_IKgm=>;|*TSy+wAO@(3>%_NhTcte zl5N~)v@(jkHrAkxmi?*LjaUktUFHeGryt(xu>a#}>hpOWp+NMiN}vZRsnL^8FsPo& zkG``=)n`E{GlnrLNA)Zeem87p+%1p#o#v#}c3|XY^O5{y>1wmGw*G0G8PPa7KAytc z%mn%4;PYF0Z7DZye@ve|UA=#lni1Ow5u${e2`YYCBWmeip_kDWQVDXbuHHenJ}X|5 zCr7o)Rf{|y#!C6&M_v)~mb+HPQ<%T|@wMRr8P4C?&Tb$Z)5FAs#>^B4X6@eS#d4+@ zS=Ghmelz#4tVF6=>O9@=J;n0qB#DHapl#Ot&WIQEmz!9W-|<=D=E)v%5zxue%-Q0x@CudQH`j@9<^TF7ekO$d zX}SPS(4TGTn#Dvv#?nvtk1+>l(5vX|PD>$EF*-1m1r(G`B)Q&irHI1J9h z6oWIx;=M6AYn-Ju-qHkvvBqEy%L_jI1BjwtqJ;eT??AF|iiZR+`u_wvCF*i4Jt&Iy V?~Jj1V4j2lh~JVN8owc@{|_>+Ri^*| literal 0 HcmV?d00001 diff --git a/sprites/s_node_array_flattern/s_node_array_flattern.yy b/sprites/s_node_array_flattern/s_node_array_flattern.yy new file mode 100644 index 000000000..98dd4c996 --- /dev/null +++ b/sprites/s_node_array_flattern/s_node_array_flattern.yy @@ -0,0 +1,90 @@ +{ + "$GMSprite":"", + "%Name":"s_node_array_flattern", + "bboxMode":0, + "bbox_bottom":61, + "bbox_left":0, + "bbox_right":63, + "bbox_top":3, + "collisionKind":1, + "collisionTolerance":0, + "DynamicTexturePage":false, + "edgeFiltering":false, + "For3D":false, + "frames":[ + {"$GMSpriteFrame":"","%Name":"119dc552-4005-46ba-98cb-42697347e056","name":"119dc552-4005-46ba-98cb-42697347e056","resourceType":"GMSpriteFrame","resourceVersion":"2.0",}, + ], + "gridX":0, + "gridY":0, + "height":64, + "HTile":false, + "layers":[ + {"$GMImageLayer":"","%Name":"1fe4c9ea-5e40-468d-85ac-3aeacbc2e89e","blendMode":0,"displayName":"default","isLocked":false,"name":"1fe4c9ea-5e40-468d-85ac-3aeacbc2e89e","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,}, + ], + "name":"s_node_array_flattern", + "nineSlice":null, + "origin":4, + "parent":{ + "name":"array", + "path":"folders/nodes/icons/value/array.yy", + }, + "preMultiplyAlpha":false, + "resourceType":"GMSprite", + "resourceVersion":"2.0", + "sequence":{ + "$GMSequence":"", + "%Name":"s_node_array_flattern", + "autoRecord":true, + "backdropHeight":768, + "backdropImageOpacity":0.5, + "backdropImagePath":"", + "backdropWidth":1366, + "backdropXOffset":0.0, + "backdropYOffset":0.0, + "events":{ + "$KeyframeStore":"", + "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_array_flattern", + "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":"119dc552-4005-46ba-98cb-42697347e056","path":"sprites/s_node_array_flattern/s_node_array_flattern.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"171cba14-8a41-4377-8a02-bbc00916c8d5","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