From f075d113572cbc1d2a46ab067c053adeed9d99c0 Mon Sep 17 00:00:00 2001 From: Tanasart Date: Tue, 14 Jan 2025 11:42:27 +0700 Subject: [PATCH] New Array boolean opr node. --- PixelComposer.resource_order | 2 + PixelComposer.yyp | 5 +- datafiles/data/Nodes/Internal.zip | Bin 9091318 -> 9091878 bytes .../Color/Node_Color_to_HSV/info.json | 1 + .../Color/Node_Color_to_OKLCH/info.json | 1 + .../Color/Node_Color_to_RGB/info.json | 1 + .../Array/Node_Array_Boolean_Opr/info.json | 10 + .../Values/Array/Node_Array_Unique/info.json | 1 + .../Values/Matrix/Node_Matrix/info.json | 1 + .../Matrix/Node_Matrix_Color_Apply/info.json | 1 + .../Values/Matrix/Node_Matrix_Det/info.json | 1 + .../Matrix/Node_Matrix_Invert/info.json | 1 + .../Values/Matrix/Node_Matrix_Math/info.json | 1 + .../Node_Matrix_Multiply_Vector/info.json | 1 + .../Values/Matrix/Node_Matrix_Set/info.json | 1 + .../Matrix/Node_Matrix_To_Array/info.json | 1 + .../Matrix/Node_Matrix_Transpose/info.json | 1 + datafiles/data/Nodes/display_data.json | 1 + scripts/array_functions/array_functions.gml | 779 +++++++++--------- .../node_array_boolean_opr.gml | 62 ++ .../node_array_boolean_opr.yy | 14 + scripts/node_value_float/node_value_float.gml | 4 +- scripts/node_value_int/node_value_int.gml | 2 +- .../3f6813f5-0553-4de8-96d6-c7d745fffe40.png | Bin 0 -> 1066 bytes .../8b6cb694-da18-4679-b77a-1770cc5ebe4f.png | Bin 0 -> 1066 bytes .../s_node_array_boolean_opr.yy | 90 ++ 26 files changed, 610 insertions(+), 372 deletions(-) create mode 100644 datafiles/data/Nodes/Internal/Values/Array/Node_Array_Boolean_Opr/info.json create mode 100644 scripts/node_array_boolean_opr/node_array_boolean_opr.gml create mode 100644 scripts/node_array_boolean_opr/node_array_boolean_opr.yy create mode 100644 sprites/s_node_array_boolean_opr/3f6813f5-0553-4de8-96d6-c7d745fffe40.png create mode 100644 sprites/s_node_array_boolean_opr/layers/3f6813f5-0553-4de8-96d6-c7d745fffe40/8b6cb694-da18-4679-b77a-1770cc5ebe4f.png create mode 100644 sprites/s_node_array_boolean_opr/s_node_array_boolean_opr.yy diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 9ebd1b973..837581c3a 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -723,6 +723,7 @@ {"name":"node_armature_sample","order":13,"path":"scripts/node_armature_sample/node_armature_sample.yy",}, {"name":"node_armature","order":9,"path":"scripts/node_armature/node_armature.yy",}, {"name":"node_array_add","order":6,"path":"scripts/node_array_add/node_array_add.yy",}, + {"name":"node_array_boolean_opr","order":23,"path":"scripts/node_array_boolean_opr/node_array_boolean_opr.yy",}, {"name":"node_array_composite","order":17,"path":"scripts/node_array_composite/node_array_composite.yy",}, {"name":"node_array_convolute","order":16,"path":"scripts/node_array_convolute/node_array_convolute.yy",}, {"name":"node_array_copy","order":14,"path":"scripts/node_array_copy/node_array_copy.yy",}, @@ -1929,6 +1930,7 @@ {"name":"s_node_armature_sample","order":18,"path":"sprites/s_node_armature_sample/s_node_armature_sample.yy",}, {"name":"s_node_armature","order":16,"path":"sprites/s_node_armature/s_node_armature.yy",}, {"name":"s_node_array_add","order":1,"path":"sprites/s_node_array_add/s_node_array_add.yy",}, + {"name":"s_node_array_boolean_opr","order":23,"path":"sprites/s_node_array_boolean_opr/s_node_array_boolean_opr.yy",}, {"name":"s_node_array_composite","order":2,"path":"sprites/s_node_array_composite/s_node_array_composite.yy",}, {"name":"s_node_array_convolute","order":3,"path":"sprites/s_node_array_convolute/s_node_array_convolute.yy",}, {"name":"s_node_array_copy","order":4,"path":"sprites/s_node_array_copy/s_node_array_copy.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index d1157f590..06a791749 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -1101,6 +1101,7 @@ {"$GMIncludedFile":"","%Name":"tooltip_spr.png","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Transform/Node_Warp","name":"tooltip_spr.png","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Transform/Node_Wrap_Area","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Add","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, + {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Boolean_Opr","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Composite","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Convolute","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Copy","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, @@ -1109,7 +1110,6 @@ {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Get","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Insert","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Length","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, - {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Range copy","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Range","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Rearrange","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Remove","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, @@ -1120,6 +1120,7 @@ {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Shuffle","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Sort","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Split","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, + {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Unique copy","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Unique","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array_Zip","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Values/Array/Node_Array","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, @@ -1883,6 +1884,7 @@ {"id":{"name":"node_armature_sample","path":"scripts/node_armature_sample/node_armature_sample.yy",},}, {"id":{"name":"node_armature","path":"scripts/node_armature/node_armature.yy",},}, {"id":{"name":"node_array_add","path":"scripts/node_array_add/node_array_add.yy",},}, + {"id":{"name":"node_array_boolean_opr","path":"scripts/node_array_boolean_opr/node_array_boolean_opr.yy",},}, {"id":{"name":"node_array_composite","path":"scripts/node_array_composite/node_array_composite.yy",},}, {"id":{"name":"node_array_convolute","path":"scripts/node_array_convolute/node_array_convolute.yy",},}, {"id":{"name":"node_array_copy","path":"scripts/node_array_copy/node_array_copy.yy",},}, @@ -3253,6 +3255,7 @@ {"id":{"name":"s_node_armature_sample","path":"sprites/s_node_armature_sample/s_node_armature_sample.yy",},}, {"id":{"name":"s_node_armature","path":"sprites/s_node_armature/s_node_armature.yy",},}, {"id":{"name":"s_node_array_add","path":"sprites/s_node_array_add/s_node_array_add.yy",},}, + {"id":{"name":"s_node_array_boolean_opr","path":"sprites/s_node_array_boolean_opr/s_node_array_boolean_opr.yy",},}, {"id":{"name":"s_node_array_composite","path":"sprites/s_node_array_composite/s_node_array_composite.yy",},}, {"id":{"name":"s_node_array_convolute","path":"sprites/s_node_array_convolute/s_node_array_convolute.yy",},}, {"id":{"name":"s_node_array_copy","path":"sprites/s_node_array_copy/s_node_array_copy.yy",},}, diff --git a/datafiles/data/Nodes/Internal.zip b/datafiles/data/Nodes/Internal.zip index 1a857ae48fa4993ae8810a0ee552dbf1693f556b..b4a1b8f3726d43c5cfba29f6ec4673ebed0212d6 100644 GIT binary patch delta 17362 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 F{{#QBdA|Sv diff --git a/datafiles/data/Nodes/Internal/Color/Node_Color_to_HSV/info.json b/datafiles/data/Nodes/Internal/Color/Node_Color_to_HSV/info.json index c7637302f..be36ed671 100644 --- a/datafiles/data/Nodes/Internal/Color/Node_Color_to_HSV/info.json +++ b/datafiles/data/Nodes/Internal/Color/Node_Color_to_HSV/info.json @@ -6,4 +6,5 @@ "io":[ "color" ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Color/Node_Color_to_OKLCH/info.json b/datafiles/data/Nodes/Internal/Color/Node_Color_to_OKLCH/info.json index 0acfda138..18022fe77 100644 --- a/datafiles/data/Nodes/Internal/Color/Node_Color_to_OKLCH/info.json +++ b/datafiles/data/Nodes/Internal/Color/Node_Color_to_OKLCH/info.json @@ -6,4 +6,5 @@ "io":[ "color" ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Color/Node_Color_to_RGB/info.json b/datafiles/data/Nodes/Internal/Color/Node_Color_to_RGB/info.json index fcd51336c..a4c6bd142 100644 --- a/datafiles/data/Nodes/Internal/Color/Node_Color_to_RGB/info.json +++ b/datafiles/data/Nodes/Internal/Color/Node_Color_to_RGB/info.json @@ -6,4 +6,5 @@ "io":[ "color" ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Values/Array/Node_Array_Boolean_Opr/info.json b/datafiles/data/Nodes/Internal/Values/Array/Node_Array_Boolean_Opr/info.json new file mode 100644 index 000000000..78c45d789 --- /dev/null +++ b/datafiles/data/Nodes/Internal/Values/Array/Node_Array_Boolean_Opr/info.json @@ -0,0 +1,10 @@ +{ + "name":"Array Boolean Opr", + "baseNode":"Node_Array_Boolean_Opr", + "tooltip":"Apply a boolean operation bewteen two arrays.", + "spr":"s_node_array_boolean_opr", + "io":[ + "float" + ], + "pxc_version":118069, +} \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Values/Array/Node_Array_Unique/info.json b/datafiles/data/Nodes/Internal/Values/Array/Node_Array_Unique/info.json index ef9a03422..1d6546ee6 100644 --- a/datafiles/data/Nodes/Internal/Values/Array/Node_Array_Unique/info.json +++ b/datafiles/data/Nodes/Internal/Values/Array/Node_Array_Unique/info.json @@ -6,4 +6,5 @@ "io":[ "float" ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix/info.json b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix/info.json index eb8913cb7..30e92b8ca 100644 --- a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix/info.json +++ b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix/info.json @@ -6,4 +6,5 @@ "io":[ "float", ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Color_Apply/info.json b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Color_Apply/info.json index 8a56fe698..f71ff04f7 100644 --- a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Color_Apply/info.json +++ b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Color_Apply/info.json @@ -7,4 +7,5 @@ "float", "surface" ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Det/info.json b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Det/info.json index 88410d9a9..0ef0b6b0f 100644 --- a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Det/info.json +++ b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Det/info.json @@ -6,4 +6,5 @@ "io":[ "float", ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Invert/info.json b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Invert/info.json index fb00e319d..872a55f44 100644 --- a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Invert/info.json +++ b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Invert/info.json @@ -6,4 +6,5 @@ "io":[ "float", ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Math/info.json b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Math/info.json index 2dd116446..3f1410fee 100644 --- a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Math/info.json +++ b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Math/info.json @@ -6,4 +6,5 @@ "io":[ "float", ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Multiply_Vector/info.json b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Multiply_Vector/info.json index 567e627c2..d436de058 100644 --- a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Multiply_Vector/info.json +++ b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Multiply_Vector/info.json @@ -6,4 +6,5 @@ "io":[ "float", ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Set/info.json b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Set/info.json index 0b79e7a05..4ab795e75 100644 --- a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Set/info.json +++ b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Set/info.json @@ -6,4 +6,5 @@ "io":[ "float", ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_To_Array/info.json b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_To_Array/info.json index 4cdab309e..d14bf6c24 100644 --- a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_To_Array/info.json +++ b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_To_Array/info.json @@ -6,4 +6,5 @@ "io":[ "float", ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Transpose/info.json b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Transpose/info.json index 964769984..a374600d8 100644 --- a/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Transpose/info.json +++ b/datafiles/data/Nodes/Internal/Values/Matrix/Node_Matrix_Transpose/info.json @@ -6,4 +6,5 @@ "io":[ "float", ], + "pxc_version":118069, } \ No newline at end of file diff --git a/datafiles/data/Nodes/display_data.json b/datafiles/data/Nodes/display_data.json index b4ee30ea2..8a5173f08 100644 --- a/datafiles/data/Nodes/display_data.json +++ b/datafiles/data/Nodes/display_data.json @@ -748,6 +748,7 @@ "Node_Array_Composite", "Node_Array_Shuffle", "Node_Array_Unique", + "Node_Array_Boolean_Opr", { "label": "/Group Operators" }, "Node_Array_Sort", "Node_Iterate_Each_Inline", diff --git a/scripts/array_functions/array_functions.gml b/scripts/array_functions/array_functions.gml index 9f79b776b..a64e1d2d5 100644 --- a/scripts/array_functions/array_functions.gml +++ b/scripts/array_functions/array_functions.gml @@ -1,390 +1,433 @@ -function array_create_2d(_x, _y, val = 0) { - var _arr = array_create(_x); - for( var i = 0; i < _x; i++ ) - _arr[i] = array_create(_y, val); - return _arr; -} - -function array_create_from_list(list) { - if(list == undefined) return []; - if(!ds_exists(list, ds_type_list)) return []; - - var arr = array_create(ds_list_size(list)); - for( var i = 0; i < ds_list_size(list); i++ ) - arr[i] = list[| i]; - return arr; -} - -function array_safe_set(arr, index, value, fill = 0) { - if(!is_array(arr)) return arr; - if(is_array(index)) return arr; - - if(index < 0) return arr; - if(index >= array_length(arr)) { - var i = array_length(arr); - for(; i <= index; i++ ) - arr[i] = fill; - arr[index] = value; - return arr; - } - - array_set(arr, index, value); - return arr; -} - -function array_safe_length(arr) { - INLINE - return is_array(arr)? array_length(arr) : 0; -} - -function array_fill(arr, startIndex, endIndex, value = 0) { - INLINE - - for( var i = max(0, startIndex); i < endIndex; i++ ) - arr[i] = value; -} - -function array_resize_fill(arr, size, fill = 0) { - if(size < array_length(arr)) { - array_resize(arr, size); - return arr; - } - - var i = array_length(arr); - for(; i < size; i++) - arr[i] = fill; - return arr; -} - -enum ARRAY_OVERFLOW { - _default, - loop, - pingpong, - clamp -} - -#macro aGetF array_safe_get_fast -function array_safe_get_fast(arr, index, def = 0) { - INLINE - - return is_array(arr) && index >= 0 && index < array_length(arr)? arr[index] : def; -} - -function array_safe_get(arr, index, def = 0, overflow = ARRAY_OVERFLOW._default) { - INLINE - - if(!is_array(arr)) return def; - if(is_array(index)) return def; - - var len = array_length(arr); - if(len == 0) return def; - - if(overflow == ARRAY_OVERFLOW.clamp) { - index = clamp(index, 0, len - 1); - - } else if(overflow == ARRAY_OVERFLOW.loop) { - if(index < 0) - index = len - safe_mod(abs(index), len); - index = index % len; - - } else if(overflow == ARRAY_OVERFLOW.pingpong) { - if(index < 0) index = len - safe_mod(abs(index), len); - - var _plen = len * 2 - 1; - index = index % _plen; - - if(index >= len) - index = _plen - index; - } - - if(index < 0) return def; - if(index >= len) return def; - return arr[index] == undefined? def : arr[index]; -} - -function array_push_create(arr, val) { - INLINE - - if(!is_array(arr)) return [ val ]; - array_push(arr, val); - return arr; -} - -function array_get_decimal(arr, index, color = false) { - INLINE - - if(!is_array(arr)) return 0; - if(frac(index) == 0) return array_safe_get_fast(arr, index); - - var v0 = array_safe_get_fast(arr, floor(index)); - var v1 = array_safe_get_fast(arr, floor(index) + 1); - - return color? - merge_color(v0, v1, frac(index)) : - lerp(v0, v1, frac(index)); -} - -function array_exists(arr, val) { - INLINE - self.__temp_val = val; - - if(!is_array(arr)) return false; - var _a = array_any(arr, function(_val, _ind) { return isEqual(_val, self.__temp_val); }); - - self.__temp_val = 0; - return _a; -} - -function array_overlap(arr0, arr1) { - INLINE - self.__temp_arr = arr1; - - if(!is_array(arr0)) return false; - if(!is_array(arr1)) return false; - - var _a = array_any(arr0, function(_val, _ind) { return array_exists(self.__temp_arr, _val); }); - - self.__temp_arr = 0; - return _a; -} - -function array_empty(arr) { INLINE return is_array(arr) && array_length(arr) == 0; } -function array_valid(arr) { INLINE return is_array(arr) && array_length(arr) > 0; } -function array_invalid(arr) { INLINE return !is_array(arr) || array_length(arr) == 0; } - -function array_find(arr, val) { - INLINE - self.__temp_val = val; - - if(!is_array(arr)) return -1; - var _a = array_find_index(arr, function(_val, _ind) { return isEqual(_val, self.__temp_val); }); - - self.__temp_val = 0; - return _a; -} - -function array_find_string(arr, val) { - INLINE - self.__temp_val = string_lower(val); - - if(!is_array(arr)) return -1; - var _a = array_find_index(arr, function(_val, _ind) { return string_lower(_val) == self.__temp_val; }); - - self.__temp_val = 0; - return _a; -} - -function array_remove(arr, val) { - INLINE - - if(!is_array(arr)) return; - if(!array_exists(arr, val)) return; - var ind = array_find(arr, val); - array_delete(arr, ind, 1); -} - -function array_push_unique(arr, val) { - INLINE - - if(!is_array(arr)) return; - if(array_exists(arr, val)) return; - array_push(arr, val); -} - -function array_insert_unique(arr, ind, val) { - INLINE - - if(!is_array(arr)) return; - if(array_exists(arr, val)) return; - array_insert(arr, ind, val); -} - -function array_append(arr, arr0) { - INLINE - - if(is_undefined(arr0)) return arr; - if(!is_array(arr)) return arr; - if(!is_array(arr0)) { array_push(arr, arr0); return arr; } - - for( var i = 0, n = array_length(arr0); i < n; i++ ) - array_push(arr, arr0[i]); - return arr; -} - -function array_merge() { - INLINE - - var arr = []; - for( var i = 0; i < argument_count; i++ ) - array_append(arr, argument[i]); - - return arr; -} - -function array_clone(arr, _depth = -1) { - INLINE - - if(_depth == 0) return arr; - if(!is_array(arr)) return arr; - - var _res = []; - for( var i = 0, n = array_length(arr); i < n; i++ ) - _res[i] = array_clone(arr[i], _depth--); - - return _res; -} - -function array_min(arr) { - INLINE - - if(!is_array(arr) || array_length(arr) == 0) return 0; - - var mn = arr[0]; - for( var i = 0, n = array_length(arr); i < n; i++ ) - mn = min(mn, arr[i]); - return mn; -} - -function array_max(arr) { - INLINE - - if(!is_array(arr) || array_length(arr) == 0) return 0; - - var mx = arr[0]; - for( var i = 0, n = array_length(arr); i < n; i++ ) - mx = max(mx, arr[i]); - return mx; -} - -function array_get_dimension(arr) { - INLINE - - return is_array(arr)? array_length(arr) : 1; -} - -function array_shape(arr, first = true, isSurface = false) { - if(!is_array(arr)) { - if(isSurface && is_surface(arr)) - return (first? "" : " x ") + string(surface_get_width_safe(arr)) + " x " + string(surface_get_height_safe(arr)) + " px"; - return ""; - } - - var dim = string(array_length(arr)); - - if(array_length(arr)) - dim += array_shape(arr[0], false, isSurface); - - return (first? "" : " x ") + dim; -} - -function __array_get_depth(arr) { // Read all member, slower - INLINE - - if(!is_array(arr)) return 0; - var dep = 0; - for (var i = 0, n = array_length(arr); i < n; i++) - dep = max(dep, __array_get_depth(arr[i])); - return 1 + dep; -} - -function array_get_depth(arr) { // Read only the first member, faster - INLINE - - if(!is_array(arr)) return 0; - var d = 0; - var p = arr; - - while(is_array(p) && !array_empty(p)) { - d++; - p = p[0]; - } - - return d; -} - -function array_spread(arr, _arr = [], _minDepth = 0) { - INLINE - - if(array_get_depth(arr) == _minDepth) { - array_push(_arr, arr); +#region creation + function array_create_2d(_x, _y, val = 0) { + var _arr = array_create(_x); + for( var i = 0; i < _x; i++ ) + _arr[i] = array_create(_y, val); return _arr; } - for( var i = 0, n = array_length(arr); i < n; i++ ) - array_spread(arr[i], _arr, _minDepth); + function array_create_from_list(list) { + if(list == undefined) return []; + if(!ds_exists(list, ds_type_list)) return []; - return _arr; -} + var arr = array_create(ds_list_size(list)); + for( var i = 0; i < ds_list_size(list); i++ ) + arr[i] = list[| i]; + return arr; + } + + function array_clone(arr, _depth = -1) { + INLINE + + if(_depth == 0) return arr; + if(!is_array(arr)) return arr; + + var _res = []; + for( var i = 0, n = array_length(arr); i < n; i++ ) + _res[i] = array_clone(arr[i], _depth--); + + return _res; + } +#endregion -function array_verify_new(arr, length) { - INLINE +#region check + function array_empty(arr) { INLINE return is_array(arr) && array_length(arr) == 0; } + function array_valid(arr) { INLINE return is_array(arr) && array_length(arr) > 0; } + function array_invalid(arr) { INLINE return !is_array(arr) || array_length(arr) == 0; } - if(!is_array(arr)) return array_create(length); - if(array_length(arr) == length) return arr; + function array_verify_new(arr, length) { + INLINE + + if(!is_array(arr)) return array_create(length); + if(array_length(arr) == length) return arr; + + arr = array_clone(arr, 1); + array_resize(arr, length); + return arr; + } - arr = array_clone(arr, 1); - array_resize(arr, length); - return arr; -} + function array_verify(arr, length) { + INLINE + + if(!is_array(arr)) return array_create(length); + if(array_length(arr) == length) return arr; + + array_resize(arr, length); + return arr; + } + + function array_verify_ext(arr, length, generator) { + INLINE + + if(!is_array(arr)) return array_create_ext(length, generator); + + var _len = array_length(arr); + if(_len == length) return arr; + + array_resize(arr, length); + var i = _len; + + repeat(length - _len) + arr[i++] = generator(); + + return arr; + } -function array_verify(arr, length) { - INLINE - - if(!is_array(arr)) return array_create(length); - if(array_length(arr) == length) return arr; - - array_resize(arr, length); - return arr; -} +#endregion -function array_verify_ext(arr, length, generator) { - INLINE +#region get set - if(!is_array(arr)) return array_create_ext(length, generator); + enum ARRAY_OVERFLOW { + _default, + loop, + pingpong, + clamp + } - var _len = array_length(arr); - if(_len == length) return arr; + #macro aGetF array_safe_get_fast + function array_safe_get_fast(arr, index, def = 0) { + INLINE + + return is_array(arr) && index >= 0 && index < array_length(arr)? arr[index] : def; + } - array_resize(arr, length); - var i = _len; + function array_safe_get(arr, index, def = 0, overflow = ARRAY_OVERFLOW._default) { + INLINE + + if(!is_array(arr)) return def; + if(is_array(index)) return def; + + var len = array_length(arr); + if(len == 0) return def; + + if(overflow == ARRAY_OVERFLOW.clamp) { + index = clamp(index, 0, len - 1); + + } else if(overflow == ARRAY_OVERFLOW.loop) { + if(index < 0) + index = len - safe_mod(abs(index), len); + index = index % len; + + } else if(overflow == ARRAY_OVERFLOW.pingpong) { + if(index < 0) index = len - safe_mod(abs(index), len); + + var _plen = len * 2 - 1; + index = index % _plen; + + if(index >= len) + index = _plen - index; + } + + if(index < 0) return def; + if(index >= len) return def; + return arr[index] == undefined? def : arr[index]; + } - repeat(length - _len) - arr[i++] = generator(); + function array_get_decimal(arr, index, color = false) { + INLINE + + if(!is_array(arr)) return 0; + if(frac(index) == 0) return array_safe_get_fast(arr, index); + + var v0 = array_safe_get_fast(arr, floor(index)); + var v1 = array_safe_get_fast(arr, floor(index) + 1); + + return color? + merge_color(v0, v1, frac(index)) : + lerp(v0, v1, frac(index)); + } - return arr; -} + function array_safe_length(arr) { + INLINE + return is_array(arr)? array_length(arr) : 0; + } -function array_insert_after(arr, before, values) { - INLINE + function array_get_dimension(arr) { + INLINE + + return is_array(arr)? array_length(arr) : 1; + } - var _ind = array_find(arr, before) + 1; + function array_shape(arr, first = true, isSurface = false) { + if(!is_array(arr)) { + if(isSurface && is_surface(arr)) + return (first? "" : " x ") + string(surface_get_width_safe(arr)) + " x " + string(surface_get_height_safe(arr)) + " px"; + return ""; + } + + var dim = string(array_length(arr)); + + if(array_length(arr)) + dim += array_shape(arr[0], false, isSurface); + + return (first? "" : " x ") + dim; + } - for( var i = 0, n = array_length(values); i < n; i++ ) - array_insert(arr, _ind + i, values[i]); -} + function __array_get_depth(arr) { // Read all member, slower + INLINE + + if(!is_array(arr)) return 0; + var dep = 0; + for (var i = 0, n = array_length(arr); i < n; i++) + dep = max(dep, __array_get_depth(arr[i])); + return 1 + dep; + } -function array_insert_before(arr, before, values) { - INLINE - - var _ind = array_find(arr, before); - - for( var i = 0, n = array_length(values); i < n; i++ ) - array_insert(arr, _ind + i, values[i]); -} + function array_get_depth(arr) { // Read only the first member, faster + INLINE + + if(!is_array(arr)) return 0; + var d = 0; + var p = arr; + + while(is_array(p) && !array_empty(p)) { + d++; + p = p[0]; + } + + return d; + } -function array_push_to_back(arr, value) { - if(!array_exists(arr, value)) return; + function array_safe_set(arr, index, value, fill = 0) { + if(!is_array(arr)) return arr; + if(is_array(index)) return arr; + + if(index < 0) return arr; + if(index >= array_length(arr)) { + var i = array_length(arr); + for(; i <= index; i++ ) + arr[i] = fill; + arr[index] = value; + return arr; + } + + array_set(arr, index, value); + return arr; + } - array_remove(arr, value); - array_push(arr, value); -} + function array_fill(arr, startIndex, endIndex, value = 0) { + INLINE + + for( var i = max(0, startIndex); i < endIndex; i++ ) + arr[i] = value; + } -#macro array_equals array_equals_overwrite -#macro __array_equals array_equals +#endregion -function array_equals_overwrite(arr1, arr2) { - if(!is_array(arr1) && is_array(arr2)) return false; - if( is_array(arr1) && !is_array(arr2)) return false; - if(!is_array(arr1) && !is_array(arr2)) return arr1 == arr2; - return __array_equals(arr1, arr2) -} \ No newline at end of file +#region find + + function array_exists(arr, val) { + INLINE + self.__temp_val = val; + + if(!is_array(arr)) return false; + var _a = array_any(arr, function(_val, _ind) { return isEqual(_val, self.__temp_val); }); + + self.__temp_val = 0; + return _a; + } + + function array_find(arr, val) { + INLINE + self.__temp_val = val; + + if(!is_array(arr)) return -1; + var _a = array_find_index(arr, function(_val, _ind) { return isEqual(_val, self.__temp_val); }); + + self.__temp_val = 0; + return _a; + } + + function array_find_string(arr, val) { + INLINE + self.__temp_val = string_lower(val); + + if(!is_array(arr)) return -1; + var _a = array_find_index(arr, function(_val, _ind) { return string_lower(_val) == self.__temp_val; }); + + self.__temp_val = 0; + return _a; + } + + function array_min(arr) { + INLINE + + if(!is_array(arr) || array_length(arr) == 0) return 0; + + var mn = arr[0]; + for( var i = 0, n = array_length(arr); i < n; i++ ) + mn = min(mn, arr[i]); + return mn; + } + + function array_max(arr) { + INLINE + + if(!is_array(arr) || array_length(arr) == 0) return 0; + + var mx = arr[0]; + for( var i = 0, n = array_length(arr); i < n; i++ ) + mx = max(mx, arr[i]); + return mx; + } + +#endregion + +#region modify + + function array_resize_fill(arr, size, fill = 0) { + if(size < array_length(arr)) { + array_resize(arr, size); + return arr; + } + + var i = array_length(arr); + for(; i < size; i++) + arr[i] = fill; + return arr; + } + + function array_push_create(arr, val) { + INLINE + + if(!is_array(arr)) return [ val ]; + array_push(arr, val); + return arr; + } + + function array_remove(arr, val) { + INLINE + + if(!is_array(arr)) return; + if(!array_exists(arr, val)) return; + var ind = array_find(arr, val); + array_delete(arr, ind, 1); + } + + function array_push_unique(arr, val) { + INLINE + + if(!is_array(arr)) return; + if(array_exists(arr, val)) return; + array_push(arr, val); + } + + function array_insert_unique(arr, ind, val) { + INLINE + + if(!is_array(arr)) return; + if(array_exists(arr, val)) return; + array_insert(arr, ind, val); + } + + function array_insert_after(arr, before, values) { + INLINE + + var _ind = array_find(arr, before) + 1; + + for( var i = 0, n = array_length(values); i < n; i++ ) + array_insert(arr, _ind + i, values[i]); + } + + function array_insert_before(arr, before, values) { + INLINE + + var _ind = array_find(arr, before); + + for( var i = 0, n = array_length(values); i < n; i++ ) + array_insert(arr, _ind + i, values[i]); + } + + function array_push_to_back(arr, value) { + if(!array_exists(arr, value)) return; + + array_remove(arr, value); + array_push(arr, value); + } + + function array_spread(arr, _arr = [], _minDepth = 0) { + INLINE + + if(array_get_depth(arr) == _minDepth) { + array_push(_arr, arr); + return _arr; + } + + for( var i = 0, n = array_length(arr); i < n; i++ ) + array_spread(arr[i], _arr, _minDepth); + + return _arr; + } +#endregion + +#region binary opr + + function array_overlap(arr0, arr1) { + INLINE + self.__temp_arr = arr1; + + if(!is_array(arr0)) return false; + if(!is_array(arr1)) return false; + + var _a = array_any(arr0, function(_val, _ind) { return array_exists(self.__temp_arr, _val); }); + + self.__temp_arr = 0; + return _a; + } + + function array_append(arr, arr0) { + INLINE + + if(is_undefined(arr0)) return arr; + if(!is_array(arr)) return arr; + if(!is_array(arr0)) { array_push(arr, arr0); return arr; } + + for( var i = 0, n = array_length(arr0); i < n; i++ ) + array_push(arr, arr0[i]); + return arr; + } + + function array_merge() { + INLINE + + var arr = []; + for( var i = 0; i < argument_count; i++ ) + array_append(arr, argument[i]); + + return arr; + } + + #macro array_equals array_equals_overwrite + #macro __array_equals array_equals + + function array_equals_overwrite(arr1, arr2) { + if(!is_array(arr1) && is_array(arr2)) return false; + if( is_array(arr1) && !is_array(arr2)) return false; + if(!is_array(arr1) && !is_array(arr2)) return arr1 == arr2; + return __array_equals(arr1, arr2) + } + + function array_substract(arr1, arr2) { + if(!is_array(arr1) || !is_array(arr2)) return; + + var _hsh = {}; + var _arr = []; + + for( var i = 0, n = array_length(arr2); i < n; i++ ) + _hsh[$ arr2[i]] = (_hsh[$ arr2[i]] ?? 0) + 1; + + for( var i = 0, n = array_length(arr1); i < n; i++ ) { + if(!struct_has(_hsh, arr1[i]) || _hsh[$ arr1[i]]-- <= 0) + array_push(_arr, arr1[i]); + } + + return _arr; + } + + function array_xor(arr1, arr2) { + if(!is_array(arr1) || !is_array(arr2)) return; + + var _arr = array_union(array_substract(arr1, arr2), array_substract(arr2, arr1)); + return _arr; + } +#endregion diff --git a/scripts/node_array_boolean_opr/node_array_boolean_opr.gml b/scripts/node_array_boolean_opr/node_array_boolean_opr.gml new file mode 100644 index 000000000..62e75b345 --- /dev/null +++ b/scripts/node_array_boolean_opr/node_array_boolean_opr.gml @@ -0,0 +1,62 @@ +function Node_Array_Boolean_Opr(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Array Boolean Opr"; + setDimension(96, 32 + 24); + + newInput(0, nodeValue("Array 1", self, CONNECT_TYPE.input, VALUE_TYPE.any, 0)) + .setVisible(true, true); + + newInput(1, nodeValue("Array 2", self, CONNECT_TYPE.input, VALUE_TYPE.any, 0)) + .setVisible(true, true); + + newInput(2, nodeValue_Enum_Scroll("Operation", self, 0, [ "Union", "Subtract", "Intersect", "XOR" ])) + .setVisible(true, true); + + newOutput(0, nodeValue_Output("Array out", self, VALUE_TYPE.any, [])); + + input_display_list = [ 2, 0, 1 ]; + + static update = function(frame = CURRENT_FRAME) { + var arr1 = getInputData(0); + var arr2 = getInputData(1); + var opr = getInputData(2); + + inputs[0].setType(VALUE_TYPE.any); + inputs[1].setType(VALUE_TYPE.any); + outputs[0].setType(VALUE_TYPE.any); + + if(inputs[0].value_from != noone) { + inputs[0].setType(inputs[0].value_from.type); + inputs[1].setType(inputs[1].value_from.type); + outputs[0].setType(inputs[0].value_from.type); + } + + if(!is_array(arr1) || !is_array(arr2)) return; + + var _arr; + + switch(opr) { + case 0 : _arr = array_union(arr1, arr2); break; + case 1 : _arr = array_substract(arr1, arr2); break; + case 2 : _arr = array_intersection(arr1, arr2); break; + case 3 : _arr = array_xor(arr1, arr2); break; + } + + outputs[0].setValue(_arr); + } + + static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { + var bbox = drawGetBbox(xx, yy, _s); + var opr = getInputData(2); + var str = ""; + + switch(opr) { + case 0 : str = "union" break; + case 1 : str = "substract" break; + case 2 : str = "intersection" break; + case 3 : str = "xor" break; + } + + draw_set_text(f_sdf, fa_center, fa_center, COLORS._main_text); + draw_text_bbox(bbox, str); + } +} \ No newline at end of file diff --git a/scripts/node_array_boolean_opr/node_array_boolean_opr.yy b/scripts/node_array_boolean_opr/node_array_boolean_opr.yy new file mode 100644 index 000000000..83f2e888b --- /dev/null +++ b/scripts/node_array_boolean_opr/node_array_boolean_opr.yy @@ -0,0 +1,14 @@ +{ + "$GMScript":"v1", + "%Name":"node_array_boolean_opr", + "isCompatibility":false, + "isDnD":false, + "name":"node_array_boolean_opr", + "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_value_float/node_value_float.gml b/scripts/node_value_float/node_value_float.gml index 92ed2df2f..dd9212f89 100644 --- a/scripts/node_value_float/node_value_float.gml +++ b/scripts/node_value_float/node_value_float.gml @@ -18,8 +18,8 @@ function __NodeValue_Float(_name, _node, _value, _tooltip = "") : NodeValue(_nam var dis = nod.display_type; if(typ != VALUE_TYPE.surface) { - if(typ == VALUE_TYPE.text) val = toNumber(val); - if(struct_has(val, "to_real")) val = val.to_real(); + if(typ == VALUE_TYPE.text) val = toNumber(val); + if(is_struct(val) && struct_has(val, "to_real")) val = val.to_real(); return valueProcess(val, nod, applyUnit); } diff --git a/scripts/node_value_int/node_value_int.gml b/scripts/node_value_int/node_value_int.gml index 16767e6a7..fc7529632 100644 --- a/scripts/node_value_int/node_value_int.gml +++ b/scripts/node_value_int/node_value_int.gml @@ -20,7 +20,7 @@ function __NodeValue_Int(_name, _node, _value, _tooltip = "") : NodeValue(_name, if(typ != VALUE_TYPE.surface) { if(typ == VALUE_TYPE.text) val = toNumber(val); - if(struct_has(val, "to_real")) val = val.to_real(); + if(is_struct(val) && struct_has(val, "to_real")) val = val.to_real(); return valueProcess(val, nod, applyUnit); } diff --git a/sprites/s_node_array_boolean_opr/3f6813f5-0553-4de8-96d6-c7d745fffe40.png b/sprites/s_node_array_boolean_opr/3f6813f5-0553-4de8-96d6-c7d745fffe40.png new file mode 100644 index 0000000000000000000000000000000000000000..bd987487de03cd892f3b2e294e3a0e2ca216c83d GIT binary patch literal 1066 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=3dtTpz6=aiY77hwEes65fI|H*Yfq_}p)5S5Q;?~<)`?Ey? z1&-SnA5&|M()z_d-4Vaz(Y-ro&efFPTfb9~C!~~R2WJfHIVN`r zyDg2O34#?$O0v<-Nlo@_dsy^Z`Zh3xHAD(#MhYg}`xBj@RpO%Rxg%pTr|G3F{e~4D z#^0t*WettJb~hsMYGLS9#**@d4~n^8u39CrKg?*=>1`}IDLj3@xem3iTjiG$VxIG8 zx*Y%d&JzxNsim$e=Gi%=puL-qv zsM`8xy_VB|+ixZ3uc!UhFktqXbzWiv?;6JWjs6F;GgaQ!x;B`-Zf~r7z*b=J{Q2wy z&Ix`}C&Rw5WNfaJj9~B+35jK2=dJwn!DajP?XtPo-ZOctHnCf9?zx=ycb32W-qeQ5 z&)$4Kr45qKqO8T^WZw^_tj}cG_+OUH`229iXC8y-yXBw4e=oYh z(zpAbQfqnuIcAFq5Qy6t%706#69eCk+RH zcHg^&5*#nMGgao=ZHljcdp_XmU#A7ofET#ccwq&{hlJ1Wo-?)oK496Sr&+vIeojNR z!}@1Or%n8Mjo-V$WRjSHZxl!F%=1i{k=ol=Uk=;vpg66o4^an~;1wlW11EhZ;x0VzMuj*S;@O=~E7R$bD2 zZ5xZr{fyjdfnB^de6kBz-|g7J>vlIIcj~I&3oqUZb=A1#_S&99$8(c>%q>Y^)=@2S zjVMV;EJ?LWE=mPb3`Pb%&a+6D$z1_p1mR@I_t$jwj5OsmAL pVQ#t5L7)Z=xD6$lxv9k^iMa*1^_)sFmILZx@O1TaS?83{1OUzAxB>tG literal 0 HcmV?d00001 diff --git a/sprites/s_node_array_boolean_opr/layers/3f6813f5-0553-4de8-96d6-c7d745fffe40/8b6cb694-da18-4679-b77a-1770cc5ebe4f.png b/sprites/s_node_array_boolean_opr/layers/3f6813f5-0553-4de8-96d6-c7d745fffe40/8b6cb694-da18-4679-b77a-1770cc5ebe4f.png new file mode 100644 index 0000000000000000000000000000000000000000..bd987487de03cd892f3b2e294e3a0e2ca216c83d GIT binary patch literal 1066 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=3dtTpz6=aiY77hwEes65fI|H*Yfq_}p)5S5Q;?~<)`?Ey? z1&-SnA5&|M()z_d-4Vaz(Y-ro&efFPTfb9~C!~~R2WJfHIVN`r zyDg2O34#?$O0v<-Nlo@_dsy^Z`Zh3xHAD(#MhYg}`xBj@RpO%Rxg%pTr|G3F{e~4D z#^0t*WettJb~hsMYGLS9#**@d4~n^8u39CrKg?*=>1`}IDLj3@xem3iTjiG$VxIG8 zx*Y%d&JzxNsim$e=Gi%=puL-qv zsM`8xy_VB|+ixZ3uc!UhFktqXbzWiv?;6JWjs6F;GgaQ!x;B`-Zf~r7z*b=J{Q2wy z&Ix`}C&Rw5WNfaJj9~B+35jK2=dJwn!DajP?XtPo-ZOctHnCf9?zx=ycb32W-qeQ5 z&)$4Kr45qKqO8T^WZw^_tj}cG_+OUH`229iXC8y-yXBw4e=oYh z(zpAbQfqnuIcAFq5Qy6t%706#69eCk+RH zcHg^&5*#nMGgao=ZHljcdp_XmU#A7ofET#ccwq&{hlJ1Wo-?)oK496Sr&+vIeojNR z!}@1Or%n8Mjo-V$WRjSHZxl!F%=1i{k=ol=Uk=;vpg66o4^an~;1wlW11EhZ;x0VzMuj*S;@O=~E7R$bD2 zZ5xZr{fyjdfnB^de6kBz-|g7J>vlIIcj~I&3oqUZb=A1#_S&99$8(c>%q>Y^)=@2S zjVMV;EJ?LWE=mPb3`Pb%&a+6D$z1_p1mR@I_t$jwj5OsmAL pVQ#t5L7)Z=xD6$lxv9k^iMa*1^_)sFmILZx@O1TaS?83{1OUzAxB>tG literal 0 HcmV?d00001 diff --git a/sprites/s_node_array_boolean_opr/s_node_array_boolean_opr.yy b/sprites/s_node_array_boolean_opr/s_node_array_boolean_opr.yy new file mode 100644 index 000000000..28193c791 --- /dev/null +++ b/sprites/s_node_array_boolean_opr/s_node_array_boolean_opr.yy @@ -0,0 +1,90 @@ +{ + "$GMSprite":"", + "%Name":"s_node_array_boolean_opr", + "bboxMode":0, + "bbox_bottom":63, + "bbox_left":0, + "bbox_right":63, + "bbox_top":0, + "collisionKind":1, + "collisionTolerance":0, + "DynamicTexturePage":false, + "edgeFiltering":false, + "For3D":false, + "frames":[ + {"$GMSpriteFrame":"","%Name":"3f6813f5-0553-4de8-96d6-c7d745fffe40","name":"3f6813f5-0553-4de8-96d6-c7d745fffe40","resourceType":"GMSpriteFrame","resourceVersion":"2.0",}, + ], + "gridX":0, + "gridY":0, + "height":64, + "HTile":false, + "layers":[ + {"$GMImageLayer":"","%Name":"8b6cb694-da18-4679-b77a-1770cc5ebe4f","blendMode":0,"displayName":"default","isLocked":false,"name":"8b6cb694-da18-4679-b77a-1770cc5ebe4f","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,}, + ], + "name":"s_node_array_boolean_opr", + "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_boolean_opr", + "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_boolean_opr", + "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":"3f6813f5-0553-4de8-96d6-c7d745fffe40","path":"sprites/s_node_array_boolean_opr/s_node_array_boolean_opr.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"dd4a2d62-327f-4cc6-856a-909eead3e7d3","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