This commit is contained in:
Tanasart 2025-02-13 10:29:34 +07:00
parent 8d388a164f
commit cbf3c51db9
18 changed files with 474 additions and 144 deletions

View file

@ -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",},

View file

@ -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",},},

Binary file not shown.

View file

@ -0,0 +1,10 @@
{
"name":"Array Flattern",
"baseNode":"Node_Array_Flattern",
"tooltip":"Flattern higher dimension array into 1 dimension linear array.",
"spr":"s_node_array_flattern",
"io":[
"float"
],
"pxc_version":118090,
}

View file

@ -754,6 +754,7 @@
"Node_Array_Shuffle",
"Node_Array_Unique",
"Node_Array_Boolean_Opr",
"Node_Array_Flattern",
{ "label": "/Group Operators" },
"Node_Array_Sort",
"Node_Iterate_Each_Inline",

View file

@ -10,11 +10,11 @@ event_inherited();
font = f_p1;
arrayBox = noone;
anchor = ANCHOR.top | ANCHOR.left;
mode = 0;
anchor = ANCHOR.top | ANCHOR.left;
sc_content = new scrollPane(0, 0, function(_y, _m) {
draw_clear(COLORS.panel_bg_clear);
draw_clear(COLORS.panel_bg_clear, 1);
var hght = line_get_height(font, 8);
var _h = array_length(arrayBox.data) * hght;
@ -24,11 +24,17 @@ event_inherited();
for(var i = 0; i < array_length(arrayBox.data); i++) {
var _ly = _y + i * hght;
var yc = _ly + hght / 2;
var exists = false;
var exists = 0;
for( var j = 0; j < array_length(array); j++ ) {
if(arrayBox.data[i] == array[j])
exists = true;
if(mode == 0) {
for( var j = 0; j < array_length(array); j++ )
if(arrayBox.data[i] == array[j]) exists = 1;
} else if(mode == 1) {
for( var j = 0; j < array_length(array); j++ ) {
if("+" + arrayBox.data[i] == array[j]) exists = 1;
if("-" + arrayBox.data[i] == array[j]) exists = -1;
}
}
var ind = 0;
@ -43,8 +49,22 @@ event_inherited();
ind = 1;
if(sFOCUS && (mouse_press(mb_left) || keyboard_check_pressed(vk_enter))) {
if(exists) array_remove(array, arrayBox.data[i]);
else array_push(array, arrayBox.data[i]);
if(mode == 0) {
if(exists) array_remove(array, arrayBox.data[i]);
else array_push(array, arrayBox.data[i]);
} else if(mode == 1) {
switch(exists) {
case 0 : array_push(array, "+" + arrayBox.data[i]); break;
case 1 :
array_remove(array, "+" + arrayBox.data[i]);
array_push(array, "-" + arrayBox.data[i]);
break;
case -1 : array_remove(array, "-" + arrayBox.data[i]); break;
}
}
if(arrayBox.onModify) arrayBox.onModify();
}
@ -52,10 +72,17 @@ event_inherited();
var bs = hght - ui(8);
draw_sprite_stretched(THEME.checkbox_def, ind, ui(20) - bs / 2, yc - bs / 2, bs, bs);
if(exists) draw_sprite_stretched_ext(THEME.checkbox_def, 2, ui(20) - bs / 2, yc - bs / 2, bs, bs, COLORS._main_accent, 1);
if(mode == 0) {
if(exists) draw_sprite_stretched_ext(THEME.checkbox_def, 2, ui(20) - bs / 2, yc - bs / 2, bs, bs, COLORS._main_accent, 1);
} else if(mode == 1) {
if(exists == 1) draw_sprite_ext(THEME.arrow, 1, ui(20), yc, 1, 1, 0, COLORS._main_value_positive, 1);
else if(exists == -1) draw_sprite_ext(THEME.arrow, 3, ui(20), yc + ui(2), 1, 1, 0, COLORS._main_value_negative, 1);
}
draw_set_text(font, fa_left, fa_center, COLORS._main_text);
draw_text(ui(40), yc, arrayBox.data[i]);
draw_text_add(ui(40), yc, arrayBox.data[i]);
}
if(sFOCUS) {

View file

@ -43,7 +43,7 @@
LATEST_VERSION = 1_18_00_0;
VERSION = 1_18_08_0;
SAVE_VERSION = 1_18_09_0;
VERSION_STRING = MAC? "1.18.003m" : "1.18.9.001";
VERSION_STRING = MAC? "1.18.003m" : "1.18.9.002";
BUILD_NUMBER = 118080.002;
PREF_VERSION = 1_17_1;

View file

@ -2,25 +2,148 @@ function Node_Array_CSV_Parse(_x, _y, _group = noone) : Node(_x, _y, _group) con
name = "CSV Parse";
setDimension(96, 48);
newInput(0, nodeValue_Text("CSV string", self, 0))
newInput(0, nodeValue_Text("CSV string", self, ""))
.setVisible(true, true);
newInput(1, nodeValue_Int("Skip line", self, 0));
newInput(2, nodeValue_Bool("First Row Header", self, false));
newInput(3, nodeValue_Text("Sort", self, []))
.setDisplay(VALUE_DISPLAY.text_array, { data: [] });
newInput(4, nodeValue_Bool("Output Struct", self, false));
newInput(5, nodeValue_Text("Columns", self, []))
.setDisplay(VALUE_DISPLAY.text_array, { data: [] });
newOutput(0, nodeValue_Output("Array", self, VALUE_TYPE.any, 0))
.setArrayDepth(1);
input_display_list = [
["Input", false], 0, 1,
["Table", false], 2, 3,
["Output", false], 5, 4,
];
inputs[0].editWidget.max_height = ui(240);
inputs[3].editWidget.mode = 1;
__sortKey = "";
function sortValueAsc(a,b,k) {
var va = a[$ k];
var vb = b[$ k];
if(is_string(va)) return string_compare(va,vb);
if(is_numeric(va)) return va-vb;
return 0;
}
function sortValueDec(a,b,k) {
var va = a[$ k];
var vb = b[$ k];
if(is_string(va)) return string_compare(vb,va);
if(is_numeric(va)) return vb-va;
return 0;
}
static update = function(frame = CURRENT_FRAME) {
var _str = getInputData(0);
var _skp = getInputData(1);
var _str = getInputData(0);
var _skp = getInputData(1);
var _hed = getInputData(2);
var _sort = getInputData(3);
var _struct = getInputData(4);
var _ocol = getInputData(5);
var _lines = string_splice(_str, "\n");
var _arr = [];
var _lines = _str;
var _lAmo = array_length(_lines);
var _head = noone;
var _sarr = [];
for( var i = _skp; i < array_length(_lines); i++ )
array_push(_arr, string_splice(_lines[i], ","));
var _col = 0;
outputs[0].setValue(_arr);
////- PARSE
for( var i = _skp; i < _lAmo; i++ ) {
var _l = _lines[i];
_l = string_replace_all(_l, "\"", "");
_l = string_trim(_l);
var _row = string_split(_l, ",");
if(_hed && _head == noone) {
_head = _row;
_col = array_length(_row);
continue;
}
if(_head != noone) {
var _rowStr = {};
for( var j = 0, m = min(array_length(_row), _col); j < m; j++ )
_rowStr[$ _head[j]] = _row[j];
array_push(_sarr, _rowStr);
}
}
////- SORT
if(_hed && _head != noone) {
inputs[3].editWidget.data = _head;
inputs[5].editWidget.data = _head;
}
__sort = [];
for( var i = 0, n = array_length(_sort); i < n; i++ ) {
var _srt = _sort[i];
__sort[i] = [
string_char_at(_srt, 1) == "+",
string_copy(_srt, 2, string_length(_srt) - 1)
];
}
array_sort(_sarr, function(a,b) /*=>*/ {
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) {

View file

@ -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);
}
}

View file

@ -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":[],
}

View file

@ -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);

View file

@ -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;

View file

@ -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;
}

View file

@ -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];

View file

@ -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)};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -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<MessageEventKeyframe>":"",
"Keyframes":[],
"resourceType":"KeyframeStore<MessageEventKeyframe>",
"resourceVersion":"2.0",
},
"eventStubScript":null,
"eventToFunction":{},
"length":1.0,
"lockOrigin":false,
"moments":{
"$KeyframeStore<MomentsEventKeyframe>":"",
"Keyframes":[],
"resourceType":"KeyframeStore<MomentsEventKeyframe>",
"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<SpriteFrameKeyframe>":"","Keyframes":[
{"$Keyframe<SpriteFrameKeyframe>":"","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<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
],"resourceType":"KeyframeStore<SpriteFrameKeyframe>","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,
}