[Number] New slider and rotator

This commit is contained in:
MakhamDev 2023-10-16 12:25:22 +07:00
parent 521f82cd0d
commit d07cb1ce70
19 changed files with 2135 additions and 1886 deletions

View file

@ -217,6 +217,7 @@
{"name":"biterator","order":2,"path":"folders/VCT/biterator.yy",}, {"name":"biterator","order":2,"path":"folders/VCT/biterator.yy",},
{"name":"widget","order":3,"path":"folders/VCT/widget.yy",}, {"name":"widget","order":3,"path":"folders/VCT/widget.yy",},
{"name":"widgets","order":5,"path":"folders/widgets.yy",}, {"name":"widgets","order":5,"path":"folders/widgets.yy",},
{"name":"UI","order":21,"path":"folders/shader/UI.yy",},
], ],
"ResourceOrderSettings": [ "ResourceOrderSettings": [
{"name":"s_node_corner","order":16,"path":"sprites/s_node_corner/s_node_corner.yy",}, {"name":"s_node_corner","order":16,"path":"sprites/s_node_corner/s_node_corner.yy",},
@ -899,6 +900,7 @@
{"name":"s_node_erode","order":23,"path":"sprites/s_node_erode/s_node_erode.yy",}, {"name":"s_node_erode","order":23,"path":"sprites/s_node_erode/s_node_erode.yy",},
{"name":"node_particle","order":14,"path":"scripts/node_particle/node_particle.yy",}, {"name":"node_particle","order":14,"path":"scripts/node_particle/node_particle.yy",},
{"name":"node_pb_box_contract","order":8,"path":"scripts/node_pb_box_contract/node_pb_box_contract.yy",}, {"name":"node_pb_box_contract","order":8,"path":"scripts/node_pb_box_contract/node_pb_box_contract.yy",},
{"name":"ac_ripple","order":1,"path":"animcurves/ac_ripple/ac_ripple.yy",},
{"name":"histogram_drawer","order":2,"path":"scripts/histogram_drawer/histogram_drawer.yy",}, {"name":"histogram_drawer","order":2,"path":"scripts/histogram_drawer/histogram_drawer.yy",},
{"name":"sh_color_picker_side_value","order":3,"path":"shaders/sh_color_picker_side_value/sh_color_picker_side_value.yy",}, {"name":"sh_color_picker_side_value","order":3,"path":"shaders/sh_color_picker_side_value/sh_color_picker_side_value.yy",},
{"name":"node_array_range","order":9,"path":"scripts/node_array_range/node_array_range.yy",}, {"name":"node_array_range","order":9,"path":"scripts/node_array_range/node_array_range.yy",},
@ -972,6 +974,7 @@
{"name":"display_refresh","order":17,"path":"scripts/display_refresh/display_refresh.yy",}, {"name":"display_refresh","order":17,"path":"scripts/display_refresh/display_refresh.yy",},
{"name":"panel_workspace","order":6,"path":"scripts/panel_workspace/panel_workspace.yy",}, {"name":"panel_workspace","order":6,"path":"scripts/panel_workspace/panel_workspace.yy",},
{"name":"fd_rectangle_assure_surfaces_exist","order":2,"path":"scripts/fd_rectangle_assure_surfaces_exist/fd_rectangle_assure_surfaces_exist.yy",}, {"name":"fd_rectangle_assure_surfaces_exist","order":2,"path":"scripts/fd_rectangle_assure_surfaces_exist/fd_rectangle_assure_surfaces_exist.yy",},
{"name":"sh_ui_slider","order":1,"path":"shaders/sh_ui_slider/sh_ui_slider.yy",},
{"name":"angle_functions","order":17,"path":"scripts/angle_functions/angle_functions.yy",}, {"name":"angle_functions","order":17,"path":"scripts/angle_functions/angle_functions.yy",},
{"name":"fd_rectangle_material_surface_was_created","order":13,"path":"scripts/fd_rectangle_material_surface_was_created/fd_rectangle_material_surface_was_created.yy",}, {"name":"fd_rectangle_material_surface_was_created","order":13,"path":"scripts/fd_rectangle_material_surface_was_created/fd_rectangle_material_surface_was_created.yy",},
{"name":"s_node_fluidSim_apply_velocity","order":2,"path":"sprites/s_node_fluidSim_apply_velocity/s_node_fluidSim_apply_velocity.yy",}, {"name":"s_node_fluidSim_apply_velocity","order":2,"path":"sprites/s_node_fluidSim_apply_velocity/s_node_fluidSim_apply_velocity.yy",},

View file

@ -251,6 +251,7 @@
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"biterator","folderPath":"folders/VCT/biterator.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"biterator","folderPath":"folders/VCT/biterator.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"widget","folderPath":"folders/VCT/widget.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widget","folderPath":"folders/VCT/widget.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"widgets","folderPath":"folders/widgets.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widgets","folderPath":"folders/widgets.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"UI","folderPath":"folders/shader/UI.yy",},
], ],
"IncludedFiles": [ "IncludedFiles": [
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"ApolloHelp.html","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":-1,"filePath":"datafiles",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"ApolloHelp.html","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":-1,"filePath":"datafiles",},
@ -1542,6 +1543,7 @@
{"id":{"name":"s_node_erode","path":"sprites/s_node_erode/s_node_erode.yy",},}, {"id":{"name":"s_node_erode","path":"sprites/s_node_erode/s_node_erode.yy",},},
{"id":{"name":"node_particle","path":"scripts/node_particle/node_particle.yy",},}, {"id":{"name":"node_particle","path":"scripts/node_particle/node_particle.yy",},},
{"id":{"name":"node_pb_box_contract","path":"scripts/node_pb_box_contract/node_pb_box_contract.yy",},}, {"id":{"name":"node_pb_box_contract","path":"scripts/node_pb_box_contract/node_pb_box_contract.yy",},},
{"id":{"name":"ac_ripple","path":"animcurves/ac_ripple/ac_ripple.yy",},},
{"id":{"name":"histogram_drawer","path":"scripts/histogram_drawer/histogram_drawer.yy",},}, {"id":{"name":"histogram_drawer","path":"scripts/histogram_drawer/histogram_drawer.yy",},},
{"id":{"name":"node_3d_scene","path":"scripts/node_3d_scene/node_3d_scene.yy",},}, {"id":{"name":"node_3d_scene","path":"scripts/node_3d_scene/node_3d_scene.yy",},},
{"id":{"name":"sh_color_picker_side_value","path":"shaders/sh_color_picker_side_value/sh_color_picker_side_value.yy",},}, {"id":{"name":"sh_color_picker_side_value","path":"shaders/sh_color_picker_side_value/sh_color_picker_side_value.yy",},},
@ -1622,6 +1624,7 @@
{"id":{"name":"display_refresh","path":"scripts/display_refresh/display_refresh.yy",},}, {"id":{"name":"display_refresh","path":"scripts/display_refresh/display_refresh.yy",},},
{"id":{"name":"panel_workspace","path":"scripts/panel_workspace/panel_workspace.yy",},}, {"id":{"name":"panel_workspace","path":"scripts/panel_workspace/panel_workspace.yy",},},
{"id":{"name":"fd_rectangle_assure_surfaces_exist","path":"scripts/fd_rectangle_assure_surfaces_exist/fd_rectangle_assure_surfaces_exist.yy",},}, {"id":{"name":"fd_rectangle_assure_surfaces_exist","path":"scripts/fd_rectangle_assure_surfaces_exist/fd_rectangle_assure_surfaces_exist.yy",},},
{"id":{"name":"sh_ui_slider","path":"shaders/sh_ui_slider/sh_ui_slider.yy",},},
{"id":{"name":"angle_functions","path":"scripts/angle_functions/angle_functions.yy",},}, {"id":{"name":"angle_functions","path":"scripts/angle_functions/angle_functions.yy",},},
{"id":{"name":"fd_rectangle_material_surface_was_created","path":"scripts/fd_rectangle_material_surface_was_created/fd_rectangle_material_surface_was_created.yy",},}, {"id":{"name":"fd_rectangle_material_surface_was_created","path":"scripts/fd_rectangle_material_surface_was_created/fd_rectangle_material_surface_was_created.yy",},},
{"id":{"name":"s_node_fluidSim_apply_velocity","path":"sprites/s_node_fluidSim_apply_velocity/s_node_fluidSim_apply_velocity.yy",},}, {"id":{"name":"s_node_fluidSim_apply_velocity","path":"sprites/s_node_fluidSim_apply_velocity/s_node_fluidSim_apply_velocity.yy",},},
@ -2368,6 +2371,7 @@
{"id":{"name":"font_sprite_loader","path":"scripts/font_sprite_loader/font_sprite_loader.yy",},}, {"id":{"name":"font_sprite_loader","path":"scripts/font_sprite_loader/font_sprite_loader.yy",},},
{"id":{"name":"s_node_draw_atlas","path":"sprites/s_node_draw_atlas/s_node_draw_atlas.yy",},}, {"id":{"name":"s_node_draw_atlas","path":"sprites/s_node_draw_atlas/s_node_draw_atlas.yy",},},
{"id":{"name":"s_node_noise_aniso","path":"sprites/s_node_noise_aniso/s_node_noise_aniso.yy",},}, {"id":{"name":"s_node_noise_aniso","path":"sprites/s_node_noise_aniso/s_node_noise_aniso.yy",},},
{"id":{"name":"sh_ui_rotator","path":"shaders/sh_ui_rotator/sh_ui_rotator.yy",},},
{"id":{"name":"steam_ugc_functions","path":"scripts/steam_ugc_functions/steam_ugc_functions.yy",},}, {"id":{"name":"steam_ugc_functions","path":"scripts/steam_ugc_functions/steam_ugc_functions.yy",},},
{"id":{"name":"s_node_armature_path","path":"sprites/s_node_armature_path/s_node_armature_path.yy",},}, {"id":{"name":"s_node_armature_path","path":"sprites/s_node_armature_path/s_node_armature_path.yy",},},
{"id":{"name":"s_node_gradient_palette","path":"sprites/s_node_gradient_palette/s_node_gradient_palette.yy",},}, {"id":{"name":"s_node_gradient_palette","path":"sprites/s_node_gradient_palette/s_node_gradient_palette.yy",},},

View file

@ -0,0 +1,17 @@
{
"resourceType": "GMAnimCurve",
"resourceVersion": "1.2",
"name": "ac_ripple",
"channels": [
{"resourceType":"GMAnimCurveChannel","resourceVersion":"1.0","name":"curve1","colour":4290799884,"points":[
{"th0":-0.1,"th1":0.078927204,"tv0":0.0,"tv1":-0.013422819,"x":0.0,"y":0.0,},
{"th0":-0.11915212,"th1":0.16894446,"tv0":0.007717284,"tv1":-0.0109422505,"x":0.18199237,"y":-0.6119597,},
{"th0":-0.21494257,"th1":0.1,"tv0":0.006711364,"tv1":0.0,"x":1.0,"y":1.0,},
],"visible":true,},
],
"function": 2,
"parent": {
"name": "animation_curve",
"path": "folders/animation_curve.yy",
},
}

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 25 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
globalvar FONT_ISLOADED, FONT_CACHE; globalvar FONT_ISLOADED, FONT_CACHE;
globalvar f_h1, f_h3, f_h5, f_p0, f_p0b, f_p1, f_p2, f_p3, f_code; globalvar f_h1, f_h2, f_h3, f_h5, f_p0, f_p0b, f_p1, f_p2, f_p3, f_code;
FONT_CACHE = {}; FONT_CACHE = {};
FONT_ISLOADED = false; FONT_ISLOADED = false;
@ -45,8 +45,10 @@ function _font_path(rel) {
return defPath; return defPath;
} }
function _font_load_from_struct(str, def) { function _font_load_from_struct(str, name, def) {
var path = _font_path(str.path); if(!struct_has(str, name)) return def;
var font = str[$ name];
var path = _font_path(font.path);
if(!file_exists(path)) { if(!file_exists(path)) {
noti_status("Font resource " + string(path), " not found. Rollback to default font."); noti_status("Font resource " + string(path), " not found. Rollback to default font.");
@ -54,7 +56,7 @@ function _font_load_from_struct(str, def) {
} }
font_add_enable_aa(THEME_VALUE.font_aa); font_add_enable_aa(THEME_VALUE.font_aa);
var _font = _font_add(path, str.size * UI_SCALE); var _font = _font_add(path, font.size * UI_SCALE);
return _font; return _font;
} }
@ -63,6 +65,8 @@ function font_clear(font) { if(font_exists(font)) font_delete(font); }
function loadFonts() { function loadFonts() {
if(FONT_ISLOADED) { if(FONT_ISLOADED) {
font_clear(f_h1);
font_clear(f_h2);
font_clear(f_h3); font_clear(f_h3);
font_clear(f_h5); font_clear(f_h5);
@ -81,6 +85,7 @@ function loadFonts() {
if(!file_exists(path)) { if(!file_exists(path)) {
noti_status("Font not defined at " + path + ", rollback to default fonts."); noti_status("Font not defined at " + path + ", rollback to default fonts.");
f_h1 = _f_h1; f_h1 = _f_h1;
f_h2 = _f_h2;
f_h3 = _f_h3; f_h3 = _f_h3;
f_h5 = _f_h5; f_h5 = _f_h5;
f_p0 = _f_p0; f_p0 = _f_p0;
@ -96,18 +101,19 @@ function loadFonts() {
var s = file_text_read_all(path); var s = file_text_read_all(path);
var fontDef = json_try_parse(s); var fontDef = json_try_parse(s);
f_h1 = _font_load_from_struct(fontDef.h1, _f_h1); f_h1 = _font_load_from_struct(fontDef, "h1", _f_h1);
f_h3 = _font_load_from_struct(fontDef.h3, _f_h3); f_h2 = _font_load_from_struct(fontDef, "h2", _f_h2);
f_h5 = _font_load_from_struct(fontDef.h5, _f_h5); f_h3 = _font_load_from_struct(fontDef, "h3", _f_h3);
f_h5 = _font_load_from_struct(fontDef, "h5", _f_h5);
f_p0 = _font_load_from_struct(fontDef.p0, _f_p0); f_p0 = _font_load_from_struct(fontDef, "p0", _f_p0);
f_p0b = _font_load_from_struct(fontDef.p0b, _f_p0b); f_p0b = _font_load_from_struct(fontDef, "p0b", _f_p0b);
f_p1 = _font_load_from_struct(fontDef.p1, _f_p1); f_p1 = _font_load_from_struct(fontDef, "p1", _f_p1);
f_p2 = _font_load_from_struct(fontDef.p2, _f_p2); f_p2 = _font_load_from_struct(fontDef, "p2", _f_p2);
f_p3 = _font_load_from_struct(fontDef.p3, _f_p3); f_p3 = _font_load_from_struct(fontDef, "p3", _f_p3);
f_code = _font_load_from_struct(fontDef.code, _f_code); f_code = _font_load_from_struct(fontDef, "code", _f_code);
FONT_ISLOADED = true; FONT_ISLOADED = true;
} }

View file

@ -724,13 +724,18 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
return !high || _selc; return !high || _selc;
} #endregion } #endregion
static getColor = function() { #region
gml_pragma("forceinline");
return timeline_item.color == -1? color : timeline_item.color;
} #endregion
static drawNodeBase = function(xx, yy, _s) { #region static drawNodeBase = function(xx, yy, _s) { #region
if(draw_graph_culled) return; if(draw_graph_culled) return;
if(!active) return; if(!active) return;
var aa = 0.25 + 0.5 * renderActive; var aa = 0.25 + 0.5 * renderActive;
if(!isHighlightingInGraph()) aa *= 0.25; if(!isHighlightingInGraph()) aa *= 0.25;
var cc = timeline_item.color == -1? color : timeline_item.color; var cc = getColor();
draw_sprite_stretched_ext(bg_spr, 0, xx, yy, w * _s, h * _s, cc, aa); draw_sprite_stretched_ext(bg_spr, 0, xx, yy, w * _s, h * _s, cc, aa);
} #endregion } #endregion
@ -770,7 +775,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
var aa = 0.25 + 0.5 * renderActive; var aa = 0.25 + 0.5 * renderActive;
if(!isHighlightingInGraph()) aa *= 0.25; if(!isHighlightingInGraph()) aa *= 0.25;
var cc = timeline_item.color == -1? color : timeline_item.color; var cc = getColor();
draw_sprite_stretched_ext(THEME.node_bg_name, 0, xx, yy, w * _s, ui(20), cc, aa); draw_sprite_stretched_ext(THEME.node_bg_name, 0, xx, yy, w * _s, ui(20), cc, aa);

View file

@ -11,9 +11,18 @@ function Node_Number(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
wd_slider = new slider(0, 1, 0.01, function(val) { inputs[| 0].setValue(val); } ); wd_slider = new slider(0, 1, 0.01, function(val) { inputs[| 0].setValue(val); } );
wd_slider.spr = THEME.node_slider; wd_slider.spr = THEME.node_slider;
wd_rotator = new rotator( function(val) { inputs[| 0].setValue(val); } ); slider_value = -1;
wd_rotator.spr_bg = THEME.node_rotator_bg; slider_surface = -1;
wd_rotator.spr_knob = THEME.node_rotator_knob; slider_dragging = false;
slider_mx = 0;
slider_sx = 0;
slider_m = 0;
rotator_surface = -1;
rotator_dragging = false;
rotator_s = 0;
rotator_p = 0;
rotator_m = 0;
inputs[| 0] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) inputs[| 0] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setVisible(true, true); .setVisible(true, true);
@ -30,14 +39,14 @@ function Node_Number(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
outputs[| 0] = nodeValue("Number", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0); outputs[| 0] = nodeValue("Number", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0);
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
var __ax = getInputData(0); var __ax = getInputData(0);
if(is_array(__ax)) return; if(is_array(__ax)) return;
inputs[| 0].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny); inputs[| 0].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny);
} } #endregion
static step = function() { static step = function() { #region
var int = getInputData(1); var int = getInputData(1);
var disp = getInputData(2); var disp = getInputData(2);
@ -73,61 +82,140 @@ function Node_Number(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
} }
outputs[| 0].setType(int? VALUE_TYPE.integer : VALUE_TYPE.float); outputs[| 0].setType(int? VALUE_TYPE.integer : VALUE_TYPE.float);
} } #endregion
static processData = function(_output, _data, _output_index, _array_index = 0) { static processData = function(_output, _data, _output_index, _array_index = 0) { #region
var _res = _data[1]? round(_data[0]) : _data[0]; var _res = _data[1]? round(_data[0]) : _data[0];
display_output = _res; display_output = _res;
return _res; return _res;
} } #endregion
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region
var bbox = drawGetBbox(xx, yy, _s); var bbox = drawGetBbox(xx, yy, _s);
var val = display_output; var val = getInputData(0);
var disp = getInputData(2); var disp = getInputData(2);
var rang = getInputData(3); var rang = getInputData(3);
var stp = getInputData(4); var stp = getInputData(4);
var _col = getColor();
if(inputs[| 0].value_from != noone || disp == 0) { if(inputs[| 0].value_from != noone || disp == 0) { #region
draw_set_text(f_h1, fa_center, fa_center, COLORS._main_text); draw_set_text(f_h1, fa_center, fa_center, COLORS._main_text);
var str = string(val); var str = string(val);
var ss = string_scale(str, bbox.w, bbox.h); var ss = string_scale(str, bbox.w, bbox.h);
draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0); draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0);
return; return;
} } #endregion
switch(disp) { switch(disp) {
case 1 : case 1 : #region
draw_set_text(f_p0, fa_center, fa_center, COLORS._main_text); draw_set_text(f_h2, fa_center, fa_center, _col);
var str = string(val); draw_text_transformed(bbox.xc, bbox.y0 + 16 * _s, val, _s * 0.5, _s * 0.5, 0);
var ss = min(1, string_scale(str, bbox.w, 20));
draw_text_transformed(bbox.xc, bbox.y0 + 20 / 2, str, ss, ss, 0);
var sl_x = bbox.x0 + 12 * _s; var sl_w = bbox.w - 8 * _s;
var sl_y = bbox.y0 + (20 + 8 * _s); var sl_h = _s * 40;
var sl_w = bbox.w - 24 * _s;
var sl_h = bbox.h - (20 + 8 * _s);
wd_slider.minn = rang[0]; var sl_x0 = bbox.x0 + 4 * _s;
wd_slider.maxx = rang[1]; var sl_x1 = sl_x0 + sl_w;
wd_slider.step = stp; var sl_y0 = (bbox.y0 + (24 * _s) + bbox.y1) / 2 - sl_h / 2;
wd_slider.handle_w = 24 * _s; var sl_y1 = sl_y0 + sl_h;
if(sl_h > 8) { var c0 = (draggable && !slider_dragging)? colorMultiply(CDEF.main_grey, _col) : colorMultiply(CDEF.main_white, _col);
wd_slider.setFocusHover(_focus, _hover); var c1 = colorMultiply(CDEF.main_dkgrey, _col);
wd_slider.draw(sl_x, sl_y, sl_w, sl_h, val, [_mx, _my], 0);
draggable = !wd_slider.dragging; var _minn = rang[0];
var _maxx = rang[1];
slider_surface = surface_verify(slider_surface, sl_w, sl_h);
slider_value = slider_value == -1? val : lerp_float(slider_value, val, 2.5);
surface_set_shader(slider_surface, sh_ui_slider);
shader_set_color("c0", c0);
shader_set_color("c1", c1);
shader_set_dim("dimension", slider_surface);
shader_set_f("mouseProg", animation_curve_eval(ac_ripple, slider_m));
shader_set_f("prog", clamp((slider_value - _minn) / (_maxx - _minn), 0.1, 0.9));
draw_sprite_stretched(s_fx_pixel, 0, 0, 0, sl_w, sl_h);
surface_reset_shader();
draw_surface(slider_surface, sl_x0, sl_y0);
if(slider_dragging) {
slider_m = lerp_float(slider_m, 1, 4);
var _valM = (_mx - sl_x0) / (sl_x1 - sl_x0);
var _valL = lerp(_minn, _maxx, _valM);
_valL = value_snap(_valL, stp);
inputs[| 0].setValue(_valL);
if(mouse_release(mb_left))
slider_dragging = false;
} else
slider_m = lerp_float(slider_m, 0, 5);
draggable = true;
if(_hover && point_in_rectangle(_mx, _my, sl_x0, sl_y0, sl_x1, sl_y1)) {
if(mouse_press(mb_left, _focus) && is_real(val)) {
slider_dragging = true;
slider_mx = _mx;
slider_sx = val;
}
draggable = false;
} }
break;
case 2 :
wd_rotator.scale = _s;
wd_rotator.setFocusHover(_focus, _hover);
wd_rotator.draw(bbox.xc, bbox.yc - 48 * _s, val, [_mx, _my], false);
draggable = !wd_rotator.dragging; break; #endregion
break; case 2 : #region
var _ss = min(bbox.w, bbox.h);
var c0 = (draggable && !rotator_dragging)? colorMultiply(CDEF.main_grey, _col) : colorMultiply(CDEF.main_white, _col);
var c1 = colorMultiply(CDEF.main_dkgrey, _col);
var _dst = point_distance(_mx, _my, bbox.xc, bbox.yc);
var _x0 = bbox.xc - _ss / 2;
var _y0 = bbox.yc - _ss / 2;
rotator_surface = surface_verify(rotator_surface, _ss, _ss);
surface_set_shader(rotator_surface, sh_ui_rotator);
shader_set_color("c0", c0);
shader_set_color("c1", c1);
shader_set_f("angle", degtorad(val));
shader_set_f("mouse", (_mx - _x0) / _ss, (_my - _y0) / _ss);
shader_set_f("mouseProg", animation_curve_eval(ac_ripple, rotator_m));
draw_sprite_stretched(s_fx_pixel, 0, 0, 0, _ss, _ss);
surface_reset_shader();
draw_surface(rotator_surface, _x0, _y0);
if(rotator_dragging) {
rotator_m = lerp_float(rotator_m, 1, 4);
var dir = point_direction(bbox.xc, bbox.yc, _mx, _my);
var dx = angle_difference(dir, rotator_p);
rotator_p = dir;
inputs[| 0].setValue(val + dx);
if(mouse_release(mb_left))
rotator_dragging = false;
} else
rotator_m = lerp_float(rotator_m, 0, 5);
draggable = true;
if(_hover && point_in_circle(_mx, _my, bbox.xc, bbox.yc, _ss / 2)) {
if(mouse_press(mb_left, _focus) && is_real(val)) {
rotator_dragging = true;
rotator_s = val;
rotator_p = point_direction(bbox.xc, bbox.yc, _mx, _my);
}
draggable = false;
}
draw_set_text(f_h3, fa_center, fa_center, colorMultiply(CDEF.main_white, _col));
draw_text_transformed(bbox.xc, bbox.yc, string_format(val, -1, 2), _s * .5, _s * .5, 0);
break; #endregion
} }
} } #endregion
} }
function Node_Vector2(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { function Node_Vector2(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
@ -179,7 +267,7 @@ function Node_Vector2(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
wd_pan_mx = 0; wd_pan_mx = 0;
wd_pan_my = 0; wd_pan_my = 0;
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
var __ax = getInputData(0); var __ax = getInputData(0);
var __ay = getInputData(1); var __ay = getInputData(1);
@ -226,9 +314,9 @@ function Node_Vector2(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
drag_sy = _ay; drag_sy = _ay;
} }
} }
} } #endregion
static step = function() { static step = function() { #region
var int = getInputData(2); var int = getInputData(2);
var disp = getInputData(3); var disp = getInputData(3);
@ -247,17 +335,17 @@ function Node_Vector2(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
w = 160; w = 160;
min_h = 160; min_h = 160;
} }
} } #endregion
static processData = function(_output, _data, _output_index, _array_index = 0) { static processData = function(_output, _data, _output_index, _array_index = 0) { #region
var vec = [ _data[0], _data[1] ]; var vec = [ _data[0], _data[1] ];
for( var i = 0, n = array_length(vec); i < n; i++ ) for( var i = 0, n = array_length(vec); i < n; i++ )
vec[i] = _data[2]? round(vec[i]) : vec[i]; vec[i] = _data[2]? round(vec[i]) : vec[i];
return vec; return vec;
} } #endregion
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region
var disp = getInputData(3); var disp = getInputData(3);
var vec = getSingleValue(0,, true); var vec = getSingleValue(0,, true);
var bbox = drawGetBbox(xx, yy, _s); var bbox = drawGetBbox(xx, yy, _s);
@ -389,7 +477,7 @@ function Node_Vector2(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
draw_set_text(f_p2, fa_center, fa_bottom, COLORS._main_text); draw_set_text(f_p2, fa_center, fa_bottom, COLORS._main_text);
var str = $"[{v0}, {v1}]"; var str = $"[{v0}, {v1}]";
draw_text(bbox.xc, bbox.y1 - 4, str); draw_text(bbox.xc, bbox.y1 - 4, str);
} } #endregion
} }
function Node_Vector3(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { function Node_Vector3(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
@ -415,7 +503,7 @@ function Node_Vector3(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
outputs[| 0] = nodeValue("Vector", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, [ 0, 0, 0 ]) outputs[| 0] = nodeValue("Vector", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, [ 0, 0, 0 ])
.setDisplay(VALUE_DISPLAY.vector); .setDisplay(VALUE_DISPLAY.vector);
static step = function() { static step = function() { #region
var int = getInputData(3); var int = getInputData(3);
for( var i = 0; i < 3; i++ ) { for( var i = 0; i < 3; i++ ) {
inputs[| i].setType(int? VALUE_TYPE.integer : VALUE_TYPE.float); inputs[| i].setType(int? VALUE_TYPE.integer : VALUE_TYPE.float);
@ -423,17 +511,17 @@ function Node_Vector3(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
} }
outputs[| 0].setType(int? VALUE_TYPE.integer : VALUE_TYPE.float); outputs[| 0].setType(int? VALUE_TYPE.integer : VALUE_TYPE.float);
} } #endregion
static processData = function(_output, _data, _output_index, _array_index = 0) { static processData = function(_output, _data, _output_index, _array_index = 0) { #region
var vec = [ _data[0], _data[1], _data[2] ]; var vec = [ _data[0], _data[1], _data[2] ];
for( var i = 0, n = array_length(vec); i < n; i++ ) for( var i = 0, n = array_length(vec); i < n; i++ )
vec[i] = _data[3]? round(vec[i]) : vec[i]; vec[i] = _data[3]? round(vec[i]) : vec[i];
return vec; return vec;
} } #endregion
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region
draw_set_text(f_h1, fa_center, fa_center, COLORS._main_text); draw_set_text(f_h1, fa_center, fa_center, COLORS._main_text);
var vec = getSingleValue(0,, true); var vec = getSingleValue(0,, true);
var v0 = array_safe_get(vec, 0); var v0 = array_safe_get(vec, 0);
@ -445,7 +533,7 @@ function Node_Vector3(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
var bbox = drawGetBbox(xx, yy, _s); var bbox = drawGetBbox(xx, yy, _s);
var ss = string_scale(str, bbox.w, bbox.h); var ss = string_scale(str, bbox.w, bbox.h);
draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0); draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0);
} } #endregion
} }
function Node_Vector4(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { function Node_Vector4(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
@ -474,7 +562,7 @@ function Node_Vector4(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
outputs[| 0] = nodeValue("Vector", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, [ 0, 0, 0, 0 ]) outputs[| 0] = nodeValue("Vector", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, [ 0, 0, 0, 0 ])
.setDisplay(VALUE_DISPLAY.vector); .setDisplay(VALUE_DISPLAY.vector);
static step = function() { static step = function() { #region
var int = getInputData(4); var int = getInputData(4);
for( var i = 0; i < 4; i++ ) { for( var i = 0; i < 4; i++ ) {
inputs[| i].setType(int? VALUE_TYPE.integer : VALUE_TYPE.float); inputs[| i].setType(int? VALUE_TYPE.integer : VALUE_TYPE.float);
@ -482,17 +570,17 @@ function Node_Vector4(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
} }
outputs[| 0].setType(int? VALUE_TYPE.integer : VALUE_TYPE.float); outputs[| 0].setType(int? VALUE_TYPE.integer : VALUE_TYPE.float);
} } #endregion
static processData = function(_output, _data, _output_index, _array_index = 0) { static processData = function(_output, _data, _output_index, _array_index = 0) { #region
var vec = [ _data[0], _data[1], _data[2], _data[3] ]; var vec = [ _data[0], _data[1], _data[2], _data[3] ];
for( var i = 0, n = array_length(vec); i < n; i++ ) for( var i = 0, n = array_length(vec); i < n; i++ )
vec[i] = _data[4]? round(vec[i]) : vec[i]; vec[i] = _data[4]? round(vec[i]) : vec[i];
return vec; return vec;
} } #endregion
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region
draw_set_text(f_h1, fa_center, fa_center, COLORS._main_text); draw_set_text(f_h1, fa_center, fa_center, COLORS._main_text);
var vec = getSingleValue(0,, true); var vec = getSingleValue(0,, true);
var v0 = array_safe_get(vec, 0); var v0 = array_safe_get(vec, 0);
@ -505,7 +593,7 @@ function Node_Vector4(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
var bbox = drawGetBbox(xx, yy, _s); var bbox = drawGetBbox(xx, yy, _s);
var ss = string_scale(str, bbox.w, bbox.h); var ss = string_scale(str, bbox.w, bbox.h);
draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0); draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0);
} } #endregion
} }
function Node_Vector_Split(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { function Node_Vector_Split(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
@ -526,7 +614,7 @@ function Node_Vector_Split(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
outputs[| 2] = nodeValue("z", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0); outputs[| 2] = nodeValue("z", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0);
outputs[| 3] = nodeValue("w", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0); outputs[| 3] = nodeValue("w", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0);
static step = function() { static step = function() { #region
if(inputs[| 0].value_from == noone) return; if(inputs[| 0].value_from == noone) return;
var type = VALUE_TYPE.float; var type = VALUE_TYPE.float;
if(inputs[| 0].value_from.type == VALUE_TYPE.integer) if(inputs[| 0].value_from.type == VALUE_TYPE.integer)
@ -535,13 +623,13 @@ function Node_Vector_Split(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
inputs[| 0].setType(type); inputs[| 0].setType(type);
for( var i = 0; i < 4; i++ ) for( var i = 0; i < 4; i++ )
outputs[| i].setType(type); outputs[| i].setType(type);
} } #endregion
static processData = function(_output, _data, _output_index, _array_index = 0) { static processData = function(_output, _data, _output_index, _array_index = 0) { #region
return array_safe_get(_data[0], _output_index); return array_safe_get(_data[0], _output_index);
} } #endregion
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region
draw_set_text(f_h1, fa_center, fa_center, COLORS._main_text); draw_set_text(f_h1, fa_center, fa_center, COLORS._main_text);
var str = ""; var str = "";
for( var i = 0; i < 4; i++ ) for( var i = 0; i < 4; i++ )
@ -551,5 +639,5 @@ function Node_Vector_Split(_x, _y, _group = noone) : Node_Processor(_x, _y, _gro
var bbox = drawGetBbox(xx, yy, _s); var bbox = drawGetBbox(xx, yy, _s);
var ss = string_scale(str, bbox.w, bbox.h); var ss = string_scale(str, bbox.w, bbox.h);
draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0); draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0);
} } #endregion
} }

