new shapes

This commit is contained in:
Tanasart 2024-05-25 09:51:52 +07:00
parent 6cf409e46d
commit c43a7d119d
56 changed files with 565 additions and 161 deletions

View file

@ -1905,10 +1905,13 @@
{"name":"s_node_shadow_type","order":1,"path":"sprites/s_node_shadow_type/s_node_shadow_type.yy",},
{"name":"s_node_shadow","order":49,"path":"sprites/s_node_shadow/s_node_shadow.yy",},
{"name":"s_node_shape_blur","order":7,"path":"sprites/s_node_shape_blur/s_node_shape_blur.yy",},
{"name":"s_node_shape_circle","order":24,"path":"sprites/s_node_shape_circle/s_node_shape_circle.yy",},
{"name":"s_node_shape_leaf","order":25,"path":"sprites/s_node_shape_leaf/s_node_shape_leaf.yy",},
{"name":"s_node_shape_map","order":21,"path":"sprites/s_node_shape_map/s_node_shape_map.yy",},
{"name":"s_node_shape_misc","order":6,"path":"sprites/s_node_shape_misc/s_node_shape_misc.yy",},
{"name":"s_node_shape_poly_type","order":22,"path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},
{"name":"s_node_shape_polygon","order":25,"path":"sprites/s_node_shape_polygon/s_node_shape_polygon.yy",},
{"name":"s_node_shape_rectangle","order":23,"path":"sprites/s_node_shape_rectangle/s_node_shape_rectangle.yy",},
{"name":"s_node_shape","order":14,"path":"sprites/s_node_shape/s_node_shape.yy",},
{"name":"s_node_shard","order":33,"path":"sprites/s_node_shard/s_node_shard.yy",},
{"name":"s_node_shell_excecute","order":33,"path":"sprites/s_node_shell_excecute/s_node_shell_excecute.yy",},

View file

@ -2478,10 +2478,13 @@
{"id":{"name":"s_node_shadow_type","path":"sprites/s_node_shadow_type/s_node_shadow_type.yy",},},
{"id":{"name":"s_node_shadow","path":"sprites/s_node_shadow/s_node_shadow.yy",},},
{"id":{"name":"s_node_shape_blur","path":"sprites/s_node_shape_blur/s_node_shape_blur.yy",},},
{"id":{"name":"s_node_shape_circle","path":"sprites/s_node_shape_circle/s_node_shape_circle.yy",},},
{"id":{"name":"s_node_shape_leaf","path":"sprites/s_node_shape_leaf/s_node_shape_leaf.yy",},},
{"id":{"name":"s_node_shape_map","path":"sprites/s_node_shape_map/s_node_shape_map.yy",},},
{"id":{"name":"s_node_shape_misc","path":"sprites/s_node_shape_misc/s_node_shape_misc.yy",},},
{"id":{"name":"s_node_shape_poly_type","path":"sprites/s_node_shape_poly_type/s_node_shape_poly_type.yy",},},
{"id":{"name":"s_node_shape_polygon","path":"sprites/s_node_shape_polygon/s_node_shape_polygon.yy",},},
{"id":{"name":"s_node_shape_rectangle","path":"sprites/s_node_shape_rectangle/s_node_shape_rectangle.yy",},},
{"id":{"name":"s_node_shape_type","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},},
{"id":{"name":"s_node_shape","path":"sprites/s_node_shape/s_node_shape.yy",},},
{"id":{"name":"s_node_shard","path":"sprites/s_node_shard/s_node_shard.yy",},},

View file

@ -250,8 +250,6 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co
var _path = getInputData(46);
if(_rotation[1] < _rotation[0]) _rotation[1] += 360;
var _posDist = [];
random_set_seed(seed); seed++;

View file

@ -149,6 +149,16 @@ function array_find(arr, val) { #region
});
} #endregion
function array_find_string(arr, val) { #region
INLINE
self.__temp_val = string_lower(val);
if(!is_array(arr)) return -1;
return array_find_index(arr, function(_val, _ind) {
return string_lower(_val) == self.__temp_val;
});
} #endregion
function array_remove(arr, val) { #region
INLINE

View file

@ -33,7 +33,7 @@ function Node_FLIP_Apply_Force(_x, _y, _group = noone) : Node(_x, _y, _group) co
.setDisplay(VALUE_DISPLAY.slider, { range: [1, 16, 0.1] });
inputs[| 3] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Circle", s_node_shape_type, 1), new scrollItem("Rectangle", s_node_shape_type, 0), ]);
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Circle", s_node_shape_circle, 0), new scrollItem("Rectangle", s_node_shape_rectangle, 0), ]);
inputs[| 4] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 4, 4 ] )
.setDisplay(VALUE_DISPLAY.vector);

View file

@ -20,7 +20,7 @@ function Node_FLIP_Apply_Velocity(_x, _y, _group = noone) : Node(_x, _y, _group)
.setDisplay(VALUE_DISPLAY.vector);
inputs[| 4] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Circle", s_node_shape_type, 1), new scrollItem("Rectangle", s_node_shape_type, 0), ]);
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Circle", s_node_shape_circle, 0), new scrollItem("Rectangle", s_node_shape_rectangle, 0) ]);
inputs[| 5] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 4, 4 ] )
.setDisplay(VALUE_DISPLAY.vector);

View file

@ -14,7 +14,7 @@ function Node_FLIP_Destroy(_x, _y, _group = noone) : Node(_x, _y, _group) constr
.setUnitRef(function(index) { return getDimension(); });
inputs[| 2] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Circle", s_node_shape_type, 1), new scrollItem("Rectangle", s_node_shape_type, 0), ]);
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Circle", s_node_shape_circle, 0), new scrollItem("Rectangle", s_node_shape_rectangle, 0), ]);
inputs[| 3] = nodeValue("Radius", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 4 )
.setDisplay(VALUE_DISPLAY.slider, { range: [1, 16, 0.1] });

View file

