diff --git a/Pixels Composer.yyp b/Pixels Composer.yyp index d553c9d66..aa7c53368 100644 --- a/Pixels Composer.yyp +++ b/Pixels Composer.yyp @@ -344,6 +344,7 @@ {"id":{"name":"f_p0b","path":"fonts/f_p0b/f_p0b.yy",},"order":5,}, {"id":{"name":"o_dialog_keyframe_curve","path":"objects/o_dialog_keyframe_curve/o_dialog_keyframe_curve.yy",},"order":22,}, {"id":{"name":"s_node_text","path":"sprites/s_node_text/s_node_text.yy",},"order":22,}, + {"id":{"name":"s_node_grid","path":"sprites/s_node_grid/s_node_grid.yy",},"order":119,}, {"id":{"name":"s_node_color_from_rgb","path":"sprites/s_node_color_from_rgb/s_node_color_from_rgb.yy",},"order":111,}, {"id":{"name":"s_button_middle","path":"sprites/s_button_middle/s_button_middle.yy",},"order":7,}, {"id":{"name":"node_twirl","path":"scripts/node_twirl/node_twirl.yy",},"order":30,}, @@ -404,6 +405,8 @@ {"id":{"name":"sh_cell_noise_random","path":"shaders/sh_cell_noise_random/sh_cell_noise_random.yy",},"order":6,}, {"id":{"name":"s_inspector_padding","path":"sprites/s_inspector_padding/s_inspector_padding.yy",},"order":8,}, {"id":{"name":"node_normal","path":"scripts/node_normal/node_normal.yy",},"order":1,}, + {"id":{"name":"s_node_lerp","path":"sprites/s_node_lerp/s_node_lerp.yy",},"order":118,}, + {"id":{"name":"node_array_length","path":"scripts/node_array_length/node_array_length.yy",},"order":13,}, {"id":{"name":"s_node_solid","path":"sprites/s_node_solid/s_node_solid.yy",},"order":13,}, {"id":{"name":"node_erode","path":"scripts/node_erode/node_erode.yy",},"order":31,}, {"id":{"name":"node_wrap_mesh","path":"scripts/node_wrap_mesh/node_wrap_mesh.yy",},"order":7,}, @@ -489,6 +492,7 @@ {"id":{"name":"s_node_pin_bg_active","path":"sprites/s_node_pin_bg_active/s_node_pin_bg_active.yy",},"order":9,}, {"id":{"name":"s_node_compose","path":"sprites/s_node_compose/s_node_compose.yy",},"order":101,}, {"id":{"name":"node_collection","path":"scripts/node_collection/node_collection.yy",},"order":18,}, + {"id":{"name":"s_node_array_length","path":"sprites/s_node_array_length/s_node_array_length.yy",},"order":120,}, {"id":{"name":"node_value","path":"scripts/node_value/node_value.yy",},"order":6,}, {"id":{"name":"draw_line_curve","path":"scripts/draw_line_curve/draw_line_curve.yy",},"order":5,}, {"id":{"name":"s_splice_draw","path":"sprites/s_splice_draw/s_splice_draw.yy",},"order":6,}, @@ -543,6 +547,7 @@ {"id":{"name":"node_channels","path":"scripts/node_channels/node_channels.yy",},"order":24,}, {"id":{"name":"node_solid","path":"scripts/node_solid/node_solid.yy",},"order":18,}, {"id":{"name":"debug","path":"scripts/debug/debug.yy",},"order":9,}, + {"id":{"name":"node_lerp","path":"scripts/node_lerp/node_lerp.yy",},"order":12,}, {"id":{"name":"node_texture_remap","path":"scripts/node_texture_remap/node_texture_remap.yy",},"order":32,}, {"id":{"name":"sh_perlin_tiled","path":"shaders/sh_perlin_tiled/sh_perlin_tiled.yy",},"order":2,}, {"id":{"name":"sh_time_remap","path":"shaders/sh_time_remap/sh_time_remap.yy",},"order":33,}, diff --git a/scripts/debug/debug.gml b/scripts/debug/debug.gml index 1e1c0b24b..52dbbfc36 100644 --- a/scripts/debug/debug.gml +++ b/scripts/debug/debug.gml @@ -32,10 +32,17 @@ function log_newline() { exception_unhandled_handler(function(ex) { var tt = "\n-------------------------- OH NO --------------------------\n\n"; tt += ex.longMessage; - tt += "\n---------------------------- :( ----------------------------\n"; + tt += "\n-------------------------- STACK TRACE --------------------------\n"; + for( var i = 0; i < array_length(ex.stacktrace); i++ ) { + tt += ex.stacktrace[i] + "\n"; + } + tt += "\n---------------------------- :( ----------------------------\n"; log_crash(tt); log_message("SESSION", "Ended with error"); + var tt = "\n-------------------------- OH NO --------------------------\n\n"; + tt += ex.longMessage; + tt += "\n---------------------------- :( ----------------------------\n"; tt += "\n\nVisit crash log from " + string(DIRECTORY + "log.txt") + " for more information"; show_error(tt, true); return 0; diff --git a/scripts/node_array_length/node_array_length.gml b/scripts/node_array_length/node_array_length.gml new file mode 100644 index 000000000..7f557f200 --- /dev/null +++ b/scripts/node_array_length/node_array_length.gml @@ -0,0 +1,26 @@ +function Node_create_Array_Length(_x, _y) { + var node = new Node_Array_Length(_x, _y); + ds_list_add(PANEL_GRAPH.nodes_list, node); + return node; +} + +function Node_Array_Length(_x, _y) : Node(_x, _y) constructor { + name = "Array Length"; + previewable = false; + + w = 96; + h = 32 + 24; + min_h = h; + + inputs[| 0] = nodeValue(0, "Array", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0); + + outputs[| 0] = nodeValue(0, "Size", self, JUNCTION_CONNECT.output, VALUE_TYPE.integer, 0); + + function update() { + var _arr = inputs[| 0].getValue(); + if(!is_array(_arr)) return; + outputs[| 0].setValue(array_length(_arr)); + } + + doUpdate(); +} \ No newline at end of file diff --git a/scripts/node_array_length/node_array_length.yy b/scripts/node_array_length/node_array_length.yy new file mode 100644 index 000000000..9ef84a5a1 --- /dev/null +++ b/scripts/node_array_length/node_array_length.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "number", + "path": "folders/nodes/data/number.yy", + }, + "resourceVersion": "1.0", + "name": "node_array_length", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_array_length/node_counter.yy b/scripts/node_array_length/node_counter.yy new file mode 100644 index 000000000..10832a0b0 --- /dev/null +++ b/scripts/node_array_length/node_counter.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "variable", + "path": "folders/nodes/data/variable.yy", + }, + "resourceVersion": "1.0", + "name": "node_counter", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_checkerboard/node_checkerboard.gml b/scripts/node_checkerboard/node_checkerboard.gml index 32077acee..7b53fd0b8 100644 --- a/scripts/node_checkerboard/node_checkerboard.gml +++ b/scripts/node_checkerboard/node_checkerboard.gml @@ -7,7 +7,8 @@ function Node_create_Checker(_x, _y) { function Node_Checker(_x, _y) : Node(_x, _y) constructor { name = "Checker"; - uniform_angle = shader_get_uniform(sh_checkerboard, "angle"); + uniform_pos = shader_get_uniform(sh_checkerboard, "position"); + uniform_angle = shader_get_uniform(sh_checkerboard, "angle"); uniform_amount = shader_get_uniform(sh_checkerboard, "amount"); inputs[| 0] = nodeValue(0, "Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2, VALUE_TAG.dimension_2d ) @@ -19,12 +20,25 @@ function Node_Checker(_x, _y) : Node(_x, _y) constructor { inputs[| 2] = nodeValue(2, "Angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) .setDisplay(VALUE_DISPLAY.rotation); + inputs[| 3] = nodeValue(3, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [0, 0] ) + .setDisplay(VALUE_DISPLAY.vector); + outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, surface_create(1, 1)); + static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + var pos = inputs[| 3].getValue(); + var px = _x + pos[0] * _s; + var py = _y + pos[1] * _s; + + inputs[| 3].drawOverlay(_active, _x, _y, _s, _mx, _my); + inputs[| 2].drawOverlay(_active, px, py, _s, _mx, _my); + } + function update() { - var _dim = inputs[| 0].getValue(); - var _amo = inputs[| 1].getValue(); - var _ang = inputs[| 2].getValue(); + var _dim = inputs[| 0].getValue(); + var _amo = inputs[| 1].getValue(); + var _ang = inputs[| 2].getValue(); + var _pos = inputs[| 3].getValue(); var _outSurf = outputs[| 0].getValue(); if(!is_surface(_outSurf)) { @@ -35,6 +49,7 @@ function Node_Checker(_x, _y) : Node(_x, _y) constructor { surface_set_target(_outSurf); shader_set(sh_checkerboard); + shader_set_uniform_f(uniform_pos, _pos[0] / _dim[0], _pos[1] / _dim[1]); shader_set_uniform_f(uniform_angle, degtorad(_ang)); shader_set_uniform_f(uniform_amount, _amo); draw_sprite_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], 0, c_white, 1); diff --git a/scripts/node_grid/node_grid.gml b/scripts/node_grid/node_grid.gml index fe316c74d..28f44d83f 100644 --- a/scripts/node_grid/node_grid.gml +++ b/scripts/node_grid/node_grid.gml @@ -30,6 +30,10 @@ function Node_Grid(_x, _y) : Node(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, surface_create(1, 1)); + static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my); + } + function update() { var _dim = inputs[| 0].getValue(); var _pos = inputs[| 1].getValue(); @@ -45,7 +49,7 @@ function Node_Grid(_x, _y) : Node(_x, _y) constructor { surface_set_target(_outSurf); shader_set(shader); - shader_set_uniform_f_array(uniform_pos, _pos); + shader_set_uniform_f(uniform_pos, _pos[0] / _dim[0], _pos[1] / _dim[1]); shader_set_uniform_f_array(uniform_sca, _sca); shader_set_uniform_f(uniform_wid, _wid); diff --git a/scripts/node_lerp/node_lerp.gml b/scripts/node_lerp/node_lerp.gml new file mode 100644 index 000000000..7245d8fb2 --- /dev/null +++ b/scripts/node_lerp/node_lerp.gml @@ -0,0 +1,33 @@ +function Node_create_Lerp(_x, _y) { + var node = new Node_Lerp(_x, _y); + ds_list_add(PANEL_GRAPH.nodes_list, node); + return node; +} + +function Node_Lerp(_x, _y) : Node_Value_Processor(_x, _y) constructor { + name = "Lerp"; + color = c_ui_cyan; + previewable = false; + + w = 96; + min_h = 0; + + inputs[| 0] = nodeValue(1, "a", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0); + inputs[| 1] = nodeValue(2, "b", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0); + inputs[| 2] = nodeValue(3, "Progress", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) + .setDisplay(VALUE_DISPLAY.slider_range, [0, 1, .01]); + + outputs[| 0] = nodeValue(0, "Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0); + + function process_value_data(_data, index = 0) { + return lerp(_data[0], _data[1], _data[2]); + } + + function onDrawNode(xx, yy, _mx, _my, _s) { + draw_set_text(f_h5, fa_center, fa_center, c_white); + var str = "lerp"; + var _ss = min((w - 8) * _s / string_width(str), (h - 8) * _s / string_height(str)); + + draw_text_transformed(xx + w / 2 * _s, yy + 10 + h / 2 * _s, str, _ss, _ss, 0); + } +} \ No newline at end of file diff --git a/scripts/node_lerp/node_lerp.yy b/scripts/node_lerp/node_lerp.yy new file mode 100644 index 000000000..3cf655030 --- /dev/null +++ b/scripts/node_lerp/node_lerp.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "number", + "path": "folders/nodes/data/number.yy", + }, + "resourceVersion": "1.0", + "name": "node_lerp", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_noise_ani/node_noise_ani.gml b/scripts/node_noise_ani/node_noise_ani.gml index 25e8bbc1a..3760563c2 100644 --- a/scripts/node_noise_ani/node_noise_ani.gml +++ b/scripts/node_noise_ani/node_noise_ani.gml @@ -30,6 +30,10 @@ function Node_Noise_Aniso(_x, _y) : Node(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, surface_create(1, 1)); + static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + inputs[| 3].drawOverlay(_active, _x, _y, _s, _mx, _my); + } + function update() { var _dim = inputs[| 0].getValue(); var _amo = inputs[| 1].getValue(); @@ -46,7 +50,7 @@ function Node_Noise_Aniso(_x, _y) : Node(_x, _y) constructor { surface_set_target(_outSurf); shader_set(shader); shader_set_uniform_f_array(uniform_noi, _amo); - shader_set_uniform_f_array(uniform_pos, _pos); + shader_set_uniform_f(uniform_pos, _pos[0] / _dim[0], _pos[1] / _dim[1]); shader_set_uniform_f(uniform_sed, _sed); draw_sprite_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], 0, c_white, 1); diff --git a/scripts/node_noise_grid/node_noise_grid.gml b/scripts/node_noise_grid/node_noise_grid.gml index 8867a857b..622aa3f43 100644 --- a/scripts/node_noise_grid/node_noise_grid.gml +++ b/scripts/node_noise_grid/node_noise_grid.gml @@ -34,6 +34,10 @@ function Node_Grid_Noise(_x, _y) : Node(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, surface_create(1, 1)); + static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my); + } + function update() { var _dim = inputs[| 0].getValue(); var _pos = inputs[| 1].getValue(); diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index 1d603108e..4d281cac6 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -110,6 +110,7 @@ function NodeObject(_name, _spr, _create, tags = []) constructor { addNodeObject(filter, "2D light", s_node_2d_light, "Node_2D_light", Node_create_2D_light); addNodeObject(filter, "Atlas", s_node_atlas, "Node_Atlas", Node_create_Atlas); addNodeObject(filter, "Scale algorithm", s_node_scale_algo, "Node_Scale_Algo", Node_create_Scale_Algo, ["Scale2x", "Scale3x"]); + addNodeObject(filter, "Pixel cloud", s_node_pixel_cloud, "Node_Pixel_Cloud", Node_create_Pixel_Cloud); //addNodeObject(filter, "Corner", s_node_corner, "Node_Corner", Node_create_Corner); var threeD = ds_list_create(); @@ -125,17 +126,18 @@ function NodeObject(_name, _spr, _create, tags = []) constructor { var number = ds_list_create(); addNodeCatagory("Number", number); - addNodeObject(number, "Math", s_node_math, "Node_Math", Node_create_Math); - //addNodeObject(number, "Array", s_node_array, "Node_Array", Node_create_Array); - addNodeObject(number, "Number", s_node_number, "Node_Number", Node_create_Number); - addNodeObject(number, "Vector2", s_node_vec2, "Node_Vector2", Node_create_Vector2); - addNodeObject(number, "Vector3", s_node_vec3, "Node_Vector3", Node_create_Vector3); - addNodeObject(number, "Vector4", s_node_vec4, "Node_Vector4", Node_create_Vector4); - addNodeObject(number, "Vector split", s_node_vec_split, "Node_Vector_Split",Node_create_Vector_Split); - addNodeObject(number, "Unicode", s_node_unicode, "Node_Unicode", Node_create_Unicode); - addNodeObject(number, "Path", s_node_path, "Node_Path", Node_create_Path); - addNodeObject(number, "Area", s_node_area, "Node_Area", Node_create_Area); - addNodeObject(number, "Surface data", s_node_surface_data,"Node_Surface_data",Node_create_Surface_data); + addNodeObject(number, "Math", s_node_math, "Node_Math", Node_create_Math); + //addNodeObject(number, "Array", s_node_array, "Node_Array", Node_create_Array); + addNodeObject(number, "Array length", s_node_array_length, "Node_Array_Length", Node_create_Array_Length); + addNodeObject(number, "Number", s_node_number, "Node_Number", Node_create_Number); + addNodeObject(number, "Vector2", s_node_vec2, "Node_Vector2", Node_create_Vector2); + addNodeObject(number, "Vector3", s_node_vec3, "Node_Vector3", Node_create_Vector3); + addNodeObject(number, "Vector4", s_node_vec4, "Node_Vector4", Node_create_Vector4); + addNodeObject(number, "Vector split", s_node_vec_split, "Node_Vector_Split", Node_create_Vector_Split); + addNodeObject(number, "Unicode", s_node_unicode, "Node_Unicode", Node_create_Unicode); + addNodeObject(number, "Path", s_node_path, "Node_Path", Node_create_Path); + addNodeObject(number, "Area", s_node_area, "Node_Area", Node_create_Area); + addNodeObject(number, "Surface data", s_node_surface_data, "Node_Surface_data", Node_create_Surface_data); var color = ds_list_create(); addNodeCatagory("Color", color); @@ -168,11 +170,10 @@ function NodeObject(_name, _spr, _create, tags = []) constructor { addNodeObject(generator, "Perlin noise", s_node_noise_perlin, "Node_Perlin", Node_create_Perlin); addNodeObject(generator, "Cellular noise", s_node_noise_cell, "Node_Cellular", Node_create_Cellular); addNodeObject(generator, "Grid noise", s_node_grid_noise, "Node_Grid_Noise", Node_create_Grid_Noise); - addNodeObject(generator, "Grid", s_node_grid_noise, "Node_Grid", Node_create_Grid); + addNodeObject(generator, "Grid", s_node_grid, "Node_Grid", Node_create_Grid); addNodeObject(generator, "Anisotropic noise", s_node_noise_aniso, "Node_Noise_Aniso", Node_create_Noise_Aniso); addNodeObject(generator, "Seperate shape", s_node_sepearte_shape, "Node_Seperate_Shape", Node_create_Seperate_Shape); addNodeObject(generator, "Text", s_node_text, "Node_Text", Node_create_Text); - addNodeObject(generator, "Pixel cloud", s_node_pixel_cloud, "Node_Pixel_Cloud", Node_create_Pixel_Cloud); var render = ds_list_create(); addNodeCatagory("Render", render); diff --git a/scripts/node_stripe/node_stripe.gml b/scripts/node_stripe/node_stripe.gml index f5fb46180..c6c91c589 100644 --- a/scripts/node_stripe/node_stripe.gml +++ b/scripts/node_stripe/node_stripe.gml @@ -7,9 +7,10 @@ function Node_create_Stripe(_x, _y) { function Node_Stripe(_x, _y) : Node(_x, _y) constructor { name = "Stripe"; - uniform_angle = shader_get_uniform(sh_stripe, "angle"); + uniform_pos = shader_get_uniform(sh_stripe, "position"); + uniform_angle = shader_get_uniform(sh_stripe, "angle"); uniform_amount = shader_get_uniform(sh_stripe, "amount"); - uniform_blend = shader_get_uniform(sh_stripe, "blend"); + uniform_blend = shader_get_uniform(sh_stripe, "blend"); inputs[| 0] = nodeValue(0, "Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2, VALUE_TAG.dimension_2d ) .setDisplay(VALUE_DISPLAY.vector); @@ -22,13 +23,26 @@ function Node_Stripe(_x, _y) : Node(_x, _y) constructor { inputs[| 3] = nodeValue(3, "Blend", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, 0); + inputs[| 4] = nodeValue(4, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [0, 0] ) + .setDisplay(VALUE_DISPLAY.vector); + outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, surface_create(1, 1)); + static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + var pos = inputs[| 4].getValue(); + var px = _x + pos[0] * _s; + var py = _y + pos[1] * _s; + + inputs[| 4].drawOverlay(_active, _x, _y, _s, _mx, _my); + inputs[| 2].drawOverlay(_active, px, py, _s, _mx, _my); + } + function update() { - var _dim = inputs[| 0].getValue(); - var _amo = inputs[| 1].getValue(); - var _ang = inputs[| 2].getValue(); - var _bnd = inputs[| 3].getValue(); + var _dim = inputs[| 0].getValue(); + var _amo = inputs[| 1].getValue(); + var _ang = inputs[| 2].getValue(); + var _bnd = inputs[| 3].getValue(); + var _pos = inputs[| 4].getValue(); var _outSurf = outputs[| 0].getValue(); if(!is_surface(_outSurf)) { @@ -39,6 +53,7 @@ function Node_Stripe(_x, _y) : Node(_x, _y) constructor { surface_set_target(_outSurf); shader_set(sh_stripe); + shader_set_uniform_f(uniform_pos, _pos[0] / _dim[0], _pos[1] / _dim[1]); shader_set_uniform_f(uniform_angle, degtorad(_ang)); shader_set_uniform_f(uniform_amount, _amo); shader_set_uniform_f(uniform_blend, _bnd); diff --git a/scripts/node_zigzag/node_zigzag.gml b/scripts/node_zigzag/node_zigzag.gml index 7ef8f1c5b..30c0b979e 100644 --- a/scripts/node_zigzag/node_zigzag.gml +++ b/scripts/node_zigzag/node_zigzag.gml @@ -7,6 +7,7 @@ function Node_create_Zigzag(_x, _y) { function Node_Zigzag(_x, _y) : Node(_x, _y) constructor { name = "Zigzag"; + uniform_pos = shader_get_uniform(sh_zigzag, "position"); uniform_amount = shader_get_uniform(sh_zigzag, "amount"); inputs[| 0] = nodeValue(0, "Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2, VALUE_TAG.dimension_2d ) @@ -14,12 +15,20 @@ function Node_Zigzag(_x, _y) : Node(_x, _y) constructor { inputs[| 1] = nodeValue(1, "Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1) .setDisplay(VALUE_DISPLAY.slider, [1, 32, 1]); + + inputs[| 2] = nodeValue(2, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [0, 0] ) + .setDisplay(VALUE_DISPLAY.vector); outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, surface_create(1, 1)); + static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + inputs[| 2].drawOverlay(_active, _x, _y, _s, _mx, _my); + } + function update() { - var _dim = inputs[| 0].getValue(); - var _amo = inputs[| 1].getValue(); + var _dim = inputs[| 0].getValue(); + var _amo = inputs[| 1].getValue(); + var _pos = inputs[| 2].getValue(); var _outSurf = outputs[| 0].getValue(); if(!is_surface(_outSurf)) { @@ -30,6 +39,7 @@ function Node_Zigzag(_x, _y) : Node(_x, _y) constructor { surface_set_target(_outSurf); shader_set(sh_zigzag); + shader_set_uniform_f(uniform_pos, _pos[0] / _dim[0], _pos[1] / _dim[1]); shader_set_uniform_f(uniform_amount, _amo); draw_sprite_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], 0, c_white, 1); shader_reset(); diff --git a/scripts/textBox/textBox.gml b/scripts/textBox/textBox.gml index 8ead661ae..2eab6f1fb 100644 --- a/scripts/textBox/textBox.gml +++ b/scripts/textBox/textBox.gml @@ -239,7 +239,13 @@ function textBox(_input, _onModify) constructor { sliding = 2; if(sliding == 2) { - _input_text = slide_sx + dx * slide_speed; + var spd = dx * slide_speed; + if(keyboard_check(vk_alt)) + spd /= 10; + if(keyboard_check(vk_control)) + spd *= 10; + + _input_text = slide_sx + spd; switch(input) { case TEXTBOX_INPUT.number : diff --git a/shaders/sh_ani_noise/sh_ani_noise.fsh b/shaders/sh_ani_noise/sh_ani_noise.fsh index 72ef23eb4..bf52a8d5e 100644 --- a/shaders/sh_ani_noise/sh_ani_noise.fsh +++ b/shaders/sh_ani_noise/sh_ani_noise.fsh @@ -13,7 +13,7 @@ float random (in vec2 st) { } void main() { - vec2 _pos = position + v_vTexcoord; + vec2 _pos = v_vTexcoord - position; float yy = floor(_pos.y * noiseAmount.y); float xx = (_pos.x + random(vec2(yy))) * noiseAmount.x; float x0 = floor(xx); diff --git a/shaders/sh_checkerboard/sh_checkerboard.fsh b/shaders/sh_checkerboard/sh_checkerboard.fsh index 827490680..edb231e84 100644 --- a/shaders/sh_checkerboard/sh_checkerboard.fsh +++ b/shaders/sh_checkerboard/sh_checkerboard.fsh @@ -4,11 +4,12 @@ varying vec2 v_vTexcoord; varying vec4 v_vColour; +uniform vec2 position; uniform float angle; uniform float amount; void main() { - vec2 c = v_vTexcoord - vec2(0.5); + vec2 c = v_vTexcoord - position; float _x = .5 + c.x * cos(angle) - c.y * sin(angle); float _y = .5 + c.x * sin(angle) + c.y * cos(angle); float _a = 1. / amount; diff --git a/shaders/sh_grid/sh_grid.fsh b/shaders/sh_grid/sh_grid.fsh index 9707b1cae..9f0d38ba2 100644 --- a/shaders/sh_grid/sh_grid.fsh +++ b/shaders/sh_grid/sh_grid.fsh @@ -9,7 +9,7 @@ uniform vec2 scale; uniform float width; void main() { - vec2 _pos = v_vTexcoord + position; + vec2 _pos = v_vTexcoord - position; vec2 dist = _pos - floor(_pos * scale) / scale; float ww = width / 2.; diff --git a/shaders/sh_grid_noise/sh_grid_noise.fsh b/shaders/sh_grid_noise/sh_grid_noise.fsh index 539421b56..cefe05712 100644 --- a/shaders/sh_grid_noise/sh_grid_noise.fsh +++ b/shaders/sh_grid_noise/sh_grid_noise.fsh @@ -14,7 +14,7 @@ float random (in vec2 st) { } void main() { - vec2 st = v_vTexcoord + position; + vec2 st = v_vTexcoord - position; vec2 pos = vec2(st * scale); pos.x += random(vec2(0., floor(pos.y))) * shift; vec2 i = floor(pos); diff --git a/shaders/sh_stripe/sh_stripe.fsh b/shaders/sh_stripe/sh_stripe.fsh index 678d850e6..892090f61 100644 --- a/shaders/sh_stripe/sh_stripe.fsh +++ b/shaders/sh_stripe/sh_stripe.fsh @@ -4,12 +4,14 @@ varying vec2 v_vTexcoord; varying vec4 v_vColour; +uniform vec2 position; uniform float angle; uniform float amount; uniform int blend; void main() { - float prog = .5 + (v_vTexcoord.x - .5) * cos(angle) - (v_vTexcoord.y - .5) * sin(angle); + vec2 pos = v_vTexcoord - position; + float prog = pos.x * cos(angle) - pos.y * sin(angle); float _a = 1. / amount; float _s = mod(prog, _a); diff --git a/shaders/sh_zigzag/sh_zigzag.fsh b/shaders/sh_zigzag/sh_zigzag.fsh index 1f37590bf..279bd6c16 100644 --- a/shaders/sh_zigzag/sh_zigzag.fsh +++ b/shaders/sh_zigzag/sh_zigzag.fsh @@ -4,16 +4,18 @@ varying vec2 v_vTexcoord; varying vec4 v_vColour; +uniform vec2 position; uniform float amount; void main() { + vec2 pos = v_vTexcoord - position; float _cell = 1. / (amount * 2.); - float _xind = floor(v_vTexcoord.x / _cell); - float _yind = floor(v_vTexcoord.y / _cell); + float _xind = floor(pos.x / _cell); + float _yind = floor(pos.y / _cell); - float _xcell = mod(v_vTexcoord.x, _cell); - float _ycell = mod(v_vTexcoord.y, _cell); + float _xcell = mod(pos.x, _cell); + float _ycell = mod(pos.y, _cell); float _x = _xcell; float _y = _ycell; diff --git a/sprites/s_node_array_length/43876625-3678-43e2-893e-59f2dda6d267.png b/sprites/s_node_array_length/43876625-3678-43e2-893e-59f2dda6d267.png new file mode 100644 index 000000000..ee21695a7 Binary files /dev/null and b/sprites/s_node_array_length/43876625-3678-43e2-893e-59f2dda6d267.png differ diff --git a/sprites/s_node_array_length/layers/43876625-3678-43e2-893e-59f2dda6d267/2234cc37-178e-4eb3-9cfd-e5243cb715e1.png b/sprites/s_node_array_length/layers/43876625-3678-43e2-893e-59f2dda6d267/2234cc37-178e-4eb3-9cfd-e5243cb715e1.png new file mode 100644 index 000000000..ee21695a7 Binary files /dev/null and b/sprites/s_node_array_length/layers/43876625-3678-43e2-893e-59f2dda6d267/2234cc37-178e-4eb3-9cfd-e5243cb715e1.png differ diff --git a/sprites/s_node_array_length/s_node_array_length.yy b/sprites/s_node_array_length/s_node_array_length.yy new file mode 100644 index 000000000..ac4bcc442 --- /dev/null +++ b/sprites/s_node_array_length/s_node_array_length.yy @@ -0,0 +1,79 @@ +{ + "bboxMode": 0, + "collisionKind": 1, + "type": 0, + "origin": 4, + "preMultiplyAlpha": false, + "edgeFiltering": false, + "collisionTolerance": 0, + "swfPrecision": 2.525, + "bbox_left": 2, + "bbox_right": 29, + "bbox_top": 6, + "bbox_bottom": 26, + "HTile": false, + "VTile": false, + "For3D": false, + "width": 32, + "height": 32, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "swatchColours": null, + "gridX": 0, + "gridY": 0, + "frames": [ + {"compositeImage":{"FrameId":{"name":"43876625-3678-43e2-893e-59f2dda6d267","path":"sprites/s_node_array_length/s_node_array_length.yy",},"LayerId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMSpriteBitmap",},"images":[ + {"FrameId":{"name":"43876625-3678-43e2-893e-59f2dda6d267","path":"sprites/s_node_array_length/s_node_array_length.yy",},"LayerId":{"name":"2234cc37-178e-4eb3-9cfd-e5243cb715e1","path":"sprites/s_node_array_length/s_node_array_length.yy",},"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMSpriteBitmap",}, + ],"parent":{"name":"s_node_array_length","path":"sprites/s_node_array_length/s_node_array_length.yy",},"resourceVersion":"1.0","name":"43876625-3678-43e2-893e-59f2dda6d267","tags":[],"resourceType":"GMSpriteFrame",}, + ], + "sequence": { + "spriteId": {"name":"s_node_array_length","path":"sprites/s_node_array_length/s_node_array_length.yy",}, + "timeUnits": 1, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "autoRecord": true, + "volume": 1.0, + "length": 1.0, + "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"f8cb50d4-64ce-40ce-ac4d-aef3ff910028","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"43876625-3678-43e2-893e-59f2dda6d267","path":"sprites/s_node_array_length/s_node_array_length.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"resourceVersion":"1.0","tags":[],"resourceType":"GMSpriteFramesTrack","modifiers":[],}, + ], + "visibleRange": {"x":0.0,"y":0.0,}, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 16, + "yorigin": 16, + "eventToFunction": {}, + "eventStubScript": null, + "parent": {"name":"s_node_array_length","path":"sprites/s_node_array_length/s_node_array_length.yy",}, + "resourceVersion": "1.3", + "name": "s_node_array_length", + "tags": [], + "resourceType": "GMSequence", + }, + "layers": [ + {"visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default","resourceVersion":"1.0","name":"2234cc37-178e-4eb3-9cfd-e5243cb715e1","tags":[],"resourceType":"GMImageLayer",}, + ], + "nineSlice": null, + "parent": { + "name": "icons", + "path": "folders/nodes/icons.yy", + }, + "resourceVersion": "1.0", + "name": "s_node_array_length", + "tags": [], + "resourceType": "GMSprite", +} \ No newline at end of file diff --git a/sprites/s_node_grid/8b598738-8571-41d1-8a88-5f96963a0ff0.png b/sprites/s_node_grid/8b598738-8571-41d1-8a88-5f96963a0ff0.png new file mode 100644 index 000000000..2b8b2e050 Binary files /dev/null and b/sprites/s_node_grid/8b598738-8571-41d1-8a88-5f96963a0ff0.png differ diff --git a/sprites/s_node_grid/layers/8b598738-8571-41d1-8a88-5f96963a0ff0/0437d486-f16a-42a4-b114-8ce77e85f242.png b/sprites/s_node_grid/layers/8b598738-8571-41d1-8a88-5f96963a0ff0/0437d486-f16a-42a4-b114-8ce77e85f242.png new file mode 100644 index 000000000..2b8b2e050 Binary files /dev/null and b/sprites/s_node_grid/layers/8b598738-8571-41d1-8a88-5f96963a0ff0/0437d486-f16a-42a4-b114-8ce77e85f242.png differ diff --git a/sprites/s_node_grid/s_node_grid.yy b/sprites/s_node_grid/s_node_grid.yy new file mode 100644 index 000000000..860556a5a --- /dev/null +++ b/sprites/s_node_grid/s_node_grid.yy @@ -0,0 +1,79 @@ +{ + "bboxMode": 0, + "collisionKind": 1, + "type": 0, + "origin": 4, + "preMultiplyAlpha": false, + "edgeFiltering": false, + "collisionTolerance": 0, + "swfPrecision": 2.525, + "bbox_left": 2, + "bbox_right": 29, + "bbox_top": 2, + "bbox_bottom": 30, + "HTile": false, + "VTile": false, + "For3D": false, + "width": 32, + "height": 32, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "swatchColours": null, + "gridX": 0, + "gridY": 0, + "frames": [ + {"compositeImage":{"FrameId":{"name":"8b598738-8571-41d1-8a88-5f96963a0ff0","path":"sprites/s_node_grid/s_node_grid.yy",},"LayerId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMSpriteBitmap",},"images":[ + {"FrameId":{"name":"8b598738-8571-41d1-8a88-5f96963a0ff0","path":"sprites/s_node_grid/s_node_grid.yy",},"LayerId":{"name":"0437d486-f16a-42a4-b114-8ce77e85f242","path":"sprites/s_node_grid/s_node_grid.yy",},"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMSpriteBitmap",}, + ],"parent":{"name":"s_node_grid","path":"sprites/s_node_grid/s_node_grid.yy",},"resourceVersion":"1.0","name":"8b598738-8571-41d1-8a88-5f96963a0ff0","tags":[],"resourceType":"GMSpriteFrame",}, + ], + "sequence": { + "spriteId": {"name":"s_node_grid","path":"sprites/s_node_grid/s_node_grid.yy",}, + "timeUnits": 1, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "autoRecord": true, + "volume": 1.0, + "length": 1.0, + "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"3f3d3ab3-6fed-4742-9154-27b028e6cf26","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"8b598738-8571-41d1-8a88-5f96963a0ff0","path":"sprites/s_node_grid/s_node_grid.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"resourceVersion":"1.0","tags":[],"resourceType":"GMSpriteFramesTrack","modifiers":[],}, + ], + "visibleRange": {"x":0.0,"y":0.0,}, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 16, + "yorigin": 16, + "eventToFunction": {}, + "eventStubScript": null, + "parent": {"name":"s_node_grid","path":"sprites/s_node_grid/s_node_grid.yy",}, + "resourceVersion": "1.3", + "name": "s_node_grid", + "tags": [], + "resourceType": "GMSequence", + }, + "layers": [ + {"visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default","resourceVersion":"1.0","name":"0437d486-f16a-42a4-b114-8ce77e85f242","tags":[],"resourceType":"GMImageLayer",}, + ], + "nineSlice": null, + "parent": { + "name": "icons", + "path": "folders/nodes/icons.yy", + }, + "resourceVersion": "1.0", + "name": "s_node_grid", + "tags": [], + "resourceType": "GMSprite", +} \ No newline at end of file diff --git a/sprites/s_node_lerp/84b3be0a-c8e0-41e1-a927-3d603ca0b519.png b/sprites/s_node_lerp/84b3be0a-c8e0-41e1-a927-3d603ca0b519.png new file mode 100644 index 000000000..eae98a033 Binary files /dev/null and b/sprites/s_node_lerp/84b3be0a-c8e0-41e1-a927-3d603ca0b519.png differ diff --git a/sprites/s_node_lerp/layers/84b3be0a-c8e0-41e1-a927-3d603ca0b519/752a7efe-e330-48b4-a04b-65ea0abe9f81.png b/sprites/s_node_lerp/layers/84b3be0a-c8e0-41e1-a927-3d603ca0b519/752a7efe-e330-48b4-a04b-65ea0abe9f81.png new file mode 100644 index 000000000..eae98a033 Binary files /dev/null and b/sprites/s_node_lerp/layers/84b3be0a-c8e0-41e1-a927-3d603ca0b519/752a7efe-e330-48b4-a04b-65ea0abe9f81.png differ diff --git a/sprites/s_node_lerp/s_node_lerp.yy b/sprites/s_node_lerp/s_node_lerp.yy new file mode 100644 index 000000000..780fbf9d9 --- /dev/null +++ b/sprites/s_node_lerp/s_node_lerp.yy @@ -0,0 +1,79 @@ +{ + "bboxMode": 0, + "collisionKind": 1, + "type": 0, + "origin": 4, + "preMultiplyAlpha": false, + "edgeFiltering": false, + "collisionTolerance": 0, + "swfPrecision": 2.525, + "bbox_left": 1, + "bbox_right": 30, + "bbox_top": 12, + "bbox_bottom": 20, + "HTile": false, + "VTile": false, + "For3D": false, + "width": 32, + "height": 32, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "swatchColours": null, + "gridX": 0, + "gridY": 0, + "frames": [ + {"compositeImage":{"FrameId":{"name":"84b3be0a-c8e0-41e1-a927-3d603ca0b519","path":"sprites/s_node_lerp/s_node_lerp.yy",},"LayerId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMSpriteBitmap",},"images":[ + {"FrameId":{"name":"84b3be0a-c8e0-41e1-a927-3d603ca0b519","path":"sprites/s_node_lerp/s_node_lerp.yy",},"LayerId":{"name":"752a7efe-e330-48b4-a04b-65ea0abe9f81","path":"sprites/s_node_lerp/s_node_lerp.yy",},"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMSpriteBitmap",}, + ],"parent":{"name":"s_node_lerp","path":"sprites/s_node_lerp/s_node_lerp.yy",},"resourceVersion":"1.0","name":"84b3be0a-c8e0-41e1-a927-3d603ca0b519","tags":[],"resourceType":"GMSpriteFrame",}, + ], + "sequence": { + "spriteId": {"name":"s_node_lerp","path":"sprites/s_node_lerp/s_node_lerp.yy",}, + "timeUnits": 1, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "autoRecord": true, + "volume": 1.0, + "length": 1.0, + "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"1352e346-7193-4926-81e7-aa8ba84edc5f","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"84b3be0a-c8e0-41e1-a927-3d603ca0b519","path":"sprites/s_node_lerp/s_node_lerp.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"resourceVersion":"1.0","tags":[],"resourceType":"GMSpriteFramesTrack","modifiers":[],}, + ], + "visibleRange": {"x":0.0,"y":0.0,}, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 16, + "yorigin": 16, + "eventToFunction": {}, + "eventStubScript": null, + "parent": {"name":"s_node_lerp","path":"sprites/s_node_lerp/s_node_lerp.yy",}, + "resourceVersion": "1.3", + "name": "s_node_lerp", + "tags": [], + "resourceType": "GMSequence", + }, + "layers": [ + {"visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default","resourceVersion":"1.0","name":"752a7efe-e330-48b4-a04b-65ea0abe9f81","tags":[],"resourceType":"GMImageLayer",}, + ], + "nineSlice": null, + "parent": { + "name": "icons", + "path": "folders/nodes/icons.yy", + }, + "resourceVersion": "1.0", + "name": "s_node_lerp", + "tags": [], + "resourceType": "GMSprite", +} \ No newline at end of file