1.16.0.4
|
@ -298,7 +298,6 @@
|
||||||
{"name":"sh_mk_tile18_edge_r","order":2,"path":"shaders/sh_mk_tile18_edge_r/sh_mk_tile18_edge_r.yy",},
|
{"name":"sh_mk_tile18_edge_r","order":2,"path":"shaders/sh_mk_tile18_edge_r/sh_mk_tile18_edge_r.yy",},
|
||||||
{"name":"node_active_canvas","order":22,"path":"scripts/node_active_canvas/node_active_canvas.yy",},
|
{"name":"node_active_canvas","order":22,"path":"scripts/node_active_canvas/node_active_canvas.yy",},
|
||||||
{"name":"s_node_fluidSim_turbulence","order":10,"path":"sprites/s_node_fluidSim_turbulence/s_node_fluidSim_turbulence.yy",},
|
{"name":"s_node_fluidSim_turbulence","order":10,"path":"sprites/s_node_fluidSim_turbulence/s_node_fluidSim_turbulence.yy",},
|
||||||
{"name":"windowManager","order":1,"path":"scripts/windowManager/windowManager.yy",},
|
|
||||||
{"name":"node_pb_fx_hash","order":7,"path":"scripts/node_pb_fx_hash/node_pb_fx_hash.yy",},
|
{"name":"node_pb_fx_hash","order":7,"path":"scripts/node_pb_fx_hash/node_pb_fx_hash.yy",},
|
||||||
{"name":"sh_pb_draw_mask","order":8,"path":"shaders/sh_pb_draw_mask/sh_pb_draw_mask.yy",},
|
{"name":"sh_pb_draw_mask","order":8,"path":"shaders/sh_pb_draw_mask/sh_pb_draw_mask.yy",},
|
||||||
{"name":"node_blur_radial","order":7,"path":"scripts/node_blur_radial/node_blur_radial.yy",},
|
{"name":"node_blur_radial","order":7,"path":"scripts/node_blur_radial/node_blur_radial.yy",},
|
||||||
|
@ -466,6 +465,7 @@
|
||||||
{"name":"sh_cell_noise_round","order":4,"path":"shaders/sh_cell_noise_round/sh_cell_noise_round.yy",},
|
{"name":"sh_cell_noise_round","order":4,"path":"shaders/sh_cell_noise_round/sh_cell_noise_round.yy",},
|
||||||
{"name":"s_node_cross_product_2d","order":12,"path":"sprites/s_node_cross_product_2d/s_node_cross_product_2d.yy",},
|
{"name":"s_node_cross_product_2d","order":12,"path":"sprites/s_node_cross_product_2d/s_node_cross_product_2d.yy",},
|
||||||
{"name":"d3d_uvsphere","order":3,"path":"scripts/d3d_uvsphere/d3d_uvsphere.yy",},
|
{"name":"d3d_uvsphere","order":3,"path":"scripts/d3d_uvsphere/d3d_uvsphere.yy",},
|
||||||
|
{"name":"gameframe_native","order":2,"path":"extensions/gameframe_native/gameframe_native.yy",},
|
||||||
{"name":"s_node_path_plot","order":12,"path":"sprites/s_node_path_plot/s_node_path_plot.yy",},
|
{"name":"s_node_path_plot","order":12,"path":"sprites/s_node_path_plot/s_node_path_plot.yy",},
|
||||||
{"name":"__initAddon","order":2,"path":"scripts/__initAddon/__initAddon.yy",},
|
{"name":"__initAddon","order":2,"path":"scripts/__initAddon/__initAddon.yy",},
|
||||||
{"name":"node_pb_draw_trapezoid","order":8,"path":"scripts/node_pb_draw_trapezoid/node_pb_draw_trapezoid.yy",},
|
{"name":"node_pb_draw_trapezoid","order":8,"path":"scripts/node_pb_draw_trapezoid/node_pb_draw_trapezoid.yy",},
|
||||||
|
@ -710,6 +710,7 @@
|
||||||
{"name":"node_noise_shard","order":12,"path":"scripts/node_noise_shard/node_noise_shard.yy",},
|
{"name":"node_noise_shard","order":12,"path":"scripts/node_noise_shard/node_noise_shard.yy",},
|
||||||
{"name":"s_node_color_remove","order":7,"path":"sprites/s_node_color_remove/s_node_color_remove.yy",},
|
{"name":"s_node_color_remove","order":7,"path":"sprites/s_node_color_remove/s_node_color_remove.yy",},
|
||||||
{"name":"sh_average","order":7,"path":"shaders/sh_average/sh_average.yy",},
|
{"name":"sh_average","order":7,"path":"shaders/sh_average/sh_average.yy",},
|
||||||
|
{"name":"sh_draw_surface","order":52,"path":"shaders/sh_draw_surface/sh_draw_surface.yy",},
|
||||||
{"name":"sh_warp_4points_pers","order":10,"path":"shaders/sh_warp_4points_pers/sh_warp_4points_pers.yy",},
|
{"name":"sh_warp_4points_pers","order":10,"path":"shaders/sh_warp_4points_pers/sh_warp_4points_pers.yy",},
|
||||||
{"name":"node_mirror","order":3,"path":"scripts/node_mirror/node_mirror.yy",},
|
{"name":"node_mirror","order":3,"path":"scripts/node_mirror/node_mirror.yy",},
|
||||||
{"name":"node_corner","order":6,"path":"scripts/node_corner/node_corner.yy",},
|
{"name":"node_corner","order":6,"path":"scripts/node_corner/node_corner.yy",},
|
||||||
|
@ -759,6 +760,7 @@
|
||||||
{"name":"node_tile","order":4,"path":"scripts/node_tile/node_tile.yy",},
|
{"name":"node_tile","order":4,"path":"scripts/node_tile/node_tile.yy",},
|
||||||
{"name":"sh_rsh_rotate","order":1,"path":"shaders/sh_rsh_rotate/sh_rsh_rotate.yy",},
|
{"name":"sh_rsh_rotate","order":1,"path":"shaders/sh_rsh_rotate/sh_rsh_rotate.yy",},
|
||||||
{"name":"FirebaseFirestoreMainFunctions","order":1,"path":"scripts/FirebaseFirestoreMainFunctions/FirebaseFirestoreMainFunctions.yy",},
|
{"name":"FirebaseFirestoreMainFunctions","order":1,"path":"scripts/FirebaseFirestoreMainFunctions/FirebaseFirestoreMainFunctions.yy",},
|
||||||
|
{"name":"node_mk_sparkle","order":7,"path":"scripts/node_mk_sparkle/node_mk_sparkle.yy",},
|
||||||
{"name":"node_VFX_effect_destroy","order":3,"path":"scripts/node_VFX_effect_destroy/node_VFX_effect_destroy.yy",},
|
{"name":"node_VFX_effect_destroy","order":3,"path":"scripts/node_VFX_effect_destroy/node_VFX_effect_destroy.yy",},
|
||||||
{"name":"node_cache","order":9,"path":"scripts/node_cache/node_cache.yy",},
|
{"name":"node_cache","order":9,"path":"scripts/node_cache/node_cache.yy",},
|
||||||
{"name":"sh_bw","order":3,"path":"shaders/sh_bw/sh_bw.yy",},
|
{"name":"sh_bw","order":3,"path":"shaders/sh_bw/sh_bw.yy",},
|
||||||
|
@ -952,6 +954,7 @@
|
||||||
{"name":"s_node_3d_meterial","order":12,"path":"sprites/s_node_3d_meterial/s_node_3d_meterial.yy",},
|
{"name":"s_node_3d_meterial","order":12,"path":"sprites/s_node_3d_meterial/s_node_3d_meterial.yy",},
|
||||||
{"name":"__surface","order":8,"path":"scripts/__surface/__surface.yy",},
|
{"name":"__surface","order":8,"path":"scripts/__surface/__surface.yy",},
|
||||||
{"name":"clipboard","order":7,"path":"extensions/clipboard/clipboard.yy",},
|
{"name":"clipboard","order":7,"path":"extensions/clipboard/clipboard.yy",},
|
||||||
|
{"name":"gameframe","order":3,"path":"scripts/gameframe/gameframe.yy",},
|
||||||
{"name":"__node_3d_light","order":1,"path":"scripts/__node_3d_light/__node_3d_light.yy",},
|
{"name":"__node_3d_light","order":1,"path":"scripts/__node_3d_light/__node_3d_light.yy",},
|
||||||
{"name":"d3d_icosphere","order":4,"path":"scripts/d3d_icosphere/d3d_icosphere.yy",},
|
{"name":"d3d_icosphere","order":4,"path":"scripts/d3d_icosphere/d3d_icosphere.yy",},
|
||||||
{"name":"s_node_edge_detect","order":22,"path":"sprites/s_node_edge_detect/s_node_edge_detect.yy",},
|
{"name":"s_node_edge_detect","order":22,"path":"sprites/s_node_edge_detect/s_node_edge_detect.yy",},
|
||||||
|
@ -1050,7 +1053,7 @@
|
||||||
{"name":"node_3d_uv_remap","order":5,"path":"scripts/node_3d_uv_remap/node_3d_uv_remap.yy",},
|
{"name":"node_3d_uv_remap","order":5,"path":"scripts/node_3d_uv_remap/node_3d_uv_remap.yy",},
|
||||||
{"name":"fd_rectangle_get_initial_value_pressure","order":7,"path":"scripts/fd_rectangle_get_initial_value_pressure/fd_rectangle_get_initial_value_pressure.yy",},
|
{"name":"fd_rectangle_get_initial_value_pressure","order":7,"path":"scripts/fd_rectangle_get_initial_value_pressure/fd_rectangle_get_initial_value_pressure.yy",},
|
||||||
{"name":"node_timeline_preview","order":2,"path":"scripts/node_timeline_preview/node_timeline_preview.yy",},
|
{"name":"node_timeline_preview","order":2,"path":"scripts/node_timeline_preview/node_timeline_preview.yy",},
|
||||||
{"name":"display_measure","order":2,"path":"extensions/display_measure/display_measure.yy",},
|
{"name":"display_measure","order":1,"path":"extensions/display_measure/display_measure.yy",},
|
||||||
{"name":"__polygon","order":2,"path":"scripts/__polygon/__polygon.yy",},
|
{"name":"__polygon","order":2,"path":"scripts/__polygon/__polygon.yy",},
|
||||||
{"name":"o_dialog_fontscrollbox","order":5,"path":"objects/o_dialog_fontscrollbox/o_dialog_fontscrollbox.yy",},
|
{"name":"o_dialog_fontscrollbox","order":5,"path":"objects/o_dialog_fontscrollbox/o_dialog_fontscrollbox.yy",},
|
||||||
{"name":"sh_d3d_normal_blur","order":25,"path":"shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.yy",},
|
{"name":"sh_d3d_normal_blur","order":25,"path":"shaders/sh_d3d_normal_blur/sh_d3d_normal_blur.yy",},
|
||||||
|
@ -1707,6 +1710,7 @@
|
||||||
{"name":"panel_array_sequence","order":3,"path":"scripts/panel_array_sequence/panel_array_sequence.yy",},
|
{"name":"panel_array_sequence","order":3,"path":"scripts/panel_array_sequence/panel_array_sequence.yy",},
|
||||||
{"name":"sh_displace","order":5,"path":"shaders/sh_displace/sh_displace.yy",},
|
{"name":"sh_displace","order":5,"path":"shaders/sh_displace/sh_displace.yy",},
|
||||||
{"name":"fd_rectangle_get_material_height","order":10,"path":"scripts/fd_rectangle_get_material_height/fd_rectangle_get_material_height.yy",},
|
{"name":"fd_rectangle_get_material_height","order":10,"path":"scripts/fd_rectangle_get_material_height/fd_rectangle_get_material_height.yy",},
|
||||||
|
{"name":"s_node_mk_sparkle","order":7,"path":"sprites/s_node_mk_sparkle/s_node_mk_sparkle.yy",},
|
||||||
{"name":"rangeBox","order":9,"path":"scripts/rangeBox/rangeBox.yy",},
|
{"name":"rangeBox","order":9,"path":"scripts/rangeBox/rangeBox.yy",},
|
||||||
{"name":"s_node_array_copy","order":14,"path":"sprites/s_node_array_copy/s_node_array_copy.yy",},
|
{"name":"s_node_array_copy","order":14,"path":"sprites/s_node_array_copy/s_node_array_copy.yy",},
|
||||||
{"name":"node_VFX_effect_accelerate","order":1,"path":"scripts/node_VFX_effect_accelerate/node_VFX_effect_accelerate.yy",},
|
{"name":"node_VFX_effect_accelerate","order":1,"path":"scripts/node_VFX_effect_accelerate/node_VFX_effect_accelerate.yy",},
|
||||||
|
|
|
@ -679,6 +679,7 @@
|
||||||
{"id":{"name":"sh_cell_noise_round","path":"shaders/sh_cell_noise_round/sh_cell_noise_round.yy",},},
|
{"id":{"name":"sh_cell_noise_round","path":"shaders/sh_cell_noise_round/sh_cell_noise_round.yy",},},
|
||||||
{"id":{"name":"s_node_cross_product_2d","path":"sprites/s_node_cross_product_2d/s_node_cross_product_2d.yy",},},
|
{"id":{"name":"s_node_cross_product_2d","path":"sprites/s_node_cross_product_2d/s_node_cross_product_2d.yy",},},
|
||||||
{"id":{"name":"d3d_uvsphere","path":"scripts/d3d_uvsphere/d3d_uvsphere.yy",},},
|
{"id":{"name":"d3d_uvsphere","path":"scripts/d3d_uvsphere/d3d_uvsphere.yy",},},
|
||||||
|
{"id":{"name":"gameframe_native","path":"extensions/gameframe_native/gameframe_native.yy",},},
|
||||||
{"id":{"name":"s_node_path_plot","path":"sprites/s_node_path_plot/s_node_path_plot.yy",},},
|
{"id":{"name":"s_node_path_plot","path":"sprites/s_node_path_plot/s_node_path_plot.yy",},},
|
||||||
{"id":{"name":"__initAddon","path":"scripts/__initAddon/__initAddon.yy",},},
|
{"id":{"name":"__initAddon","path":"scripts/__initAddon/__initAddon.yy",},},
|
||||||
{"id":{"name":"node_pb_draw_trapezoid","path":"scripts/node_pb_draw_trapezoid/node_pb_draw_trapezoid.yy",},},
|
{"id":{"name":"node_pb_draw_trapezoid","path":"scripts/node_pb_draw_trapezoid/node_pb_draw_trapezoid.yy",},},
|
||||||
|
@ -961,6 +962,7 @@
|
||||||
{"id":{"name":"node_3d_particle","path":"scripts/node_3d_particle/node_3d_particle.yy",},},
|
{"id":{"name":"node_3d_particle","path":"scripts/node_3d_particle/node_3d_particle.yy",},},
|
||||||
{"id":{"name":"s_node_color_remove","path":"sprites/s_node_color_remove/s_node_color_remove.yy",},},
|
{"id":{"name":"s_node_color_remove","path":"sprites/s_node_color_remove/s_node_color_remove.yy",},},
|
||||||
{"id":{"name":"sh_average","path":"shaders/sh_average/sh_average.yy",},},
|
{"id":{"name":"sh_average","path":"shaders/sh_average/sh_average.yy",},},
|
||||||
|
{"id":{"name":"sh_draw_surface","path":"shaders/sh_draw_surface/sh_draw_surface.yy",},},
|
||||||
{"id":{"name":"sh_warp_4points_pers","path":"shaders/sh_warp_4points_pers/sh_warp_4points_pers.yy",},},
|
{"id":{"name":"sh_warp_4points_pers","path":"shaders/sh_warp_4points_pers/sh_warp_4points_pers.yy",},},
|
||||||
{"id":{"name":"node_mirror","path":"scripts/node_mirror/node_mirror.yy",},},
|
{"id":{"name":"node_mirror","path":"scripts/node_mirror/node_mirror.yy",},},
|
||||||
{"id":{"name":"node_corner","path":"scripts/node_corner/node_corner.yy",},},
|
{"id":{"name":"node_corner","path":"scripts/node_corner/node_corner.yy",},},
|
||||||
|
@ -1018,6 +1020,7 @@
|
||||||
{"id":{"name":"node_tile","path":"scripts/node_tile/node_tile.yy",},},
|
{"id":{"name":"node_tile","path":"scripts/node_tile/node_tile.yy",},},
|
||||||
{"id":{"name":"sh_rsh_rotate","path":"shaders/sh_rsh_rotate/sh_rsh_rotate.yy",},},
|
{"id":{"name":"sh_rsh_rotate","path":"shaders/sh_rsh_rotate/sh_rsh_rotate.yy",},},
|
||||||
{"id":{"name":"FirebaseFirestoreMainFunctions","path":"scripts/FirebaseFirestoreMainFunctions/FirebaseFirestoreMainFunctions.yy",},},
|
{"id":{"name":"FirebaseFirestoreMainFunctions","path":"scripts/FirebaseFirestoreMainFunctions/FirebaseFirestoreMainFunctions.yy",},},
|
||||||
|
{"id":{"name":"node_mk_sparkle","path":"scripts/node_mk_sparkle/node_mk_sparkle.yy",},},
|
||||||
{"id":{"name":"node_VFX_effect_destroy","path":"scripts/node_VFX_effect_destroy/node_VFX_effect_destroy.yy",},},
|
{"id":{"name":"node_VFX_effect_destroy","path":"scripts/node_VFX_effect_destroy/node_VFX_effect_destroy.yy",},},
|
||||||
{"id":{"name":"node_cache","path":"scripts/node_cache/node_cache.yy",},},
|
{"id":{"name":"node_cache","path":"scripts/node_cache/node_cache.yy",},},
|
||||||
{"id":{"name":"sh_bw","path":"shaders/sh_bw/sh_bw.yy",},},
|
{"id":{"name":"sh_bw","path":"shaders/sh_bw/sh_bw.yy",},},
|
||||||
|
@ -1239,6 +1242,7 @@
|
||||||
{"id":{"name":"s_node_3d_meterial","path":"sprites/s_node_3d_meterial/s_node_3d_meterial.yy",},},
|
{"id":{"name":"s_node_3d_meterial","path":"sprites/s_node_3d_meterial/s_node_3d_meterial.yy",},},
|
||||||
{"id":{"name":"__surface","path":"scripts/__surface/__surface.yy",},},
|
{"id":{"name":"__surface","path":"scripts/__surface/__surface.yy",},},
|
||||||
{"id":{"name":"clipboard","path":"extensions/clipboard/clipboard.yy",},},
|
{"id":{"name":"clipboard","path":"extensions/clipboard/clipboard.yy",},},
|
||||||
|
{"id":{"name":"gameframe","path":"scripts/gameframe/gameframe.yy",},},
|
||||||
{"id":{"name":"__node_3d_light","path":"scripts/__node_3d_light/__node_3d_light.yy",},},
|
{"id":{"name":"__node_3d_light","path":"scripts/__node_3d_light/__node_3d_light.yy",},},
|
||||||
{"id":{"name":"rotator","path":"scripts/rotator/rotator.yy",},},
|
{"id":{"name":"rotator","path":"scripts/rotator/rotator.yy",},},
|
||||||
{"id":{"name":"d3d_icosphere","path":"scripts/d3d_icosphere/d3d_icosphere.yy",},},
|
{"id":{"name":"d3d_icosphere","path":"scripts/d3d_icosphere/d3d_icosphere.yy",},},
|
||||||
|
@ -1356,7 +1360,6 @@
|
||||||
{"id":{"name":"node_fluid_render_output","path":"scripts/node_fluid_render_output/node_fluid_render_output.yy",},},
|
{"id":{"name":"node_fluid_render_output","path":"scripts/node_fluid_render_output/node_fluid_render_output.yy",},},
|
||||||
{"id":{"name":"s_node_vfx_output","path":"sprites/s_node_vfx_output/s_node_vfx_output.yy",},},
|
{"id":{"name":"s_node_vfx_output","path":"sprites/s_node_vfx_output/s_node_vfx_output.yy",},},
|
||||||
{"id":{"name":"sh_greyscale","path":"shaders/sh_greyscale/sh_greyscale.yy",},},
|
{"id":{"name":"sh_greyscale","path":"shaders/sh_greyscale/sh_greyscale.yy",},},
|
||||||
{"id":{"name":"gameframe_native","path":"extensions/gameframe_native/gameframe_native.yy",},},
|
|
||||||
{"id":{"name":"s_node_pb_box_mirror","path":"sprites/s_node_pb_box_mirror/s_node_pb_box_mirror.yy",},},
|
{"id":{"name":"s_node_pb_box_mirror","path":"sprites/s_node_pb_box_mirror/s_node_pb_box_mirror.yy",},},
|
||||||
{"id":{"name":"__node_shader_generator","path":"scripts/__node_shader_generator/__node_shader_generator.yy",},},
|
{"id":{"name":"__node_shader_generator","path":"scripts/__node_shader_generator/__node_shader_generator.yy",},},
|
||||||
{"id":{"name":"node_global","path":"scripts/node_global/node_global.yy",},},
|
{"id":{"name":"node_global","path":"scripts/node_global/node_global.yy",},},
|
||||||
|
@ -2104,6 +2107,7 @@
|
||||||
{"id":{"name":"node_group","path":"scripts/node_group/node_group.yy",},},
|
{"id":{"name":"node_group","path":"scripts/node_group/node_group.yy",},},
|
||||||
{"id":{"name":"fd_rectangle_get_material_height","path":"scripts/fd_rectangle_get_material_height/fd_rectangle_get_material_height.yy",},},
|
{"id":{"name":"fd_rectangle_get_material_height","path":"scripts/fd_rectangle_get_material_height/fd_rectangle_get_material_height.yy",},},
|
||||||
{"id":{"name":"node_PCX_fn_surface_height","path":"scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.yy",},},
|
{"id":{"name":"node_PCX_fn_surface_height","path":"scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.yy",},},
|
||||||
|
{"id":{"name":"s_node_mk_sparkle","path":"sprites/s_node_mk_sparkle/s_node_mk_sparkle.yy",},},
|
||||||
{"id":{"name":"rangeBox","path":"scripts/rangeBox/rangeBox.yy",},},
|
{"id":{"name":"rangeBox","path":"scripts/rangeBox/rangeBox.yy",},},
|
||||||
{"id":{"name":"s_node_array_copy","path":"sprites/s_node_array_copy/s_node_array_copy.yy",},},
|
{"id":{"name":"s_node_array_copy","path":"sprites/s_node_array_copy/s_node_array_copy.yy",},},
|
||||||
{"id":{"name":"node_VFX_effect_accelerate","path":"scripts/node_VFX_effect_accelerate/node_VFX_effect_accelerate.yy",},},
|
{"id":{"name":"node_VFX_effect_accelerate","path":"scripts/node_VFX_effect_accelerate/node_VFX_effect_accelerate.yy",},},
|
||||||
|
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
@ -355,7 +355,7 @@ event_inherited();
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for( var j = 0; j < ds_list_size(cat.list); j++ ) {
|
for( var j = 0; j < ds_list_size(cat.list); j++ ) {
|
||||||
if(is_string(cat.list[| j])) continue;
|
//if(is_string(cat.list[| j])) continue;
|
||||||
ds_list_add(_list, cat.list[| j]);
|
ds_list_add(_list, cat.list[| j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -519,7 +519,7 @@ event_inherited();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ADD_NODE_PAGE > -2 && PREFERENCES.dialog_add_node_grouping) {
|
if(PREFERENCES.dialog_add_node_grouping) {
|
||||||
var len = array_length(group_labels);
|
var len = array_length(group_labels);
|
||||||
if(len) {
|
if(len) {
|
||||||
gpu_set_blendmode(bm_subtract);
|
gpu_set_blendmode(bm_subtract);
|
||||||
|
@ -620,7 +620,7 @@ event_inherited();
|
||||||
hh += list_height;
|
hh += list_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ADD_NODE_PAGE > -2 && PREFERENCES.dialog_add_node_grouping) {
|
if(PREFERENCES.dialog_add_node_grouping) {
|
||||||
gpu_set_blendmode(bm_subtract);
|
gpu_set_blendmode(bm_subtract);
|
||||||
draw_set_color(c_white);
|
draw_set_color(c_white);
|
||||||
draw_rectangle(0, 0, content_pane.surface_w, ui(16 + 24 / 2), false);
|
draw_rectangle(0, 0, content_pane.surface_w, ui(16 + 24 / 2), false);
|
||||||
|
|
|
@ -8,11 +8,9 @@ if !ready exit;
|
||||||
|
|
||||||
#region search
|
#region search
|
||||||
WIDGET_CURRENT = tb_search;
|
WIDGET_CURRENT = tb_search;
|
||||||
|
tb_search.setFocusHover(sFOCUS, sHOVER);
|
||||||
|
|
||||||
if(search_string == "") {
|
if(search_string == "") {
|
||||||
tb_search.setFocusHover(false, false);
|
|
||||||
tb_search.sprite_index = 1;
|
|
||||||
|
|
||||||
catagory_pane.setFocusHover(sFOCUS, sHOVER);
|
catagory_pane.setFocusHover(sFOCUS, sHOVER);
|
||||||
catagory_pane.draw(dialog_x + ui(14), dialog_y + ui(52));
|
catagory_pane.draw(dialog_x + ui(14), dialog_y + ui(52));
|
||||||
|
|
||||||
|
@ -23,7 +21,6 @@ if !ready exit;
|
||||||
|
|
||||||
node_selecting = 0;
|
node_selecting = 0;
|
||||||
} else {
|
} else {
|
||||||
tb_search.setFocusHover(true, true);
|
|
||||||
draw_sprite_stretched(THEME.ui_panel_bg, 1, dialog_x + ui(14), dialog_y + ui(52), dialog_w - ui(28), dialog_h - ui(66));
|
draw_sprite_stretched(THEME.ui_panel_bg, 1, dialog_x + ui(14), dialog_y + ui(52), dialog_w - ui(28), dialog_h - ui(66));
|
||||||
search_pane.setFocusHover(sFOCUS, sHOVER);
|
search_pane.setFocusHover(sFOCUS, sHOVER);
|
||||||
search_pane.draw(dialog_x + ui(16), dialog_y + ui(52));
|
search_pane.draw(dialog_x + ui(16), dialog_y + ui(52));
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
window_set_min_width(960);
|
window_set_min_width(960);
|
||||||
window_set_min_height(600);
|
window_set_min_height(600);
|
||||||
|
|
||||||
if(OS == os_macosx)
|
//if(OS == os_windows) gameframe_init_native();
|
||||||
mac_window_init();
|
if(OS == os_macosx) mac_window_init();
|
||||||
|
|
||||||
depth = 0;
|
depth = 0;
|
||||||
win_wp = WIN_W;
|
win_wp = WIN_W;
|
||||||
|
|
|
@ -45,6 +45,8 @@
|
||||||
directory_verify(DIRECTORY);
|
directory_verify(DIRECTORY);
|
||||||
|
|
||||||
APP_LOCATION = program_directory;
|
APP_LOCATION = program_directory;
|
||||||
|
if(OS == os_macosx)
|
||||||
|
APP_LOCATION = string_replace(APP_LOCATION, "/Contents/MacOS/", "/Contents/Resources/");
|
||||||
if(string_pos("GameMakerStudio2\\Cache\\runtimes", APP_LOCATION))
|
if(string_pos("GameMakerStudio2\\Cache\\runtimes", APP_LOCATION))
|
||||||
APP_LOCATION = working_directory;
|
APP_LOCATION = working_directory;
|
||||||
print($"===================== WORKING DIRECTORIES =====================\n\t{working_directory}\n\t{DIRECTORY}");
|
print($"===================== WORKING DIRECTORIES =====================\n\t{working_directory}\n\t{DIRECTORY}");
|
||||||
|
|
|
@ -7,12 +7,14 @@ HOVERING_ELEMENT = _HOVERING_ELEMENT;
|
||||||
_HOVERING_ELEMENT = noone;
|
_HOVERING_ELEMENT = noone;
|
||||||
|
|
||||||
#region minimize
|
#region minimize
|
||||||
if(OS == os_windows && winMan_isMinimized()) {
|
if(OS == os_windows) {
|
||||||
|
if(winMan_isMinimized()) {
|
||||||
if(!minimized)
|
if(!minimized)
|
||||||
game_set_speed(1, gamespeed_fps);
|
game_set_speed(1, gamespeed_fps);
|
||||||
minimized = true;
|
minimized = true;
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(minimized) {
|
if(minimized) {
|
||||||
game_set_speed(PREFERENCES.ui_framerate, gamespeed_fps);
|
game_set_speed(PREFERENCES.ui_framerate, gamespeed_fps);
|
||||||
|
|
|
@ -13,5 +13,5 @@
|
||||||
#macro BLEND_MULTIPLY gpu_set_blendmode_ext(bm_dest_colour, bm_zero)
|
#macro BLEND_MULTIPLY gpu_set_blendmode_ext(bm_dest_colour, bm_zero)
|
||||||
#macro BLEND_SUBTRACT gpu_set_blendmode(bm_subtract)
|
#macro BLEND_SUBTRACT gpu_set_blendmode(bm_subtract)
|
||||||
|
|
||||||
#macro DRAW_CLEAR draw_clear_alpha(0, 0)
|
#macro DRAW_CLEAR draw_clear_alpha(0, 0);
|
||||||
#endregion
|
#endregion
|
|
@ -11,54 +11,54 @@
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
function _log_template() {
|
function _log_template() { #region
|
||||||
INLINE
|
INLINE
|
||||||
return $"{current_year}/{current_month}/{current_day} {string_lead_zero(current_hour, 2)}:{string_lead_zero(current_minute, 2)}:{string_lead_zero(current_second, 2)} > ";
|
return $"{current_year}/{current_month}/{current_day} {string_lead_zero(current_hour, 2)}:{string_lead_zero(current_minute, 2)}:{string_lead_zero(current_second, 2)} > ";
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function __log(title, str, fname = "log/log.txt") {
|
function __log(title, str, fname = "log/log.txt") { #region
|
||||||
var path = DIRECTORY + fname;
|
var path = DIRECTORY + fname;
|
||||||
var f = file_text_open_append(path);
|
var f = file_text_open_append(path);
|
||||||
var t = _log_template();
|
var t = _log_template();
|
||||||
file_text_write_string(f, $"{title}{t}{str}\n");
|
file_text_write_string(f, $"{title}{t}{str}\n");
|
||||||
file_text_close(f);
|
file_text_close(f);
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function log_message(title, str, icon = noone, flash = false, write = true) {
|
function log_message(title, str, icon = noone, flash = false, write = true) { #region
|
||||||
if(TEST_ERROR) return;
|
if(TEST_ERROR) return;
|
||||||
if(write) __log("[MESSAGE] ", string(title) + ": " + string(str));
|
if(write) __log("[MESSAGE] ", string(title) + ": " + string(str));
|
||||||
|
|
||||||
return noti_status(string(title) + ": " + string(str), icon, flash);
|
return noti_status(string(title) + ": " + string(str), icon, flash);
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function log_warning(title, str, ref = noone) {
|
function log_warning(title, str, ref = noone) { #region
|
||||||
if(TEST_ERROR) return;
|
if(TEST_ERROR) return;
|
||||||
__log("[WARNING] ", string(title) + ": " + string(str));
|
__log("[WARNING] ", string(title) + ": " + string(str));
|
||||||
|
|
||||||
return noti_warning(string(title) + ": " + string(str),, ref);
|
return noti_warning(string(title) + ": " + string(str),, ref);
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function log_crash(str) {
|
function log_crash(str) { #region
|
||||||
if(TEST_ERROR) return;
|
if(TEST_ERROR) return;
|
||||||
__log("[ERROR] ", string(str));
|
__log("[ERROR] ", string(str));
|
||||||
|
|
||||||
return noti_error(string(str));
|
return noti_error(string(str));
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function log_newline() {
|
function log_newline() { #region
|
||||||
var path = DIRECTORY + "log/log.txt";
|
var path = DIRECTORY + "log/log.txt";
|
||||||
var f = file_text_open_write(path);
|
var f = file_text_open_write(path);
|
||||||
file_text_writeln(f);
|
file_text_writeln(f);
|
||||||
file_text_close(f);
|
file_text_close(f);
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function log_clear() {
|
function log_clear() { #region
|
||||||
var path = DIRECTORY + "log/log.txt";
|
var path = DIRECTORY + "log/log.txt";
|
||||||
if(file_exists_empty(path))
|
if(file_exists_empty(path))
|
||||||
file_delete(path);
|
file_delete(path);
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function exception_print(e) {
|
function exception_print(e) { #region
|
||||||
if(!is_struct(e) || !struct_has(e, "longMessage")) return string(e);
|
if(!is_struct(e) || !struct_has(e, "longMessage")) return string(e);
|
||||||
|
|
||||||
var str = "\n\n========== Crash log ==========\n\n" + e.longMessage;
|
var str = "\n\n========== Crash log ==========\n\n" + e.longMessage;
|
||||||
|
@ -70,10 +70,10 @@ function exception_print(e) {
|
||||||
str += "\n\n========= Crash log end =========\n";
|
str += "\n\n========= Crash log end =========\n";
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function setException() {
|
function setException() { #region
|
||||||
if(OS == os_macosx) return;
|
if(OS == os_macosx) return noone;
|
||||||
|
|
||||||
exception_unhandled_handler(function(ex) {
|
exception_unhandled_handler(function(ex) {
|
||||||
var path = string(DIRECTORY) + "prev_crash.pxc";
|
var path = string(DIRECTORY) + "prev_crash.pxc";
|
||||||
|
@ -88,23 +88,25 @@ function setException() {
|
||||||
}
|
}
|
||||||
tt += "\n---------------------------- :( ----------------------------\n";
|
tt += "\n---------------------------- :( ----------------------------\n";
|
||||||
|
|
||||||
var path = program_directory + "report/crash_log.txt";
|
var path = $"{env_user()}crash_log.txt";
|
||||||
|
|
||||||
file_text_write_all(path, tt);
|
file_text_write_all(path, tt);
|
||||||
clipboard_set_text(tt);
|
clipboard_set_text(tt);
|
||||||
show_debug_message(tt);
|
show_debug_message(tt);
|
||||||
|
|
||||||
var rep = $"{program_directory}report\\PXC crash reporter.exe";
|
var rep = $"{program_directory}report\\PXC crash reporter.exe";
|
||||||
//show_message($"Save crash report at {path} : Opening crash reporter at {rep} [{file_exists(rep)}]");
|
if(OS == os_macosx) rep = $"{program_directory}PXC_crash_reporter.app";
|
||||||
shell_execute_async(rep, DIRECTORY);
|
|
||||||
|
var pid = shell_execute_async(rep, DIRECTORY);
|
||||||
|
show_message($"{rep} [{file_exists(rep)}]: {pid}");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
}
|
} #endregion
|
||||||
//setException();
|
|
||||||
|
|
||||||
function resetException() { exception_unhandled_handler(undefined); }
|
function resetException() { exception_unhandled_handler(undefined); }
|
||||||
|
|
||||||
function printCallStack(maxDepth = 32) {
|
function printCallStack(maxDepth = 32) { #region
|
||||||
var stack = debug_get_callstack(maxDepth);
|
var stack = debug_get_callstack(maxDepth);
|
||||||
|
|
||||||
print($"Call Stack:");
|
print($"Call Stack:");
|
||||||
|
@ -133,4 +135,4 @@ function printCallStack(maxDepth = 32) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print("")
|
print("")
|
||||||
}
|
} #endregion
|
|
@ -17,8 +17,8 @@ function filepath_resolve(path) {
|
||||||
|
|
||||||
function get_open_filenames_compat(ext, sel) {
|
function get_open_filenames_compat(ext, sel) {
|
||||||
INLINE
|
INLINE
|
||||||
return get_open_filenames(ext, sel);
|
//return get_open_filenames(ext, sel);
|
||||||
|
|
||||||
//if(OS == os_windows) return get_open_filenames(ext, sel);
|
if(OS == os_windows) return get_open_filenames(ext, sel);
|
||||||
//return get_open_filename(ext, sel);
|
return get_open_filename(ext, sel);
|
||||||
}
|
}
|
0
scripts/gameframe/Gameframe.yy._
Normal file
1310
scripts/gameframe/gameframe.gml
Normal file
11
scripts/gameframe/gameframe.yy
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMScript",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "gameframe",
|
||||||
|
"isCompatibility": false,
|
||||||
|
"isDnD": false,
|
||||||
|
"parent": {
|
||||||
|
"name": "WinMan",
|
||||||
|
"path": "folders/_extensions/WinMan.yy",
|
||||||
|
},
|
||||||
|
}
|
|
@ -25,10 +25,10 @@
|
||||||
globalvar VERSION, SAVE_VERSION, VERSION_STRING, BUILD_NUMBER, LATEST_VERSION;
|
globalvar VERSION, SAVE_VERSION, VERSION_STRING, BUILD_NUMBER, LATEST_VERSION;
|
||||||
|
|
||||||
LATEST_VERSION = 11500;
|
LATEST_VERSION = 11500;
|
||||||
VERSION = 11603;
|
VERSION = 11604;
|
||||||
SAVE_VERSION = 11600.1;
|
SAVE_VERSION = 11600.1;
|
||||||
VERSION_STRING = "1.16.0.3";
|
VERSION_STRING = "1.16.0.4";
|
||||||
BUILD_NUMBER = 11603;
|
BUILD_NUMBER = 11604;
|
||||||
|
|
||||||
globalvar APPEND_MAP;
|
globalvar APPEND_MAP;
|
||||||
APPEND_MAP = ds_map_create();
|
APPEND_MAP = ds_map_create();
|
||||||
|
|
|
@ -18,6 +18,8 @@ function Node_3D_Mesh_Extrude(_x, _y, _group = noone) : Node_3D_Mesh(_x, _y, _gr
|
||||||
["Extrude", false], in_mesh + 0, in_mesh + 1, in_mesh + 3,
|
["Extrude", false], in_mesh + 0, in_mesh + 1, in_mesh + 3,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
temp_surface = [ noone, noone ];
|
||||||
|
|
||||||
static processData = function(_output, _data, _output_index, _array_index = 0) { #region
|
static processData = function(_output, _data, _output_index, _array_index = 0) { #region
|
||||||
var _mat = _data[in_mesh + 0];
|
var _mat = _data[in_mesh + 0];
|
||||||
if(!is_instanceof(_mat, __d3dMaterial)) return noone;
|
if(!is_instanceof(_mat, __d3dMaterial)) return noone;
|
||||||
|
@ -27,8 +29,11 @@ function Node_3D_Mesh_Extrude(_x, _y, _group = noone) : Node_3D_Mesh(_x, _y, _gr
|
||||||
var _updt = _data[in_mesh + 3];
|
var _updt = _data[in_mesh + 3];
|
||||||
var _surf = _mat.surface;
|
var _surf = _mat.surface;
|
||||||
|
|
||||||
|
temp_surface[0] = surface_cvt_8unorm(temp_surface[0], _surf);
|
||||||
|
temp_surface[1] = surface_cvt_8unorm(temp_surface[1], _hght);
|
||||||
|
|
||||||
var object = getObject(_array_index);
|
var object = getObject(_array_index);
|
||||||
object.checkParameter({ surface: _surf, height: _hght, smooth: _smt }, _updt);
|
object.checkParameter({ surface: temp_surface[0], height: temp_surface[1], smooth: _smt }, _updt);
|
||||||
|
|
||||||
var _matN = _mat.clone();
|
var _matN = _mat.clone();
|
||||||
var _nSurf = surface_create(surface_get_width(_surf), surface_get_height(_surf));
|
var _nSurf = surface_create(surface_get_width(_surf), surface_get_height(_surf));
|
||||||
|
|
|
@ -858,7 +858,7 @@ function Node_Armature_Bind(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
|
||||||
applyScal: _psca,
|
applyScal: _psca,
|
||||||
});
|
});
|
||||||
|
|
||||||
surface_set_shader(temp_surface[_bg], sh_sample, true, BLEND.over);
|
surface_set_shader(temp_surface[_bg], sh_sample, true, BLEND.alphamulp);
|
||||||
blend_temp_surface = temp_surface[2];
|
blend_temp_surface = temp_surface[2];
|
||||||
draw_surface_blend_ext(temp_surface[!_bg], _s, _pos[0], _pos[1], _sca[0], _sca[1], _rot);
|
draw_surface_blend_ext(temp_surface[!_bg], _s, _pos[0], _pos[1], _sca[0], _sca[1], _rot);
|
||||||
surface_reset_shader();
|
surface_reset_shader();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
function Node_create_Blend(_x, _y, _group = noone, _param = {}) {
|
function Node_create_Blend(_x, _y, _group = noone, _param = {}) { #region
|
||||||
var node = new Node_Blend(_x, _y, _group);
|
var node = new Node_Blend(_x, _y, _group);
|
||||||
return node;
|
return node;
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
|
function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
|
||||||
name = "Blend";
|
name = "Blend";
|
||||||
|
@ -45,12 +45,15 @@ function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
|
||||||
inputs[| 13] = nodeValue("Mask feather", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
inputs[| 13] = nodeValue("Mask feather", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
||||||
.setDisplay(VALUE_DISPLAY.slider, { range: [1, 16, 1] });
|
.setDisplay(VALUE_DISPLAY.slider, { range: [1, 16, 1] });
|
||||||
|
|
||||||
|
inputs[| 14] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 0.5 ])
|
||||||
|
.setDisplay(VALUE_DISPLAY.vector);
|
||||||
|
|
||||||
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||||
|
|
||||||
input_display_list = [ 8,
|
input_display_list = [ 8,
|
||||||
["Surfaces", true], 0, 1, 4, 12, 13, 6, 7,
|
["Surfaces", true], 0, 1, 4, 12, 13, 6, 7,
|
||||||
["Blend", false], 2, 3, 9,
|
["Blend", false], 2, 3, 9,
|
||||||
["Transform", false], 5, 10, 11,
|
["Transform", false], 5, 14,
|
||||||
]
|
]
|
||||||
|
|
||||||
attribute_surface_depth();
|
attribute_surface_depth();
|
||||||
|
@ -58,6 +61,66 @@ function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
|
||||||
temp_surface = [ surface_create(1, 1), surface_create(1, 1) ];
|
temp_surface = [ surface_create(1, 1), surface_create(1, 1) ];
|
||||||
blend_temp_surface = temp_surface[1];
|
blend_temp_surface = temp_surface[1];
|
||||||
|
|
||||||
|
dragging = false;
|
||||||
|
drag_sx = 0;
|
||||||
|
drag_sy = 0;
|
||||||
|
drag_mx = 0;
|
||||||
|
drag_my = 0;
|
||||||
|
|
||||||
|
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { #region
|
||||||
|
var _surf = outputs[| 0].getValue();
|
||||||
|
if(is_array(_surf)) _surf = array_safe_get(_surf, preview_index);
|
||||||
|
if(is_struct(_surf)) return;
|
||||||
|
if(!surface_exists(_surf)) return;
|
||||||
|
|
||||||
|
var _fore = getSingleValue( 1);
|
||||||
|
var _fill = getSingleValue( 5);
|
||||||
|
var _posi = getSingleValue(14);
|
||||||
|
if(_fill) return;
|
||||||
|
|
||||||
|
var sw = surface_get_width_safe( _surf);
|
||||||
|
var sh = surface_get_height_safe(_surf);
|
||||||
|
var fw = surface_get_width_safe( _fore);
|
||||||
|
var fh = surface_get_height_safe(_fore);
|
||||||
|
|
||||||
|
var _rx = _posi[0] * sw - fw / 2;
|
||||||
|
var _ry = _posi[1] * sh - fh / 2;
|
||||||
|
_rx = _x + _rx * _s;
|
||||||
|
_ry = _y + _ry * _s;
|
||||||
|
var _rw = fw * _s;
|
||||||
|
var _rh = fh * _s;
|
||||||
|
|
||||||
|
if(dragging) {
|
||||||
|
var px = drag_sx + (_mx - drag_mx) / _s;
|
||||||
|
var py = drag_sy + (_my - drag_my) / _s;
|
||||||
|
|
||||||
|
px /= sw;
|
||||||
|
py /= sh;
|
||||||
|
|
||||||
|
if(inputs[| 14].setValue([ px, py ]))
|
||||||
|
UNDO_HOLDING = true;
|
||||||
|
|
||||||
|
if(mouse_release(mb_left)) {
|
||||||
|
UNDO_HOLDING = false;
|
||||||
|
dragging = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_set_color(COLORS._main_accent);
|
||||||
|
if(dragging || (active && point_in_rectangle(_mx, _my, _rx, _ry, _rx + _rw, _ry + _rh))) {
|
||||||
|
draw_rectangle_width(_rx, _ry, _rx + _rw, _ry + _rh, 2);
|
||||||
|
|
||||||
|
if(mouse_press(mb_left)) {
|
||||||
|
dragging = true;
|
||||||
|
drag_sx = _posi[0] * sw;
|
||||||
|
drag_sy = _posi[1] * sh;
|
||||||
|
drag_mx = _mx;
|
||||||
|
drag_my = _my;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
draw_rectangle(_rx, _ry, _rx + _rw, _ry + _rh, true);
|
||||||
|
} #endregion
|
||||||
|
|
||||||
static step = function() { #region
|
static step = function() { #region
|
||||||
var _back = getSingleValue(0);
|
var _back = getSingleValue(0);
|
||||||
var _fore = getSingleValue(1);
|
var _fore = getSingleValue(1);
|
||||||
|
@ -70,8 +133,7 @@ function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
|
||||||
inputs[| 6].editWidget.data_list = _atlas? [ "Background", "Forground" ] : [ "Background", "Forground", "Mask", "Maximum", "Constant" ];
|
inputs[| 6].editWidget.data_list = _atlas? [ "Background", "Forground" ] : [ "Background", "Forground", "Mask", "Maximum", "Constant" ];
|
||||||
inputs[| 7].setVisible(_outp == 4);
|
inputs[| 7].setVisible(_outp == 4);
|
||||||
|
|
||||||
inputs[| 10].setVisible(_fill == 0 && !_atlas);
|
inputs[| 14].setVisible(_fill == 0 && !_atlas);
|
||||||
inputs[| 11].setVisible(_fill == 0 && !_atlas);
|
|
||||||
|
|
||||||
var _msk = is_surface(getSingleValue(4));
|
var _msk = is_surface(getSingleValue(4));
|
||||||
inputs[| 12].setVisible(_msk);
|
inputs[| 12].setVisible(_msk);
|
||||||
|
@ -92,6 +154,7 @@ function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
|
||||||
|
|
||||||
var _halign = _data[10];
|
var _halign = _data[10];
|
||||||
var _valign = _data[11];
|
var _valign = _data[11];
|
||||||
|
var _posit = _data[14];
|
||||||
|
|
||||||
var _mskInv = _data[12];
|
var _mskInv = _data[12];
|
||||||
var _mskFea = _data[13];
|
var _mskFea = _data[13];
|
||||||
|
@ -156,20 +219,11 @@ function Node_Blend(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) con
|
||||||
var fw = surface_get_width_safe(_fore);
|
var fw = surface_get_width_safe(_fore);
|
||||||
var fh = surface_get_height_safe(_fore);
|
var fh = surface_get_height_safe(_fore);
|
||||||
|
|
||||||
switch(_halign) {
|
var px = _posit[0] * ww;
|
||||||
case 0 : sx = 0; break;
|
var py = _posit[1] * hh;
|
||||||
case 1 : sx = ww / 2 - fw / 2; break;
|
|
||||||
case 2 : sx = ww - fw; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(_valign) {
|
|
||||||
case 0 : sy = 0; break;
|
|
||||||
case 1 : sy = hh / 2 - fh / 2; break;
|
|
||||||
case 2 : sy = hh - fh; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
surface_set_shader(_foreDraw, noone,, BLEND.over);
|
surface_set_shader(_foreDraw, noone,, BLEND.over);
|
||||||
draw_surface_safe(_fore, sx, sy);
|
draw_surface_safe(_fore, px - fw / 2, py - fh / 2);
|
||||||
surface_reset_shader();
|
surface_reset_shader();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,13 +96,13 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
.rejectArray();
|
.rejectArray();
|
||||||
|
|
||||||
format_image = [ ".png", ".jpg", ".webp" ];
|
format_image = [ ".png", ".jpg", ".webp" ];
|
||||||
format_animation = [ ".gif", ".webp", ".mp4" ];
|
format_animation = [ ".gif", ".apng", ".webp", ".mp4" ];
|
||||||
|
|
||||||
inputs[| 9] = nodeValue("Format", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
inputs[| 9] = nodeValue("Format", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
.setDisplay(VALUE_DISPLAY.enum_scroll, { data: format_image, update_hover: false })
|
.setDisplay(VALUE_DISPLAY.enum_scroll, { data: format_image, update_hover: false })
|
||||||
.rejectArray();
|
.rejectArray();
|
||||||
|
|
||||||
inputs[| 10] = nodeValue("Quality", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 80)
|
inputs[| 10] = nodeValue("Quality", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 23)
|
||||||
.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 100, 1 ] })
|
.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 100, 1 ] })
|
||||||
.rejectArray();
|
.rejectArray();
|
||||||
|
|
||||||
|
@ -202,9 +202,8 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
|
|
||||||
input_display_list = [
|
input_display_list = [
|
||||||
["Export", false], 0, 1, 2, export_template,
|
["Export", false], 0, 1, 2, export_template,
|
||||||
["Format ", false], 3, 9,
|
["Format ", false], 3, 9, 6, 7, 10, 13,
|
||||||
["Animation", false], 12, 8, 5, 11, 14,
|
["Animation", false], 12, 8, 5, 11, 14,
|
||||||
["Quality", false], 6, 7, 10, 13,
|
|
||||||
];
|
];
|
||||||
|
|
||||||
render_process_id = 0;
|
render_process_id = 0;
|
||||||
|
@ -218,10 +217,27 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
gifski = filepath_resolve(PREFERENCES.gifski_path) + "win/gifski.exe";
|
gifski = filepath_resolve(PREFERENCES.gifski_path) + "win/gifski.exe";
|
||||||
ffmpeg = filepath_resolve(PREFERENCES.ffmpeg_path) + "bin/ffmpeg.exe";
|
ffmpeg = filepath_resolve(PREFERENCES.ffmpeg_path) + "bin/ffmpeg.exe";
|
||||||
|
|
||||||
|
if(OS == os_windows) {
|
||||||
if(!file_exists_empty(converter) || !file_exists_empty(magick)) noti_warning($"No ImageMagick detected at {magick}, please make sure the installation is complete and ImageMagick path is set properly in preference.");
|
if(!file_exists_empty(converter) || !file_exists_empty(magick)) noti_warning($"No ImageMagick detected at {magick}, please make sure the installation is complete and ImageMagick path is set properly in preference.");
|
||||||
if(!file_exists_empty(webp)) noti_warning($"No webp detected at {webp}, please make sure the installation is complete and webp path is set properly in preference.");
|
if(!file_exists_empty(webp)) noti_warning($"No webp detected at {webp}, please make sure the installation is complete and webp path is set properly in preference.");
|
||||||
if(!file_exists_empty(gifski)) noti_warning($"No gifski detected at {gifski}, please make sure the installation is complete and gifski path is set properly in preference.");
|
if(!file_exists_empty(gifski)) noti_warning($"No gifski detected at {gifski}, please make sure the installation is complete and gifski path is set properly in preference.");
|
||||||
if(!file_exists_empty(ffmpeg)) noti_warning($"No ffmpeg detected at {ffmpeg}, please make sure the installation is complete and ffmpeg path is set properly in preference.");
|
if(!file_exists_empty(ffmpeg)) noti_warning($"No FFmpeg detected at {ffmpeg}, please make sure the installation is complete and FFmpeg path is set properly in preference.");
|
||||||
|
} else if(OS == os_macosx) {
|
||||||
|
var check_convert = ExecutedProcessReadFromStandardOutput(shell_execute("convert", ""));
|
||||||
|
if(string_pos(check_convert, "not found")) noti_warning($"No ImageMagick installed, please install imagemagick with homebrew or use the provided 'mac-libraries-installer.command'.");
|
||||||
|
|
||||||
|
var check_webp = ExecutedProcessReadFromStandardOutput(shell_execute("webp", ""));
|
||||||
|
if(string_pos(check_webp, "not found")) noti_warning($"No webp installed, please install webp with homwbrew or use the provided 'mac-libraries-installer.command'.");
|
||||||
|
|
||||||
|
var check_ffmpeg = ExecutedProcessReadFromStandardOutput(shell_execute("ffmpeg", ""));
|
||||||
|
if(string_pos(check_ffmpeg, "not found")) noti_warning($"No FFmpeg installed, please install FFmpeg with homebrew or use the provided 'mac-libraries-installer.command'.");
|
||||||
|
|
||||||
|
var _opt = "/opt/homebrew/bin/";
|
||||||
|
converter = _opt + "convert";
|
||||||
|
magick = _opt + "magick";
|
||||||
|
webp = _opt + "webp";
|
||||||
|
ffmpeg = _opt + "ffmpeg";
|
||||||
|
}
|
||||||
|
|
||||||
static onValueUpdate = function(_index) { #region
|
static onValueUpdate = function(_index) { #region
|
||||||
var form = getInputData(3);
|
var form = getInputData(3);
|
||||||
|
@ -329,20 +345,11 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
var loop_str = loop? 0 : 1;
|
var loop_str = loop? 0 : 1;
|
||||||
var use_gifski = false;
|
var use_gifski = false;
|
||||||
|
|
||||||
if(use_gifski) {
|
|
||||||
var shell_cmd = $"-o {string_quote(target_path)} -r {rate} --repeat {loop_str} -Q {qual} {string_quote(temp_path)}";
|
|
||||||
|
|
||||||
//print($"{gifski} {shell_cmd}");
|
|
||||||
render_process_id = shell_execute_async(gifski, shell_cmd, self);
|
|
||||||
} else {
|
|
||||||
var shell_cmd = $"-delay {framerate} -alpha set -dispose previous -loop {loop_str}";
|
var shell_cmd = $"-delay {framerate} -alpha set -dispose previous -loop {loop_str}";
|
||||||
if(opti) shell_cmd += $" -fuzz {fuzz * 100}% -layers OptimizeFrame -layers OptimizeTransparency";
|
if(opti) shell_cmd += $" -fuzz {fuzz * 100}% -layers OptimizeFrame -layers OptimizeTransparency";
|
||||||
shell_cmd += $" {string_quote(temp_path)} {string_quote(target_path)}";
|
shell_cmd += $" {string_quote(temp_path)} {string_quote(target_path)}";
|
||||||
|
|
||||||
//print($"{converter} {shell_cmd}");
|
|
||||||
render_process_id = shell_execute_async(converter, shell_cmd, self);
|
render_process_id = shell_execute_async(converter, shell_cmd, self);
|
||||||
}
|
|
||||||
|
|
||||||
render_type = "gif";
|
render_type = "gif";
|
||||||
render_target = target_path;
|
render_target = target_path;
|
||||||
|
|
||||||
|
@ -351,6 +358,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
|
|
||||||
static renderMp4 = function(temp_path, target_path) { #region
|
static renderMp4 = function(temp_path, target_path) { #region
|
||||||
var rate = getInputData( 8);
|
var rate = getInputData( 8);
|
||||||
|
var qual = getInputData(10); qual = clamp(qual, 0, 51);
|
||||||
if(rate == 0) rate = 1;
|
if(rate == 0) rate = 1;
|
||||||
|
|
||||||
if(file_exists_empty(target_path)) file_delete(target_path);
|
if(file_exists_empty(target_path)) file_delete(target_path);
|
||||||
|
@ -358,8 +366,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
temp_path = string_replace_all(temp_path, "/", "\\");
|
temp_path = string_replace_all(temp_path, "/", "\\");
|
||||||
target_path = string_replace_all(target_path, "/", "\\");
|
target_path = string_replace_all(target_path, "/", "\\");
|
||||||
|
|
||||||
var shell_cmd = $"-hide_banner -loglevel quiet -framerate {rate} -i \"{temp_path}%05d.png\" -c:v libx264 -r {rate} -pix_fmt yuv420p {string_quote(target_path)}";
|
var shell_cmd = $"-hide_banner -loglevel quiet -framerate {rate} -i \"{temp_path}%05d.png\" -c:v libx264 -r {rate} -pix_fmt yuv420p -crf {qual} {string_quote(target_path)}";
|
||||||
print($"{ffmpeg} {shell_cmd}")
|
|
||||||
|
|
||||||
render_process_id = shell_execute_async(ffmpeg, shell_cmd, self);
|
render_process_id = shell_execute_async(ffmpeg, shell_cmd, self);
|
||||||
render_type = "mp4";
|
render_type = "mp4";
|
||||||
|
@ -368,6 +375,24 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
if(render_process_id != 0) array_push(RENDERING, node_id);
|
if(render_process_id != 0) array_push(RENDERING, node_id);
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
static renderApng = function(temp_path, target_path) { #region
|
||||||
|
var rate = getInputData( 8);
|
||||||
|
if(rate == 0) rate = 1;
|
||||||
|
|
||||||
|
if(file_exists_empty(target_path)) file_delete(target_path);
|
||||||
|
|
||||||
|
temp_path = string_replace_all(temp_path, "/", "\\");
|
||||||
|
target_path = string_replace_all(target_path, "/", "\\");
|
||||||
|
|
||||||
|
var shell_cmd = $"-hide_banner -loglevel quiet -framerate {rate} -i \"{temp_path}%05d.png\" -plays 0 {string_quote(target_path)}";
|
||||||
|
|
||||||
|
render_process_id = shell_execute_async(ffmpeg, shell_cmd, self);
|
||||||
|
render_type = "apng";
|
||||||
|
render_target = target_path;
|
||||||
|
|
||||||
|
if(render_process_id != 0) array_push(RENDERING, node_id);
|
||||||
|
} #endregion
|
||||||
|
|
||||||
static pathString = function(path, index = 0, _array = false) { #region
|
static pathString = function(path, index = 0, _array = false) { #region
|
||||||
var suff = getInputData( 2);
|
var suff = getInputData( 2);
|
||||||
var form = getInputData( 3);
|
var form = getInputData( 3);
|
||||||
|
@ -608,37 +633,45 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
if(is_array(path)) target_path = pathString(array_safe_get(path, i), i);
|
if(is_array(path)) target_path = pathString(array_safe_get(path, i), i);
|
||||||
else target_path = pathString(path, i);
|
else target_path = pathString(path, i);
|
||||||
|
|
||||||
switch(extd) {
|
switch(format_animation[extd]) {
|
||||||
case 0 :
|
case ".gif" :
|
||||||
target_path = string_replace(target_path, ".png", ".gif");
|
target_path = string_replace(target_path, ".png", ".gif");
|
||||||
renderGif(temp_path, target_path);
|
renderGif(temp_path, target_path);
|
||||||
break;
|
break;
|
||||||
case 1 :
|
case ".webp" :
|
||||||
target_path = string_replace(target_path, ".png", ".webp");
|
target_path = string_replace(target_path, ".png", ".webp");
|
||||||
renderWebp(temp_path, target_path);
|
renderWebp(temp_path, target_path);
|
||||||
break;
|
break;
|
||||||
case 2 :
|
case ".mp4" :
|
||||||
target_path = string_replace(target_path, ".png", ".mp4");
|
target_path = string_replace(target_path, ".png", ".mp4");
|
||||||
renderMp4(temp_path, target_path);
|
renderMp4(temp_path, target_path);
|
||||||
break;
|
break;
|
||||||
|
case ".apng" :
|
||||||
|
target_path = string_replace(target_path, ".png", ".apng");
|
||||||
|
renderApng(temp_path, target_path);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
target_path = pathString(path);
|
target_path = pathString(path);
|
||||||
|
|
||||||
switch(extd) {
|
switch(format_animation[extd]) {
|
||||||
case 0 :
|
case ".gif" :
|
||||||
target_path = string_replace(target_path, ".png", ".gif");
|
target_path = string_replace(target_path, ".png", ".gif");
|
||||||
renderGif(directory + "/*.png", target_path);
|
renderGif(directory + "/*.png", target_path);
|
||||||
break;
|
break;
|
||||||
case 1 :
|
case ".webp" :
|
||||||
target_path = string_replace(target_path, ".png", ".webp");
|
target_path = string_replace(target_path, ".png", ".webp");
|
||||||
renderWebp(directory + "/", target_path);
|
renderWebp(directory + "/", target_path);
|
||||||
break;
|
break;
|
||||||
case 2 :
|
case ".mp4" :
|
||||||
target_path = string_replace(target_path, ".png", ".mp4");
|
target_path = string_replace(target_path, ".png", ".mp4");
|
||||||
renderMp4(directory + "/", target_path);
|
renderMp4(directory + "/", target_path);
|
||||||
break;
|
break;
|
||||||
|
case ".apng" :
|
||||||
|
target_path = string_replace(target_path, ".png", ".apng");
|
||||||
|
renderApng(directory + "/", target_path);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -711,24 +744,56 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
var anim = getInputData(3); // single, sequence, animation
|
var anim = getInputData(3); // single, sequence, animation
|
||||||
var extn = getInputData(9);
|
var extn = getInputData(9);
|
||||||
|
|
||||||
inputs[| 5].setVisible(anim == 2 && extn != 2);
|
|
||||||
inputs[| 6].setVisible(anim == 2 && extn != 2);
|
|
||||||
inputs[| 7].setVisible(anim == 2 && extn != 2);
|
|
||||||
inputs[| 8].setVisible(anim == 2);
|
|
||||||
inputs[| 11].setVisible(anim == 1);
|
inputs[| 11].setVisible(anim == 1);
|
||||||
inputs[| 12].setVisible(anim > 0);
|
inputs[| 12].setVisible(anim > 0);
|
||||||
inputs[| 12].editWidget.maxx = TOTAL_FRAMES;
|
inputs[| 12].editWidget.maxx = TOTAL_FRAMES;
|
||||||
inputs[| 13].setVisible(anim < 2);
|
|
||||||
inputs[| 14].setVisible(anim > 0);
|
inputs[| 14].setVisible(anim > 0);
|
||||||
|
|
||||||
if(anim == NODE_EXPORT_FORMAT.animation) {
|
if(anim == NODE_EXPORT_FORMAT.animation) {
|
||||||
|
var _fmt = array_safe_get(format_animation, extn);
|
||||||
|
|
||||||
|
inputs[| 5].setVisible(_fmt == ".gif");
|
||||||
|
inputs[| 6].setVisible(_fmt == ".gif");
|
||||||
|
inputs[| 7].setVisible(_fmt == ".gif");
|
||||||
|
inputs[| 8].setVisible(true);
|
||||||
|
|
||||||
inputs[| 9].display_data.data = format_animation;
|
inputs[| 9].display_data.data = format_animation;
|
||||||
inputs[| 9].editWidget.data_list = format_animation;
|
inputs[| 9].editWidget.data_list = format_animation;
|
||||||
inputs[| 10].setVisible(extn != 2);
|
|
||||||
|
inputs[| 13].setVisible(false);
|
||||||
|
|
||||||
|
if(_fmt == ".mp4") {
|
||||||
|
inputs[| 10].setName("CRF value");
|
||||||
|
inputs[| 10].tooltip = "Quality of the output, with 0 being the highest (and largest file size), and 51 being the lowest.";
|
||||||
|
|
||||||
|
inputs[| 10].setVisible(true);
|
||||||
|
inputs[| 10].editWidget.minn = 0;
|
||||||
|
inputs[| 10].editWidget.maxx = 51;
|
||||||
|
} else
|
||||||
|
inputs[| 10].setVisible(false);
|
||||||
} else {
|
} else {
|
||||||
|
var _fmt = array_safe_get(format_image, extn);
|
||||||
|
|
||||||
|
inputs[| 5].setVisible(false);
|
||||||
|
inputs[| 6].setVisible(false);
|
||||||
|
inputs[| 7].setVisible(false);
|
||||||
|
inputs[| 8].setVisible(false);
|
||||||
|
|
||||||
inputs[| 9].display_data.data = format_image;
|
inputs[| 9].display_data.data = format_image;
|
||||||
inputs[| 9].editWidget.data_list = format_image;
|
inputs[| 9].editWidget.data_list = format_image;
|
||||||
inputs[| 10].setVisible(extn != 0);
|
|
||||||
|
inputs[| 13].setVisible(_fmt == ".png");
|
||||||
|
|
||||||
|
if(_fmt == ".jpg" || _fmt == ".webp") {
|
||||||
|
inputs[| 10].setName("Quality");
|
||||||
|
inputs[| 10].tooltip = "Quality of the output.";
|
||||||
|
|
||||||
|
inputs[| 10].setVisible(true);
|
||||||
|
inputs[| 10].editWidget.minn = 0;
|
||||||
|
inputs[| 10].editWidget.maxx = 100;
|
||||||
|
} else
|
||||||
|
inputs[| 10].setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
outputs[| 0].visible = isInLoop();
|
outputs[| 0].visible = isInLoop();
|
||||||
|
@ -736,7 +801,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
if(render_process_id != 0) {
|
if(render_process_id != 0) {
|
||||||
var res = ProcIdExists(render_process_id);
|
var res = ProcIdExists(render_process_id);
|
||||||
|
|
||||||
if(res == 0) {
|
if(res == 0 || OS == os_macosx) {
|
||||||
var noti = log_message("EXPORT", $"Export {render_type} as {render_target}", THEME.noti_icon_tick, COLORS._main_value_positive, false);
|
var noti = log_message("EXPORT", $"Export {render_type} as {render_target}", THEME.noti_icon_tick, COLORS._main_value_positive, false);
|
||||||
noti.path = filename_dir(render_target);
|
noti.path = filename_dir(render_target);
|
||||||
noti.setOnClick(function() { shellOpenExplorer(self.path); }, "Open in explorer", THEME.explorer);
|
noti.setOnClick(function() { shellOpenExplorer(self.path); }, "Open in explorer", THEME.explorer);
|
||||||
|
|
|
@ -264,7 +264,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
var _time_last = values[| ds_list_size(values) - 1].time;
|
var _time_last = values[| ds_list_size(values) - 1].time;
|
||||||
var _time_dura = _time_last - _time_first;
|
var _time_dura = _time_last - _time_first;
|
||||||
|
|
||||||
if(_time > _time_last) { #region //loop
|
if(_time > _time_last) { #region //loop time
|
||||||
switch(prop.on_end) {
|
switch(prop.on_end) {
|
||||||
case KEYFRAME_END.loop :
|
case KEYFRAME_END.loop :
|
||||||
_time = _time_first + safe_mod(_time - _time_last, _time_dura + 1);
|
_time = _time_first + safe_mod(_time - _time_last, _time_dura + 1);
|
||||||
|
@ -281,7 +281,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
|
||||||
|
|
||||||
var _keyIndex;
|
var _keyIndex;
|
||||||
if(_time >= _len) _keyIndex = 999_999;
|
if(_time >= _len) _keyIndex = 999_999;
|
||||||
else if(_time <= 0) _keyIndex = 0;
|
else if(_time <= 0) _keyIndex = -1;
|
||||||
else _keyIndex = key_map[_time];
|
else _keyIndex = key_map[_time];
|
||||||
|
|
||||||
if(_keyIndex == -1) { #region Before first key
|
if(_keyIndex == -1) { #region Before first key
|
||||||
|
|
|
@ -66,10 +66,12 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
|
|
||||||
inputs[| 25] = nodeValue("Invert", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false );
|
inputs[| 25] = nodeValue("Invert", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false );
|
||||||
|
|
||||||
|
inputs[| 26] = nodeValue("Clamp range", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false );
|
||||||
|
|
||||||
input_display_list = [
|
input_display_list = [
|
||||||
["Output", true], 0, 1,
|
["Output", true], 0, 1,
|
||||||
["Line data", false], 6, 7, 19, 2, 20,
|
["Line data", false], 6, 7, 19, 2, 20,
|
||||||
["Line settings", false], 17, 3, 11, 12, 8, 25, 9, 13, 14,
|
["Line settings", false], 17, 3, 11, 12, 8, 25, 9, 26, 13, 14,
|
||||||
["Wiggle", false], 4, 5,
|
["Wiggle", false], 4, 5,
|
||||||
["Render", false], 10, 24, 15, 16,
|
["Render", false], 10, 24, 15, 16,
|
||||||
["Texture", false], 18, 21, 22, 23,
|
["Texture", false], 18, 21, 22, 23,
|
||||||
|
@ -125,7 +127,11 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
inputs[| 20].setVisible( _flen);
|
inputs[| 20].setVisible( _flen);
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
static processData = function(_outSurf, _data, _output_index, _array_index) {
|
static onValueUpdate = function(index = 0) { #region
|
||||||
|
if(index == 11) ds_map_clear(widthMap);
|
||||||
|
} #endregion
|
||||||
|
|
||||||
|
static processData = function(_outSurf, _data, _output_index, _array_index) { #region
|
||||||
#region data
|
#region data
|
||||||
var _dim = _data[0];
|
var _dim = _data[0];
|
||||||
var _bg = _data[1];
|
var _bg = _data[1];
|
||||||
|
@ -158,6 +164,7 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
|
|
||||||
var _colb = _data[24];
|
var _colb = _data[24];
|
||||||
var _ratInv = _data[25];
|
var _ratInv = _data[25];
|
||||||
|
var _clamp = _data[26];
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
if(CURRENT_FRAME == 0 || inputs[| 11].is_anim)
|
if(CURRENT_FRAME == 0 || inputs[| 11].is_anim)
|
||||||
|
@ -209,10 +216,6 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
var _pathLength = _useDistance? _pat.getLength(i) : 1;
|
var _pathLength = _useDistance? _pat.getLength(i) : 1;
|
||||||
if(_pathLength == 0) continue;
|
if(_pathLength == 0) continue;
|
||||||
|
|
||||||
var _segLength = struct_has(_pat, "getAccuLength")? _pat.getAccuLength(i) : [];
|
|
||||||
var _segLengthAmo = array_length(_segLength);
|
|
||||||
var _segIndex = 0;
|
|
||||||
|
|
||||||
var _pathStr = _rtStr;
|
var _pathStr = _rtStr;
|
||||||
var _pathEnd = _rtMax;
|
var _pathEnd = _rtMax;
|
||||||
|
|
||||||
|
@ -223,10 +226,10 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
var _total_prev = _total; //Use to prevent infinite loop
|
var _total_prev = _total; //Use to prevent infinite loop
|
||||||
var _freeze = 0; //Use to prevent infinite loop
|
var _freeze = 0; //Use to prevent infinite loop
|
||||||
|
|
||||||
var _prog_curr = frac(_shift); //Pointer to the current position
|
var _prog_curr = _clamp? _shift : frac(_shift); //Pointer to the current position
|
||||||
var _prog_next = 0;
|
var _prog_next = 0;
|
||||||
var _prog = _prog_curr + 1; //Record previous position to delete from _total
|
var _prog = _prog_curr + 1; //Record previous position to delete from _total
|
||||||
var _prog_total = 0; //Record how far the pointer have moved so far
|
var _prog_total = 0; //Record the distance the pointer has moved so far
|
||||||
var points = is_array(lines[i])? lines[i] : [];
|
var points = is_array(lines[i])? lines[i] : [];
|
||||||
var pointArrLen = array_length(points);
|
var pointArrLen = array_length(points);
|
||||||
var pointAmo = 0;
|
var pointAmo = 0;
|
||||||
|
@ -244,34 +247,47 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
_prog_curr *= _pathLength;
|
_prog_curr *= _pathLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(_total >= 0) {
|
var _segLength = struct_has(_pat, "getAccuLength")? _pat.getAccuLength(i) : [];
|
||||||
if(_useDistance) {
|
var _segLengthAmo = array_length(_segLength);
|
||||||
var segmentLength = _segIndex < _segLengthAmo? _segLength[_segIndex] : 99999;
|
var _segIndex = 0;
|
||||||
|
|
||||||
_prog_next = _prog_curr % _pathLength; //Wrap overflow path
|
if(_segLengthAmo)
|
||||||
_prog_next = min(_prog_curr + _stepLen, _pathLength, segmentLength);
|
while(_prog_curr > _segLength[_segIndex]) {
|
||||||
|
_segIndex++;
|
||||||
if(_prog_next == segmentLength)
|
if(_segIndex == _segLengthAmo) {
|
||||||
_segIndex = (_segIndex + 1) % _segLengthAmo;
|
_segIndex = 0;
|
||||||
_pathPng = _ratInv? _pathLength - _prog_curr : _prog_curr;
|
break;
|
||||||
} else {
|
}
|
||||||
if(_prog_curr >= 1) //Wrap overflow path
|
|
||||||
_prog_next = frac(_prog_curr);
|
|
||||||
else
|
|
||||||
_prog_next = min(_prog_curr + _stepLen, 1); //Move forward _stepLen or _total (if less) stop at 1
|
|
||||||
_pathPng = _ratInv? 1 - _prog_curr : _prog_curr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//print($"===== {_prog_curr}/{_segLength} : {_segIndex} =====");
|
||||||
|
while(_total >= 0) {
|
||||||
wght = 1;
|
wght = 1;
|
||||||
|
|
||||||
if(_useDistance) {
|
if(_useDistance) {
|
||||||
p = _pat.getPointDistance(_pathPng, i, p);
|
var segmentLength = array_safe_get(_segLength, _segIndex, _pathLength);
|
||||||
if(struct_has(_pat, "getWeightRatio"))
|
|
||||||
wght = _pat.getWeightRatio(_pathPng, i);
|
_prog_next = min(_prog_curr + _stepLen, _pathLength, segmentLength);
|
||||||
} else {
|
_pathPng = _ratInv? _pathLength - _prog_curr : _prog_curr;
|
||||||
p = _pat.getPointRatio(_pathPng, i, p);
|
|
||||||
|
//print($"{segmentLength}/{_pathLength} = {_prog_next}");
|
||||||
|
if(_prog_next == segmentLength) _segIndex++;
|
||||||
|
|
||||||
|
var _pp = _clamp? clamp(_pathPng, 0, _pathLength) : _pathPng
|
||||||
|
//print($"_pp = {_pp}");
|
||||||
|
|
||||||
|
p = _pat.getPointDistance(_pp, i, p);
|
||||||
if(struct_has(_pat, "getWeightDistance"))
|
if(struct_has(_pat, "getWeightDistance"))
|
||||||
wght = _pat.getWeightDistance(_pathPng, i);
|
wght = _pat.getWeightDistance(_pp, i);
|
||||||
|
} else {
|
||||||
|
_prog_next = min(_prog_curr + _stepLen, 1); //Move forward _stepLen or _total (if less) stop at 1
|
||||||
|
_pathPng = _ratInv? 1 - _prog_curr : _prog_curr;
|
||||||
|
|
||||||
|
var _pp = _clamp? clamp(_pathPng, 0, 1) : _pathPng
|
||||||
|
|
||||||
|
p = _pat.getPointRatio(_pp, i, p);
|
||||||
|
if(struct_has(_pat, "getWeightRatio"))
|
||||||
|
wght = _pat.getWeightRatio(_pp, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
_nx = p.x;
|
_nx = p.x;
|
||||||
|
@ -306,7 +322,8 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
pointAmo++;
|
pointAmo++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_prog_next > _prog_curr) {
|
if(_prog_next == _prog_curr) break;
|
||||||
|
else if(_prog_next > _prog_curr) {
|
||||||
_prog_total += _prog_next - _prog_curr;
|
_prog_total += _prog_next - _prog_curr;
|
||||||
_total -= _prog_next - _prog_curr;
|
_total -= _prog_next - _prog_curr;
|
||||||
}
|
}
|
||||||
|
@ -506,5 +523,5 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
return _outSurf;
|
return _outSurf;
|
||||||
}
|
} #endregion
|
||||||
}
|
}
|
|
@ -3,9 +3,9 @@ function Node_Mirror(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
|
||||||
|
|
||||||
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);
|
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ])
|
inputs[| 1] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 0.5 ])
|
||||||
.setDisplay(VALUE_DISPLAY.vector)
|
.setDisplay(VALUE_DISPLAY.vector)
|
||||||
.setUnitRef(function(index) { return getDimension(index); });
|
.setUnitRef(function(index) { return getDimension(index); }, VALUE_UNIT.reference);
|
||||||
|
|
||||||
inputs[| 2] = nodeValue("Angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
inputs[| 2] = nodeValue("Angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
.setDisplay(VALUE_DISPLAY.rotation);
|
.setDisplay(VALUE_DISPLAY.rotation);
|
||||||
|
|
|
@ -20,7 +20,7 @@ function Node_MK_Rain(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
inputs[| 6] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 1 ])
|
inputs[| 6] = nodeValue("Alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 1 ])
|
||||||
.setDisplay(VALUE_DISPLAY.slider_range);
|
.setDisplay(VALUE_DISPLAY.slider_range);
|
||||||
|
|
||||||
inputs[| 7] = nodeValue("Velocity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 2 ])
|
inputs[| 7] = nodeValue("Velocity", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 1, 2 ])
|
||||||
.setDisplay(VALUE_DISPLAY.vector_range);
|
.setDisplay(VALUE_DISPLAY.vector_range);
|
||||||
|
|
||||||
inputs[| 8] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, irandom_range(100_000, 999_999));
|
inputs[| 8] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, irandom_range(100_000, 999_999));
|
||||||
|
@ -33,9 +33,12 @@ function Node_MK_Rain(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
|
|
||||||
inputs[| 11] = nodeValue("Texture", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
|
inputs[| 11] = nodeValue("Texture", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
|
||||||
|
|
||||||
|
inputs[| 12] = nodeValue("Track extension", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ])
|
||||||
|
.setDisplay(VALUE_DISPLAY.slider_range, { range: [ 0, 10, 0.01 ] });
|
||||||
|
|
||||||
input_display_list = [ new Inspector_Sprite(s_MKFX), 0, 8,
|
input_display_list = [ new Inspector_Sprite(s_MKFX), 0, 8,
|
||||||
["Shape", false], 9, 3, 4, 10, 11,
|
["Shape", false], 9, 3, 4, 10, 11,
|
||||||
["Effect", false], 2, 1, 7,
|
["Effect", false], 2, 1, 7, 12,
|
||||||
["Render", false], 5, 6,
|
["Render", false], 5, 6,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -63,10 +66,10 @@ function Node_MK_Rain(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
var _shap = _data[9];
|
var _shap = _data[9];
|
||||||
var _snws = _data[10];
|
var _snws = _data[10];
|
||||||
var _text = _data[11];
|
var _text = _data[11];
|
||||||
|
var _trex = _data[12];
|
||||||
|
|
||||||
if(!is_surface(_surf)) return _outSurf;
|
if(!is_surface(_surf)) return _outSurf;
|
||||||
if(_shap == 2 && !is_surface(_text)) return _outSurf;
|
if(_shap == 2 && !is_surface(_text)) return _outSurf;
|
||||||
random_set_seed(_seed);
|
|
||||||
|
|
||||||
var _sw = surface_get_width_safe(_surf);
|
var _sw = surface_get_width_safe(_surf);
|
||||||
var _sh = surface_get_height_safe(_surf);
|
var _sh = surface_get_height_safe(_surf);
|
||||||
|
@ -97,7 +100,10 @@ function Node_MK_Rain(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
if(_1c) draw_set_color(_cc);
|
if(_1c) draw_set_color(_cc);
|
||||||
BLEND_ALPHA_MULP
|
BLEND_ALPHA_MULP
|
||||||
repeat(_dens) {
|
repeat(_dens) {
|
||||||
var _r_shf = random_range(-_rad, _rad);
|
random_set_seed(_seed); _seed += 100;
|
||||||
|
|
||||||
|
var _rrad = _rad * (1 + random_range(_trex[0], _trex[1]));
|
||||||
|
var _r_shf = random_range( -_rad, _rad);
|
||||||
var _y_shf = random(1);
|
var _y_shf = random(1);
|
||||||
|
|
||||||
var _drpW, _drpH, _drpS;
|
var _drpW, _drpH, _drpS;
|
||||||
|
@ -119,11 +125,11 @@ function Node_MK_Rain(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
var _rmx = _rx + _in_span_x * _r_shf;
|
var _rmx = _rx + _in_span_x * _r_shf;
|
||||||
var _rmy = _ry + _in_span_y * _r_shf;
|
var _rmy = _ry + _in_span_y * _r_shf;
|
||||||
|
|
||||||
var _radH = _rad + _drpH;
|
var _radH = _rrad + _drpH;
|
||||||
var _radHx = _radH * _tr_span_x;
|
var _radHx = _radH * _tr_span_x;
|
||||||
var _radHy = _radH * _tr_span_y;
|
var _radHy = _radH * _tr_span_y;
|
||||||
|
|
||||||
var _vel = irandom_range(_velo[0], _velo[1]);
|
var _vel = max(1, irandom_range(_velo[0], _velo[1]));
|
||||||
var _prg = _y_shf + _vel * prg;
|
var _prg = _y_shf + _vel * prg;
|
||||||
_prg = frac(_prg) - 0.5;
|
_prg = frac(_prg) - 0.5;
|
||||||
|
|
||||||
|
@ -145,6 +151,7 @@ function Node_MK_Rain(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case 1 :
|
case 1 :
|
||||||
|
//draw_circle(round(_drpX), round(_drpY), _drpW, false);
|
||||||
draw_circle(_drpX, _drpY, _drpW, false);
|
draw_circle(_drpX, _drpY, _drpW, false);
|
||||||
break;
|
break;
|
||||||
case 2 :
|
case 2 :
|
||||||
|
|
101
scripts/node_mk_sparkle/node_mk_sparkle.gml
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
enum MKSPARK_DRAW {
|
||||||
|
dot,
|
||||||
|
trail
|
||||||
|
}
|
||||||
|
|
||||||
|
function Node_MK_Sparkle(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
|
||||||
|
name = "MK Sparkle";
|
||||||
|
dimension_index = -1;
|
||||||
|
update_on_frame = true;
|
||||||
|
|
||||||
|
inputs[| 0] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 4);
|
||||||
|
|
||||||
|
inputs[| 1] = nodeValue("Sparkle", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [
|
||||||
|
[ 0, 0, 2, MKSPARK_DRAW.trail, BLEND.add, 0 ],
|
||||||
|
[ 0, -1, 1, MKSPARK_DRAW.trail, BLEND.subtract, 0 ],
|
||||||
|
[ 1, 0, 2, MKSPARK_DRAW.trail, BLEND.add, -2 ],
|
||||||
|
[ 1, -1, 2, MKSPARK_DRAW.trail, BLEND.subtract, -2 ],
|
||||||
|
])
|
||||||
|
.setArrayDepth(2);
|
||||||
|
|
||||||
|
inputs[| 2] = nodeValue("Start frame", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0);
|
||||||
|
|
||||||
|
sparkleEditor = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region
|
||||||
|
var _sprk = inputs[| 1].getValue();
|
||||||
|
var h = array_length(_sprk) * 32 + 16;
|
||||||
|
|
||||||
|
return h;
|
||||||
|
}); #endregion
|
||||||
|
|
||||||
|
input_display_list = [ new Inspector_Sprite(s_MKFX), 0, 2,
|
||||||
|
sparkleEditor
|
||||||
|
];
|
||||||
|
|
||||||
|
outputs[| 0] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
||||||
|
|
||||||
|
temp_surface = [ noone, noone ];
|
||||||
|
|
||||||
|
static processData = function(_outSurf, _data, _output_index, _array_index) { #region
|
||||||
|
var _size = _data[0];
|
||||||
|
var _sprk = _data[1];
|
||||||
|
var _frme = _data[2];
|
||||||
|
|
||||||
|
if(array_empty(_sprk)) return _outSurf;
|
||||||
|
|
||||||
|
var _s = _size * 2 + 1;
|
||||||
|
|
||||||
|
_outSurf = surface_verify(_outSurf, _s, _s);
|
||||||
|
temp_surface[0] = surface_verify(temp_surface[0], _s, _s);
|
||||||
|
temp_surface[1] = surface_verify(temp_surface[1], _s, _s);
|
||||||
|
|
||||||
|
var _s0 = temp_surface[0];
|
||||||
|
var _s1 = temp_surface[1];
|
||||||
|
var _fr = CURRENT_FRAME - _frme + 1;
|
||||||
|
|
||||||
|
surface_set_target(_s0);
|
||||||
|
DRAW_CLEAR
|
||||||
|
|
||||||
|
draw_set_color(c_white);
|
||||||
|
|
||||||
|
for( var i = 0, n = array_length(_sprk); i < n; i++ ) {
|
||||||
|
var _sk = _sprk[i];
|
||||||
|
var sy = _size + _sk[0];
|
||||||
|
var sx = _size + _sk[1];
|
||||||
|
var sp = _sk[2];
|
||||||
|
var ff = _fr + _sk[5];
|
||||||
|
|
||||||
|
if(ff < 0) continue;
|
||||||
|
|
||||||
|
switch(_sk[4]) {
|
||||||
|
case BLEND.add : BLEND_ADD; break;
|
||||||
|
case BLEND.subtract : BLEND_SUBTRACT; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(_sk[3]) {
|
||||||
|
case MKSPARK_DRAW.dot : draw_point(sx + ff * sp, sy); break;
|
||||||
|
case MKSPARK_DRAW.trail : draw_line(sx - 1, sy, sx - 1 + ff * sp, sy); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BLEND_NORMAL
|
||||||
|
surface_reset_target();
|
||||||
|
|
||||||
|
surface_set_target(_s1);
|
||||||
|
DRAW_CLEAR
|
||||||
|
|
||||||
|
draw_surface_ext(_s0, 0, 0, 1, 1, 0, c_white, 1);
|
||||||
|
draw_surface_ext(_s0, 0, _s, 1, -1, 0, c_white, 1);
|
||||||
|
surface_reset_target();
|
||||||
|
|
||||||
|
surface_set_target(_outSurf);
|
||||||
|
DRAW_CLEAR
|
||||||
|
|
||||||
|
draw_surface_ext(_s1, 0, 0, 1, 1, 0, c_white, 1);
|
||||||
|
draw_surface_ext(_s1, 0, _s, 1, 1, 90, c_white, 1);
|
||||||
|
draw_surface_ext(_s1, _s, _s, 1, 1, 180, c_white, 1);
|
||||||
|
draw_surface_ext(_s1, _s, 0, 1, 1, 270, c_white, 1);
|
||||||
|
surface_reset_target();
|
||||||
|
|
||||||
|
return _outSurf;
|
||||||
|
} #endregion
|
||||||
|
}
|
11
scripts/node_mk_sparkle/node_mk_sparkle.yy
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMScript",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "node_mk_sparkle",
|
||||||
|
"isCompatibility": false,
|
||||||
|
"isDnD": false,
|
||||||
|
"parent": {
|
||||||
|
"name": "MK effects",
|
||||||
|
"path": "folders/nodes/data/MK effects.yy",
|
||||||
|
},
|
||||||
|
}
|
|
@ -116,9 +116,7 @@ function Node_Number(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
|
||||||
|
|
||||||
if(inputs[| 0].value_from != noone || disp == 0) { #region
|
if(inputs[| 0].value_from != noone || disp == 0) { #region
|
||||||
draw_set_text(f_sdf, fa_center, fa_center, COLORS._main_text);
|
draw_set_text(f_sdf, fa_center, fa_center, COLORS._main_text);
|
||||||
var str = string(val);
|
draw_text_bbox(bbox, string(val));
|
||||||
var ss = string_scale(str, bbox.w, bbox.h);
|
|
||||||
draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0);
|
|
||||||
return;
|
return;
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
|
|
@ -617,12 +617,13 @@ function __initNodes() {
|
||||||
addNodeObject(generator, "Flood Fill", s_node_flood_fill, "Node_Flood_Fill", [1, Node_Flood_Fill],, "Filled connected pixel given position and color.").setVersion(1133);
|
addNodeObject(generator, "Flood Fill", s_node_flood_fill, "Node_Flood_Fill", [1, Node_Flood_Fill],, "Filled connected pixel given position and color.").setVersion(1133);
|
||||||
|
|
||||||
ds_list_add(generator, "MK Effects");
|
ds_list_add(generator, "MK Effects");
|
||||||
addNodeObject(generator, "MK Rains", s_node_mk_rain, "Node_MK_Rain", [1, Node_MK_Rain]).setVersion(11600);
|
addNodeObject(generator, "MK Rain", s_node_mk_rain, "Node_MK_Rain", [1, Node_MK_Rain]).setVersion(11600);
|
||||||
addNodeObject(generator, "MK GridBalls", s_node_mk_ball_grid, "Node_MK_GridBalls", [1, Node_MK_GridBalls]).setVersion(11600);
|
addNodeObject(generator, "MK GridBalls", s_node_mk_ball_grid, "Node_MK_GridBalls", [1, Node_MK_GridBalls]).setVersion(11600);
|
||||||
addNodeObject(generator, "MK GridFlip", s_node_mk_flip_grid, "Node_MK_GridFlip", [1, Node_MK_GridFlip]).setVersion(11600);
|
addNodeObject(generator, "MK GridFlip", s_node_mk_flip_grid, "Node_MK_GridFlip", [1, Node_MK_GridFlip]).setVersion(11600);
|
||||||
addNodeObject(generator, "MK Saber", s_node_mk_saber, "Node_MK_Saber", [1, Node_MK_Saber]).setVersion(11600);
|
addNodeObject(generator, "MK Saber", s_node_mk_saber, "Node_MK_Saber", [1, Node_MK_Saber]).setVersion(11600);
|
||||||
addNodeObject(generator, "MK Tile", s_node_mk_tile, "Node_MK_Tile", [1, Node_MK_Tile]).setVersion(11600);
|
addNodeObject(generator, "MK Tile", s_node_mk_tile, "Node_MK_Tile", [1, Node_MK_Tile]).setVersion(11600);
|
||||||
addNodeObject(generator, "MK Flag", s_node_mk_flag, "Node_MK_Flag", [1, Node_MK_Flag]).setVersion(11600);
|
addNodeObject(generator, "MK Flag", s_node_mk_flag, "Node_MK_Flag", [1, Node_MK_Flag]).setVersion(11600);
|
||||||
|
if(TESTING) addNodeObject(generator, "MK Sparkle", s_node_mk_sparkle, "Node_MK_Sparkle", [1, Node_MK_Sparkle]).setVersion(11600);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var compose = ds_list_create(); #region
|
var compose = ds_list_create(); #region
|
||||||
|
|
|
@ -25,6 +25,8 @@ function Node_Stack(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
|
||||||
outputs[| 1] = nodeValue("Atlas data", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, []);
|
outputs[| 1] = nodeValue("Atlas data", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, []);
|
||||||
|
|
||||||
|
temp_surface = [ noone, noone ];
|
||||||
|
|
||||||
attribute_surface_depth();
|
attribute_surface_depth();
|
||||||
|
|
||||||
static refreshDynamicInput = function() { #region
|
static refreshDynamicInput = function() { #region
|
||||||
|
@ -91,15 +93,17 @@ function Node_Stack(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
|
||||||
var _outSurf = outputs[| 0].getValue();
|
var _outSurf = outputs[| 0].getValue();
|
||||||
_outSurf = surface_verify(_outSurf, ww, hh, attrDepth());
|
_outSurf = surface_verify(_outSurf, ww, hh, attrDepth());
|
||||||
outputs[| 0].setValue(_outSurf);
|
|
||||||
|
temp_surface[0] = surface_verify(temp_surface[0], ww, hh, attrDepth());
|
||||||
|
temp_surface[1] = surface_verify(temp_surface[1], ww, hh, attrDepth());
|
||||||
|
|
||||||
|
surface_set_target(temp_surface[0]); DRAW_CLEAR surface_reset_target();
|
||||||
|
surface_set_target(temp_surface[1]); DRAW_CLEAR surface_reset_target();
|
||||||
|
|
||||||
var atlas = [];
|
var atlas = [];
|
||||||
|
var ppind = 0;
|
||||||
surface_set_target(_outSurf);
|
|
||||||
DRAW_CLEAR
|
|
||||||
BLEND_ALPHA_MULP
|
|
||||||
|
|
||||||
var sx = 0, sy = 0;
|
var sx = 0, sy = 0;
|
||||||
|
|
||||||
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) {
|
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) {
|
||||||
var _surf = getInputData(i);
|
var _surf = getInputData(i);
|
||||||
if(!is_array(_surf)) _surf = [ _surf ];
|
if(!is_array(_surf)) _surf = [ _surf ];
|
||||||
|
@ -127,7 +131,21 @@ function Node_Stack(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
array_push(atlas, new SurfaceAtlas(_surf[j], sx, sy));
|
array_push(atlas, new SurfaceAtlas(_surf[j], sx, sy));
|
||||||
draw_surface_safe(_surf[j], sx, sy);
|
surface_set_shader(temp_surface[!ppind], sh_draw_surface);
|
||||||
|
DRAW_CLEAR
|
||||||
|
BLEND_OVERRIDE
|
||||||
|
shader_set_f("dimension", ww, hh);
|
||||||
|
|
||||||
|
shader_set_surface("fore", _surf[j]);
|
||||||
|
shader_set_f("fdimension", sw, sh);
|
||||||
|
shader_set_f("position", sx, sy);
|
||||||
|
|
||||||
|
draw_surface(temp_surface[ppind], 0, 0);
|
||||||
|
|
||||||
|
BLEND_NORMAL
|
||||||
|
surface_reset_shader();
|
||||||
|
|
||||||
|
ppind = !ppind;
|
||||||
|
|
||||||
if(_axis == 0)
|
if(_axis == 0)
|
||||||
sx += sw + _spac;
|
sx += sw + _spac;
|
||||||
|
@ -136,9 +154,16 @@ function Node_Stack(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BLEND_NORMAL;
|
surface_set_target(_outSurf);
|
||||||
|
DRAW_CLEAR
|
||||||
|
BLEND_OVERRIDE
|
||||||
|
|
||||||
|
draw_surface(temp_surface[ppind], 0, 0);
|
||||||
|
|
||||||
|
BLEND_NORMAL
|
||||||
surface_reset_target();
|
surface_reset_target();
|
||||||
|
|
||||||
|
outputs[| 0].setValue(_outSurf);
|
||||||
outputs[| 1].setValue(atlas);
|
outputs[| 1].setValue(atlas);
|
||||||
} #endregion
|
} #endregion
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,7 @@ function Node_Surface_Replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _
|
||||||
|
|
||||||
temp_surface[0] = surface_verify(temp_surface[0], surface_get_width_safe(_bas), surface_get_height_safe(_bas));
|
temp_surface[0] = surface_verify(temp_surface[0], surface_get_width_safe(_bas), surface_get_height_safe(_bas));
|
||||||
surface_set_target(temp_surface[0]);
|
surface_set_target(temp_surface[0]);
|
||||||
DRAW_CLEAR;
|
DRAW_CLEAR
|
||||||
surface_reset_target();
|
surface_reset_target();
|
||||||
|
|
||||||
var amo = array_length(_tar);
|
var amo = array_length(_tar);
|
||||||
|
@ -102,7 +102,7 @@ function Node_Surface_Replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _
|
||||||
|
|
||||||
_outSurf = surface_verify(_outSurf, surface_get_width_safe(_bas), surface_get_height_safe(_bas));
|
_outSurf = surface_verify(_outSurf, surface_get_width_safe(_bas), surface_get_height_safe(_bas));
|
||||||
surface_set_target(_outSurf);
|
surface_set_target(_outSurf);
|
||||||
DRAW_CLEAR;
|
DRAW_CLEAR
|
||||||
if(_drw) draw_surface_safe(_bas);
|
if(_drw) draw_surface_safe(_bas);
|
||||||
surface_reset_target();
|
surface_reset_target();
|
||||||
|
|
||||||
|
|
|
@ -1422,9 +1422,11 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
|
|
||||||
if(display_type == VALUE_DISPLAY.d3quarternion) { #region
|
if(display_type == VALUE_DISPLAY.d3quarternion) { #region
|
||||||
if(!applyUnit) return value;
|
if(!applyUnit) return value;
|
||||||
var dispType = struct_try_get(nodeFrom.display_data, "angle_display");
|
var dispType = struct_try_get(display_data, "angle_display");
|
||||||
|
|
||||||
switch(dispType) {
|
switch(dispType) {
|
||||||
case QUARTERNION_DISPLAY.quarterion : return value;
|
case QUARTERNION_DISPLAY.quarterion :
|
||||||
|
return value;
|
||||||
case QUARTERNION_DISPLAY.euler :
|
case QUARTERNION_DISPLAY.euler :
|
||||||
var euler = new BBMOD_Quaternion().FromEuler(value[0], value[1], value[2]).ToArray();
|
var euler = new BBMOD_Quaternion().FromEuler(value[0], value[1], value[2]).ToArray();
|
||||||
return euler;
|
return euler;
|
||||||
|
|
|
@ -433,7 +433,7 @@ function Panel_Menu() : PanelContent() constructor {
|
||||||
xx += ww + 8;
|
xx += ww + 8;
|
||||||
_mx = max(_mx, xx);
|
_mx = max(_mx, xx);
|
||||||
_ww += ww + 8;
|
_ww += ww + 8;
|
||||||
if(_ww > w * 0.4 - sx) {
|
if(_ww > w * 0.6 - sx) {
|
||||||
_curRow++;
|
_curRow++;
|
||||||
_ww = 0;
|
_ww = 0;
|
||||||
xx = sx;
|
xx = sx;
|
||||||
|
|
|
@ -83,7 +83,7 @@
|
||||||
PREFERENCES.show_supporter_icon = true;
|
PREFERENCES.show_supporter_icon = true;
|
||||||
|
|
||||||
PREFERENCES.temp_path = "%DIR%/temp/";
|
PREFERENCES.temp_path = "%DIR%/temp/";
|
||||||
PREFERENCES.ImageMagick_path = "%APP%/ImageMagick/";
|
PREFERENCES.ImageMagick_path = "%APP%/imagemagick/";
|
||||||
PREFERENCES.webp_path = "%APP%/webp/";
|
PREFERENCES.webp_path = "%APP%/webp/";
|
||||||
PREFERENCES.gifski_path = "%APP%/gifski/";
|
PREFERENCES.gifski_path = "%APP%/gifski/";
|
||||||
PREFERENCES.ffmpeg_path = "%APP%/ffmpeg/";
|
PREFERENCES.ffmpeg_path = "%APP%/ffmpeg/";
|
||||||
|
@ -219,6 +219,7 @@
|
||||||
PREFERENCES.double_click_delay /= 60;
|
PREFERENCES.double_click_delay /= 60;
|
||||||
|
|
||||||
TESTING = struct_try_get(PREFERENCES, "test_mode", false);
|
TESTING = struct_try_get(PREFERENCES, "test_mode", false);
|
||||||
|
if(TESTING) log_message("PREFERENCE", "Test mode enabled");
|
||||||
|
|
||||||
if(PREFERENCES.use_legacy_exception) resetException();
|
if(PREFERENCES.use_legacy_exception) resetException();
|
||||||
else setException();
|
else setException();
|
||||||
|
|
|
@ -71,7 +71,7 @@ function quarternionBox(_onModify) : widget() constructor {
|
||||||
var _disp = struct_try_get(_display_data, "angle_display");
|
var _disp = struct_try_get(_display_data, "angle_display");
|
||||||
tooltip.index = _disp;
|
tooltip.index = _disp;
|
||||||
|
|
||||||
if(buttonInstant(THEME.button_hide, bx, by, bs, bs, _m, active, hover, tooltip, THEME.unit_angle, _disp, c_white) == 2) {
|
if(buttonInstant(THEME.button_hide, bx, by, bs, bs, _m, iactive, ihover, tooltip, THEME.unit_angle, _disp, c_white) == 2) {
|
||||||
clickable = false;
|
clickable = false;
|
||||||
_display_data.angle_display = (_disp + 1) % 2;
|
_display_data.angle_display = (_disp + 1) % 2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,8 +102,8 @@ function scrollBox(_data, _onModify, update_hover = true) : widget() constructor
|
||||||
|
|
||||||
draw_set_text(font, align, fa_center, COLORS._main_text);
|
draw_set_text(font, align, fa_center, COLORS._main_text);
|
||||||
draw_set_alpha(0.5 + 0.5 * interactable);
|
draw_set_alpha(0.5 + 0.5 * interactable);
|
||||||
if(align == fa_center) draw_text(_x + (w - _arw) / 2, _y + _h / 2 - ui(2), _text);
|
if(align == fa_center) draw_text_add(_x + (w - _arw) / 2, _y + _h / 2, _text);
|
||||||
else if(align == fa_left) draw_text(_x + ui(8) + _spr * _h, _y + _h / 2 - ui(2), _text);
|
else if(align == fa_left) draw_text_add(_x + ui(8) + _spr * _h, _y + _h / 2, _text);
|
||||||
draw_set_alpha(1);
|
draw_set_alpha(1);
|
||||||
|
|
||||||
if(_spr) draw_sprite_ext(_selVal.spr, 0, _x + ui(8) + _h / 2, _y + _h / 2, 1, 1, 0, _selVal.spr_blend, 1);
|
if(_spr) draw_sprite_ext(_selVal.spr, 0, _x + ui(8) + _h / 2, _y + _h / 2, 1, 1, 0, _selVal.spr_blend, 1);
|
||||||
|
|
|
@ -163,6 +163,7 @@ function shader_set_palette(pal, pal_uni = "palette", amo_uni = "paletteAmount",
|
||||||
over,
|
over,
|
||||||
alpha,
|
alpha,
|
||||||
alphamulp,
|
alphamulp,
|
||||||
|
subtract,
|
||||||
}
|
}
|
||||||
|
|
||||||
function shader_preset_interpolation(shader = sh_sample) {
|
function shader_preset_interpolation(shader = sh_sample) {
|
||||||
|
|
|
@ -12,8 +12,14 @@ function shellOpenExplorer(path) { #region
|
||||||
function shell_execute(path, command, ref = noone) { #region
|
function shell_execute(path, command, ref = noone) { #region
|
||||||
INLINE
|
INLINE
|
||||||
|
|
||||||
|
if(OS == os_macosx) {
|
||||||
|
path = string_replace_all(path, "\\", "/");
|
||||||
|
command = string_replace_all(command, "\\", "/");
|
||||||
|
}
|
||||||
|
|
||||||
var txt = $"{path} {command}";
|
var txt = $"{path} {command}";
|
||||||
var res = ProcessExecute(txt);
|
var res = ProcessExecute(txt);
|
||||||
|
print($"Execute {path} {command} | {res}");
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
} #endregion
|
} #endregion
|
||||||
|
@ -21,8 +27,14 @@ function shell_execute(path, command, ref = noone) { #region
|
||||||
function shell_execute_async(path, command, ref = noone) { #region
|
function shell_execute_async(path, command, ref = noone) { #region
|
||||||
INLINE
|
INLINE
|
||||||
|
|
||||||
|
if(OS == os_macosx) {
|
||||||
|
path = string_replace_all(path, "\\", "/");
|
||||||
|
command = string_replace_all(command, "\\", "/");
|
||||||
|
}
|
||||||
|
|
||||||
var txt = $"{path} {command}";
|
var txt = $"{path} {command}";
|
||||||
var res = ProcessExecuteAsync(txt);
|
var res = ProcessExecuteAsync(txt);
|
||||||
|
print($"Execute async {path} {command} | {res}");
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
|
@ -150,6 +150,32 @@ function surface_save_safe(surface, path) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function surface_cvt_8unorm(target, surface) { #region
|
||||||
|
if(!is_surface(surface)) return target;
|
||||||
|
|
||||||
|
target = surface_verify(target, surface_get_width_safe(surface), surface_get_height_safe(surface));
|
||||||
|
var _typ = surface_get_format(surface);
|
||||||
|
|
||||||
|
switch(_typ) {
|
||||||
|
case surface_rgba4unorm :
|
||||||
|
case surface_rgba8unorm :
|
||||||
|
case surface_rgba16float :
|
||||||
|
case surface_rgba32float :
|
||||||
|
surface_set_shader(target, sh_draw_normal);
|
||||||
|
break;
|
||||||
|
case surface_r8unorm :
|
||||||
|
case surface_r16float :
|
||||||
|
case surface_r32float :
|
||||||
|
surface_set_shader(target, sh_draw_single_channel);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_surface(surface, 0, 0);
|
||||||
|
surface_reset_shader();
|
||||||
|
|
||||||
|
return target;
|
||||||
|
} #endregion
|
||||||
|
|
||||||
function surface_get_width_safe(s, crop = true) {
|
function surface_get_width_safe(s, crop = true) {
|
||||||
INLINE
|
INLINE
|
||||||
|
|
||||||
|
@ -307,7 +333,7 @@ function surface_size_lim(surface, width, height) {
|
||||||
var ss = min(width / sw, height / sh);
|
var ss = min(width / sw, height / sh);
|
||||||
var s = surface_create(max(1, sw * ss), max(1, sh * ss));
|
var s = surface_create(max(1, sw * ss), max(1, sh * ss));
|
||||||
surface_set_target(s);
|
surface_set_target(s);
|
||||||
DRAW_CLEAR;
|
DRAW_CLEAR
|
||||||
draw_surface_ext_safe(surface, 0, 0, ss, ss, 0, c_white, 1);
|
draw_surface_ext_safe(surface, 0, 0, ss, ss, 0, c_white, 1);
|
||||||
surface_reset_target();
|
surface_reset_target();
|
||||||
return s;
|
return s;
|
||||||
|
|
|
@ -542,7 +542,7 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
|
||||||
onModified();
|
onModified();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(auto_update && keyboard_check_pressed(vk_anykey))
|
if(auto_update && (keyboard_check_pressed(vk_anykey) || modified))
|
||||||
apply();
|
apply();
|
||||||
|
|
||||||
if(keyboard_check_pressed(vk_left)) onKey(vk_left);
|
if(keyboard_check_pressed(vk_left)) onKey(vk_left);
|
||||||
|
|
|
@ -148,6 +148,8 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
static editText = function() { #region
|
static editText = function() { #region
|
||||||
|
var edited = false;
|
||||||
|
|
||||||
#region text editor
|
#region text editor
|
||||||
if(key_mod_press(CTRL) && keyboard_check_pressed(ord("A"))) {
|
if(key_mod_press(CTRL) && keyboard_check_pressed(ord("A"))) {
|
||||||
cursor_select = 0;
|
cursor_select = 0;
|
||||||
|
@ -159,8 +161,10 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
|
||||||
clipboard_set_text(string_copy(_input_text, minc, maxc - minc));
|
clipboard_set_text(string_copy(_input_text, minc, maxc - minc));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(key_mod_press(CTRL) && keyboard_check_pressed(ord("V")))
|
if(key_mod_press(CTRL) && keyboard_check_pressed(ord("V"))) {
|
||||||
KEYBOARD_STRING = clipboard_get_text();
|
KEYBOARD_STRING = clipboard_get_text();
|
||||||
|
edited = true;
|
||||||
|
}
|
||||||
|
|
||||||
if(keyboard_check_pressed(vk_escape) || keyboard_check_pressed(vk_enter)) {
|
if(keyboard_check_pressed(vk_escape) || keyboard_check_pressed(vk_enter)) {
|
||||||
} else if(KEYBOARD_PRESSED == vk_backspace) {
|
} else if(KEYBOARD_PRESSED == vk_backspace) {
|
||||||
|
@ -195,6 +199,7 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
|
||||||
_input_text = str_before + str_after;
|
_input_text = str_before + str_after;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
edited = true;
|
||||||
cursor_select = -1;
|
cursor_select = -1;
|
||||||
move_cursor(-1);
|
move_cursor(-1);
|
||||||
} else if(KEYBOARD_PRESSED == vk_delete || (keyboard_check_pressed(ord("X")) && key_mod_press(CTRL) && cursor_select != -1)) {
|
} else if(KEYBOARD_PRESSED == vk_delete || (keyboard_check_pressed(ord("X")) && key_mod_press(CTRL) && cursor_select != -1)) {
|
||||||
|
@ -213,6 +218,8 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
|
||||||
cursor = minc;
|
cursor = minc;
|
||||||
_input_text = str_before + str_after;
|
_input_text = str_before + str_after;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
edited = true;
|
||||||
cursor_select = -1;
|
cursor_select = -1;
|
||||||
} else if(KEYBOARD_STRING != "") {
|
} else if(KEYBOARD_STRING != "") {
|
||||||
var ch = KEYBOARD_STRING;
|
var ch = KEYBOARD_STRING;
|
||||||
|
@ -234,6 +241,7 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
|
||||||
cursor = minc + string_length(ch);
|
cursor = minc + string_length(ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
edited = true;
|
||||||
cursor_select = -1;
|
cursor_select = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -273,7 +281,7 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
|
||||||
deactivate();
|
deactivate();
|
||||||
} else if(keyboard_check_pressed(vk_enter))
|
} else if(keyboard_check_pressed(vk_enter))
|
||||||
deactivate();
|
deactivate();
|
||||||
else if(auto_update && keyboard_check_pressed(vk_anykey))
|
else if(auto_update && (edited || keyboard_check_pressed(vk_anykey)))
|
||||||
apply();
|
apply();
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
@ -414,7 +422,7 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
|
||||||
var txt = _input_text;
|
var txt = _input_text;
|
||||||
draw_set_text(font == noone? f_p0 : font, fa_left, fa_top);
|
draw_set_text(font == noone? f_p0 : font, fa_left, fa_top);
|
||||||
var tw = string_width(txt);
|
var tw = string_width(txt);
|
||||||
var th = string_height(txt);
|
var th = string_height(txt == ""? "l" : txt);
|
||||||
|
|
||||||
var cs = string_copy(txt, 1, cursor);
|
var cs = string_copy(txt, 1, cursor);
|
||||||
var c_w = string_width(cs);
|
var c_w = string_width(cs);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
function file_read_all(path) {
|
function file_read_all(path) { #region
|
||||||
INLINE
|
INLINE
|
||||||
|
|
||||||
var f = file_text_open_read(path);
|
var f = file_text_open_read(path);
|
||||||
|
@ -7,9 +7,9 @@ function file_read_all(path) {
|
||||||
s += string(file_text_readln(f));
|
s += string(file_text_readln(f));
|
||||||
file_text_close(f);
|
file_text_close(f);
|
||||||
return s;
|
return s;
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function file_text_read_all_lines(path) {
|
function file_text_read_all_lines(path) { #region
|
||||||
INLINE
|
INLINE
|
||||||
|
|
||||||
var f = file_text_open_read(path);
|
var f = file_text_open_read(path);
|
||||||
|
@ -18,9 +18,9 @@ function file_text_read_all_lines(path) {
|
||||||
array_push(s, file_text_readln(f));
|
array_push(s, file_text_readln(f));
|
||||||
file_text_close(f);
|
file_text_close(f);
|
||||||
return s;
|
return s;
|
||||||
}
|
} #endregion
|
||||||
|
|
||||||
function file_text_write_all(path, str) {
|
function file_text_write_all(path, str) { #region
|
||||||
INLINE
|
INLINE
|
||||||
|
|
||||||
if(file_exists_empty(path)) file_delete(path);
|
if(file_exists_empty(path)) file_delete(path);
|
||||||
|
@ -28,4 +28,4 @@ function file_text_write_all(path, str) {
|
||||||
var f = file_text_open_write(path);
|
var f = file_text_open_write(path);
|
||||||
file_text_write_string(f, str);
|
file_text_write_string(f, str);
|
||||||
file_text_close(f);
|
file_text_close(f);
|
||||||
}
|
} #endregion
|
|
@ -9,8 +9,7 @@ attribute vec2 in_TextureCoord; // (u,v)
|
||||||
varying vec2 v_vTexcoord;
|
varying vec2 v_vTexcoord;
|
||||||
varying vec4 v_vColour;
|
varying vec4 v_vColour;
|
||||||
|
|
||||||
void main()
|
void main() {
|
||||||
{
|
|
||||||
vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
|
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;
|
gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
|
||||||
|
|
||||||
|
|
|
@ -6,5 +6,5 @@ varying vec4 v_vColour;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec4 basecolor = texture2D( gm_BaseTexture, v_vTexcoord );
|
vec4 basecolor = texture2D( gm_BaseTexture, v_vTexcoord );
|
||||||
gl_FragColor = basecolor * v_vColour;
|
gl_FragColor = basecolor;
|
||||||
}
|
}
|
||||||
|
|
11
shaders/sh_draw_surface/sh_blend_multiply.yy
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"type": 1,
|
||||||
|
"parent": {
|
||||||
|
"name": "shader",
|
||||||
|
"path": "folders/shader.yy",
|
||||||
|
},
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "sh_blend_multiply",
|
||||||
|
"tags": [],
|
||||||
|
"resourceType": "GMShader",
|
||||||
|
}
|
30
shaders/sh_draw_surface/sh_draw_surface.fsh
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
//
|
||||||
|
// Simple passthrough fragment shader
|
||||||
|
//
|
||||||
|
varying vec2 v_vTexcoord;
|
||||||
|
varying vec4 v_vColour;
|
||||||
|
|
||||||
|
uniform sampler2D fore;
|
||||||
|
uniform vec2 dimension;
|
||||||
|
uniform vec2 fdimension;
|
||||||
|
uniform vec2 position;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 px = v_vTexcoord * dimension;
|
||||||
|
vec2 fpx = px - position;
|
||||||
|
vec2 ftx = fpx / fdimension;
|
||||||
|
|
||||||
|
vec4 _cBg = texture2D( gm_BaseTexture, v_vTexcoord );
|
||||||
|
|
||||||
|
if(ftx.x < 0. || ftx.y < 0. || ftx.x > 1. || ftx.y > 1.) {
|
||||||
|
gl_FragColor = _cBg;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 _cFg = texture2D( fore, ftx );
|
||||||
|
float al = _cFg.a + _cBg.a * (1. - _cFg.a);
|
||||||
|
vec4 res = (_cFg * _cFg.a) + (_cBg * _cBg.a * (1. - _cFg.a));
|
||||||
|
res = vec4(res.rgb / al, al);
|
||||||
|
|
||||||
|
gl_FragColor = res;
|
||||||
|
}
|
18
shaders/sh_draw_surface/sh_draw_surface.vsh
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
//
|
||||||
|
// 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;
|
||||||
|
}
|
10
shaders/sh_draw_surface/sh_draw_surface.yy
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMShader",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "sh_draw_surface",
|
||||||
|
"parent": {
|
||||||
|
"name": "blend",
|
||||||
|
"path": "folders/shader/blend.yy",
|
||||||
|
},
|
||||||
|
"type": 1,
|
||||||
|
}
|
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
74
sprites/s_node_mk_sparkle/s_node_mk_sparkle.yy
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMSprite",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "s_node_mk_sparkle",
|
||||||
|
"bbox_bottom": 63,
|
||||||
|
"bbox_left": 0,
|
||||||
|
"bbox_right": 63,
|
||||||
|
"bbox_top": 0,
|
||||||
|
"bboxMode": 0,
|
||||||
|
"collisionKind": 1,
|
||||||
|
"collisionTolerance": 0,
|
||||||
|
"DynamicTexturePage": false,
|
||||||
|
"edgeFiltering": false,
|
||||||
|
"For3D": false,
|
||||||
|
"frames": [
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"157d4a80-8ed1-4afa-a437-f8d7aa8fb963",},
|
||||||
|
],
|
||||||
|
"gridX": 0,
|
||||||
|
"gridY": 0,
|
||||||
|
"height": 64,
|
||||||
|
"HTile": false,
|
||||||
|
"layers": [
|
||||||
|
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"53804f42-193f-490a-a41f-76b4a67e21f0","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
|
||||||
|
],
|
||||||
|
"nineSlice": null,
|
||||||
|
"origin": 4,
|
||||||
|
"parent": {
|
||||||
|
"name": "MK effects",
|
||||||
|
"path": "folders/nodes/icons/MK effects.yy",
|
||||||
|
},
|
||||||
|
"preMultiplyAlpha": false,
|
||||||
|
"sequence": {
|
||||||
|
"resourceType": "GMSequence",
|
||||||
|
"resourceVersion": "1.4",
|
||||||
|
"name": "s_node_mk_sparkle",
|
||||||
|
"autoRecord": true,
|
||||||
|
"backdropHeight": 768,
|
||||||
|
"backdropImageOpacity": 0.5,
|
||||||
|
"backdropImagePath": "",
|
||||||
|
"backdropWidth": 1366,
|
||||||
|
"backdropXOffset": 0.0,
|
||||||
|
"backdropYOffset": 0.0,
|
||||||
|
"events": {"resourceType":"KeyframeStore<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||||
|
"eventStubScript": null,
|
||||||
|
"eventToFunction": {},
|
||||||
|
"length": 1.0,
|
||||||
|
"lockOrigin": false,
|
||||||
|
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||||
|
"playback": 1,
|
||||||
|
"playbackSpeed": 30.0,
|
||||||
|
"playbackSpeedType": 0,
|
||||||
|
"showBackdrop": true,
|
||||||
|
"showBackdropImage": false,
|
||||||
|
"timeUnits": 1,
|
||||||
|
"tracks": [
|
||||||
|
{"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"157d4a80-8ed1-4afa-a437-f8d7aa8fb963","path":"sprites/s_node_mk_sparkle/s_node_mk_sparkle.yy",},},},"Disabled":false,"id":"b9d19115-baa7-455a-ab7f-b1278e608f4b","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
|
||||||
|
],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
|
||||||
|
],
|
||||||
|
"visibleRange": null,
|
||||||
|
"volume": 1.0,
|
||||||
|
"xorigin": 32,
|
||||||
|
"yorigin": 32,
|
||||||
|
},
|
||||||
|
"swatchColours": null,
|
||||||
|
"swfPrecision": 2.525,
|
||||||
|
"textureGroupId": {
|
||||||
|
"name": "Default",
|
||||||
|
"path": "texturegroups/Default",
|
||||||
|
},
|
||||||
|
"type": 0,
|
||||||
|
"VTile": false,
|
||||||
|
"width": 64,
|
||||||
|
}
|