diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index e4a160521..eef8db41e 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -824,6 +824,7 @@ {"name":"node_custom_shader","order":1,"path":"scripts/node_custom_shader/node_custom_shader.yy",}, {"name":"node_data","order":1,"path":"scripts/node_data/node_data.yy",}, {"name":"node_de_stray","order":2,"path":"scripts/node_de_stray/node_de_stray.yy",}, + {"name":"node_delay_value","order":6,"path":"scripts/node_delay_value/node_delay_value.yy",}, {"name":"node_delay","order":5,"path":"scripts/node_delay/node_delay.yy",}, {"name":"node_differential","order":17,"path":"scripts/node_differential/node_differential.yy",}, {"name":"node_diffuse","order":7,"path":"scripts/node_diffuse/node_diffuse.yy",}, @@ -2046,6 +2047,7 @@ {"name":"s_node_curve","order":27,"path":"sprites/s_node_curve/s_node_curve.yy",}, {"name":"s_node_de_corner","order":28,"path":"sprites/s_node_de_corner/s_node_de_corner.yy",}, {"name":"s_node_de_stray","order":29,"path":"sprites/s_node_de_stray/s_node_de_stray.yy",}, + {"name":"s_node_delay_value","order":13,"path":"sprites/s_node_delay_value/s_node_delay_value.yy",}, {"name":"s_node_delay","order":7,"path":"sprites/s_node_delay/s_node_delay.yy",}, {"name":"s_node_differential","order":13,"path":"sprites/s_node_differential/s_node_differential.yy",}, {"name":"s_node_diffuse","order":41,"path":"sprites/s_node_diffuse/s_node_diffuse.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 755e4968c..133a4ef77 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -558,6 +558,7 @@ {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Animation/Node_Audio_Loudness","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Animation/Node_Audio_Window","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Animation/Node_Counter","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, + {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Animation/Node_Delay_Value","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Animation/Node_Delay","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Animation/Node_Fn_Ease","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"info.json","CopyToMask":-1,"filePath":"datafiles/data/Nodes/Internal/Animation/Node_Fn_Math","name":"info.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, @@ -2004,6 +2005,7 @@ {"id":{"name":"node_data","path":"scripts/node_data/node_data.yy",},}, {"id":{"name":"node_de_corner","path":"scripts/node_de_corner/node_de_corner.yy",},}, {"id":{"name":"node_de_stray","path":"scripts/node_de_stray/node_de_stray.yy",},}, + {"id":{"name":"node_delay_value","path":"scripts/node_delay_value/node_delay_value.yy",},}, {"id":{"name":"node_delay","path":"scripts/node_delay/node_delay.yy",},}, {"id":{"name":"node_differential","path":"scripts/node_differential/node_differential.yy",},}, {"id":{"name":"node_diffuse","path":"scripts/node_diffuse/node_diffuse.yy",},}, @@ -3386,6 +3388,7 @@ {"id":{"name":"s_node_curve","path":"sprites/s_node_curve/s_node_curve.yy",},}, {"id":{"name":"s_node_de_corner","path":"sprites/s_node_de_corner/s_node_de_corner.yy",},}, {"id":{"name":"s_node_de_stray","path":"sprites/s_node_de_stray/s_node_de_stray.yy",},}, + {"id":{"name":"s_node_delay_value","path":"sprites/s_node_delay_value/s_node_delay_value.yy",},}, {"id":{"name":"s_node_delay","path":"sprites/s_node_delay/s_node_delay.yy",},}, {"id":{"name":"s_node_differential","path":"sprites/s_node_differential/s_node_differential.yy",},}, {"id":{"name":"s_node_diffuse","path":"sprites/s_node_diffuse/s_node_diffuse.yy",},}, diff --git a/datafiles/data/Nodes/Internal.zip b/datafiles/data/Nodes/Internal.zip index 2e914807d..4dbb91a2e 100644 Binary files a/datafiles/data/Nodes/Internal.zip and b/datafiles/data/Nodes/Internal.zip differ diff --git a/datafiles/data/Nodes/Internal/Animation/Node_Delay_Value/info.json b/datafiles/data/Nodes/Internal/Animation/Node_Delay_Value/info.json new file mode 100644 index 000000000..57fdc8851 --- /dev/null +++ b/datafiles/data/Nodes/Internal/Animation/Node_Delay_Value/info.json @@ -0,0 +1,8 @@ +{ + "name":"Delay Value", + "spr":"s_node_delay_value", + "tooltip":"Delay value by fix amount of frames.", + "pxc_version":118080, + "baseNode":"Node_Delay_Value", + "io":[], +} \ No newline at end of file diff --git a/datafiles/data/Nodes/display_data.json b/datafiles/data/Nodes/display_data.json index be7674770..83891e76f 100644 --- a/datafiles/data/Nodes/display_data.json +++ b/datafiles/data/Nodes/display_data.json @@ -873,6 +873,7 @@ { "label": "Animations" }, "Node_Rate_Remap", "Node_Delay", + "Node_Delay_Value", "Node_Stagger", "Node_Revert", diff --git a/objects/o_dialog_add_node/Create_0.gml b/objects/o_dialog_add_node/Create_0.gml index aaff7fd1e..a82bae7f6 100644 --- a/objects/o_dialog_add_node/Create_0.gml +++ b/objects/o_dialog_add_node/Create_0.gml @@ -1253,7 +1253,7 @@ event_inherited(); tx += string_width(_node.getName()); } - if(_hover && MOUSE_MOVED && point_in_rectangle(_m[0], _m[1], 0, yy, pd + ui(32), yy + list_height - 1)) { + if(_hover && point_in_rectangle(_m[0], _m[1], 0, yy, pd + ui(32), yy + list_height - 1)) { node_selecting = noone; gpu_set_tex_filter(true); BLEND_ADD diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index 177dfcd4e..d30049b93 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -1393,7 +1393,6 @@ function Node(_x, _y, _group = noone) : __Node_Base(_x, _y) constructor { } var _prev = getPreviousNodes(); - for( var i = 0, n = array_length(_prev); i < n; i++ ) { if(_prev[i].__getNodeChildList(_node, _arr)) { array_push(_arr, self); diff --git a/scripts/node_delay_value/node_delay_value.gml b/scripts/node_delay_value/node_delay_value.gml new file mode 100644 index 000000000..8b68236ba --- /dev/null +++ b/scripts/node_delay_value/node_delay_value.gml @@ -0,0 +1,84 @@ +#region create + FN_NODE_CONTEXT_INVOKE { + addHotkey("Node_Delay_Value", "Overflow > Toggle", "O", MOD_KEY.none, function() /*=>*/ { PANEL_GRAPH_FOCUS_STR _n.inputs[2].setValue((_n.inputs[2].getValue() + 1) % 3); }); + }); +#endregion + +function Node_Delay_Value(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { + name = "Delay Value"; + is_simulation = true; + setDimension(96, 32 + 24); + + newInput(0, nodeValue("Value", self, CONNECT_TYPE.input, VALUE_TYPE.any, noone)) + .setVisible(true, true); + + newInput(1, nodeValue_Int("Frames", self, 1)); + + newInput(2, nodeValue_Enum_Scroll("Overflow", self, 0, [ "Hold", "Loop", "Value" ])); + + newInput(3, nodeValue("Default", self, CONNECT_TYPE.input, VALUE_TYPE.any, noone)); + + newOutput(0, nodeValue_Output("Value", self, VALUE_TYPE.any, noone)); + + input_display_list = [ 0, + ["Delay", false], 1, 2, 3, + ]; + + data_indexes = []; + curr_frame = 0; + + static processData_prebatch = function() { + data_indexes = array_verify(data_indexes, process_amount); + for( var i = 0; i < process_amount; i++ ) + data_indexes[i] = array_verify(data_indexes[i], TOTAL_FRAMES); + + var _ovr = getSingleValue(2); + inputs[3].setVisible(_ovr == 2, _ovr == 2); + + var _frm = inputs[0].value_from; + var _typ = _frm == noone? VALUE_TYPE.any : _frm.type; + + inputs[0].setType(_typ); + outputs[0].setType(_typ); + } + + static processData = function(_output, _data, _output_index, _array_index = 0) { + var _val = _data[0]; + var _frme = _data[1]; + var _ovrf = _data[2]; + var _def = _data[3]; + + var _time = CURRENT_FRAME; + var _totl = TOTAL_FRAMES; + + var _frtm = _time - _frme; + switch(_ovrf) { + case 0 : _frtm = clamp(_frtm, 0, _totl - 1); break; + case 1 : _frtm = (_frtm + _totl) % _totl; break; + } + curr_frame = _frtm; + + var _surfA = data_indexes[_array_index]; + _surfA[_time] = variable_clone(_val); + + return array_safe_get(_surfA, _frtm, _def); + } + + static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { + var str = getSingleValue(0, preview_index, true); + var bbox = drawGetBbox(xx, yy, _s); + + draw_set_text(f_sdf, fa_center, fa_center, COLORS._main_text); + draw_text_bbox(bbox, str); + } + + static drawAnimationTimeline = function(_shf, _w, _h, _s) { + draw_set_color(COLORS._main_value_positive); + draw_set_alpha(1); + + var _x = _shf + (curr_frame + 1) * _s; + draw_line_width(_x, 0, _x, _h, 1); + draw_set_alpha(1); + } + +} \ No newline at end of file diff --git a/scripts/node_delay_value/node_delay_value.yy b/scripts/node_delay_value/node_delay_value.yy new file mode 100644 index 000000000..bf00297b5 --- /dev/null +++ b/scripts/node_delay_value/node_delay_value.yy @@ -0,0 +1,14 @@ +{ + "$GMScript":"v1", + "%Name":"node_delay_value", + "isCompatibility":false, + "isDnD":false, + "name":"node_delay_value", + "parent":{ + "name":"animation", + "path":"folders/nodes/data/animation.yy", + }, + "resourceType":"GMScript", + "resourceVersion":"2.0", + "tags":[], +} \ No newline at end of file diff --git a/sprites/s_node_delay_value/0b4ceeea-7b66-42b6-bf1a-6b2b50022500.png b/sprites/s_node_delay_value/0b4ceeea-7b66-42b6-bf1a-6b2b50022500.png new file mode 100644 index 000000000..080986afb Binary files /dev/null and b/sprites/s_node_delay_value/0b4ceeea-7b66-42b6-bf1a-6b2b50022500.png differ diff --git a/sprites/s_node_delay_value/layers/0b4ceeea-7b66-42b6-bf1a-6b2b50022500/2ea190d2-0b79-4fea-ac50-881f6c20ca51.png b/sprites/s_node_delay_value/layers/0b4ceeea-7b66-42b6-bf1a-6b2b50022500/2ea190d2-0b79-4fea-ac50-881f6c20ca51.png new file mode 100644 index 000000000..080986afb Binary files /dev/null and b/sprites/s_node_delay_value/layers/0b4ceeea-7b66-42b6-bf1a-6b2b50022500/2ea190d2-0b79-4fea-ac50-881f6c20ca51.png differ diff --git a/sprites/s_node_delay_value/s_node_delay_value.yy b/sprites/s_node_delay_value/s_node_delay_value.yy new file mode 100644 index 000000000..49a7ff543 --- /dev/null +++ b/sprites/s_node_delay_value/s_node_delay_value.yy @@ -0,0 +1,90 @@ +{ + "$GMSprite":"", + "%Name":"s_node_delay_value", + "bboxMode":0, + "bbox_bottom":56, + "bbox_left":5, + "bbox_right":58, + "bbox_top":6, + "collisionKind":1, + "collisionTolerance":0, + "DynamicTexturePage":false, + "edgeFiltering":false, + "For3D":false, + "frames":[ + {"$GMSpriteFrame":"","%Name":"0b4ceeea-7b66-42b6-bf1a-6b2b50022500","name":"0b4ceeea-7b66-42b6-bf1a-6b2b50022500","resourceType":"GMSpriteFrame","resourceVersion":"2.0",}, + ], + "gridX":0, + "gridY":0, + "height":64, + "HTile":false, + "layers":[ + {"$GMImageLayer":"","%Name":"2ea190d2-0b79-4fea-ac50-881f6c20ca51","blendMode":0,"displayName":"default","isLocked":false,"name":"2ea190d2-0b79-4fea-ac50-881f6c20ca51","opacity":100.0,"resourceType":"GMImageLayer","resourceVersion":"2.0","visible":true,}, + ], + "name":"s_node_delay_value", + "nineSlice":null, + "origin":4, + "parent":{ + "name":"animation", + "path":"folders/nodes/icons/animation.yy", + }, + "preMultiplyAlpha":false, + "resourceType":"GMSprite", + "resourceVersion":"2.0", + "sequence":{ + "$GMSequence":"", + "%Name":"s_node_delay_value", + "autoRecord":true, + "backdropHeight":768, + "backdropImageOpacity":0.5, + "backdropImagePath":"", + "backdropWidth":1366, + "backdropXOffset":0.0, + "backdropYOffset":0.0, + "events":{ + "$KeyframeStore":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "resourceVersion":"2.0", + }, + "eventStubScript":null, + "eventToFunction":{}, + "length":1.0, + "lockOrigin":false, + "moments":{ + "$KeyframeStore":"", + "Keyframes":[], + "resourceType":"KeyframeStore", + "resourceVersion":"2.0", + }, + "name":"s_node_delay_value", + "playback":1, + "playbackSpeed":30.0, + "playbackSpeedType":0, + "resourceType":"GMSequence", + "resourceVersion":"2.0", + "showBackdrop":true, + "showBackdropImage":false, + "timeUnits":1, + "tracks":[ + {"$GMSpriteFramesTrack":"","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"$KeyframeStore":"","Keyframes":[ + {"$Keyframe":"","Channels":{ + "0":{"$SpriteFrameKeyframe":"","Id":{"name":"0b4ceeea-7b66-42b6-bf1a-6b2b50022500","path":"sprites/s_node_delay_value/s_node_delay_value.yy",},"resourceType":"SpriteFrameKeyframe","resourceVersion":"2.0",}, + },"Disabled":false,"id":"d77e5fe2-f346-4187-ab5c-2e4438436dc5","IsCreationKey":false,"Key":0.0,"Length":1.0,"resourceType":"Keyframe","resourceVersion":"2.0","Stretch":false,}, + ],"resourceType":"KeyframeStore","resourceVersion":"2.0",},"modifiers":[],"name":"frames","resourceType":"GMSpriteFramesTrack","resourceVersion":"2.0","spriteId":null,"trackColour":0,"tracks":[],"traits":0,}, + ], + "visibleRange":null, + "volume":1.0, + "xorigin":32, + "yorigin":32, + }, + "swatchColours":null, + "swfPrecision":0.5, + "textureGroupId":{ + "name":"Default", + "path":"texturegroups/Default", + }, + "type":0, + "VTile":false, + "width":64, +} \ No newline at end of file