View file

@ -110,6 +110,7 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio
var recPath = DIRECTORY + "Nodes/recent.json"; var recPath = DIRECTORY + "Nodes/recent.json";
global.RECENT_NODES = file_exists(recPath)? json_load_struct(recPath) : []; global.RECENT_NODES = file_exists(recPath)? json_load_struct(recPath) : [];
if(!is_array(global.RECENT_NODES)) global.RECENT_NODES = [];
var group = ds_list_create(); #region var group = ds_list_create(); #region
addNodeCatagory("Group", group, ["Node_Group"]); addNodeCatagory("Group", group, ["Node_Group"]);

View file

@ -1144,7 +1144,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
} }
} }
if(key_mod_press(CTRL) && target != noone && target.connect_type == JUNCTION_CONNECT.input && target.node.auto_input) if(target != noone && target.value_from == noone && target.connect_type == JUNCTION_CONNECT.input && target.node.auto_input)
_addInput = true; _addInput = true;
var _mmx = target != noone? target.x : _mx; var _mmx = target != noone? target.x : _mx;

View file

@ -0,0 +1,34 @@
//
// Simple passthrough fragment shader
//
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform vec4 c0, c1;
uniform float angle;
uniform vec2 mouse;
uniform float mouseProg;
#define TAU 6.28318530718
float angleDiff(float angle1, float angle2) {
float dif = mod(angle1 - angle2, TAU);
return min(dif, TAU - dif);
}
void main() {
float dist = distance(v_vTexcoord, vec2( 0.5, 0.5 )) * 2.;
float ang = atan(-(v_vTexcoord.y - 0.5), v_vTexcoord.x - 0.5);
float muse = max(0., 0.5 - distance(v_vTexcoord, mouse));
float dif = angleDiff(ang, angle) / TAU;
float d0 = smoothstep(0.925, 1.00, 1. - dif);
float d1 = clamp(1. - smoothstep(0.85 + mouseProg * 0.05, 1.00, 1. - dif) * 2., 0., 0.75);
float rad = 0.935 - d0 * (mouseProg * 0.1 + 0.05);
float ring = dist - muse * 0.2;
ring = 1. - abs(ring - 0.7);
ring = smoothstep(rad, 1.0, ring) * 25.;
gl_FragColor = vec4(mix(c0.rgb, c1.rgb, d1), ring);
}