@ -10,7 +10,7 @@ function Node_FLIP_Spawner(_x, _y, _group = noone) : Node(_x, _y, _group) constr
.setVisible(true, true);
inputs[| 1] = nodeValue("Spawn Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Circle", s_node_shape_type, 1), new scrollItem("Rectangle", s_node_shape_type, 0), "Surface" ]);
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Circle", s_node_shape_circle, 0), new scrollItem("Rectangle", s_node_shape_rectangle, 0), "Surface" ]);
inputs[| 2] = nodeValue("Spawn Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 0.25 ] )
.setDisplay(VALUE_DISPLAY.vector)

View file

@ -11,7 +11,7 @@ function Node_Area(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
.setVisible(true, true);
inputs[| 2] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, AREA_SHAPE.rectangle )
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Rectangle", s_node_shape_type, 0), new scrollItem("Elipse", s_node_shape_type, 1) ]);
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Rectangle", s_node_shape_rectangle, 0), new scrollItem("Elipse", s_node_shape_circle, 0) ]);
outputs[| 0] = nodeValue("Area", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, [ 0, 0, 0, 0, AREA_SHAPE.rectangle ])
.setDisplay(VALUE_DISPLAY.vector);

View file

@ -33,6 +33,8 @@ function Node_Directory_Search(_x, _y, _group = noone) : Node(_x, _y, _group) co
inputs[| 2] = nodeValue("Type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Surface", "Text" ]);
inputs[| 3] = nodeValue("Recursive", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false)
outputs[| 0] = nodeValue("Outputs", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, [])
.setVisible(true, true);
@ -93,13 +95,19 @@ function Node_Directory_Search(_x, _y, _group = noone) : Node(_x, _y, _group) co
var path = getInputData(0);
var filter = getInputData(1);
var type = getInputData(2);
var recurs = getInputData(3);
var _paths = struct_get_names(paths);
for (var i = 0, n = array_length(_paths); i < n; i++)
deleteSprite(paths[$ _paths[i]]);
paths = {};
var _paths = path_dir_get_files(path, filter);
var _paths = path_dir_get_files(path, filter, recurs);
if(array_empty(_paths)) {
noti_warning("Directory Search: Empty search results.")
return;
}
for (var i = 0, n = array_length(_paths); i < n; i++) {
var _path = _paths[i];
@ -109,7 +117,8 @@ function Node_Directory_Search(_x, _y, _group = noone) : Node(_x, _y, _group) co
else if(type == 1) refreshText(paths[$ _path]);
}
setDisplayName(filename_name_only(path));
var _p = string_trim_end(path, ["/", "\\"]);
setDisplayName(filename_name_only(_p));
} #endregion
insp1UpdateTooltip = __txt("Refresh");

View file

@ -13,8 +13,8 @@ function Node_Local_Analyze(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Empty", "Clamp", "Repeat" ]);
inputs[| 4] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Square", s_node_shape_type, 0),
new scrollItem("Circle", s_node_shape_type, 1),
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Square", s_node_shape_rectangle, 0),
new scrollItem("Circle", s_node_shape_circle, 0),
new scrollItem("Diamond", s_node_shape_misc, 0) ]);
inputs[| 5] = nodeValue("Mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);

View file

@ -62,7 +62,7 @@ function Node_MK_Fall(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
.setDisplay(VALUE_DISPLAY.range, { linked : true });
inputs[| 22] = nodeValue("Render Type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Leaf", s_node_shape_type, 7), new scrollItem("Circle", s_node_shape_type, 1) ]);
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Leaf", s_node_shape_leaf, 0), new scrollItem("Circle", s_node_shape_circle, 0) ]);
inputs[| 23] = nodeValue("Twist Radius", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.7)
.setDisplay(VALUE_DISPLAY.slider);

View file

@ -36,7 +36,7 @@ function Node_Rigid_Object(_x, _y, _group = noone) : Node(_x, _y, _group) constr
.setAnimable(false);
inputs[| 5] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Box", s_node_shape_type, 0), new scrollItem("Circle", s_node_shape_type, 1), new scrollItem("Custom", s_node_shape_misc, 1) ])
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Box", s_node_shape_rectangle, 0), new scrollItem("Circle", s_node_shape_circle, 0), new scrollItem("Custom", s_node_shape_misc, 1) ])
.rejectArray()
.setAnimable(false);

View file

