From 9aee7591563926f80845ec5bb6077d07dbde4a09 Mon Sep 17 00:00:00 2001 From: Tanasart Date: Mon, 22 Apr 2024 14:56:37 +0700 Subject: [PATCH] tunnel appearnce --- .../draw_line_dashed.gml.backup0 | 71 ++++++++ .../draw_line_dashed.gml.backup1 | 71 ++++++++ .../scripts/node_pin/node_pin.gml.backup0 | 12 +- .../scripts/node_pin/node_pin.gml.backup1 | 8 +- .../node_tunnel_in/node_tunnel_in.gml.backup0 | 110 +++++++++-- .../node_tunnel_in/node_tunnel_in.gml.backup1 | 116 ++++++++++-- .../node_tunnel_out.gml.backup0 | 171 ++++++++++++++++++ .../node_tunnel_out.gml.backup1 | 171 ++++++++++++++++++ .../sh_node_arc/sh_node_arc.fsh.backup0 | 29 +++ .../sh_node_arc/sh_node_arc.fsh.backup1 | 29 +++ .../sh_node_circle/sh_node_circle.fsh.backup0 | 17 ++ .../sh_node_circle/sh_node_circle.fsh.backup1 | 17 ++ PixelComposer.resource_order | 3 +- PixelComposer.yyp | 3 +- datafiles/data/Theme.zip | Bin 4293836 -> 4293847 bytes scripts/draw_line_dashed/draw_line_dashed.gml | 21 +++ scripts/node_pin/node_pin.gml | 10 +- scripts/node_tunnel_in/node_tunnel_in.gml | 108 +++++++++-- scripts/node_tunnel_out/node_tunnel_out.gml | 138 ++++++++++---- shaders/sh_node_arc/sh_node_arc.fsh | 28 +++ shaders/sh_node_arc/sh_node_arc.vsh | 19 ++ shaders/sh_node_arc/sh_node_arc.yy | 12 ++ shaders/sh_node_circle/sh_node_circle.fsh | 2 +- 23 files changed, 1060 insertions(+), 106 deletions(-) create mode 100644 #backups/scripts/draw_line_dashed/draw_line_dashed.gml.backup0 create mode 100644 #backups/scripts/draw_line_dashed/draw_line_dashed.gml.backup1 create mode 100644 #backups/scripts/node_tunnel_out/node_tunnel_out.gml.backup0 create mode 100644 #backups/scripts/node_tunnel_out/node_tunnel_out.gml.backup1 create mode 100644 #backups/shaders/sh_node_arc/sh_node_arc.fsh.backup0 create mode 100644 #backups/shaders/sh_node_arc/sh_node_arc.fsh.backup1 create mode 100644 #backups/shaders/sh_node_circle/sh_node_circle.fsh.backup0 create mode 100644 #backups/shaders/sh_node_circle/sh_node_circle.fsh.backup1 create mode 100644 shaders/sh_node_arc/sh_node_arc.fsh create mode 100644 shaders/sh_node_arc/sh_node_arc.vsh create mode 100644 shaders/sh_node_arc/sh_node_arc.yy diff --git a/#backups/scripts/draw_line_dashed/draw_line_dashed.gml.backup0 b/#backups/scripts/draw_line_dashed/draw_line_dashed.gml.backup0 new file mode 100644 index 000000000..e67683616 --- /dev/null +++ b/#backups/scripts/draw_line_dashed/draw_line_dashed.gml.backup0 @@ -0,0 +1,71 @@ +// 2024-04-22 13:36:52 +function draw_line_dashed(x0, y0, x1, y1, th = 1, dash_distance = 8, dash_shift = 0) { + var dis = point_distance(x0, y0, x1, y1); + var dir = point_direction(x0, y0, x1, y1); + var part = ceil(dis / dash_distance); + + var dx = lengthdir_x(1, dir); + var dy = lengthdir_y(1, dir); + + var ox, oy, nx, ny, od, nd; + var rat = dash_distance / dis; + + for( var i = 0; i <= part; i++ ) { + nd = dis * frac(i * rat + dash_shift / dis); + nx = x0 + dx * nd; + ny = y0 + dy * nd; + + if(i && i % 2 && nd > od) + draw_line_width(ox, oy, nx, ny, th); + + ox = nx; + oy = ny; + od = nd; + } +} + +function draw_line_dashed_color(x0, y0, x1, y1, th, c0, c1, dash_distance = 8) { + var dis = point_distance(x0, y0, x1, y1); + var dir = point_direction(x0, y0, x1, y1); + var part = ceil(dis / dash_distance); + + var dx = lengthdir_x(1, dir); + var dy = lengthdir_y(1, dir); + + var ox, oy, nx, ny, oc, nc; + var dd = 0; + + for( var i = 0; i <= part; i++ ) { + dd = min(dis, i * dash_distance); + nx = x0 + dx * dd; + ny = y0 + dy * dd; + nc = merge_color(c0, c1, i / part); + + if(i % 2) draw_line_width_color(ox, oy, nx, ny, th, oc, nc); + + oc = nc; + ox = nx; + oy = ny; + } +} + +function draw_line_dotted(x0, y0, x1, y1, radius, shift, distanceMulp = 1) { + var dis = point_distance(x0, y0, x1, y1); + var dir = point_direction(x0, y0, x1, y1); + var dtd = radius * distanceMulp * 2; + var part = floor(dis / dtd); + + var dx = lengthdir_x(1, dir); + var dy = lengthdir_y(1, dir); + + var nd, nx, ny; + var rat = dtd / dis; + + for( var i = 0; i < part; i++ ) { + nd = dis * frac(i * rat + shift / dis); + nx = x0 + dx * nd; + ny = y0 + dy * nd; + + draw_circle(nx, ny, radius, false); + } +} \ No newline at end of file diff --git a/#backups/scripts/draw_line_dashed/draw_line_dashed.gml.backup1 b/#backups/scripts/draw_line_dashed/draw_line_dashed.gml.backup1 new file mode 100644 index 000000000..434b666c1 --- /dev/null +++ b/#backups/scripts/draw_line_dashed/draw_line_dashed.gml.backup1 @@ -0,0 +1,71 @@ +// 2024-04-22 13:35:54 +function draw_line_dashed(x0, y0, x1, y1, th = 1, dash_distance = 8, dash_shift = 0) { + var dis = point_distance(x0, y0, x1, y1); + var dir = point_direction(x0, y0, x1, y1); + var part = ceil(dis / dash_distance); + + var dx = lengthdir_x(1, dir); + var dy = lengthdir_y(1, dir); + + var ox, oy, nx, ny, od, nd; + var rat = dash_distance / dis; + + for( var i = 0; i <= part; i++ ) { + nd = dis * frac(i * rat + dash_shift / dis); + nx = x0 + dx * nd; + ny = y0 + dy * nd; + + if(i && i % 2 && nd > od) + draw_line_width(ox, oy, nx, ny, th); + + ox = nx; + oy = ny; + od = nd; + } +} + +function draw_line_dashed_color(x0, y0, x1, y1, th, c0, c1, dash_distance = 8) { + var dis = point_distance(x0, y0, x1, y1); + var dir = point_direction(x0, y0, x1, y1); + var part = ceil(dis / dash_distance); + + var dx = lengthdir_x(1, dir); + var dy = lengthdir_y(1, dir); + + var ox, oy, nx, ny, oc, nc; + var dd = 0; + + for( var i = 0; i <= part; i++ ) { + dd = min(dis, i * dash_distance); + nx = x0 + dx * dd; + ny = y0 + dy * dd; + nc = merge_color(c0, c1, i / part); + + if(i % 2) draw_line_width_color(ox, oy, nx, ny, th, oc, nc); + + oc = nc; + ox = nx; + oy = ny; + } +} + +function draw_line_dotted(x0, y0, x1, y1, radius, shift, distanceMulp = 1) { + var dis = point_distance(x0, y0, x1, y1); + var dir = point_direction(x0, y0, x1, y1); + var dtd = radius * distanceMulp * 2; + var part = floor(dis / dtd); + + var dx = lengthdir_x(1, dir); + var dy = lengthdir_y(1, dir); + + var nd, nx, ny; + var rat = dtd / dis; + + for( var i = 0; i <= part; i++ ) { + nd = dis * frac(i * rat + shift / dis); + nx = x0 + dx * nd; + ny = y0 + dy * nd; + + draw_circle(nx, ny, radius, false); + } +} \ No newline at end of file diff --git a/#backups/scripts/node_pin/node_pin.gml.backup0 b/#backups/scripts/node_pin/node_pin.gml.backup0 index 67855a5c8..7fe2f4b71 100644 --- a/#backups/scripts/node_pin/node_pin.gml.backup0 +++ b/#backups/scripts/node_pin/node_pin.gml.backup0 @@ -1,8 +1,7 @@ -// 2024-04-22 13:04:19 +// 2024-04-22 14:53:29 function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { name = "Pin"; - w = 32; - h = 32; + setDimension(32, 32); auto_height = false; junction_shift_y = 16; @@ -73,7 +72,6 @@ function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { } #endregion static drawNode = function(_x, _y, _mx, _my, _s) { #region - // if(group != PANEL_GRAPH.getCurrentContext()) return; var xx = x * _s + _x; var yy = y * _s + _y; @@ -86,7 +84,7 @@ function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { } if(hover_scale > 0) { - var _r = hover_scale * _s * 24; + var _r = hover_scale * _s * 16; shader_set(sh_node_circle); shader_set_color("color", COLORS._main_accent, hover_alpha); draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); @@ -97,8 +95,8 @@ function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { hover_scale_to = 0; if(renamed && display_name != "" && display_name != "Pin") { - draw_set_text(f_p0, fa_center, fa_bottom, COLORS._main_text); - draw_text_transformed(xx, yy - 12, display_name, _s, _s, 0); + draw_set_text(f_sdf, fa_center, fa_bottom, COLORS._main_text); + draw_text_transformed(xx, yy - 12, display_name, _s * 0.4, _s * 0.4, 0); } return drawJunctions(_x, _y, _mx, _my, _s); diff --git a/#backups/scripts/node_pin/node_pin.gml.backup1 b/#backups/scripts/node_pin/node_pin.gml.backup1 index 134b1482f..30565b760 100644 --- a/#backups/scripts/node_pin/node_pin.gml.backup1 +++ b/#backups/scripts/node_pin/node_pin.gml.backup1 @@ -1,8 +1,7 @@ -// 2024-04-22 13:04:17 +// 2024-04-22 14:45:48 function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { name = "Pin"; - w = 32; - h = 32; + setDimension(32, 32); auto_height = false; junction_shift_y = 16; @@ -73,7 +72,6 @@ function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { } #endregion static drawNode = function(_x, _y, _mx, _my, _s) { #region - // if(group != PANEL_GRAPH.getCurrentContext()) return; var xx = x * _s + _x; var yy = y * _s + _y; @@ -86,7 +84,7 @@ function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { } if(hover_scale > 0) { - var _r = hover_scale * _s * 24; + var _r = hover_scale * _s * 16; shader_set(sh_node_circle); shader_set_color("color", COLORS._main_accent, hover_alpha); draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); diff --git a/#backups/scripts/node_tunnel_in/node_tunnel_in.gml.backup0 b/#backups/scripts/node_tunnel_in/node_tunnel_in.gml.backup0 index 57cdf5b46..4125dda86 100644 --- a/#backups/scripts/node_tunnel_in/node_tunnel_in.gml.backup0 +++ b/#backups/scripts/node_tunnel_in/node_tunnel_in.gml.backup0 @@ -1,11 +1,16 @@ -// 2024-04-22 13:08:22 +// 2024-04-22 14:56:06 function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { name = "Tunnel In"; color = COLORS.node_blend_tunnel; is_group_io = true; preview_draw = false; - setDimension(96, 80); + setDimension(32, 32); + + isHovering = false; + hover_scale = 0; + hover_scale_to = 0; + hover_alpha = 0; inputs[| 0] = nodeValue("Name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ) .setDisplay(VALUE_DISPLAY.text_tunnel) @@ -117,11 +122,34 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct return nodes; } #endregion + ///////////////////////////////////////////////////////////////////////////// + + static pointIn = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + return point_in_circle(_mx, _my, xx, yy, _s * 24); + } #endregion + + static preDraw = function(_x, _y, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + inputs[| 0].x = xx; + inputs[| 0].y = yy; + + inputs[| 1].x = xx; + inputs[| 1].y = yy; + } #endregion + + static drawBadge = function(_x, _y, _s) {} + static drawJunctionNames = function(_x, _y, _mx, _my, _s) {} + static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) { #region var xx = _x + x * _s; var yy = _y + y * _s; - var hover = PANEL_GRAPH.pHOVER && point_in_rectangle(_mx, _my, xx, yy, xx + w * _s, yy + h * _s); + var hover = isHovering; var tun = findPanel("Panel_Tunnels"); hover |= tun && tun.tunnel_hover == self; if(!hover) return; @@ -129,32 +157,80 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct var _key = getInputData(0); var amo = ds_map_size(TUNNELS_OUT); var k = ds_map_find_first(TUNNELS_OUT); + + draw_set_color(COLORS.node_blend_tunnel); + repeat(amo) { if(TUNNELS_OUT[? k] == _key && ds_map_exists(PROJECT.nodeMap, k)) { var node = PROJECT.nodeMap[? k]; if(node.group != group) continue; - draw_set_color(COLORS.node_blend_tunnel); - draw_set_alpha(0.35); - var frx = xx + w * _s / 2; - var fry = yy + h * _s / 2; - var tox = _x + (node.x + node.w / 2) * _s; - var toy = _y + (node.y + node.h / 2) * _s; - draw_line_dashed(frx, fry, tox, toy, 8 * _s, 16 * _s, current_time / 10); - draw_set_alpha(1); + var tox = _x + node.x * _s; + var toy = _y + node.y * _s; + draw_line_dotted(xx, yy, tox, toy, 4 * _s, current_time / 10, 2); } k = ds_map_find_next(TUNNELS_OUT, k); } + } #endregion - static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region - draw_set_text(f_sdf, fa_center, fa_center, COLORS._main_text); - var str = string(getInputData(0)); + static drawJunctions = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + isHovering = point_in_circle(_mx, _my, xx, yy, _s * 24); - var bbox = drawGetBbox(xx, yy, _s); - var ss = string_scale(str, bbox.w, bbox.h); - draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0); + var jhov = inputs[| 1].drawJunction(_s, _mx, _my); + if(!isHovering) return noone; + + hover_scale_to = 1; + return jhov? inputs[| 1] : noone; + } #endregion + + static drawNode = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + hover_alpha = 0.5; + if(active_draw_index > -1) { + hover_alpha = 1; + hover_scale_to = 1; + active_draw_index = -1; + } + + shader_set(sh_node_arc); + shader_set_color("color", inputs[| 1].color_display, hover_alpha); + shader_set_f("angle", degtorad(90)); + + var _r = _s * 20; + shader_set_f("amount", 0.4, 0.5); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 30; + shader_set_f("amount", 0.45, 0.525); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 40; + shader_set_f("amount", 0.475, 0.55); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + shader_reset(); + + if(hover_scale > 0) { + var _r = hover_scale * _s * 16; + shader_set(sh_node_circle); + shader_set_color("color", COLORS._main_accent, hover_alpha); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + shader_reset(); + } + + hover_scale = lerp_float(hover_scale, hover_scale_to, 3); + hover_scale_to = 0; + + draw_set_text(f_sdf, fa_center, fa_bottom, COLORS._main_text); + draw_text_transformed(xx, yy - 12, string(getInputData(0)), _s * 0.4, _s * 0.4, 0); + + return drawJunctions(_x, _y, _mx, _my, _s); } #endregion static onClone = function() { onValueUpdate(0); } diff --git a/#backups/scripts/node_tunnel_in/node_tunnel_in.gml.backup1 b/#backups/scripts/node_tunnel_in/node_tunnel_in.gml.backup1 index c5501d650..834ea7c7b 100644 --- a/#backups/scripts/node_tunnel_in/node_tunnel_in.gml.backup1 +++ b/#backups/scripts/node_tunnel_in/node_tunnel_in.gml.backup1 @@ -1,11 +1,16 @@ -// 2024-04-22 13:07:55 +// 2024-04-22 14:56:00 function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { name = "Tunnel In"; color = COLORS.node_blend_tunnel; is_group_io = true; preview_draw = false; - setDimension(96, 80); + setDimension(32, 32); + + isHovering = false; + hover_scale = 0; + hover_scale_to = 0; + hover_alpha = 0; inputs[| 0] = nodeValue("Name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ) .setDisplay(VALUE_DISPLAY.text_tunnel) @@ -34,9 +39,9 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct static checkDuplicate = function() { #region var _key = getInputData(0); - var amo = ds_map_size(TUNNELS_IN_MAP); - var k = ds_map_find_first(TUNNELS_IN_MAP); - var dup = false; + var amo = ds_map_size(TUNNELS_IN_MAP); + var k = ds_map_find_first(TUNNELS_IN_MAP); + var dup = false; repeat(amo) { if(k != node_id && TUNNELS_IN_MAP[? k] == _key) @@ -117,11 +122,34 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct return nodes; } #endregion + ///////////////////////////////////////////////////////////////////////////// + + static pointIn = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + return point_in_circle(_mx, _my, xx, yy, _s * 24); + } #endregion + + static preDraw = function(_x, _y, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + inputs[| 0].x = xx; + inputs[| 0].y = yy; + + inputs[| 1].x = xx; + inputs[| 1].y = yy; + } #endregion + + static drawBadge = function(_x, _y, _s) {} + static drawJunctionNames = function(_x, _y, _mx, _my, _s) {} + static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) { #region var xx = _x + x * _s; var yy = _y + y * _s; - var hover = PANEL_GRAPH.pHOVER && point_in_rectangle(_mx, _my, xx, yy, xx + w * _s, yy + h * _s); + var hover = isHovering; var tun = findPanel("Panel_Tunnels"); hover |= tun && tun.tunnel_hover == self; if(!hover) return; @@ -129,32 +157,80 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct var _key = getInputData(0); var amo = ds_map_size(TUNNELS_OUT); var k = ds_map_find_first(TUNNELS_OUT); + + draw_set_color(COLORS.node_blend_tunnel); + repeat(amo) { if(TUNNELS_OUT[? k] == _key && ds_map_exists(PROJECT.nodeMap, k)) { var node = PROJECT.nodeMap[? k]; if(node.group != group) continue; - draw_set_color(COLORS.node_blend_tunnel); - draw_set_alpha(0.35); - var frx = xx + w * _s / 2; - var fry = yy + h * _s / 2; - var tox = _x + (node.x + node.w / 2) * _s; - var toy = _y + (node.y + node.h / 2) * _s; - draw_line_dashed(frx, fry, tox, toy, 8 * _s, 16 * _s, current_time / 10); - draw_set_alpha(1); + var tox = _x + node.x * _s; + var toy = _y + node.y * _s; + draw_line_dotted(xx, yy, tox, toy, 4 * _s, current_time / 10, 2); } k = ds_map_find_next(TUNNELS_OUT, k); } + } #endregion - static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region - draw_set_text(f_sdf, fa_center, fa_center, COLORS._main_text); - var str = string(getInputData(0)); + static drawJunctions = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + isHovering = point_in_circle(_mx, _my, xx, yy, _s * 24); - var bbox = drawGetBbox(xx, yy, _s); - var ss = string_scale(str, bbox.w, bbox.h); - draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0); + var jhov = inputs[| 1].drawJunction(_s, _mx, _my); + if(!isHovering) return noone; + + hover_scale_to = 1; + return jhov? inputs[| 1] : noone; + } #endregion + + static drawNode = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + hover_alpha = 0.5; + if(active_draw_index > -1) { + hover_alpha = 1; + hover_scale_to = 1; + active_draw_index = -1; + } + + shader_set(sh_node_arc); + shader_set_color("color", inputs[| 1].color_display, hover_alpha); + shader_set_f("angle", degtorad(90)); + + var _r = _s * 20; + shader_set_f("amount", 0.4, 0.5); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 30; + shader_set_f("amount", 0.45, 0.525); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 40; + shader_set_f("amount", 0.475, 0.55); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + shader_reset(); + + if(hover_scale > 0) { + var _r = hover_scale * _s * 16; + shader_set(sh_node_circle); + shader_set_color("color", COLORS._main_accent, hover_alpha); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + shader_reset(); + } + + hover_scale = lerp_float(hover_scale, hover_scale_to, 3); + hover_scale_to = 0; + + draw_set_text(f_sdf, fa_center, fa_bottom, COLORS._main_text); + draw_text_transformed(xx, yy - 12, string(getInputData(0)), _s * 0.4, _s * 0.4, 0); + + return drawJunctions(_x, _y, _mx, _my, _s); } #endregion static onClone = function() { onValueUpdate(0); } diff --git a/#backups/scripts/node_tunnel_out/node_tunnel_out.gml.backup0 b/#backups/scripts/node_tunnel_out/node_tunnel_out.gml.backup0 new file mode 100644 index 000000000..77cb64432 --- /dev/null +++ b/#backups/scripts/node_tunnel_out/node_tunnel_out.gml.backup0 @@ -0,0 +1,171 @@ +// 2024-04-22 14:54:19 +function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Tunnel Out"; + color = COLORS.node_blend_tunnel; + is_group_io = true; + preview_draw = false; + + setDimension(32, 32); + + isHovering = false; + hover_scale = 0; + hover_scale_to = 0; + hover_alpha = 0; + + inputs[| 0] = nodeValue("Name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ) + .setDisplay(VALUE_DISPLAY.text_tunnel) + .rejectArray(); + + outputs[| 0] = nodeValue("Value out", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, noone ); + + insp2UpdateTooltip = "Goto tunnel in"; + insp2UpdateIcon = [ THEME.tunnel, 1, c_white ]; + + static onInspector2Update = function() { #region + var _key = getInputData(0); + if(!ds_map_exists(TUNNELS_IN, _key)) return; + + var _node = TUNNELS_IN[? _key].node; + graphFocusNode(_node); + } #endregion + + static isRenderable = function() { #region + var _key = getInputData(0); + if(!ds_map_exists(TUNNELS_IN, _key)) return false; + + return TUNNELS_IN[? _key].node.rendered; + } #endregion + + static onValueUpdate = function(index = -1) { #region + var _key = getInputData(0); + + TUNNELS_OUT[? node_id] = _key; + + if(index == 0) { RENDER_ALL_REORDER } + } #endregion + + static step = function() { #region + var _key = getInputData(0); + if(ds_map_exists(TUNNELS_IN, _key)) { + outputs[| 0].setType(TUNNELS_IN[? _key].type); + outputs[| 0].display_type = TUNNELS_IN[? _key].display_type; + } else { + outputs[| 0].setType(VALUE_TYPE.any); + outputs[| 0].display_type = VALUE_DISPLAY._default; + } + } #endregion + + static update = function(frame = CURRENT_FRAME) { #region + var _key = getInputData(0); + + if(ds_map_exists(TUNNELS_IN, _key)) + outputs[| 0].setValue(TUNNELS_IN[? _key].getValue()); + } #endregion + + ///////////////////////////////////////////////////////////////////////////// + + static pointIn = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + return point_in_circle(_mx, _my, xx, yy, _s * 24); + } #endregion + + static preDraw = function(_x, _y, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + inputs[| 0].x = xx; + inputs[| 0].y = yy; + + outputs[| 0].x = xx; + outputs[| 0].y = yy; + } #endregion + + static drawBadge = function(_x, _y, _s) {} + static drawJunctionNames = function(_x, _y, _mx, _my, _s) {} + + static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) { #region + var xx = _x + x * _s; + var yy = _y + y * _s; + + var hover = isHovering; + var tun = findPanel("Panel_Tunnels"); + hover |= tun && tun.tunnel_hover == self; + if(!hover) return; + + var _key = getInputData(0); + if(!ds_map_exists(TUNNELS_IN, _key)) return; + + var node = TUNNELS_IN[? _key].node; + if(node.group != group) return; + + draw_set_color(COLORS.node_blend_tunnel); + + var frx = _x + node.x * _s; + var fry = _y + node.y * _s; + draw_line_dotted(frx, fry, xx, yy, 4 * _s, current_time / 10, 2); + } #endregion + + static drawJunctions = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + isHovering = point_in_circle(_mx, _my, xx, yy, _s * 24); + + var jhov = outputs[| 0].drawJunction(_s, _mx, _my); + if(!isHovering) return noone; + + hover_scale_to = 1; + return jhov? inputs[| 1] : noone; + } #endregion + + static drawNode = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + hover_alpha = 0.5; + if(active_draw_index > -1) { + hover_alpha = 1; + hover_scale_to = 1; + active_draw_index = -1; + } + + shader_set(sh_node_arc); + shader_set_color("color", outputs[| 0].color_display, hover_alpha); + shader_set_f("angle", degtorad(-90)); + + var _r = _s * 20; + shader_set_f("amount", 0.4, 0.5); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 30; + shader_set_f("amount", 0.45, 0.525); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 40; + shader_set_f("amount", 0.475, 0.55); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + shader_reset(); + + if(hover_scale > 0) { + var _r = hover_scale * _s * 16; + shader_set(sh_node_circle); + shader_set_color("color", COLORS._main_accent, hover_alpha); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + shader_reset(); + } + + hover_scale = lerp_float(hover_scale, hover_scale_to, 3); + hover_scale_to = 0; + + draw_set_text(f_sdf, fa_center, fa_bottom, COLORS._main_text); + draw_text_transformed(xx, yy - 12, string(getInputData(0)), _s * 0.4, _s * 0.4, 0); + + return drawJunctions(_x, _y, _mx, _my, _s); + } #endregion + + static onClone = function() { onValueUpdate(0); } + + static postConnect = function() { onValueUpdate(0); } +} \ No newline at end of file diff --git a/#backups/scripts/node_tunnel_out/node_tunnel_out.gml.backup1 b/#backups/scripts/node_tunnel_out/node_tunnel_out.gml.backup1 new file mode 100644 index 000000000..ecd66c068 --- /dev/null +++ b/#backups/scripts/node_tunnel_out/node_tunnel_out.gml.backup1 @@ -0,0 +1,171 @@ +// 2024-04-22 14:53:30 +function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Tunnel Out"; + color = COLORS.node_blend_tunnel; + is_group_io = true; + preview_draw = false; + + setDimension(32, 32); + + isHovering = false; + hover_scale = 0; + hover_scale_to = 0; + hover_alpha = 0; + + inputs[| 0] = nodeValue("Name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ) + .setDisplay(VALUE_DISPLAY.text_tunnel) + .rejectArray(); + + outputs[| 0] = nodeValue("Value out", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, noone ); + + insp2UpdateTooltip = "Goto tunnel in"; + insp2UpdateIcon = [ THEME.tunnel, 1, c_white ]; + + static onInspector2Update = function() { #region + var _key = getInputData(0); + if(!ds_map_exists(TUNNELS_IN, _key)) return; + + var _node = TUNNELS_IN[? _key].node; + graphFocusNode(_node); + } #endregion + + static isRenderable = function() { #region + var _key = getInputData(0); + if(!ds_map_exists(TUNNELS_IN, _key)) return false; + + return TUNNELS_IN[? _key].node.rendered; + } #endregion + + static onValueUpdate = function(index = -1) { #region + var _key = getInputData(0); + + TUNNELS_OUT[? node_id] = _key; + + if(index == 0) { RENDER_ALL_REORDER } + } #endregion + + static step = function() { #region + var _key = getInputData(0); + if(ds_map_exists(TUNNELS_IN, _key)) { + outputs[| 0].setType(TUNNELS_IN[? _key].type); + outputs[| 0].display_type = TUNNELS_IN[? _key].display_type; + } else { + outputs[| 0].setType(VALUE_TYPE.any); + outputs[| 0].display_type = VALUE_DISPLAY._default; + } + } #endregion + + static update = function(frame = CURRENT_FRAME) { #region + var _key = getInputData(0); + + if(ds_map_exists(TUNNELS_IN, _key)) + outputs[| 0].setValue(TUNNELS_IN[? _key].getValue()); + } #endregion + + ///////////////////////////////////////////////////////////////////////////// + + static pointIn = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + return point_in_circle(_mx, _my, xx, yy, _s * 24); + } #endregion + + static preDraw = function(_x, _y, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + inputs[| 0].x = xx; + inputs[| 0].y = yy; + + outputs[| 0].x = xx; + outputs[| 0].y = yy; + } #endregion + + static drawBadge = function(_x, _y, _s) {} + static drawJunctionNames = function(_x, _y, _mx, _my, _s) {} + + static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) { #region + var xx = _x + x * _s; + var yy = _y + y * _s; + + var hover = isHovering; + var tun = findPanel("Panel_Tunnels"); + hover |= tun && tun.tunnel_hover == self; + if(!hover) return; + + var _key = getInputData(0); + if(!ds_map_exists(TUNNELS_IN, _key)) return; + + var node = TUNNELS_IN[? _key].node; + if(node.group != group) return; + + draw_set_color(COLORS.node_blend_tunnel); + + var frx = _x + node.x * _s; + var fry = _y + node.y * _s; + draw_line_dotted(frx, fry, xx, yy, 4 * _s, current_time / 10, 3); + } #endregion + + static drawJunctions = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + isHovering = point_in_circle(_mx, _my, xx, yy, _s * 24); + + var jhov = outputs[| 0].drawJunction(_s, _mx, _my); + if(!isHovering) return noone; + + hover_scale_to = 1; + return jhov? inputs[| 1] : noone; + } #endregion + + static drawNode = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + hover_alpha = 0.5; + if(active_draw_index > -1) { + hover_alpha = 1; + hover_scale_to = 1; + active_draw_index = -1; + } + + shader_set(sh_node_arc); + shader_set_color("color", outputs[| 0].color_display, hover_alpha); + shader_set_f("angle", degtorad(-90)); + + var _r = _s * 20; + shader_set_f("amount", 0.4, 0.5); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 30; + shader_set_f("amount", 0.45, 0.525); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 40; + shader_set_f("amount", 0.475, 0.55); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + shader_reset(); + + if(hover_scale > 0) { + var _r = hover_scale * _s * 16; + shader_set(sh_node_circle); + shader_set_color("color", COLORS._main_accent, hover_alpha); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + shader_reset(); + } + + hover_scale = lerp_float(hover_scale, hover_scale_to, 3); + hover_scale_to = 0; + + draw_set_text(f_sdf, fa_center, fa_bottom, COLORS._main_text); + draw_text_transformed(xx, yy - 12, string(getInputData(0)), _s * 0.4, _s * 0.4, 0); + + return drawJunctions(_x, _y, _mx, _my, _s); + } #endregion + + static onClone = function() { onValueUpdate(0); } + + static postConnect = function() { onValueUpdate(0); } +} \ No newline at end of file diff --git a/#backups/shaders/sh_node_arc/sh_node_arc.fsh.backup0 b/#backups/shaders/sh_node_arc/sh_node_arc.fsh.backup0 new file mode 100644 index 000000000..75696c785 --- /dev/null +++ b/#backups/shaders/sh_node_arc/sh_node_arc.fsh.backup0 @@ -0,0 +1,29 @@ +// 2024-04-22 14:26:46 +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec4 color; +uniform float angle; +uniform vec2 amount; + +float sdArc( in vec2 p, in float tb, in float ra, float rb ) { + vec2 sc = vec2(sin(tb), cos(tb)); + p.x = abs(p.x); + + return ((sc.y*p.x>sc.x*p.y) ? length(p-sc*ra) : + abs(length(p)-ra)) - rb; +} + +void main() { + vec2 p = v_vTexcoord - .5; + p *= mat2(cos(angle), -sin(angle), sin(angle), cos(angle)) * 1.5; + + float dist = 1. - sdArc(p, .6, .5, 0.) * 2. - 0.4; + float a; + vec4 c = vec4(0.); + + a = smoothstep(amount.x, amount.y, dist); + c = mix(c, color, a); + + gl_FragColor = c; +} diff --git a/#backups/shaders/sh_node_arc/sh_node_arc.fsh.backup1 b/#backups/shaders/sh_node_arc/sh_node_arc.fsh.backup1 new file mode 100644 index 000000000..411313e20 --- /dev/null +++ b/#backups/shaders/sh_node_arc/sh_node_arc.fsh.backup1 @@ -0,0 +1,29 @@ +// 2024-04-22 14:24:28 +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec4 color; +uniform float angle; +uniform float amount; + +float sdArc( in vec2 p, in float tb, in float ra, float rb ) { + vec2 sc = vec2(sin(tb), cos(tb)); + p.x = abs(p.x); + + return ((sc.y*p.x>sc.x*p.y) ? length(p-sc*ra) : + abs(length(p)-ra)) - rb; +} + +void main() { + vec2 p = v_vTexcoord - .5; + p *= mat2(cos(angle), -sin(angle), sin(angle), cos(angle)) * 1.5; + + float dist = 1. - sdArc(p, .6, .5, 0.) * 2. - 0.4; + float a; + vec4 c = vec4(0.); + + a = smoothstep(amount, amount + 0.1, dist); + c = mix(c, color, a); + + gl_FragColor = c; +} diff --git a/#backups/shaders/sh_node_circle/sh_node_circle.fsh.backup0 b/#backups/shaders/sh_node_circle/sh_node_circle.fsh.backup0 new file mode 100644 index 000000000..d82203d20 --- /dev/null +++ b/#backups/shaders/sh_node_circle/sh_node_circle.fsh.backup0 @@ -0,0 +1,17 @@ +// 2024-04-22 14:55:58 +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec4 color; + +void main() { + float dist = abs(length(v_vTexcoord - .5) * 2. - 0.9); + + float a; + vec4 c = vec4(0.); + + a = smoothstep(.1, .05, dist); + c = mix(c, color, a); + + gl_FragColor = c; +} diff --git a/#backups/shaders/sh_node_circle/sh_node_circle.fsh.backup1 b/#backups/shaders/sh_node_circle/sh_node_circle.fsh.backup1 new file mode 100644 index 000000000..de52c2891 --- /dev/null +++ b/#backups/shaders/sh_node_circle/sh_node_circle.fsh.backup1 @@ -0,0 +1,17 @@ +// 2024-04-22 14:49:52 +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec4 color; + +void main() { + float dist = abs(length(v_vTexcoord - .5) * 2. - 0.9); + + float a; + vec4 c = vec4(0.); + + a = smoothstep(.1, .05, dist); + c = mix(c, color, a); + + gl_FragColor = c; +} diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index af57c45e9..beb0723a0 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -1370,10 +1370,11 @@ {"name":"sh_mk_tile55_edge_l","order":6,"path":"shaders/sh_mk_tile55_edge_l/sh_mk_tile55_edge_l.yy",}, {"name":"sh_mk_tile55_edge_r","order":7,"path":"shaders/sh_mk_tile55_edge_r/sh_mk_tile55_edge_r.yy",}, {"name":"sh_mk_tile55_edge_t","order":4,"path":"shaders/sh_mk_tile55_edge_t/sh_mk_tile55_edge_t.yy",}, + {"name":"sh_node_circle","order":4,"path":"shaders/sh_node_circle/sh_node_circle.yy",}, + {"name":"sh_node_arc","order":5,"path":"shaders/sh_node_arc/sh_node_arc.yy",}, {"name":"sh_node_widget_rotator","order":1,"path":"shaders/sh_node_widget_rotator/sh_node_widget_rotator.yy",}, {"name":"sh_node_widget_scalar_cross","order":2,"path":"shaders/sh_node_widget_scalar_cross/sh_node_widget_scalar_cross.yy",}, {"name":"sh_node_widget_scalar_line","order":3,"path":"shaders/sh_node_widget_scalar_line/sh_node_widget_scalar_line.yy",}, - {"name":"sh_node_circle","order":4,"path":"shaders/sh_node_circle/sh_node_circle.yy",}, {"name":"sh_noise_bubble","order":2,"path":"shaders/sh_noise_bubble/sh_noise_bubble.yy",}, {"name":"sh_noise_fbm","order":3,"path":"shaders/sh_noise_fbm/sh_noise_fbm.yy",}, {"name":"sh_noise_flow","order":4,"path":"shaders/sh_noise_flow/sh_noise_flow.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index d1483fadf..76f94e30a 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -1897,11 +1897,12 @@ {"id":{"name":"sh_mk_tile55_edge_r","path":"shaders/sh_mk_tile55_edge_r/sh_mk_tile55_edge_r.yy",},}, {"id":{"name":"sh_mk_tile55_edge_t","path":"shaders/sh_mk_tile55_edge_t/sh_mk_tile55_edge_t.yy",},}, {"id":{"name":"sh_morph_surface","path":"shaders/sh_morph_surface/sh_morph_surface.yy",},}, + {"id":{"name":"sh_node_circle","path":"shaders/sh_node_circle/sh_node_circle.yy",},}, + {"id":{"name":"sh_node_arc","path":"shaders/sh_node_arc/sh_node_arc.yy",},}, {"id":{"name":"sh_node_widget_rotator","path":"shaders/sh_node_widget_rotator/sh_node_widget_rotator.yy",},}, {"id":{"name":"sh_node_widget_scalar_cross","path":"shaders/sh_node_widget_scalar_cross/sh_node_widget_scalar_cross.yy",},}, {"id":{"name":"sh_node_widget_scalar_line","path":"shaders/sh_node_widget_scalar_line/sh_node_widget_scalar_line.yy",},}, {"id":{"name":"sh_node_widget_scalar","path":"shaders/sh_node_widget_scalar/sh_node_widget_scalar.yy",},}, - {"id":{"name":"sh_node_circle","path":"shaders/sh_node_circle/sh_node_circle.yy",},}, {"id":{"name":"sh_noise_bubble","path":"shaders/sh_noise_bubble/sh_noise_bubble.yy",},}, {"id":{"name":"sh_noise_fbm","path":"shaders/sh_noise_fbm/sh_noise_fbm.yy",},}, {"id":{"name":"sh_noise_flow","path":"shaders/sh_noise_flow/sh_noise_flow.yy",},}, diff --git a/datafiles/data/Theme.zip b/datafiles/data/Theme.zip index 68470bb5e7f2ad50dbdb5181ba57469ce0c63862..349545241869994a0ff1795a64098561b2b4e87b 100644 GIT binary patch delta 9557 zcmZ9R2UJv76UW`RQkT9<@6thfk>bL8pwg=%f>Z@8G!X^^Aq{86gCm*vNrhv!u8 z@aNCpo&VfD-HCZ?(*D9{nU~CBmw&=~^TvN$TC8>Me6+=_lj{sCE3YS|-)u7UH%!yA zzP3>F_1z-}Y7;{9dY!F8ZJ9lsGPmdP=5ue$zZH}PlPCh5luVJ&Tl%upr zDSy`H*KL9`2PfYP^qbof*x)?sS-#GMU$-}!*yQg^;AwBGJ9NorjAOUnhOqc4?<|^Yy*1q$a-uabW17X;$1fN9 zu1qrt(h%7w$1Zxs-I{-)Qp)hrj;p72+}0Wm*%&(h)how2&sF>v+A{p~a{tIN+nxM* zu^(>vj{D0YQf`iG^`U=uE;u%<;{KJjv7OO>EUp*W(I(xW!=&%ksxGzVg*@APPNcZ* zb^MXP54J9@EIaX}VyX1en}L}JwH~jpyZGL_ATh>5``C_UA|JUo*JKvmpT0SuUGe0e zAoJ8kf9?;cXv_}o-u89HnG;gGhRoQ!<4JB+_`^-_v^!sF{AO{9zPdPJ?EZRgY?NPk znAOkecD2$y6;(Tr*Y%yDa)LG0DszhZqO{QIb|Ig7t@6`4G&V&R zW-nj%$YNK9^;xy*VqMXMv2x=kUAX=vd+Y7rtE1k8^8UP6ud%(I%KsKSwNxt5LGi{x z``m!1(dBX1)|;pAUh!axU&6c^y+TFxh!et+FPWA8&Q`4zt%*mHuO<1lFA9=vo)&JZ zuDElv_PW1Y&#d`cxwTdbfJas)=1>@Q|nTpe1|fP@P?I3H1lh_+8uRbN_5`*S$G**CsXc zRnkI0FfO#9X5_UFH&wSqcTOxf6IGiXn`GNe4e;3;JNCh^WZ}Hf%v+ezC4R<@WJ= zyI=p=mN(i_Hs#33w9sXF%evBQh9@0Q{aNPFr?Tw1*XPSF7Iuv4l0Oi#d)Jtg8{a1n z`?LJFr%%HdW~jWJ{fgRHc7c;~v~X0Od4+fIjsShrrJrV|tsJY|@YmhtHB|nA2jxY@ zOOy>ut}U+FT^gUbwr-+*@keQ`^LqYWB5&)yF``FXjB>r+=SKIKcWzleYo+V{F4dYB z&n{o=UA(Ai`H|>y7;IqgxJ=-~D1H{%VA zQpQ%@bGg%U{@qS{8Rw!Vj(_vfqB$edZSER8<)lSr-&Zr!{a*cg)y_Mk zb%={!drN5buHtXHo}Oi;mV2vb%d57zMwM9njQeWq@PyLG=WtKV0aL_0; zF4|BuDKu#`woDdH4ox17ho*q0h^B<5jHZI7il&CfM-!l_qiLXNqG_RNqv@dOqUoXO zqZyzXq8XtXqYXndK{G`&Lo-LSK(j=%LbFD*K^u-{i)M#rkLG~ph~|XmjOK#oisptk z0?i%G1I-i73vDEt5X~FS=XXaLTCQF3Ki4|=|3gPnBW2cw%9udYKeRR1U>OG-mT|OU z=p)*iqXhPk=n$^=3Mp`WL~B9SBie;KWSbmO*4yM1;4S)5Va?F^nC64SW7?T&6N{q9 z^a#!h*#DT0rWW639fpC`6WWPVZD)l6(CvzRD1U?!R^ z&9{e^=UBYMp05cjpJFlX#u6RKa6|H(B|;BE?4Hry)Ko84=tAi;+KX}&5|JR}D?!&Y z^mSzjaeGd?Q>uPM2>tl-(3-|5K=*TcC~U*#IkwRJoDQRg__HpC;NZ_!0IwI=LUbTY z^kMM}+L1~OBH}tLVuOh=eTgD9gou1rl!UTE7mPY-894Wn_N2TbBxEGz7by`kP|}Gb zn;12Slt=M-@T?R2E*>kvQm}U{Uzr_}0vHWtq+oh9Us(YkYT`fX(SuyeU(p_vbIc&} z;uZEHj2$3V6Zuk*9m`jQh}YQ3^|*hj3hZEkZ9Evi!O_2YO*?X&z~~JfOSLDn%pBBG z_-b(A4SH!#hO1rZ_4N&|vt>FFfnC_m%Bif-gW4|If%7Z0b@%!RLtha!~o4R)K;NzRI9*=9LhK+7irz zPu=LC-h)}P3mkgr2u>6%=%FW2Axnu<(Nc68XhrP*#NdpAs~_nIDs2rZ@cx7$Y+fr7(g2@u z32G_`IbVT;dG`rdXkR5ujKSwKu7f+w_>2d@UVJ;U?BROcA(z-l4Qv7K7aVuV22w_U z!HsCWiOmWfSi_1J)kOUB1(&zFmI$}67|54(L@fD=gX-KT2=+Cs$9Ex2x3+KdVW zf5T4pY$N#gHq5{BZ#c}Q+X=b;4U=}>4kE0+W8?KZiMX^AL$Ulj`ZhMe0xn|+wtM(8 zaQ8dLuJ;!SQ3Us1^a2gZ(rMBF-vqZ#uSm$~!M zfAZk@A>#1556>FrFcBgB^hnC~7!e7_aBu_Lav+lD`f-wGO{6Tk3AZd88X+rGIu(M~$#IuB~Jj+*y=Pao`N63|P z=rfRkV<|?5`ujY=|e_s0;V`D!hMBuOUNPtE8Dk%CCd<9R>v*IM#N1OwT%LjGX=>GT;Z&j5ihc zln8Gb#)T?;M#PS1n9mpzaXwFc@t;+k@PhTyh37JiBenD;5pJ?5m{%mlGGF2CGH`MX z3~sk9MzQ`4DSIf(xKhkpiI4$zIh^G6cZBr6!_fRBhk?lHA!I`jo@@75^2-N8OyseN z=8r^le#BytJQmA+A>=e$T=|uV=C8Pc^Le;ooOn2jtZx!54cR>GSonPqX-0xaxW$PXehN=U}=29bSAxIp{x-GIY@ekF$Cv;w2dOrW~eBuoyP zlyUAiwFqf56UYNkTfhTT6&!N4&LEtx!i?lNK%)wigtwBaDicrj7!NA98irG;Q^jgc z7!S73f!4ZJaSv=WlMpo+uZGF~6&9#5DO9T!DduA7-fz`G&$mY@c0tvrn5Ra zUUFi~^dLhWm&(os-l{Vu(4x-Rag3o`or$I%jbNERq-tR3Gd+md;33e4%NjUEqmgWV zT~OD=gxDw~;;c}h0*Cc*6U^7dU6bNXaG5s-b^T{N+@|^bXN}W+h=aTq>DGHg+H`$6q*5I5{N`j2ZypaP(qYo zvJUzf2TO!YLgb+}jX>dv$R6Yr}{L(`DSKj&LICbaAtDB8eCtiHj?vhwV*{ zBBVS@pbJx35*tm(UOmjWlJP|J>EVcVClC>-kDX-15>c;@5&boeh;DtxnbM6XVzmJy z4WkVhd#XP{LcA!~BqEZNa11>L*yE;TLOcx_Hx59qAv2NMIf=06hKxHW2aJuFvDD}^ zaWh7EzEl;I=6qAN5NJu{FcMURh4Wd@~IBo^m3tn&Ci(ttP_I9P7BOAtGswKpjfW zv6K3>gj_Lagw$W_BtjM(EU?|O3PM&@VXRhIV5n1}#R50quj?fRJfJPHqeUAeL<-hf zV!Tdm97LY8q;C@;R@Jy2{j9Km=Ngs>Kt(}I4t}y?+_~ppYQj}nElcRKVm!FBUWwJd zSDHLXv}UZiYrDnhVz;IOoM6$tw_+r)VO+QtJz|w-!+3FgVV@0?!ubnShchYM=C7Kt z*_Ig&eP1=@VE1sWO!bNp-K!}NinfSO^@&lsEyg~O1CI8L6`W&*0+)#4b{L*ZLy5?e z){+HfDJ^-Zv12DCEx~GV%N9>2b$dLw8o|MynNFRMWlQa#PgYA6X4qqCCzeum@+>xl zHhC=pcsgJ+ojeIqh6)GV6C)J~xx&|yf)@@L(L|*|#Lp2|-%NE7sdL0-t>sII7JH+s zK)XO|@Wp={7$+u{>d}z+NkOv{w)I()kc+xFKO<+n<~Bj3GZRNy=(7cUXm-Y|V%&&` zSfY!+iQF&>`Yss6@FHDEDbgJVnXDSVWI$=ceivp0w{qDJg~ygF0v*bxi_!7vCOoJffdgNiAx6y^h^EfRw)$Du5m{pH?ap{}YjVWu za*l~2>~_bBUuKArRW2gR1JU90D+A`RHB1GjwE52Oqey>WF;c`!QMwgSSd3Qc4| z+7qu!7jX1s;t%$P&$`a?%2n&4u$!6(H6Ft4EDw4Dh7P9m&K{*OXZoQ+P8HFOg~$B1Q@E=;~7=Vxtfn41_iz zUQ46Z35)W^)0?ls3PafLjov+4M11zfQyBBa2T$R-W`s4Enet%24<@(Bk|kPD_ufJV z_F0-L!3HZFkUEX?N$#+K+(5kA$J2}t_roKxI!xn%VEb%9nSnOL_;J-b#VWAVLJ#T~ zjPaY-Vr2HlLICl`*r=K>&axXEeVH_F;d^m$lP|XRmKy9EKmqbb;XSIv9iVVz6yr<%B1449X!I8<5V2%5-lKDr ziRc`SkNRRYBF2qDaaEm&<71f7l%^IDVOrP;?T?}A(P4=d*y&md$csEi-%>E>m+}OC z;?U=h-3X0{m=b_n|Nbym3dS5Sr&wI21gbf!{s1`=1d0VU_3tpJV7Oxv4)CZd_w%>OT@=u z#+l0twuA*Ci~)EBTZ;E%GD>_(ib9wKs*ndIA&dp=tz z=tzhxoDandXSV?%reT=$JB)3>*uY*J^22Z;znO`Zxw(x7JP*T#TxKIicHxXG*LS#B ziNdk6><2qi`ARs>Mj2Ehn8{SLC8$Q=^YFE$y&7zZz#&ABUl1e$KXvbA37NMgt}tNO~B^2hy5St z!P78T{8r+Gb1$2K2gI<*!5%S@uBuSpiI4j?Y+-QJK%pj>$KriGIvTE~;EQ=iw1*lS zW_&TnNQf-ljm5Y$Oc+EW;ymPlmw@MRP#lI?KkmO}0;r3_MyU7!T$Sh{58ZKi>fK2A z7YJZm3f4}Uh?jb8(!W$5Hc!NJwJ7BW*puQR3;h$ZwXR7&Xm~uX=lawi;8H3(ps{R% z#N&Wg;defq&_K^r0$$Rx(^y~(@d@}M(ZKI|tO&^TP=b>Q*mh?&AjF6nk7=g@EA}&p4XzI!eiI4^FRNPGoKMf+) zshAW2kP)i71>!AP*)38G5W|rtc(Pj_js_6)h))O#hI;KOw z)&WtK$?#zQR_vsKbvd@}2mL-Bul!nY%)m!q;;tY3*9?q?Q^UW&m)h~mzyHRI<`FIhSncx|{Ms~!&6&(NYR-O$%)(VR$YLBh2@sKmzbXn3vdkRXvaofd--xiz zM)Bo$A{-8T@L*Loj1v)I$}XBH@&RY7P^^Im7;?39tXa^bqBs=OJz2%)+O} zeQlutZn0#Zu7oIpLZlR@5u*!u{j;qENlN>V-&q6#hr=yO3# zW*6Wu#hI|b0KaA4XP~hF&j=M?tY=?{UL~UlnOBJM^c+LPl|pEa+F_6Olya9=9G<072P$zXz2LUHEyvvD;Zhe(JXds|vlyf8vWgbCH)JxhYe z5#l)qpGcO`L{!YdAB%a=HV4O?8pF;^1H9+rM}rHo5+M(p=Hi*TVUmQ%!K=B9Gp7lR z=HZu{+c0Au6G{ENAB>CfA@q74yXF z#nq!k{LTvFV?;zBqm^N430^94$LYbzBz>GXcpj&fKqSJcWi=6US%h8B1WpOg#^5wz z^Ga|pV;oEHv7gyWSY0b#n;r|W=J4}`B%h}h;id>X)4oU#-nSaiya1o_rI(>)0sc&A zx=i!PPKj8EE1_~7a_8Z5Nq8M|e$zs1Fysayj~C+p+H;GDySK2`hk4k#*PZ`N#r+O( yC|!i_jy|!lxl3z9{~~ORen^V59^!v|#w|wDD<;+*v;clv%&16z?V#~v_WuA8+zki- delta 9740 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 diff --git a/scripts/draw_line_dashed/draw_line_dashed.gml b/scripts/draw_line_dashed/draw_line_dashed.gml index 3763ca430..b020e23b7 100644 --- a/scripts/draw_line_dashed/draw_line_dashed.gml +++ b/scripts/draw_line_dashed/draw_line_dashed.gml @@ -46,4 +46,25 @@ function draw_line_dashed_color(x0, y0, x1, y1, th, c0, c1, dash_distance = 8) { ox = nx; oy = ny; } +} + +function draw_line_dotted(x0, y0, x1, y1, radius, shift, distanceMulp = 1) { + var dis = point_distance(x0, y0, x1, y1); + var dir = point_direction(x0, y0, x1, y1); + var dtd = radius * distanceMulp * 2; + var part = floor(dis / dtd); + + var dx = lengthdir_x(1, dir); + var dy = lengthdir_y(1, dir); + + var nd, nx, ny; + var rat = dtd / dis; + + for( var i = 0; i < part; i++ ) { + nd = dis * frac(i * rat + shift / dis); + nx = x0 + dx * nd; + ny = y0 + dy * nd; + + draw_circle(nx, ny, radius, false); + } } \ No newline at end of file diff --git a/scripts/node_pin/node_pin.gml b/scripts/node_pin/node_pin.gml index e2093a8e5..695ec9da4 100644 --- a/scripts/node_pin/node_pin.gml +++ b/scripts/node_pin/node_pin.gml @@ -1,7 +1,6 @@ function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { name = "Pin"; - w = 32; - h = 32; + setDimension(32, 32); auto_height = false; junction_shift_y = 16; @@ -72,7 +71,6 @@ function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { } #endregion static drawNode = function(_x, _y, _mx, _my, _s) { #region - // if(group != PANEL_GRAPH.getCurrentContext()) return; var xx = x * _s + _x; var yy = y * _s + _y; @@ -85,7 +83,7 @@ function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { } if(hover_scale > 0) { - var _r = hover_scale * _s * 24; + var _r = hover_scale * _s * 16; shader_set(sh_node_circle); shader_set_color("color", COLORS._main_accent, hover_alpha); draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); @@ -96,8 +94,8 @@ function Node_Pin(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { hover_scale_to = 0; if(renamed && display_name != "" && display_name != "Pin") { - draw_set_text(f_p0, fa_center, fa_bottom, COLORS._main_text); - draw_text_transformed(xx, yy - 12, display_name, _s, _s, 0); + draw_set_text(f_sdf, fa_center, fa_bottom, COLORS._main_text); + draw_text_transformed(xx, yy - 12, display_name, _s * 0.4, _s * 0.4, 0); } return drawJunctions(_x, _y, _mx, _my, _s); diff --git a/scripts/node_tunnel_in/node_tunnel_in.gml b/scripts/node_tunnel_in/node_tunnel_in.gml index 552576815..d12668726 100644 --- a/scripts/node_tunnel_in/node_tunnel_in.gml +++ b/scripts/node_tunnel_in/node_tunnel_in.gml @@ -4,7 +4,12 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct is_group_io = true; preview_draw = false; - setDimension(96, 80); + setDimension(32, 32); + + isHovering = false; + hover_scale = 0; + hover_scale_to = 0; + hover_alpha = 0; inputs[| 0] = nodeValue("Name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ) .setDisplay(VALUE_DISPLAY.text_tunnel) @@ -116,11 +121,34 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct return nodes; } #endregion + ///////////////////////////////////////////////////////////////////////////// + + static pointIn = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + return point_in_circle(_mx, _my, xx, yy, _s * 24); + } #endregion + + static preDraw = function(_x, _y, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + inputs[| 0].x = xx; + inputs[| 0].y = yy; + + inputs[| 1].x = xx; + inputs[| 1].y = yy; + } #endregion + + static drawBadge = function(_x, _y, _s) {} + static drawJunctionNames = function(_x, _y, _mx, _my, _s) {} + static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) { #region var xx = _x + x * _s; var yy = _y + y * _s; - var hover = PANEL_GRAPH.pHOVER && point_in_rectangle(_mx, _my, xx, yy, xx + w * _s, yy + h * _s); + var hover = isHovering; var tun = findPanel("Panel_Tunnels"); hover |= tun && tun.tunnel_hover == self; if(!hover) return; @@ -128,32 +156,80 @@ function Node_Tunnel_In(_x, _y, _group = noone) : Node(_x, _y, _group) construct var _key = getInputData(0); var amo = ds_map_size(TUNNELS_OUT); var k = ds_map_find_first(TUNNELS_OUT); + + draw_set_color(COLORS.node_blend_tunnel); + repeat(amo) { if(TUNNELS_OUT[? k] == _key && ds_map_exists(PROJECT.nodeMap, k)) { var node = PROJECT.nodeMap[? k]; if(node.group != group) continue; - draw_set_color(COLORS.node_blend_tunnel); - draw_set_alpha(0.35); - var frx = xx + w * _s / 2; - var fry = yy + h * _s / 2; - var tox = _x + (node.x + node.w / 2) * _s; - var toy = _y + (node.y + node.h / 2) * _s; - draw_line_dashed(frx, fry, tox, toy, 8 * _s, 16 * _s, current_time / 10); - draw_set_alpha(1); + var tox = _x + node.x * _s; + var toy = _y + node.y * _s; + draw_line_dotted(xx, yy, tox, toy, 4 * _s, current_time / 10, 2); } k = ds_map_find_next(TUNNELS_OUT, k); } + } #endregion - static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region - draw_set_text(f_sdf, fa_center, fa_center, COLORS._main_text); - var str = string(getInputData(0)); + static drawJunctions = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + isHovering = point_in_circle(_mx, _my, xx, yy, _s * 24); - var bbox = drawGetBbox(xx, yy, _s); - var ss = string_scale(str, bbox.w, bbox.h); - draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0); + var jhov = inputs[| 1].drawJunction(_s, _mx, _my); + if(!isHovering) return noone; + + hover_scale_to = 1; + return jhov? inputs[| 1] : noone; + } #endregion + + static drawNode = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + hover_alpha = 0.5; + if(active_draw_index > -1) { + hover_alpha = 1; + hover_scale_to = 1; + active_draw_index = -1; + } + + shader_set(sh_node_arc); + shader_set_color("color", inputs[| 1].color_display, hover_alpha); + shader_set_f("angle", degtorad(90)); + + var _r = _s * 20; + shader_set_f("amount", 0.4, 0.5); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 30; + shader_set_f("amount", 0.45, 0.525); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 40; + shader_set_f("amount", 0.475, 0.55); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + shader_reset(); + + if(hover_scale > 0) { + var _r = hover_scale * _s * 16; + shader_set(sh_node_circle); + shader_set_color("color", COLORS._main_accent, hover_alpha); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + shader_reset(); + } + + hover_scale = lerp_float(hover_scale, hover_scale_to, 3); + hover_scale_to = 0; + + draw_set_text(f_sdf, fa_center, fa_bottom, COLORS._main_text); + draw_text_transformed(xx, yy - 12, string(getInputData(0)), _s * 0.4, _s * 0.4, 0); + + return drawJunctions(_x, _y, _mx, _my, _s); } #endregion static onClone = function() { onValueUpdate(0); } diff --git a/scripts/node_tunnel_out/node_tunnel_out.gml b/scripts/node_tunnel_out/node_tunnel_out.gml index 9be7265e7..6ab62e3d3 100644 --- a/scripts/node_tunnel_out/node_tunnel_out.gml +++ b/scripts/node_tunnel_out/node_tunnel_out.gml @@ -4,7 +4,12 @@ function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) construc is_group_io = true; preview_draw = false; - setDimension(96, 80); + setDimension(32, 32); + + isHovering = false; + hover_scale = 0; + hover_scale_to = 0; + hover_alpha = 0; inputs[| 0] = nodeValue("Name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ) .setDisplay(VALUE_DISPLAY.text_tunnel) @@ -30,31 +35,6 @@ function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) construc return TUNNELS_IN[? _key].node.rendered; } #endregion - static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) { #region - var xx = _x + x * _s; - var yy = _y + y * _s; - - var hover = PANEL_GRAPH.pHOVER && point_in_rectangle(_mx, _my, xx, yy, xx + w * _s, yy + h * _s); - var tun = findPanel("Panel_Tunnels"); - hover |= tun && tun.tunnel_hover == self; - if(!hover) return; - - var _key = getInputData(0); - if(!ds_map_exists(TUNNELS_IN, _key)) return; - - var node = TUNNELS_IN[? _key].node; - if(node.group != group) return; - - draw_set_color(COLORS.node_blend_tunnel); - draw_set_alpha(0.35); - var frx = _x + (node.x + node.w / 2) * _s; - var fry = _y + (node.y + node.h / 2) * _s; - var tox = xx + w * _s / 2; - var toy = yy + h * _s / 2; - draw_line_dashed(frx, fry, tox, toy, 8 * _s, 16 * _s, current_time / 10); - draw_set_alpha(1); - } #endregion - static onValueUpdate = function(index = -1) { #region var _key = getInputData(0); @@ -81,13 +61,107 @@ function Node_Tunnel_Out(_x, _y, _group = noone) : Node(_x, _y, _group) construc outputs[| 0].setValue(TUNNELS_IN[? _key].getValue()); } #endregion - static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region - draw_set_text(f_sdf, fa_center, fa_center, COLORS._main_text); - var str = string(getInputData(0)); + ///////////////////////////////////////////////////////////////////////////// + + static pointIn = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; - var bbox = drawGetBbox(xx, yy, _s); - var ss = string_scale(str, bbox.w, bbox.h); - draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0); + return point_in_circle(_mx, _my, xx, yy, _s * 24); + } #endregion + + static preDraw = function(_x, _y, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + inputs[| 0].x = xx; + inputs[| 0].y = yy; + + outputs[| 0].x = xx; + outputs[| 0].y = yy; + } #endregion + + static drawBadge = function(_x, _y, _s) {} + static drawJunctionNames = function(_x, _y, _mx, _my, _s) {} + + static onDrawNodeBehind = function(_x, _y, _mx, _my, _s) { #region + var xx = _x + x * _s; + var yy = _y + y * _s; + + var hover = isHovering; + var tun = findPanel("Panel_Tunnels"); + hover |= tun && tun.tunnel_hover == self; + if(!hover) return; + + var _key = getInputData(0); + if(!ds_map_exists(TUNNELS_IN, _key)) return; + + var node = TUNNELS_IN[? _key].node; + if(node.group != group) return; + + draw_set_color(COLORS.node_blend_tunnel); + + var frx = _x + node.x * _s; + var fry = _y + node.y * _s; + draw_line_dotted(frx, fry, xx, yy, 4 * _s, current_time / 10, 2); + } #endregion + + static drawJunctions = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + isHovering = point_in_circle(_mx, _my, xx, yy, _s * 24); + + var jhov = outputs[| 0].drawJunction(_s, _mx, _my); + if(!isHovering) return noone; + + hover_scale_to = 1; + return jhov? inputs[| 1] : noone; + } #endregion + + static drawNode = function(_x, _y, _mx, _my, _s) { #region + var xx = x * _s + _x; + var yy = y * _s + _y; + + hover_alpha = 0.5; + if(active_draw_index > -1) { + hover_alpha = 1; + hover_scale_to = 1; + active_draw_index = -1; + } + + shader_set(sh_node_arc); + shader_set_color("color", outputs[| 0].color_display, hover_alpha); + shader_set_f("angle", degtorad(-90)); + + var _r = _s * 20; + shader_set_f("amount", 0.4, 0.5); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 30; + shader_set_f("amount", 0.45, 0.525); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + var _r = _s * 40; + shader_set_f("amount", 0.475, 0.55); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + + shader_reset(); + + if(hover_scale > 0) { + var _r = hover_scale * _s * 16; + shader_set(sh_node_circle); + shader_set_color("color", COLORS._main_accent, hover_alpha); + draw_sprite_stretched(s_fx_pixel, 0, xx - _r, yy - _r, _r * 2, _r * 2); + shader_reset(); + } + + hover_scale = lerp_float(hover_scale, hover_scale_to, 3); + hover_scale_to = 0; + + draw_set_text(f_sdf, fa_center, fa_bottom, COLORS._main_text); + draw_text_transformed(xx, yy - 12, string(getInputData(0)), _s * 0.4, _s * 0.4, 0); + + return drawJunctions(_x, _y, _mx, _my, _s); } #endregion static onClone = function() { onValueUpdate(0); } diff --git a/shaders/sh_node_arc/sh_node_arc.fsh b/shaders/sh_node_arc/sh_node_arc.fsh new file mode 100644 index 000000000..b06589849 --- /dev/null +++ b/shaders/sh_node_arc/sh_node_arc.fsh @@ -0,0 +1,28 @@ +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec4 color; +uniform float angle; +uniform vec2 amount; + +float sdArc( in vec2 p, in float tb, in float ra, float rb ) { + vec2 sc = vec2(sin(tb), cos(tb)); + p.x = abs(p.x); + + return ((sc.y*p.x>sc.x*p.y) ? length(p-sc*ra) : + abs(length(p)-ra)) - rb; +} + +void main() { + vec2 p = v_vTexcoord - .5; + p *= mat2(cos(angle), -sin(angle), sin(angle), cos(angle)) * 1.5; + + float dist = 1. - sdArc(p, .6, .5, 0.) * 2. - 0.4; + float a; + vec4 c = vec4(0.); + + a = smoothstep(amount.x, amount.y, dist); + c = mix(c, color, a); + + gl_FragColor = c; +} diff --git a/shaders/sh_node_arc/sh_node_arc.vsh b/shaders/sh_node_arc/sh_node_arc.vsh new file mode 100644 index 000000000..3900c20f4 --- /dev/null +++ b/shaders/sh_node_arc/sh_node_arc.vsh @@ -0,0 +1,19 @@ +// +// Simple passthrough vertex shader +// +attribute vec3 in_Position; // (x,y,z) +//attribute vec3 in_Normal; // (x,y,z) unused in this shader. +attribute vec4 in_Colour; // (r,g,b,a) +attribute vec2 in_TextureCoord; // (u,v) + +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +void main() +{ + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + v_vColour = in_Colour; + v_vTexcoord = in_TextureCoord; +} diff --git a/shaders/sh_node_arc/sh_node_arc.yy b/shaders/sh_node_arc/sh_node_arc.yy new file mode 100644 index 000000000..732cd322b --- /dev/null +++ b/shaders/sh_node_arc/sh_node_arc.yy @@ -0,0 +1,12 @@ +{ + "$GMShader":"", + "%Name":"sh_node_arc", + "name":"sh_node_arc", + "parent":{ + "name":"node", + "path":"folders/widgets/node.yy", + }, + "resourceType":"GMShader", + "resourceVersion":"2.0", + "type":1, +} \ No newline at end of file diff --git a/shaders/sh_node_circle/sh_node_circle.fsh b/shaders/sh_node_circle/sh_node_circle.fsh index 337e9aedf..daf7b0ef7 100644 --- a/shaders/sh_node_circle/sh_node_circle.fsh +++ b/shaders/sh_node_circle/sh_node_circle.fsh @@ -9,7 +9,7 @@ void main() { float a; vec4 c = vec4(0.); - a = smoothstep(.075, .025, dist); + a = smoothstep(.1, .05, dist); c = mix(c, color, a); gl_FragColor = c;