View file

@ -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;
}

View file

@ -0,0 +1,10 @@
{
"resourceType": "GMShader",
"resourceVersion": "1.0",
"name": "sh_ui_rotator",
"parent": {
"name": "UI",
"path": "folders/shader/UI.yy",
},
"type": 1,
}

View file

@ -0,0 +1,30 @@
//
// Simple passthrough fragment shader
//
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform vec2 dimension;
uniform vec4 c0, c1;
uniform float mouseProg;
uniform float prog;
void main() {
vec2 px = v_vTexcoord * dimension;
vec2 norm = abs(v_vTexcoord - vec2(0.5));
float bar = 1. - norm.y * 2.;
float rr = dimension.y / 2.;
if(px.x < rr) bar = 1. - distance(px, vec2(rr, rr)) / rr;
else if(px.x > dimension.x - rr) bar = 1. - distance(px, vec2(dimension.x - rr, rr)) / rr;
bar = clamp(bar, 0., 1.);
float dif = abs(v_vTexcoord.x - prog);
float d0 = clamp(smoothstep(0.9 + mouseProg * 0.05, 1.00, 1. - dif) * 1., 0., 1.);
float d1 = clamp(1. - smoothstep(0.85 + mouseProg * 0.05, 1.00, 1. - dif) * 2., 0., 0.75);
float rad = 0.8 - d0 * (mouseProg * 0.25 + 0.4);
bar = smoothstep(rad, 1.0, bar) * 25.;
gl_FragColor = vec4(mix(c0.rgb, c1.rgb, d1), bar);
}

View file

@ -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;
}

View file

@ -0,0 +1,10 @@
{
"resourceType": "GMShader",
"resourceVersion": "1.0",
"name": "sh_ui_slider",
"parent": {
"name": "UI",
"path": "folders/shader/UI.yy",
},
"type": 1,
}