@ -1,8 +1,8 @@
enum NODE_SHAPE_TYPE { rectangle, elipse, regular, star, arc, teardrop, cross, leaf, crescent, donut }
#region create
global.node_shape_keys = [ "rectangle", "ellipse", "regular polygon", "star", "arc", "teardrop", "cross", "leaf", "crescent", "donut" ];
array_append(global.node_shape_keys, [ "square", "circle", "triangle", "pentagon", "hexagon", "ring" ]);
global.node_shape_keys = [
"rectangle", "ellipse", "regular polygon", "star", "arc", "teardrop", "cross", "leaf", "crescent", "donut",
"square", "circle", "triangle", "pentagon", "hexagon", "ring", "diamond", "trapezoid", "parallelogram",
];
function Node_create_Shape(_x, _y, _group = noone, _param = {}) { #region
var query = struct_try_get(_param, "query", "");
@ -17,7 +17,7 @@ enum NODE_SHAPE_TYPE { rectangle, elipse, regular, star, arc, teardrop, cross, l
case "hexagon" : ind = 2; node.inputs[| 4].setValue(6); break;
case "ring" : ind = 9; break;
default : ind = array_find(global.node_shape_keys, query);
default : ind = array_find_string(node.shape_types, query);
}
if(ind >= 0) node.inputs[| 2].setValue(ind);
@ -37,12 +37,14 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
inputs[| 1] = nodeValue("Background", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false);
var _types = [ "Rectangle", "Ellipse", "Regular polygon", "Star", "Arc", "Teardrop", "Cross", "Leaf", "Crescent", "Donut" ];
for( var i = 0, n = array_length(_types); i < n; i++ )
_types[i] = new scrollItem(_types[i], s_node_shape_type, i);
shape_types = [ "Rectangle", "Diamond", "Trapezoid", "Parallelogram", "Ellipse", "Regular polygon", "Star", "Arc", "Teardrop", "Cross", "Leaf", "Crescent", "Donut", ];
shape_types_str = [];
for( var i = 0, n = array_length(shape_types); i < n; i++ )
shape_types_str[i] = new scrollItem(shape_types[i], s_node_shape_type, i);
inputs[| 2] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_scroll, _types);
.setDisplay(VALUE_DISPLAY.enum_scroll, shape_types_str);
inputs[| 3] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, DEF_AREA_REF)
.setUnitRef(onSurfaceSize, VALUE_UNIT.reference)
@ -98,12 +100,18 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
inputs[| 20] = nodeValue("Level", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 1 ])
.setDisplay(VALUE_DISPLAY.slider_range);
inputs[| 21] = nodeValue("Angles", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 1.0 ])
.setDisplay(VALUE_DISPLAY.slider_range);
inputs[| 22] = nodeValue("Skew", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5 )
.setDisplay(VALUE_DISPLAY.slider);
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
input_display_list = [
["Output", false], 0, 6,
["Transform", false], 15, 3, 16, 17, 19,
["Shape", false], 14, 2, 9, 4, 13, 5, 7, 8,
["Shape", false], 14, 2, 9, 4, 13, 5, 7, 8, 21, 22,
["Render", true], 10, 12, 20, 18,
["Background", true, 1], 11,
];
@ -267,23 +275,60 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
inputs[| 9].setVisible(false);
inputs[| 13].setVisible(false);
inputs[| 18].setVisible( true);
inputs[| 21].setVisible(false);
inputs[| 22].setVisible(false);
switch(_shape) { #region
case NODE_SHAPE_TYPE.rectangle :
var _shp = array_safe_get(shape_types, _shape, "");
if(is_struct(_shp)) _shp = _shp.data;
switch(_shp) { #region
case "Rectangle" :
inputs[| 9].setVisible( true);
inputs[| 18].setVisible(false);
shader_set_i("shape", 0);
break;
case NODE_SHAPE_TYPE.elipse :
case "Diamond" :
inputs[| 9].setVisible( true);
inputs[| 18].setVisible(false);
shader_set_i("shape", 10);
break;
case NODE_SHAPE_TYPE.regular :
case "Trapezoid" :
inputs[| 9].setVisible( true);
inputs[| 18].setVisible(false);
inputs[| 21].setVisible( true);
shader_set_i("shape", 11);
shader_set_f("trep", _data[21]);
break;
case "Parallelogram" :
inputs[| 9].setVisible( true);
inputs[| 18].setVisible(false);
inputs[| 22].setVisible( true);
shader_set_i("shape", 12);
shader_set_f("parall", _data[22]);
break;
case "Ellipse" :
shader_set_i("shape", 1);
break;
case "Regular polygon" :
inputs[| 4].setVisible(true);
inputs[| 7].setVisible(true);
inputs[| 9].setVisible(true);
shader_set_i("shape", 2);
shader_set_i("sides", _data[4]);
shader_set_f("angle", degtorad(_data[7]));
break;
case NODE_SHAPE_TYPE.star :
case "Star" :
inputs[| 4].setVisible(true);
inputs[| 5].setVisible(true);
inputs[| 7].setVisible(true);
@ -291,11 +336,13 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
inputs[| 5].name = "Inner radius";
shader_set_i("shape", 3);
shader_set_i("sides", _data[4]);
shader_set_f("angle", degtorad(_data[7]));
shader_set_f("inner", _data[5]);
break;
case NODE_SHAPE_TYPE.arc :
case "Arc" :
inputs[| 5].setVisible(true);
inputs[| 8].setVisible(true);
@ -304,39 +351,48 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
var ar = _data[8];
var center = degtorad(ar[0] + ar[1]) / 2;
var range = degtorad(ar[0] - ar[1]) / 2;
shader_set_i("shape", 4);
shader_set_f("angle", center);
shader_set_f("angle_range", [ sin(range), cos(range) ] );
shader_set_f("inner", _data[5] / 2);
break;
case NODE_SHAPE_TYPE.teardrop :
case "Teardrop" :
inputs[| 5].setVisible(true);
inputs[| 13].setVisible(true);
inputs[| 5].name = "End radius";
inputs[| 13].name = "Start radius";
shader_set_i("shape", 5);
shader_set_f("edRad", _data[ 5]);
shader_set_f("stRad", _data[13]);
break;
case NODE_SHAPE_TYPE.cross :
case "Cross" :
inputs[| 9].setVisible(true);
inputs[| 13].setVisible(true);
inputs[| 13].name = "Outer radius";
shader_set_i("shape", 6);
shader_set_f("outer", _data[13]);
break;
case NODE_SHAPE_TYPE.leaf :
case "Leaf" :
inputs[| 5].setVisible(true);
inputs[| 13].setVisible(true);
inputs[| 5].name = "Inner radius";
inputs[| 13].name = "Outer radius";
shader_set_i("shape", 7);
shader_set_f("inner", _data[ 5]);
shader_set_f("outer", _data[13]);
break;
case NODE_SHAPE_TYPE.crescent :
case "Crescent" :
inputs[| 5].setVisible(true);
inputs[| 7].setVisible(true);
inputs[| 13].setVisible(true);
@ -344,21 +400,24 @@ function Node_Shape(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
inputs[| 5].name = "Shift";
inputs[| 13].name = "Inner circle";
shader_set_i("shape", 8);
shader_set_f("outer", _data[ 5]);
shader_set_f("angle", -degtorad(_data[7]));
shader_set_f("inner", _data[13]);
break;
case NODE_SHAPE_TYPE.donut :
case "Donut" :
inputs[| 13].setVisible(true);
inputs[| 13].name = "Inner circle";
shader_set_i("shape", 9);
shader_set_f("inner", _data[13]);
break;
} #endregion
shader_set_f("dimension", _dim);
shader_set_i("shape", _shape);
shader_set_f("bgColor", _bgcol);
shader_set_i("aa", _aa);
shader_set_i("drawDF", _df);

View file

@ -7,8 +7,8 @@ function Node_Shape_Map(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
active_index = 1;
inputs[| 2] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Circle", s_node_shape_type, 1),
new scrollItem("Polygon", s_node_shape_type, 2), ]);
.setDisplay(VALUE_DISPLAY.enum_scroll, [ new scrollItem("Circle", s_node_shape_circle, 0),
new scrollItem("Polygon", s_node_shape_misc, 1), ]);
inputs[| 3] = nodeValue("Map Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 4, 1 ])
.setDisplay(VALUE_DISPLAY.vector);

View file

@ -543,20 +543,15 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
case VALUE_DISPLAY.vector_range : #region
var val = animator.getValue();
editWidget = new vectorRangeBox(array_length(val), _txt, function(index, val) {
return setValueInspector(val, index);
}, unit );
editWidget = new vectorRangeBox(array_length(val), _txt, function(index, val) { return setValueInspector(val, index); }, unit );
if(type == VALUE_TYPE.integer) editWidget.setSlideSpeed(1 / 10);
if(!struct_has(display_data, "linked")) display_data.linked = false;
if(array_length(val) == 2)
extract_node = "Node_Vector2";
else if(array_length(val) == 3)
extract_node = "Node_Vector3";
else if(array_length(val) == 4)
extract_node = "Node_Vector4";
if(array_length(val) == 2) extract_node = "Node_Vector2";
else if(array_length(val) == 3) extract_node = "Node_Vector3";
else if(array_length(val) == 4) extract_node = "Node_Vector4";
for( var i = 0, n = array_length(animators); i < n; i++ )
animators[i].suffix = " " + string(array_safe_get_fast(global.displaySuffix_VecRange, i));
@ -574,9 +569,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
break; #endregion
case VALUE_DISPLAY.rotation_range : #region
editWidget = new rotatorRange(function(index, val) {
return setValueInspector(val, index);
} );
editWidget = new rotatorRange(function(index, val) { return setValueInspector(val, index); } );
for( var i = 0, n = array_length(animators); i < n; i++ )
animators[i].suffix = " " + array_safe_get_fast(global.displaySuffix_Range, i);
@ -584,10 +577,8 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
extract_node = "Node_Vector2";
break; #endregion
case VALUE_DISPLAY.rotation_random: #region
editWidget = new rotatorRandom(function(index, val) {
return setValueInspector(val, index);
} );
case VALUE_DISPLAY.rotation_random : #region
editWidget = new rotatorRandom(function(index, val) { return setValueInspector(val, index); } );
extract_node = "Node_Vector2";
break; #endregion
@ -617,9 +608,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
break; #endregion
case VALUE_DISPLAY.area : #region
editWidget = new areaBox(function(index, val) {
return setValueInspector(val, index);
}, unit);
editWidget = new areaBox(function(index, val) { return setValueInspector(val, index); }, unit);
if(type == VALUE_TYPE.integer) editWidget.setSlideSpeed(1 / 10);
@ -633,11 +622,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
break; #endregion
case VALUE_DISPLAY.padding : #region
editWidget = new paddingBox(function(index, val) {
//var _val = animator.getValue();
//_val[index] = val;
return setValueInspector(val, index);
}, unit);
editWidget = new paddingBox(function(index, val) { return setValueInspector(val, index); }, unit);
if(type == VALUE_TYPE.integer) editWidget.setSlideSpeed(1 / 10);
for( var i = 0, n = array_length(animators); i < n; i++ )
@ -647,9 +632,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
break; #endregion
case VALUE_DISPLAY.corner : #region
editWidget = new cornerBox(function(index, val) {
return setValueInspector(val, index);
}, unit);
editWidget = new cornerBox(function(index, val) { return setValueInspector(val, index); }, unit);
if(type == VALUE_TYPE.integer) editWidget.setSlideSpeed(1 / 10);
for( var i = 0, n = array_length(animators); i < n; i++ )
@ -659,9 +642,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
break; #endregion
case VALUE_DISPLAY.puppet_control : #region
editWidget = new controlPointBox(function(index, val) {
return setValueInspector(val, index);
});
editWidget = new controlPointBox(function(index, val) { return setValueInspector(val, index); });
extract_node = "";
break; #endregion
@ -686,9 +667,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
if(!is_struct(display_data)) display_data = { data: display_data };
var choices = __txt_junction_data(instanceof(node), connect_type, index, display_data.data);
editWidget = new buttonGroup(choices, function(val) {
return setValueInspector(val);
} );
editWidget = new buttonGroup(choices, function(val) { return setValueInspector(val); } );
rejectConnect();
key_inter = CURVE_TYPE.cut;
@ -696,9 +675,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
break; #endregion
case VALUE_DISPLAY.matrix : #region
editWidget = new matrixGrid(_txt, display_data.size, function(index, val) {
return setValueInspector(val, index);
}, unit );
editWidget = new matrixGrid(_txt, display_data.size, function(index, val) { return setValueInspector(val, index); }, unit );
if(type == VALUE_TYPE.integer) editWidget.setSlideSpeed(1 / 10);
for( var i = 0, n = array_length(animators); i < n; i++ )
@ -708,9 +685,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
break; #endregion
case VALUE_DISPLAY.boolean_grid : #region
editWidget = new matrixGrid(_txt, display_data.size, function(index, val) {
return setValueInspector(val, index);
}, unit );
editWidget = new matrixGrid(_txt, display_data.size, function(index, val) { return setValueInspector(val, index); }, unit );
for( var i = 0, n = array_length(animators); i < n; i++ )
animators[i].suffix = $" {i}";
@ -725,9 +700,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
break; #endregion
case VALUE_DISPLAY.toggle : #region
editWidget = new toggleGroup(display_data.data, function(val) {
return setValueInspector(val);
} );
editWidget = new toggleGroup(display_data.data, function(val) { return setValueInspector(val); } );
rejectConnect();
key_inter = CURVE_TYPE.cut;
@ -735,18 +708,14 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
break; #endregion
case VALUE_DISPLAY.d3quarternion : #region
editWidget = new quarternionBox(function(index, val) {
return setValueInspector(val, index);
});
editWidget = new quarternionBox(function(index, val) { return setValueInspector(val, index); });
extract_node = "Node_Vector4";
display_data.angle_display = QUARTERNION_DISPLAY.euler;
break; #endregion
case VALUE_DISPLAY.path_anchor : #region
editWidget = new pathAnchorBox(function(index, val) {
return setValueInspector(val, index);
});
editWidget = new pathAnchorBox(function(index, val) { return setValueInspector(val, index); });
extract_node = "Node_Path_Anchor";
break; #endregion
@ -770,6 +739,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
graph_h = ui(16);
extract_node = "Node_Color";
break;
case VALUE_DISPLAY.palette :
editWidget = new buttonPalette(function(color) { return setValueInspector(color); } );
@ -789,6 +759,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
case VALUE_DISPLAY.path_array :
editWidget = new pathArrayBox(node, display_data.filter, function(path) { setValueInspector(path); } );
break;
case VALUE_DISPLAY.path_load :
editWidget = new textBox(TEXTBOX_INPUT.text, function(str) { setValueInspector(str); } );

View file

@ -5,14 +5,15 @@ function path_search(paths, _filter = ".png") {
return _paths;
}
function path_dir_get_files(paths, _extension = ".png") {
function path_dir_get_files(paths, _extension = ".png", _recur = true) {
paths = string_trim_end(paths, ["/", "\\"]);
var _ext = string_splice(_extension, ";", false, false);
var _paths = [];
if(!directory_exists(paths)) return [];
if(!directory_exists(paths)) return _paths;
var st = ds_stack_create();
var st = ds_stack_create();
var _root = true;
ds_stack_push(st, paths);
while(!ds_stack_empty(st)) {
@ -22,15 +23,17 @@ function path_dir_get_files(paths, _extension = ".png") {
while(file != "") {
var file_full = curr_path + "/" + file;
if(directory_exists(file_full))
if((_recur || _root) && directory_exists(file_full))
ds_stack_push(st, file_full);
else if(array_exists(_ext, filename_ext(file)))
else if(array_exists(_ext, string_lower(filename_ext(file))))
array_push(_paths, file_full);
file = file_find_next();
}
file_find_close();
_root = false;
}
ds_stack_destroy(st);

View file

@ -20,19 +20,24 @@ uniform float corner;
uniform float stRad;
uniform float edRad;
uniform float parall;
uniform vec2 angle_range;
uniform vec2 dimension;
uniform vec2 center;
uniform vec2 scale;
uniform vec2 trep;
uniform vec4 bgColor;
#define PI 3.14159265359
#define TAU 6.283185307179586
float sdRegularPolygon(in vec2 p, in float r, in int n, in float ang ) { #region
float ndot(vec2 a, vec2 b ) { return a.x*b.x - a.y*b.y; }
float dot2(in vec2 v ) { return dot(v,v); }
float sdRegularPolygon(in vec2 p, in float r, in int n, in float ang ) {
// these 4 lines can be precomputed for a given shape
float an = PI / float(n);
vec2 acs = vec2(cos(an), sin(an));
@ -45,10 +50,10 @@ float sdRegularPolygon(in vec2 p, in float r, in int n, in float ang ) { #region
p -= r * acs;
p.y += clamp( -p.y, 0.0, r * acs.y);
return length(p) * sign(p.x);
} #endregion
}
// signed distance to a n-star polygon with external angle en
float sdStar(in vec2 p, in float r, in int n, in float m, in float ang) { #region m=[2,n]
float sdStar(in vec2 p, in float r, in int n, in float m, in float ang) { //m=[2,n]
// these 4 lines can be precomputed for a given shape
float an = PI / float(n);
float en = PI / m;
@ -63,68 +68,107 @@ float sdStar(in vec2 p, in float r, in int n, in float m, in float ang) { #regio
p -= r * acs;
p += ecs * clamp( -dot(p, ecs), 0.0, r * acs.y / ecs.y);
return length(p)*sign(p.x);
} #endregion
}
// sca is the sin/cos of the orientation
// scb is the sin/cos of the aperture
float sdArc( in vec2 p, in vec2 sca, in vec2 scb, in float ra, in float rb ) { #region
float sdArc( in vec2 p, in vec2 sca, in vec2 scb, in float ra, in float rb ) {
p *= mat2(sca.x, sca.y, -sca.y, sca.x);
p.x = abs(p.x);
float k = (scb.y * p.x > scb.x * p.y) ? dot(p.xy,scb) : length(p);
return sqrt( dot(p, p) + ra * ra - 2.0 * ra * k ) - rb;
} #endregion
}
float sdRoundBox( in vec2 p, in vec2 b, in vec4 r ) { #region
float sdRoundBox( in vec2 p, in vec2 b, in vec4 r ) {
r.xy = (p.x > 0.0)? r.xy : r.zw;
r.x = (p.y > 0.0)? r.x : r.y;
vec2 q = abs(p) - b + r.x;
return min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r.x;
} #endregion
}
float sdBox( in vec2 p, in vec2 b ) { #region
float sdBox( in vec2 p, in vec2 b ) {
vec2 d = abs(p) - b;
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
} #endregion
}
float sdTearDrop( vec2 p, float r1, float r2, float h ) { #region
float sdTearDrop( vec2 p, float r1, float r2, float h ) {
p.x = abs(p.x);
float b = (r1-r2)/h;
float a = sqrt(1.0-b*b);
float k = dot(p,vec2(-b,a));
if( k < 0.0 ) return length(p) - r1;
if( k > a*h ) return length(p-vec2(0.0,h)) - r2;
return dot(p, vec2(a,b) ) - r1;
} #endregion
float b = (r1 - r2) / h;
float a = sqrt(1.0 - b * b);
float k = dot(p, vec2(-b, a));
if( k < 0.0 ) return length(p) - r1;
if( k > a * h ) return length(p - vec2(0.0, h)) - r2;
return dot(p, vec2(a, b) ) - r1;
}
float sdCross( in vec2 p, in vec2 b, float r ) { #region
p = abs(p); p = (p.y>p.x) ? p.yx : p.xy;
float sdCross( in vec2 p, in vec2 b, float r ) {
p = abs(p);
p = (p.y > p.x) ? p.yx : p.xy;
vec2 q = p - b;
float k = max(q.y,q.x);
vec2 w = (k>0.0) ? q : vec2(b.y-p.x,-k);
return sign(k)*length(max(w,0.0)) + r;
} #endregion
float k = max(q.y, q.x);
vec2 w = (k > 0.0) ? q : vec2(b.y - p.x, -k);
return sign(k) * length(max(w, 0.0)) + r;
}
float sdVesica(vec2 p, float r, float d) { #region
float sdVesica(vec2 p, float r, float d) {
p = abs(p);
float b = sqrt(r*r-d*d); // can delay this sqrt by rewriting the comparison
return ((p.y-b)*d > p.x*b) ? length(p-vec2(0.0,b))*sign(d)
: length(p-vec2(-d,0.0))-r;
} #endregion
float b = sqrt(r * r - d * d); // can delay this sqrt by rewriting the comparison
return ((p.y - b) * d > p.x * b) ? length(p - vec2(0.0, b)) * sign(d)
: length(p - vec2(-d, 0.0)) - r;
}
float sdCrescent(vec2 p, float s, float c, float a) { #region
float sdCrescent(vec2 p, float s, float c, float a) {
float o = length(p) - 1.;
float i = length(p - vec2(cos(a) * (1. - s * c), sin(a) * (1. - s * c))) / s - 1.;
return max(o, -i);
} #endregion
}
float sdDonut(vec2 p, float s) { #region
float sdDonut(vec2 p, float s) {
float o = length(p) - 1.;
float i = length(p) / s - 1.;
return max(o, -i);
} #endregion
}
float sdRhombus( in vec2 p, in vec2 b ) {
p = abs(p);
float h = clamp( ndot(b - 2.0 * p,b) / dot(b, b), -1.0, 1.0 );
float d = length( p - 0.5 * b * vec2(1.0 - h, 1.0 + h) );
return d * sign( p.x * b.y + p.y * b.x - b.x * b.y );
}
float sdSegment( in vec2 p, in vec2 a, in vec2 b ) {
vec2 pa = p - a, ba = b - a;
float h = clamp( dot(pa, ba) / dot(ba, ba), 0.0, 1.0 );
return length( pa - ba * h );
}
float sdTrapezoid( in vec2 p, in float r1, float r2, float he ) {
vec2 k1 = vec2(r2, he);
vec2 k2 = vec2(r2 - r1, 2.0 * he);
p.x = abs(p.x);
vec2 ca = vec2(p.x - min(p.x, (p.y < 0.0)? r1 : r2), abs(p.y) - he);
vec2 cb = p - k1 + k2 * clamp( dot(k1 - p, k2) / dot2(k2), 0.0, 1.0 );
float s = (cb.x < 0.0 && ca.y < 0.0) ? -1.0 : 1.0;
return s * sqrt( min(dot2(ca), dot2(cb)) );
}
float sdParallelogram( in vec2 p, float wi, float he, float sk ) {
vec2 e = vec2(sk, he);
p = (p.y < 0.0)? -p : p;
vec2 w = p - e; w.x -= clamp(w.x, -wi, wi);
vec2 d = vec2(dot(w, w), -w.y);
float s = p.x * e.y - p.y * e.x;
p = (s < 0.0)? -p : p;
vec2 v = p - vec2(wi, 0); v -= e * clamp(dot(v, e) / dot(e, e), -1.0, 1.0);
d = min( d, vec2(dot(v, v), wi * he - abs(s)));
return sqrt(d.x) * sign(-d.y);
}
void main() {
float color = 0.;
@ -137,20 +181,27 @@ void main() {
if(shape == 0) {
d = sdBox( (v_vTexcoord - center) * mat2(cos(rotation), -sin(rotation), sin(rotation), cos(rotation)) * ratio, (scale * ratio - corner));
d -= corner;
} else if(shape == 1) {
d = length(coord) - 1.;
} else if(shape == 2) {
d = sdRegularPolygon( coord, 0.9 - corner, sides, angle );
d -= corner;
} else if(shape == 3) {
d = sdStar( coord, 0.9 - corner, sides, 2. + inner * (float(sides) - 2.), angle );
d -= corner;
} else if(shape == 4) d = sdArc( coord, vec2(sin(angle), cos(angle)), angle_range, 0.9 - inner, inner );
else if(shape == 5) d = sdTearDrop( coord + vec2(0., 0.5), stRad, edRad, 1. );
else if(shape == 6) d = sdCross( coord, vec2(1. + corner, outer), corner );
else if(shape == 7) d = sdVesica( coord, inner, outer );
else if(shape == 8) d = sdCrescent( coord, inner, outer, angle );
else if(shape == 9) d = sdDonut( coord, inner );
} else if(shape == 4) d = sdArc( coord, vec2(sin(angle), cos(angle)), angle_range, 0.9 - inner, inner );
else if(shape == 5) d = sdTearDrop( coord + vec2(0., 0.5), stRad, edRad, 1. );
else if(shape == 6) d = sdCross( coord, vec2(1. + corner, outer), corner );
else if(shape == 7) d = sdVesica( coord, inner, outer );
else if(shape == 8) d = sdCrescent( coord, inner, outer, angle );
else if(shape == 9) d = sdDonut( coord, inner );
else if(shape == 10) d = sdRhombus( coord, vec2(1. - corner) ) - corner;
else if(shape == 11) d = sdTrapezoid( coord, trep.x - corner, trep.y - corner, 1. - corner ) - corner;
else if(shape == 12) d = sdParallelogram( coord, 1. - corner - parall, 1. - corner, parall) - corner;
if(drawDF == 1) {
color = -d;

View file

@ -0,0 +1,95 @@
{
"$GMSprite":"",
"%Name":"s_node_shape_circle",
"bboxMode":0,
"bbox_bottom":20,
"bbox_left":3,
"bbox_right":20,
"bbox_top":3,
"collisionKind":1,
"collisionTolerance":0,
"ConfigValues":{
"Itch":{
"textureGroupId":"{ \"name\":\"Default\", \"path\":\"texturegroups/Default\" }",
},
},
"DynamicTexturePage":false,
"edgeFiltering":false,
"For3D":false,
"frames":[
{"$GMSpriteFrame":"","%Name":"cf030556-92eb-437b-80ed-1fbaec3ab825","name":"cf030556-92eb-437b-80ed-1fbaec3ab825","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
],
"gridX":0,
"gridY":0,
"height":24,
"HTile":false,
"layers":[
{"$GMImageLayer":"","%Name":"2cf10068-76aa-4aa4-8fdc-cf8df2b3f52f","blendMode":0,"displayName":"default","isLocked":false,"name":"2cf10068-76aa-4aa4-8fdc-cf8df2b3f52f","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
],
"name":"s_node_shape_circle",
"nineSlice":null,
"origin":4,
"parent":{
"name":"nodes",
"path":"folders/sprites/nodes.yy",
},
"preMultiplyAlpha":false,
"resourceType":"GMSprite",
"resourceVersion":"2.0",
"sequence":{
"$GMSequence":"",
"%Name":"s_node_shape_circle",
"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_shape_circle",
"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":"cf030556-92eb-437b-80ed-1fbaec3ab825","path":"sprites/s_node_shape_circle/s_node_shape_circle.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"52176aad-60cc-4bb8-a0ea-04ba50d60741","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":12,
"yorigin":12,
},
"swatchColours":null,
"swfPrecision":2.525,
"textureGroupId":{
"name":"Default",
"path":"texturegroups/Default",
},
"type":0,
"VTile":false,
"width":24,
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 439 B

After

Width:  |  Height:  |  Size: 439 B

View file

@ -0,0 +1,95 @@
{
"$GMSprite":"",
"%Name":"s_node_shape_leaf",
"bboxMode":0,
"bbox_bottom":20,
"bbox_left":7,
"bbox_right":16,
"bbox_top":3,
"collisionKind":1,
"collisionTolerance":0,
"ConfigValues":{
"Itch":{
"textureGroupId":"{ \"name\":\"Default\", \"path\":\"texturegroups/Default\" }",
},
},
"DynamicTexturePage":false,
"edgeFiltering":false,
"For3D":false,
"frames":[
{"$GMSpriteFrame":"","%Name":"3b6185db-9a13-4cdc-a4e6-a483cf4d6281","name":"3b6185db-9a13-4cdc-a4e6-a483cf4d6281","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
],
"gridX":0,
"gridY":0,
"height":24,
"HTile":false,
"layers":[
{"$GMImageLayer":"","%Name":"4d0fb2c0-7da4-4a71-a1ca-6e964555e7d4","blendMode":0,"displayName":"default","isLocked":false,"name":"4d0fb2c0-7da4-4a71-a1ca-6e964555e7d4","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
],
"name":"s_node_shape_leaf",
"nineSlice":null,
"origin":4,
"parent":{
"name":"nodes",
"path":"folders/sprites/nodes.yy",
},
"preMultiplyAlpha":false,
"resourceType":"GMSprite",
"resourceVersion":"2.0",
"sequence":{
"$GMSequence":"",
"%Name":"s_node_shape_leaf",
"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_shape_leaf",
"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":"3b6185db-9a13-4cdc-a4e6-a483cf4d6281","path":"sprites/s_node_shape_leaf/s_node_shape_leaf.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"60c28ee2-65e2-4896-923e-2ed609102398","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":12,
"yorigin":12,
},
"swatchColours":null,
"swfPrecision":2.525,
"textureGroupId":{
"name":"Default",
"path":"texturegroups/Default",
},
"type":0,
"VTile":false,
"width":24,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

View file

@ -0,0 +1,95 @@
{
"$GMSprite":"",
"%Name":"s_node_shape_rectangle",
"bboxMode":0,
"bbox_bottom":19,
"bbox_left":4,
"bbox_right":19,
"bbox_top":4,
"collisionKind":1,
"collisionTolerance":0,
"ConfigValues":{
"Itch":{
"textureGroupId":"{ \"name\":\"Default\", \"path\":\"texturegroups/Default\" }",
},
},
"DynamicTexturePage":false,
"edgeFiltering":false,
"For3D":false,
"frames":[
{"$GMSpriteFrame":"","%Name":"c062d35a-662c-46c4-9898-cf687121115d","name":"c062d35a-662c-46c4-9898-cf687121115d","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
],
"gridX":0,
"gridY":0,
"height":24,
"HTile":false,
"layers":[
{"$GMImageLayer":"","%Name":"2cf10068-76aa-4aa4-8fdc-cf8df2b3f52f","blendMode":0,"displayName":"default","isLocked":false,"name":"2cf10068-76aa-4aa4-8fdc-cf8df2b3f52f","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
],
"name":"s_node_shape_rectangle",
"nineSlice":null,
"origin":4,
"parent":{
"name":"nodes",
"path":"folders/sprites/nodes.yy",
},
"preMultiplyAlpha":false,
"resourceType":"GMSprite",
"resourceVersion":"2.0",
"sequence":{
"$GMSequence":"",
"%Name":"s_node_shape_rectangle",
"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_shape_rectangle",
"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":"c062d35a-662c-46c4-9898-cf687121115d","path":"sprites/s_node_shape_rectangle/s_node_shape_rectangle.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"0f523f3d-7e20-4e72-b9ee-526dba4a192e","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":12,
"yorigin":12,
},
"swatchColours":null,
"swfPrecision":2.525,
"textureGroupId":{
"name":"Default",
"path":"texturegroups/Default",
},
"type":0,
"VTile":false,
"width":24,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 B

After

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 455 B

After

Width:  |  Height:  |  Size: 455 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 B

After

Width:  |  Height:  |  Size: 474 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 525 B

After

Width:  |  Height:  |  Size: 525 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 502 B

After

Width:  |  Height:  |  Size: 502 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

View file

@ -12,23 +12,26 @@
"edgeFiltering":false,
"For3D":false,
"frames":[
{"$GMSpriteFrame":"","%Name":"48bc866d-ad21-4667-bec2-914ec021c526","name":"48bc866d-ad21-4667-bec2-914ec021c526","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"3c16b005-0fdf-4af6-bbd0-f6b29328ec70","name":"3c16b005-0fdf-4af6-bbd0-f6b29328ec70","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"0412b90e-66c7-4dd8-a11e-19d68da47a0c","name":"0412b90e-66c7-4dd8-a11e-19d68da47a0c","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"e39a435f-a2e0-4394-816a-0434f1ae62d1","name":"e39a435f-a2e0-4394-816a-0434f1ae62d1","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"eda5c901-9a81-421c-89a9-1b3c83ef0483","name":"eda5c901-9a81-421c-89a9-1b3c83ef0483","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"49220458-bf1c-4c96-b39f-29641a235a59","name":"49220458-bf1c-4c96-b39f-29641a235a59","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"69eff4a9-10e5-497d-96ae-b8b66f9a07b0","name":"69eff4a9-10e5-497d-96ae-b8b66f9a07b0","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"7a4c420e-5fd3-43de-a420-d37bc8deb71d","name":"7a4c420e-5fd3-43de-a420-d37bc8deb71d","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"f95f551b-65f3-47ca-86f4-341c8de92bf8","name":"f95f551b-65f3-47ca-86f4-341c8de92bf8","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"5695f049-b1d1-49f5-b3aa-e1e963a85824","name":"5695f049-b1d1-49f5-b3aa-e1e963a85824","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"6c545309-6ffe-4c08-bed2-9c82065ad8d4","name":"6c545309-6ffe-4c08-bed2-9c82065ad8d4","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"d3111831-695a-4461-9130-3228744761bb","name":"d3111831-695a-4461-9130-3228744761bb","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"5526c2ef-3545-4dca-bec6-85357e76b6b1","name":"5526c2ef-3545-4dca-bec6-85357e76b6b1","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"7a237ffa-be4c-4d8e-bd2f-ae809eb3b319","name":"7a237ffa-be4c-4d8e-bd2f-ae809eb3b319","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"83508ab4-faeb-411c-8b6e-d29be9cddea9","name":"83508ab4-faeb-411c-8b6e-d29be9cddea9","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"71d205ee-df82-4582-bf38-39392d51dd23","name":"71d205ee-df82-4582-bf38-39392d51dd23","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"bab10856-f499-4364-8bdb-230f241dcf0d","name":"bab10856-f499-4364-8bdb-230f241dcf0d","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"d3655d0c-9269-4162-9ae7-82c547edf674","name":"d3655d0c-9269-4162-9ae7-82c547edf674","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"84e23289-8dc8-4aeb-b056-57889a5a04a9","name":"84e23289-8dc8-4aeb-b056-57889a5a04a9","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"2893727a-1872-4e51-b211-59df36bbc651","name":"2893727a-1872-4e51-b211-59df36bbc651","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"3b6185db-9a13-4cdc-a4e6-a483cf4d6281","name":"3b6185db-9a13-4cdc-a4e6-a483cf4d6281","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"8973bafa-9ba5-4018-82fe-49369c528c77","name":"8973bafa-9ba5-4018-82fe-49369c528c77","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
{"$GMSpriteFrame":"","%Name":"651de5b3-7033-4983-aa29-7308549c5997","name":"651de5b3-7033-4983-aa29-7308549c5997","resourceType":"GMSpriteFrame","resourceVersion":"2.0",},
],
"gridX":0,
"gridY":0,
"height":24,
"HTile":false,
"layers":[
{"$GMImageLayer":"","%Name":"af3459aa-e234-4282-ba5c-db0e34f3c62b","blendMode":0,"displayName":"default","isLocked":false,"name":"af3459aa-e234-4282-ba5c-db0e34f3c62b","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
{"$GMImageLayer":"","%Name":"4d0fb2c0-7da4-4a71-a1ca-6e964555e7d4","blendMode":0,"displayName":"default","isLocked":false,"name":"4d0fb2c0-7da4-4a71-a1ca-6e964555e7d4","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,},
],
"name":"s_node_shape_type",
"nineSlice":null,
@ -58,7 +61,7 @@
},
"eventStubScript":null,
"eventToFunction":{},
"length":10.0,
"length":13.0,
"lockOrigin":false,
"moments":{
"$KeyframeStore<MomentsEventKeyframe>":"",
@ -78,35 +81,44 @@
"tracks":[
{"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore<SpriteFrameKeyframe>":"","Keyframes":[
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"48bc866d-ad21-4667-bec2-914ec021c526","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"8ab11c56-2330-4aab-a936-1ac4bf582a71","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"6c545309-6ffe-4c08-bed2-9c82065ad8d4","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"ee006fd1-e9eb-4d05-b46f-eae5fa8612b0","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"3c16b005-0fdf-4af6-bbd0-f6b29328ec70","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"48e79bc8-f0c9-4fd9-a88c-6cb18ad2f422","IsCreationKey":false,"Key":1.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"d3111831-695a-4461-9130-3228744761bb","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"46c3d423-c7ec-4994-af09-809ef518a079","IsCreationKey":false,"Key":1.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"0412b90e-66c7-4dd8-a11e-19d68da47a0c","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"cb3b343f-3868-4c9a-8a4e-3925c58f1a06","IsCreationKey":false,"Key":2.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"5526c2ef-3545-4dca-bec6-85357e76b6b1","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"31c2191f-90a4-40a8-89d2-1ff98308a5e7","IsCreationKey":false,"Key":2.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"e39a435f-a2e0-4394-816a-0434f1ae62d1","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"831e6af9-840c-4446-a969-57ecc634f995","IsCreationKey":false,"Key":3.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"7a237ffa-be4c-4d8e-bd2f-ae809eb3b319","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"67b85fa1-1715-453b-a9e3-c936d250dc7d","IsCreationKey":false,"Key":3.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"eda5c901-9a81-421c-89a9-1b3c83ef0483","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"96e8aac1-c3b9-40c3-9bb7-636c1e2309f8","IsCreationKey":false,"Key":4.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"83508ab4-faeb-411c-8b6e-d29be9cddea9","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"21957fda-cd5a-4e10-a5a8-ca944c8ccc65","IsCreationKey":false,"Key":4.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"49220458-bf1c-4c96-b39f-29641a235a59","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"1e665ae4-d8a5-4e11-99d4-4fc073982e0f","IsCreationKey":false,"Key":5.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"71d205ee-df82-4582-bf38-39392d51dd23","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"766e25dd-8b26-47a2-996a-ca9f7b58f9ae","IsCreationKey":false,"Key":5.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"69eff4a9-10e5-497d-96ae-b8b66f9a07b0","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"b5770c65-cc1e-44fd-8da2-7cd5616d4aaa","IsCreationKey":false,"Key":6.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"bab10856-f499-4364-8bdb-230f241dcf0d","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"75551b21-9282-41fa-8c8a-855d0b527fbb","IsCreationKey":false,"Key":6.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"7a4c420e-5fd3-43de-a420-d37bc8deb71d","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"499cfe03-15eb-4887-8794-0b1899ec3f07","IsCreationKey":false,"Key":7.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"d3655d0c-9269-4162-9ae7-82c547edf674","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"f8425249-5e88-4123-a018-c3eb02073c4a","IsCreationKey":false,"Key":7.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"f95f551b-65f3-47ca-86f4-341c8de92bf8","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"a6bdeef0-6045-4107-a5c3-7297315d692b","IsCreationKey":false,"Key":8.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"84e23289-8dc8-4aeb-b056-57889a5a04a9","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"8e68a1ba-fa7b-4a85-b48d-cdf67b539901","IsCreationKey":false,"Key":8.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"5695f049-b1d1-49f5-b3aa-e1e963a85824","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"f557fa96-65bf-44a0-b9ac-99092d804c2c","IsCreationKey":false,"Key":9.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"2893727a-1872-4e51-b211-59df36bbc651","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"7c381e7f-8d22-4f8b-a9a8-00df7fe13c2e","IsCreationKey":false,"Key":9.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"3b6185db-9a13-4cdc-a4e6-a483cf4d6281","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"60c28ee2-65e2-4896-923e-2ed609102398","IsCreationKey":false,"Key":10.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"8973bafa-9ba5-4018-82fe-49369c528c77","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"4c0e2a8c-e36a-43d2-a462-b1f386b96940","IsCreationKey":false,"Key":11.0,"Length":1.0,"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"2.0","Stretch":false,},
{"$Keyframe<SpriteFrameKeyframe>":"","Channels":{
"0":{"$SpriteFrameKeyframe":"","Id":{"name":"651de5b3-7033-4983-aa29-7308549c5997","path":"sprites/s_node_shape_type/s_node_shape_type.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",},
},"Disabled":false,"id":"faf1f5e1-c375-4707-bb11-4ecc614a5126","IsCreationKey":false,"Key":12.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,