diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 87177c9af..0be835ef4 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -44,6 +44,7 @@ {"name":"bones","order":18,"path":"folders/functions/bones.yy",}, {"name":"buffer","order":35,"path":"folders/functions/buffer.yy",}, {"name":"compat","order":13,"path":"folders/functions/compat.yy",}, + {"name":"connection","order":44,"path":"folders/functions/connection.yy",}, {"name":"control","order":22,"path":"folders/functions/control.yy",}, {"name":"curve","order":12,"path":"folders/functions/curve.yy",}, {"name":"debug","order":14,"path":"folders/functions/debug.yy",}, @@ -120,10 +121,13 @@ {"name":"IO","order":1,"path":"folders/nodes/data/IO.yy",}, {"name":"network","order":15,"path":"folders/nodes/data/IO/network.yy",}, {"name":"iterate","order":9,"path":"folders/nodes/data/iterate.yy",}, + {"name":"_legacy","order":12,"path":"folders/nodes/data/iterate/_legacy.yy",}, + {"name":"for filter","order":1,"path":"folders/nodes/data/iterate/_legacy/for filter.yy",}, + {"name":"for sort","order":2,"path":"folders/nodes/data/iterate/_legacy/for sort.yy",}, {"name":"feedback","order":7,"path":"folders/nodes/data/iterate/feedback.yy",}, - {"name":"for each","order":1,"path":"folders/nodes/data/iterate/for each.yy",}, - {"name":"for filter","order":3,"path":"folders/nodes/data/iterate/for filter.yy",}, - {"name":"for sort","order":5,"path":"folders/nodes/data/iterate/for sort.yy",}, + {"name":"for each","order":9,"path":"folders/nodes/data/iterate/for each.yy",}, + {"name":"for filter","order":10,"path":"folders/nodes/data/iterate/for filter.yy",}, + {"name":"for sort inline","order":11,"path":"folders/nodes/data/iterate/for sort inline.yy",}, {"name":"lua","order":12,"path":"folders/nodes/data/lua.yy",}, {"name":"misc","order":10,"path":"folders/nodes/data/misc.yy",}, {"name":"MK effects","order":24,"path":"folders/nodes/data/MK effects.yy",}, @@ -141,11 +145,11 @@ {"name":"effect","order":4,"path":"folders/nodes/data/pixel builder/effect.yy",}, {"name":"render","order":3,"path":"folders/nodes/data/render.yy",}, {"name":"simulation","order":16,"path":"folders/nodes/data/simulation.yy",}, - {"name":"smokeSim","order":2,"path":"folders/nodes/data/simulation/smokeSim.yy",}, - {"name":"strandSim","order":1,"path":"folders/nodes/data/simulation/strandSim.yy",}, - {"name":"VFX","order":3,"path":"folders/nodes/data/simulation/VFX.yy",}, + {"name":"smokeSim","order":1,"path":"folders/nodes/data/simulation/smokeSim.yy",}, + {"name":"strandSim","order":3,"path":"folders/nodes/data/simulation/strandSim.yy",}, + {"name":"VFX","order":2,"path":"folders/nodes/data/simulation/VFX.yy",}, {"name":"affector","order":9,"path":"folders/nodes/data/simulation/VFX/affector.yy",}, - {"name":"effects","order":11,"path":"folders/nodes/data/simulation/VFX/effects.yy",}, + {"name":"effects","order":10,"path":"folders/nodes/data/simulation/VFX/effects.yy",}, {"name":"transform","order":8,"path":"folders/nodes/data/transform.yy",}, {"name":"value","order":4,"path":"folders/nodes/data/value.yy",}, {"name":"array","order":1,"path":"folders/nodes/data/value/array.yy",}, @@ -300,7 +304,7 @@ {"name":"s_node_frame","order":1,"path":"sprites/s_node_frame/s_node_frame.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_VFX_group_inline","order":12,"path":"scripts/node_VFX_group_inline/node_VFX_group_inline.yy",}, + {"name":"node_VFX_group_inline","order":11,"path":"scripts/node_VFX_group_inline/node_VFX_group_inline.yy",}, {"name":"s_node_fluidSim_turbulence","order":10,"path":"sprites/s_node_fluidSim_turbulence/s_node_fluidSim_turbulence.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",}, @@ -439,7 +443,7 @@ {"name":"sh_mk_tile18_edge_l","order":1,"path":"shaders/sh_mk_tile18_edge_l/sh_mk_tile18_edge_l.yy",}, {"name":"sh_palette_shift","order":19,"path":"shaders/sh_palette_shift/sh_palette_shift.yy",}, {"name":"node_array_copy","order":14,"path":"scripts/node_array_copy/node_array_copy.yy",}, - {"name":"draw_line_elbow","order":17,"path":"scripts/draw_line_elbow/draw_line_elbow.yy",}, + {"name":"draw_connect_elbow","order":1,"path":"scripts/draw_connect_elbow/draw_connect_elbow.yy",}, {"name":"node_path_reverse","order":8,"path":"scripts/node_path_reverse/node_path_reverse.yy",}, {"name":"fd_rectangle_get_acceleration_y","order":3,"path":"scripts/fd_rectangle_get_acceleration_y/fd_rectangle_get_acceleration_y.yy",}, {"name":"sh_simplex","order":7,"path":"shaders/sh_simplex/sh_simplex.yy",}, @@ -678,6 +682,7 @@ {"name":"s_ui_base_white","order":2,"path":"sprites/s_ui_base_white/s_ui_base_white.yy",}, {"name":"node_color_mix","order":14,"path":"scripts/node_color_mix/node_color_mix.yy",}, {"name":"s_node_array_range","order":6,"path":"sprites/s_node_array_range/s_node_array_range.yy",}, + {"name":"node_iterator_each_inline_output","order":2,"path":"scripts/node_iterator_each_inline_output/node_iterator_each_inline_output.yy",}, {"name":"sh_fd_advect_material_a_16_glsl","order":2,"path":"shaders/sh_fd_advect_material_a_16_glsl/sh_fd_advect_material_a_16_glsl.yy",}, {"name":"distribution_function","order":12,"path":"scripts/distribution_function/distribution_function.yy",}, {"name":"sh_blur_radial","order":9,"path":"shaders/sh_blur_radial/sh_blur_radial.yy",}, @@ -739,6 +744,7 @@ {"name":"node_unicode","order":1,"path":"scripts/node_unicode/node_unicode.yy",}, {"name":"draw_set_text","order":1,"path":"scripts/draw_set_text/draw_set_text.yy",}, {"name":"node_pb_draw","order":1,"path":"scripts/node_pb_draw/node_pb_draw.yy",}, + {"name":"node_iterator_filter_inline_output","order":2,"path":"scripts/node_iterator_filter_inline_output/node_iterator_filter_inline_output.yy",}, {"name":"s_node_warp","order":9,"path":"sprites/s_node_warp/s_node_warp.yy",}, {"name":"s_node_surface_from_buffer","order":1,"path":"sprites/s_node_surface_from_buffer/s_node_surface_from_buffer.yy",}, {"name":"node_iterator_filter_output","order":2,"path":"scripts/node_iterator_filter_output/node_iterator_filter_output.yy",}, @@ -757,7 +763,7 @@ {"name":"node_rigid_global","order":5,"path":"scripts/node_rigid_global/node_rigid_global.yy",}, {"name":"sh_rsh_erode","order":2,"path":"shaders/sh_rsh_erode/sh_rsh_erode.yy",}, {"name":"node_chromatic_aberration","order":4,"path":"scripts/node_chromatic_aberration/node_chromatic_aberration.yy",}, - {"name":"draw_line_elbow_diag","order":18,"path":"scripts/draw_line_elbow_diag/draw_line_elbow_diag.yy",}, + {"name":"draw_connect_elbow_diag","order":2,"path":"scripts/draw_connect_elbow_diag/draw_connect_elbow_diag.yy",}, {"name":"s_node_mk_flag","order":5,"path":"sprites/s_node_mk_flag/s_node_mk_flag.yy",}, {"name":"node_pin","order":2,"path":"scripts/node_pin/node_pin.yy",}, {"name":"_node_fluid_nodes","order":7,"path":"scripts/_node_fluid_nodes/_node_fluid_nodes.yy",}, @@ -1188,6 +1194,7 @@ {"name":"s_node_vfx_input","order":12,"path":"sprites/s_node_vfx_input/s_node_vfx_input.yy",}, {"name":"s_node_interpret_number","order":30,"path":"sprites/s_node_interpret_number/s_node_interpret_number.yy",}, {"name":"node_strand_force_apply","order":6,"path":"scripts/node_strand_force_apply/node_strand_force_apply.yy",}, + {"name":"node_iterator_sort_inline_input","order":1,"path":"scripts/node_iterator_sort_inline_input/node_iterator_sort_inline_input.yy",}, {"name":"sh_seperate_shape_ite","order":2,"path":"shaders/sh_seperate_shape_ite/sh_seperate_shape_ite.yy",}, {"name":"node_PCX_fn_surface_width","order":1,"path":"scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.yy",}, {"name":"o_main","order":1,"path":"objects/o_main/o_main.yy",}, @@ -1226,6 +1233,7 @@ {"name":"sh_channel_R2B","order":12,"path":"shaders/sh_channel_R2B/sh_channel_R2B.yy",}, {"name":"s_node_voronoi_extra","order":36,"path":"sprites/s_node_voronoi_extra/s_node_voronoi_extra.yy",}, {"name":"s_node_smokeSim_domain","order":11,"path":"sprites/s_node_smokeSim_domain/s_node_smokeSim_domain.yy",}, + {"name":"node_iterator_each_inline_input","order":1,"path":"scripts/node_iterator_each_inline_input/node_iterator_each_inline_input.yy",}, {"name":"s_node_rigidSim_activate","order":6,"path":"sprites/s_node_rigidSim_activate/s_node_rigidSim_activate.yy",}, {"name":"s_transparent","order":1,"path":"sprites/s_transparent/s_transparent.yy",}, {"name":"s_gizmo","order":4,"path":"sprites/s_gizmo/s_gizmo.yy",}, @@ -1356,6 +1364,7 @@ {"name":"draw_rect_border","order":6,"path":"scripts/draw_rect_border/draw_rect_border.yy",}, {"name":"node_composite","order":1,"path":"scripts/node_composite/node_composite.yy",}, {"name":"s_node_path_map","order":2,"path":"sprites/s_node_path_map/s_node_path_map.yy",}, + {"name":"node_iterator_filter_inline_input","order":1,"path":"scripts/node_iterator_filter_inline_input/node_iterator_filter_inline_input.yy",}, {"name":"s_node_greyscale","order":26,"path":"sprites/s_node_greyscale/s_node_greyscale.yy",}, {"name":"sh_dilate","order":4,"path":"shaders/sh_dilate/sh_dilate.yy",}, {"name":"node_image_sequence","order":1,"path":"scripts/node_image_sequence/node_image_sequence.yy",}, @@ -1438,6 +1447,7 @@ {"name":"mouse_input","order":1,"path":"scripts/mouse_input/mouse_input.yy",}, {"name":"string_cut","order":2,"path":"scripts/string_cut/string_cut.yy",}, {"name":"__node_3d_prim_cylinder","order":2,"path":"scripts/__node_3d_prim_cylinder/__node_3d_prim_cylinder.yy",}, + {"name":"node_iterator_sort_inline_output","order":2,"path":"scripts/node_iterator_sort_inline_output/node_iterator_sort_inline_output.yy",}, {"name":"Obj_FirebaseFirestore_Collection_Query_options","order":10,"path":"objects/Obj_FirebaseFirestore_Collection_Query_options/Obj_FirebaseFirestore_Collection_Query_options.yy",}, {"name":"stack_functions","order":7,"path":"scripts/stack_functions/stack_functions.yy",}, {"name":"panel_nodes","order":2,"path":"scripts/panel_nodes/panel_nodes.yy",}, @@ -1618,7 +1628,6 @@ {"name":"s_node_dilate","order":19,"path":"sprites/s_node_dilate/s_node_dilate.yy",}, {"name":"panel_patreon","order":2,"path":"scripts/panel_patreon/panel_patreon.yy",}, {"name":"node_value","order":5,"path":"scripts/node_value/node_value.yy",}, - {"name":"draw_line_curve","order":5,"path":"scripts/draw_line_curve/draw_line_curve.yy",}, {"name":"sh_blend_screen","order":3,"path":"shaders/sh_blend_screen/sh_blend_screen.yy",}, {"name":"node_group_output","order":2,"path":"scripts/node_group_output/node_group_output.yy",}, {"name":"s_node_palette_extract","order":12,"path":"sprites/s_node_palette_extract/s_node_palette_extract.yy",}, @@ -1659,6 +1668,7 @@ {"name":"directory_functions","order":9,"path":"scripts/directory_functions/directory_functions.yy",}, {"name":"_f_p1","order":1,"path":"fonts/_f_p1/_f_p1.yy",}, {"name":"tuple_functions","order":5,"path":"scripts/tuple_functions/tuple_functions.yy",}, + {"name":"draw_connect_linear","order":3,"path":"scripts/draw_connect_linear/draw_connect_linear.yy",}, {"name":"node_3d_mesh_obj","order":2,"path":"scripts/node_3d_mesh_obj/node_3d_mesh_obj.yy",}, {"name":"sh_blur_simple","order":6,"path":"shaders/sh_blur_simple/sh_blur_simple.yy",}, {"name":"sh_blend_difference","order":51,"path":"shaders/sh_blend_difference/sh_blend_difference.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 7ae6179ac..da9f97e62 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -66,6 +66,7 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"bones","folderPath":"folders/functions/bones.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"buffer","folderPath":"folders/functions/buffer.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"compat","folderPath":"folders/functions/compat.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"connection","folderPath":"folders/functions/connection.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"control","folderPath":"folders/functions/control.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"curve","folderPath":"folders/functions/curve.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"debug","folderPath":"folders/functions/debug.yy",}, @@ -146,10 +147,14 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"IO","folderPath":"folders/nodes/data/IO.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"network","folderPath":"folders/nodes/data/IO/network.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"iterate","folderPath":"folders/nodes/data/iterate.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"_legacy","folderPath":"folders/nodes/data/iterate/_legacy.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"for each","folderPath":"folders/nodes/data/iterate/_legacy/for each.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"for filter","folderPath":"folders/nodes/data/iterate/_legacy/for filter.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"for sort","folderPath":"folders/nodes/data/iterate/_legacy/for sort.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"feedback","folderPath":"folders/nodes/data/iterate/feedback.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"for each","folderPath":"folders/nodes/data/iterate/for each.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"for filter","folderPath":"folders/nodes/data/iterate/for filter.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"for sort","folderPath":"folders/nodes/data/iterate/for sort.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"for sort inline","folderPath":"folders/nodes/data/iterate/for sort inline.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"for","folderPath":"folders/nodes/data/iterate/for.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"lua","folderPath":"folders/nodes/data/lua.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"misc","folderPath":"folders/nodes/data/misc.yy",}, @@ -656,7 +661,7 @@ {"id":{"name":"sh_mk_tile18_edge_l","path":"shaders/sh_mk_tile18_edge_l/sh_mk_tile18_edge_l.yy",},}, {"id":{"name":"sh_palette_shift","path":"shaders/sh_palette_shift/sh_palette_shift.yy",},}, {"id":{"name":"node_array_copy","path":"scripts/node_array_copy/node_array_copy.yy",},}, - {"id":{"name":"draw_line_elbow","path":"scripts/draw_line_elbow/draw_line_elbow.yy",},}, + {"id":{"name":"draw_connect_elbow","path":"scripts/draw_connect_elbow/draw_connect_elbow.yy",},}, {"id":{"name":"node_path_reverse","path":"scripts/node_path_reverse/node_path_reverse.yy",},}, {"id":{"name":"fd_rectangle_get_acceleration_y","path":"scripts/fd_rectangle_get_acceleration_y/fd_rectangle_get_acceleration_y.yy",},}, {"id":{"name":"sh_simplex","path":"shaders/sh_simplex/sh_simplex.yy",},}, @@ -923,6 +928,7 @@ {"id":{"name":"s_ui_base_white","path":"sprites/s_ui_base_white/s_ui_base_white.yy",},}, {"id":{"name":"node_color_mix","path":"scripts/node_color_mix/node_color_mix.yy",},}, {"id":{"name":"s_node_array_range","path":"sprites/s_node_array_range/s_node_array_range.yy",},}, + {"id":{"name":"node_iterator_each_inline_output","path":"scripts/node_iterator_each_inline_output/node_iterator_each_inline_output.yy",},}, {"id":{"name":"sh_fd_advect_material_a_16_glsl","path":"shaders/sh_fd_advect_material_a_16_glsl/sh_fd_advect_material_a_16_glsl.yy",},}, {"id":{"name":"distribution_function","path":"scripts/distribution_function/distribution_function.yy",},}, {"id":{"name":"sh_blur_radial","path":"shaders/sh_blur_radial/sh_blur_radial.yy",},}, @@ -1000,6 +1006,7 @@ {"id":{"name":"node_unicode","path":"scripts/node_unicode/node_unicode.yy",},}, {"id":{"name":"draw_set_text","path":"scripts/draw_set_text/draw_set_text.yy",},}, {"id":{"name":"node_pb_draw","path":"scripts/node_pb_draw/node_pb_draw.yy",},}, + {"id":{"name":"node_iterator_filter_inline_output","path":"scripts/node_iterator_filter_inline_output/node_iterator_filter_inline_output.yy",},}, {"id":{"name":"s_node_array","path":"sprites/s_node_array/s_node_array.yy",},}, {"id":{"name":"s_node_warp","path":"sprites/s_node_warp/s_node_warp.yy",},}, {"id":{"name":"s_node_surface_from_buffer","path":"sprites/s_node_surface_from_buffer/s_node_surface_from_buffer.yy",},}, @@ -1020,7 +1027,7 @@ {"id":{"name":"node_rigid_global","path":"scripts/node_rigid_global/node_rigid_global.yy",},}, {"id":{"name":"sh_rsh_erode","path":"shaders/sh_rsh_erode/sh_rsh_erode.yy",},}, {"id":{"name":"node_chromatic_aberration","path":"scripts/node_chromatic_aberration/node_chromatic_aberration.yy",},}, - {"id":{"name":"draw_line_elbow_diag","path":"scripts/draw_line_elbow_diag/draw_line_elbow_diag.yy",},}, + {"id":{"name":"draw_connect_elbow_diag","path":"scripts/draw_connect_elbow_diag/draw_connect_elbow_diag.yy",},}, {"id":{"name":"s_node_mk_flag","path":"sprites/s_node_mk_flag/s_node_mk_flag.yy",},}, {"id":{"name":"node_pin","path":"scripts/node_pin/node_pin.yy",},}, {"id":{"name":"_node_fluid_nodes","path":"scripts/_node_fluid_nodes/_node_fluid_nodes.yy",},}, @@ -1419,6 +1426,7 @@ {"id":{"name":"fd_rectangle_set_material_maccormack_weight","path":"scripts/fd_rectangle_set_material_maccormack_weight/fd_rectangle_set_material_maccormack_weight.yy",},}, {"id":{"name":"collection_data","path":"scripts/collection_data/collection_data.yy",},}, {"id":{"name":"s_node_flood_fill","path":"sprites/s_node_flood_fill/s_node_flood_fill.yy",},}, + {"id":{"name":"node_iterate_each_inline","path":"scripts/node_iterate_each_inline/node_iterate_each_inline.yy",},}, {"id":{"name":"json_compare","path":"scripts/json_compare/json_compare.yy",},}, {"id":{"name":"node_rigid_force_apply","path":"scripts/node_rigid_force_apply/node_rigid_force_apply.yy",},}, {"id":{"name":"__node_shader","path":"scripts/__node_shader/__node_shader.yy",},}, @@ -1504,6 +1512,7 @@ {"id":{"name":"s_node_vfx_input","path":"sprites/s_node_vfx_input/s_node_vfx_input.yy",},}, {"id":{"name":"s_node_interpret_number","path":"sprites/s_node_interpret_number/s_node_interpret_number.yy",},}, {"id":{"name":"node_strand_force_apply","path":"scripts/node_strand_force_apply/node_strand_force_apply.yy",},}, + {"id":{"name":"node_iterator_sort_inline_input","path":"scripts/node_iterator_sort_inline_input/node_iterator_sort_inline_input.yy",},}, {"id":{"name":"s_node_rigidSim","path":"sprites/s_node_rigidSim/s_node_rigidSim.yy",},}, {"id":{"name":"sh_seperate_shape_ite","path":"shaders/sh_seperate_shape_ite/sh_seperate_shape_ite.yy",},}, {"id":{"name":"node_PCX_fn_surface_width","path":"scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.yy",},}, @@ -1547,6 +1556,7 @@ {"id":{"name":"sh_channel_R2B","path":"shaders/sh_channel_R2B/sh_channel_R2B.yy",},}, {"id":{"name":"s_node_voronoi_extra","path":"sprites/s_node_voronoi_extra/s_node_voronoi_extra.yy",},}, {"id":{"name":"s_node_smokeSim_domain","path":"sprites/s_node_smokeSim_domain/s_node_smokeSim_domain.yy",},}, + {"id":{"name":"node_iterator_each_inline_input","path":"scripts/node_iterator_each_inline_input/node_iterator_each_inline_input.yy",},}, {"id":{"name":"s_node_rigidSim_activate","path":"sprites/s_node_rigidSim_activate/s_node_rigidSim_activate.yy",},}, {"id":{"name":"s_transparent","path":"sprites/s_transparent/s_transparent.yy",},}, {"id":{"name":"s_gizmo","path":"sprites/s_gizmo/s_gizmo.yy",},}, @@ -1567,6 +1577,7 @@ {"id":{"name":"s_node_vec2","path":"sprites/s_node_vec2/s_node_vec2.yy",},}, {"id":{"name":"node_twirl","path":"scripts/node_twirl/node_twirl.yy",},}, {"id":{"name":"node_collection_inline","path":"scripts/node_collection_inline/node_collection_inline.yy",},}, + {"id":{"name":"node_iterate_filter_inline","path":"scripts/node_iterate_filter_inline/node_iterate_filter_inline.yy",},}, {"id":{"name":"s_node_fluidSim_update_paused","path":"sprites/s_node_fluidSim_update_paused/s_node_fluidSim_update_paused.yy",},}, {"id":{"name":"s_node_decorner","path":"sprites/s_node_decorner/s_node_decorner.yy",},}, {"id":{"name":"s_node_text_combine","path":"sprites/s_node_text_combine/s_node_text_combine.yy",},}, @@ -1694,6 +1705,7 @@ {"id":{"name":"draw_rect_border","path":"scripts/draw_rect_border/draw_rect_border.yy",},}, {"id":{"name":"node_composite","path":"scripts/node_composite/node_composite.yy",},}, {"id":{"name":"s_node_path_map","path":"sprites/s_node_path_map/s_node_path_map.yy",},}, + {"id":{"name":"node_iterator_filter_inline_input","path":"scripts/node_iterator_filter_inline_input/node_iterator_filter_inline_input.yy",},}, {"id":{"name":"s_node_greyscale","path":"sprites/s_node_greyscale/s_node_greyscale.yy",},}, {"id":{"name":"sh_dilate","path":"shaders/sh_dilate/sh_dilate.yy",},}, {"id":{"name":"node_image_sequence","path":"scripts/node_image_sequence/node_image_sequence.yy",},}, @@ -1796,6 +1808,7 @@ {"id":{"name":"mouse_input","path":"scripts/mouse_input/mouse_input.yy",},}, {"id":{"name":"string_cut","path":"scripts/string_cut/string_cut.yy",},}, {"id":{"name":"__node_3d_prim_cylinder","path":"scripts/__node_3d_prim_cylinder/__node_3d_prim_cylinder.yy",},}, + {"id":{"name":"node_iterator_sort_inline_output","path":"scripts/node_iterator_sort_inline_output/node_iterator_sort_inline_output.yy",},}, {"id":{"name":"Obj_FirebaseFirestore_Collection_Query_options","path":"objects/Obj_FirebaseFirestore_Collection_Query_options/Obj_FirebaseFirestore_Collection_Query_options.yy",},}, {"id":{"name":"stack_functions","path":"scripts/stack_functions/stack_functions.yy",},}, {"id":{"name":"panel_nodes","path":"scripts/panel_nodes/panel_nodes.yy",},}, @@ -1988,6 +2001,7 @@ {"id":{"name":"s_node_export","path":"sprites/s_node_export/s_node_export.yy",},}, {"id":{"name":"FirebaseREST_Firestore_jsonEncode","path":"scripts/FirebaseREST_Firestore_jsonEncode/FirebaseREST_Firestore_jsonEncode.yy",},}, {"id":{"name":"texture_set_interpolation","path":"scripts/texture_set_interpolation/texture_set_interpolation.yy",},}, + {"id":{"name":"node_iterate_sort_inline","path":"scripts/node_iterate_sort_inline/node_iterate_sort_inline.yy",},}, {"id":{"name":"node_color_palette_replacement","path":"scripts/node_color_palette_replacement/node_color_palette_replacement.yy",},}, {"id":{"name":"d3d_object_instancer","path":"scripts/d3d_object_instancer/d3d_object_instancer.yy",},}, {"id":{"name":"sh_BGR","path":"shaders/sh_BGR/sh_BGR.yy",},}, @@ -2004,7 +2018,7 @@ {"id":{"name":"panel_patreon","path":"scripts/panel_patreon/panel_patreon.yy",},}, {"id":{"name":"node_collection","path":"scripts/node_collection/node_collection.yy",},}, {"id":{"name":"node_value","path":"scripts/node_value/node_value.yy",},}, - {"id":{"name":"draw_line_curve","path":"scripts/draw_line_curve/draw_line_curve.yy",},}, + {"id":{"name":"draw_connect_curve","path":"scripts/draw_connect_curve/draw_connect_curve.yy",},}, {"id":{"name":"sh_blend_screen","path":"shaders/sh_blend_screen/sh_blend_screen.yy",},}, {"id":{"name":"node_group_output","path":"scripts/node_group_output/node_group_output.yy",},}, {"id":{"name":"s_node_palette_extract","path":"sprites/s_node_palette_extract/s_node_palette_extract.yy",},}, @@ -2050,6 +2064,7 @@ {"id":{"name":"_f_p1","path":"fonts/_f_p1/_f_p1.yy",},}, {"id":{"name":"tuple_functions","path":"scripts/tuple_functions/tuple_functions.yy",},}, {"id":{"name":"curve_bezier_function","path":"scripts/curve_bezier_function/curve_bezier_function.yy",},}, + {"id":{"name":"draw_connect_linear","path":"scripts/draw_connect_linear/draw_connect_linear.yy",},}, {"id":{"name":"node_3d_mesh_obj","path":"scripts/node_3d_mesh_obj/node_3d_mesh_obj.yy",},}, {"id":{"name":"sh_blur_simple","path":"shaders/sh_blur_simple/sh_blur_simple.yy",},}, {"id":{"name":"sh_blend_difference","path":"shaders/sh_blend_difference/sh_blend_difference.yy",},}, diff --git a/datafiles/data/Theme.zip b/datafiles/data/Theme.zip index 35ca8e376..8395dd0de 100644 Binary files a/datafiles/data/Theme.zip and b/datafiles/data/Theme.zip differ diff --git a/fonts/_f_sdf/_f_sdf.old.png b/fonts/_f_sdf/_f_sdf.old.png index ae4b55e04..53dcdddd5 100644 Binary files a/fonts/_f_sdf/_f_sdf.old.png and b/fonts/_f_sdf/_f_sdf.old.png differ diff --git a/fonts/_f_sdf/_f_sdf.png b/fonts/_f_sdf/_f_sdf.png index 7ffe1ecdf..e81a7f9cb 100644 Binary files a/fonts/_f_sdf/_f_sdf.png and b/fonts/_f_sdf/_f_sdf.png differ diff --git a/fonts/_f_sdf_medium/_f_sdf_medium.old.png b/fonts/_f_sdf_medium/_f_sdf_medium.old.png index 8820791f8..f9a559447 100644 Binary files a/fonts/_f_sdf_medium/_f_sdf_medium.old.png and b/fonts/_f_sdf_medium/_f_sdf_medium.old.png differ diff --git a/fonts/_f_sdf_medium/_f_sdf_medium.png b/fonts/_f_sdf_medium/_f_sdf_medium.png index cca2a2ef5..542be9766 100644 Binary files a/fonts/_f_sdf_medium/_f_sdf_medium.png and b/fonts/_f_sdf_medium/_f_sdf_medium.png differ diff --git a/objects/o_dialog_menubox/Draw_64.gml b/objects/o_dialog_menubox/Draw_64.gml index a1a6f9d51..29360cfed 100644 --- a/objects/o_dialog_menubox/Draw_64.gml +++ b/objects/o_dialog_menubox/Draw_64.gml @@ -126,8 +126,6 @@ if(!ready) exit; draw_text(_bx, _by, _str); } } else { - var tx = dialog_x + show_icon * ui(32) + ui(16); - if(_menuItem.spr != noone) { var spr = is_array(_menuItem.spr)? _menuItem.spr[0] : _menuItem.spr; var ind = is_array(_menuItem.spr)? _menuItem.spr[1] : 0; @@ -139,6 +137,7 @@ if(!ready) exit; if(tog) draw_sprite_ui(THEME.icon_toggle, 0, dialog_x + ui(24), yy + hght / 2,,,, COLORS._main_icon); } + var tx = dialog_x + show_icon * ui(32) + ui(16); draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text); draw_set_alpha(_menuItem.active * 0.75 + 0.25); draw_text(tx, yy + hght / 2, label); diff --git a/objects/o_pie_menu/Create_0.gml b/objects/o_pie_menu/Create_0.gml index 19135ad06..02c907dbe 100644 --- a/objects/o_pie_menu/Create_0.gml +++ b/objects/o_pie_menu/Create_0.gml @@ -1,4 +1,22 @@ /// @description Insert description here // You can write your code in this editor -depth = -9999; \ No newline at end of file +#region data + depth = -9999; + + menu_id = ""; + menus = []; + pie_rad = ui(96); + hght = ui(36); + + context = noone; + active = true; + anim_prog = 0; + + function setMenu(menu) { + menus = menu; + } + + HOVER = self; + FOCUS = self; +#endregion \ No newline at end of file diff --git a/objects/o_pie_menu/Draw_64.gml b/objects/o_pie_menu/Draw_64.gml new file mode 100644 index 000000000..391e98811 --- /dev/null +++ b/objects/o_pie_menu/Draw_64.gml @@ -0,0 +1,84 @@ +/// @description Insert description here +// You can write your code in this editor + +#region anim + anim_prog = lerp_float(anim_prog, active, 5); + + if(anim_prog == 0 && !active) instance_destroy(); +#endregion + +#region draw + var rad = anim_prog * pie_rad; + var amo = array_length(menus); + var _r = 360 / amo; + + for( var i = 0; i < amo; i++ ) { + var _menuItem = menus[i]; + var label = _menuItem.name; + + var _ba = i * _r; + + var _bx = x + lengthdir_x(rad, _ba); + var _by = y + lengthdir_y(rad, _ba); + + var _spr = _menuItem.spr; + + draw_set_font(f_p0); + var _spw = string_width(label) + ui(32) + (_spr != noone) * ui(32); + _spw = max(8, _spw * anim_prog); + var _sph = hght; + + var _bx0 = _bx - _spw / 2; + var _by0 = _by - _sph / 2; + var _bx1 = _bx + _spw / 2; + var _by1 = _by + _sph / 2; + + draw_sprite_stretched(THEME.menu_bg, 0, _bx0, _by0, _spw, _sph); + + if(point_in_rectangle(mouse_mx, mouse_my, _bx0, _by0, _bx1, _by1)) { + draw_sprite_stretched_ext(THEME.textbox, 3, _bx0, _by0, _spw, _sph, COLORS.dialog_menubox_highlight, 0.75); + if(mouse_release(mb_left)) { + var _dat = { + _x: _bx0, + x: _bx1, + y: _by0, + depth: depth, + name: _menuItem.name, + index: i, + context: context, + params: _menuItem.params, + }; + + var _res = _menuItem.func(_dat); + } + } + + if(_spr != noone) { + var spr = is_array(_spr)? _spr[0] : _spr; + var ind = is_array(_spr)? _spr[1] : 0; + var aa = _menuItem.active * 0.5 + 0.25; + draw_sprite_ui(spr, ind, _bx0 + ui(24), _by0 + _sph / 2,,,, COLORS._main_icon, aa * anim_prog); + } + + if(_menuItem.toggle != noone) { + var tog = _menuItem.toggle(_menuItem); + if(tog) draw_sprite_ui(THEME.icon_toggle, 0, _bx0 + ui(24), _by0 + _sph / 2,,,, COLORS._main_icon); + } + + var tx = _bx0 + ui(16) + (_spr != noone) * ui(32); + var aa = _menuItem.active * 0.75 + 0.25; + + draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text); + draw_set_alpha(aa * anim_prog); + draw_text(tx, _by0 + _sph / 2, label); + draw_set_alpha(1); + + draw_sprite_stretched(THEME.menu_bg, 1, _bx0, _by0, _spw, _sph); + } + + if(mouse_release(mb_left)) { + HOVER = noone; + FOCUS = noone; + active = false; + } +#endregion \ No newline at end of file diff --git a/objects/o_pie_menu/o_pie_menu.yy b/objects/o_pie_menu/o_pie_menu.yy index 8765d65fe..13ad3c5e7 100644 --- a/objects/o_pie_menu/o_pie_menu.yy +++ b/objects/o_pie_menu/o_pie_menu.yy @@ -4,6 +4,7 @@ "name": "o_pie_menu", "eventList": [ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,}, + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":64,"eventType":8,"isDnD":false,}, ], "managed": true, "overriddenProperties": [], diff --git a/scripts/__node_iterator_inline/__node_iterator_inline.gml b/scripts/__node_iterator_inline/__node_iterator_inline.gml index 8abcaea24..e69de29bb 100644 --- a/scripts/__node_iterator_inline/__node_iterator_inline.gml +++ b/scripts/__node_iterator_inline/__node_iterator_inline.gml @@ -1,80 +0,0 @@ -function Node_Iterator_Inject() { - selectable = false; - - draw_line_shift_x = 0; - draw_line_shift_y = 0; - draw_line_thick = 1; - draw_line_shift_hover = false; - - attributes.junc_in = [ "", 0 ]; - attributes.junc_out = [ "", 0 ]; - - junc_in = noone; - junc_out = noone; - - value_buffer = noone; - - static bypassConnection = function() { #region - return false; - } #endregion - - static bypassNextNode = function() { #region - return false; - } #endregion - - static getNextNode = function() { return [] }; - - static scanJunc = function() { #region - var node_in = PROJECT.nodeMap[? attributes.junc_in[0]]; - var node_out = PROJECT.nodeMap[? attributes.junc_out[0]]; - - junc_in = node_in? node_in.inputs[| attributes.junc_in[1]] : noone; - junc_out = node_out? node_out.outputs[| attributes.junc_out[1]] : noone; - - if(junc_in) junc_in.value_from_loop = self; - if(junc_out) array_push(junc_out.value_to_loop, self); - } #endregion - - static updateValue = function() { #region - var type = junc_out.type; - var val = junc_out.getValue(); - - switch(type) { - case VALUE_TYPE.surface : - surface_array_free(value_buffer); - value_buffer = surface_array_clone(val); - break; - default : - value_buffer = variable_clone(val); - break; - } - } #endregion - - static getValue = function() { #region - return [ value_buffer, junc_out ]; - } #endregion - - static drawConnections = function(params = {}) { #region - if(!active) return; - if(!junc_in || !junc_out) return; - if(!junc_in.node.active || !junc_out.node.active) return; - - params.feedback = true; - - if(drawJuncConnection(junc_out, junc_in, params, self)) - return self; - } #endregion - - static drawNode = function(_x, _y, _mx, _my, _s, display_parameter = noone) {} - - static pointIn = function(_x, _y, _mx, _my, _s) { return false; } - - static postDeserialize = function() { #region - scanJunc(); - } #endregion - - static onDestroy = function() { #region - if(junc_in) junc_in.value_from_loop = noone; - if(junc_out) array_remove(junc_out.value_to_loop, self); - } #endregion -} \ No newline at end of file diff --git a/scripts/contextMenu_controller/contextMenu_controller.gml b/scripts/contextMenu_controller/contextMenu_controller.gml index facf3e013..3609fda6b 100644 --- a/scripts/contextMenu_controller/contextMenu_controller.gml +++ b/scripts/contextMenu_controller/contextMenu_controller.gml @@ -16,6 +16,21 @@ dia.setMenu(menu, align); return dia; } + + function pieMenuCall(menu_id = "", _x = mouse_mx, _y = mouse_my, menu = [], context = noone) { + var dia = instance_create(_x, _y, o_pie_menu); + if(menu_id != "" && ds_map_exists(CONTEXT_MENU_CALLBACK, menu_id)) { + var callbacks = CONTEXT_MENU_CALLBACK[? menu_id]; + + for( var i = 0, n = array_length(callbacks); i < n; i++ ) + array_append(menu, callbacks[i].populate()); + } + + dia.menu_id = menu_id; + dia.context = context; + dia.setMenu(menu); + return dia; + } function submenuCall(_data, menu = []) { var dia = instance_create_depth(_data.x - ui(4), _data.y, _data.depth - 1, o_dialog_menubox); diff --git a/scripts/draw_line_curve/draw_line_curve.gml b/scripts/draw_connect_curve/draw_connect_curve.gml similarity index 80% rename from scripts/draw_line_curve/draw_line_curve.gml rename to scripts/draw_connect_curve/draw_connect_curve.gml index 6aa834bdc..87cd7a8e8 100644 --- a/scripts/draw_line_curve/draw_line_curve.gml +++ b/scripts/draw_connect_curve/draw_connect_curve.gml @@ -1,41 +1,4 @@ -enum LINE_STYLE { - solid, - dashed -} - -function draw_line_curve(x0, y0, x1, y1, thick = 1) { - var xc = (x0 + x1) / 2; - var sample = max(8, ceil((abs(x0 - x1) + abs(y0 - y1)) / 4)); - - //var buff = vertex_create_buffer(); - //vertex_begin(buff, global.format_pc); - - var c = draw_get_color(); - var ox, oy, nx, ny, t, it; - for( var i = 0; i <= sample; i++ ) { - t = i / sample; - it = 1 - t; - - nx = x0 * t * t * t + 3 * xc * it * t * t + 3 * xc * it * it * t + x1 * it * it * it; - ny = y0 * t * t * t + 3 * y0 * it * t * t + 3 * y1 * it * it * t + y1 * it * it * it; - - if(i) { - draw_line_width(ox, oy, nx, ny, thick); - //vertex_position(buff, ox, oy); vertex_color(buff, c, 1); - //vertex_position(buff, nx, ny); vertex_color(buff, c, 1); - } - - ox = nx; - oy = ny; - } - - //vertex_end(buff); - //vertex_submit(buff, pr_linelist, -1); - - //buffer_delete(buff); -} - -function draw_line_curve_color(x0, y0, x1, y1, xc = noone, yc = noone, _s = 1, thick = 1, col1 = c_white, col2 = c_white, type = LINE_STYLE.solid) { +function draw_line_curve_color(x0, y0, x1, y1, xc = noone, yc = noone, _s = 1, thick = 1, col1 = c_white, col2 = c_white, type = LINE_STYLE.solid) { #region if(xc == noone) xc = (x0 + x1) / 2; if(yc == noone) yc = (y0 + y1) / 2; @@ -85,9 +48,9 @@ function draw_line_curve_color(x0, y0, x1, y1, xc = noone, yc = noone, _s = 1, t oy = ny; oc = nc; } -} +} #endregion -function draw_line_curve_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_white, col2 = c_white) { +function draw_line_curve_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_white, col2 = c_white) { #region var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 32 * PREFERENCES.connection_line_sample); sample = clamp(sample, 2, 128); @@ -121,9 +84,9 @@ function draw_line_curve_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_whit oy = ny; oc = nc; } -} +} #endregion -function distance_to_curve(mx, my, x0, y0, x1, y1, xc, yc, _s) { +function distance_to_curve(mx, my, x0, y0, x1, y1, xc, yc, _s) { #region var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 32 * PREFERENCES.connection_line_sample); sample = clamp(sample, 2, 128); @@ -159,9 +122,9 @@ function distance_to_curve(mx, my, x0, y0, x1, y1, xc, yc, _s) { } return dist; -} +} #endregion -function distance_to_curve_corner(mx, my, x0, y0, x1, y1, _s) { +function distance_to_curve_corner(mx, my, x0, y0, x1, y1, _s) { #region var sample = ceil((abs(x0 - x1) + abs(y0 - y1)) / 32 * PREFERENCES.connection_line_sample); sample = clamp(sample, 2, 128); @@ -195,4 +158,4 @@ function distance_to_curve_corner(mx, my, x0, y0, x1, y1, _s) { } return dist; -} \ No newline at end of file +} #endregion \ No newline at end of file diff --git a/scripts/draw_line_elbow_diag/draw_line_elbow_diag.yy b/scripts/draw_connect_curve/draw_connect_curve.yy similarity index 54% rename from scripts/draw_line_elbow_diag/draw_line_elbow_diag.yy rename to scripts/draw_connect_curve/draw_connect_curve.yy index 3ebb7ce5f..8b71143cc 100644 --- a/scripts/draw_line_elbow_diag/draw_line_elbow_diag.yy +++ b/scripts/draw_connect_curve/draw_connect_curve.yy @@ -1,11 +1,11 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "draw_line_elbow_diag", + "name": "draw_connect_curve", "isCompatibility": false, "isDnD": false, "parent": { - "name": "draw", - "path": "folders/functions/draw.yy", + "name": "connection", + "path": "folders/functions/connection.yy", }, } \ No newline at end of file diff --git a/scripts/draw_line_elbow/draw_line_elbow.gml b/scripts/draw_connect_elbow/draw_connect_elbow.gml similarity index 94% rename from scripts/draw_line_elbow/draw_line_elbow.gml rename to scripts/draw_connect_elbow/draw_connect_elbow.gml index 7d955efe0..dd0d6b9ac 100644 --- a/scripts/draw_line_elbow/draw_line_elbow.gml +++ b/scripts/draw_connect_elbow/draw_connect_elbow.gml @@ -1,4 +1,4 @@ -function draw_line_elbow_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = 1, thick = 1, col1 = c_white, col2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { +function draw_line_elbow_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = 1, thick = 1, col1 = c_white, col2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { #region var sample = corner / 4; sample = clamp(sample, 1, 8); @@ -68,9 +68,9 @@ function draw_line_elbow_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = 1, t draw_line_dashed_color(cx, y1, x1, y1, thick, cm, col2, 6 * _s); } } -} +} #endregion -function draw_line_elbow_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_white, col2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { +function draw_line_elbow_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_white, col2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { #region var sample = corner / 4; sample = clamp(sample, 1, 8); @@ -84,9 +84,9 @@ function draw_line_elbow_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_whit draw_line_round_color(x0, y0, x1 - corner * sx, y0, thick, col1, colc); draw_line_round_color(x1, y0 + corner * sy, x1, y1, thick, colc, col2); draw_corner(x1 - corner * sx, y0, x1, y0, x1, y0 + corner * sy, thick, colc, sample); -} +} #endregion -function distance_to_elbow(mx, my, x0, y0, x1, y1, cx, cy, _s, indexIn = 1, indexOut = 1) { +function distance_to_elbow(mx, my, x0, y0, x1, y1, cx, cy, _s, indexIn = 1, indexOut = 1) { #region var inv = x1 - 16 * _s * indexOut <= x0 + 16 * _s * indexIn; var xx0 = x0 + 16 * _s * indexIn; var xx1 = x1 - 16 * _s * indexOut; @@ -104,11 +104,11 @@ function distance_to_elbow(mx, my, x0, y0, x1, y1, cx, cy, _s, indexIn = 1, inde return dist; } -} +} #endregion -function distance_to_elbow_corner(mx, my, x0, y0, x1, y1) { +function distance_to_elbow_corner(mx, my, x0, y0, x1, y1) { #region var dist = distance_to_line(mx, my, x0, y0, x1, y0); dist = min(dist, distance_to_line(mx, my, x1, y0, x1, y1)); return dist; -} \ No newline at end of file +} #endregion \ No newline at end of file diff --git a/scripts/draw_line_curve/draw_line_curve.yy b/scripts/draw_connect_elbow/draw_connect_elbow.yy similarity index 54% rename from scripts/draw_line_curve/draw_line_curve.yy rename to scripts/draw_connect_elbow/draw_connect_elbow.yy index aef7441da..e2a69ab70 100644 --- a/scripts/draw_line_curve/draw_line_curve.yy +++ b/scripts/draw_connect_elbow/draw_connect_elbow.yy @@ -1,11 +1,11 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "draw_line_curve", + "name": "draw_connect_elbow", "isCompatibility": false, "isDnD": false, "parent": { - "name": "draw", - "path": "folders/functions/draw.yy", + "name": "connection", + "path": "folders/functions/connection.yy", }, } \ No newline at end of file diff --git a/scripts/draw_line_elbow_diag/draw_line_elbow_diag.gml b/scripts/draw_connect_elbow_diag/draw_connect_elbow_diag.gml similarity index 98% rename from scripts/draw_line_elbow_diag/draw_line_elbow_diag.gml rename to scripts/draw_connect_elbow_diag/draw_connect_elbow_diag.gml index f4405dca1..8353265bb 100644 --- a/scripts/draw_line_elbow_diag/draw_line_elbow_diag.gml +++ b/scripts/draw_connect_elbow_diag/draw_connect_elbow_diag.gml @@ -1,4 +1,4 @@ -function draw_line_elbow_diag_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = 1, thick = 1, c1 = c_white, c2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { +function draw_line_elbow_diag_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = 1, thick = 1, c1 = c_white, c2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { #region var __dash = 6 * _s; var __line = type == LINE_STYLE.solid? draw_line_width_color : draw_line_dashed_color; @@ -203,9 +203,9 @@ function draw_line_elbow_diag_color(x0, y0, x1, y1, cx = noone, cy = noone, _s = draw_corner(_xc1 - cor2, y1 - cor2 * iy, _xc1, y1, _xc1 + corn, y1, thick, cm, sample); } } -} +} #endregion -function draw_line_elbow_diag_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_white, col2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { +function draw_line_elbow_diag_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c_white, col2 = c_white, corner = 0, indexIn = 1, indexOut = 1, type = LINE_STYLE.solid) { #region var sample = floor(corner / 8); sample = clamp(sample, 0, 8); if(sample == 0) corner = 0; @@ -228,9 +228,9 @@ function draw_line_elbow_diag_corner(x0, y0, x1, y1, _s = 1, thick = 1, col1 = c //draw_circle(x1 - diag * sx, y0, 4, false); //draw_circle(x1, y0 + diag * sy, 4, false); -} +} #endregion -function distance_to_elbow_diag(mx, my, x0, y0, x1, y1, cx, cy, _s, indexIn = 1, indexOut = 1) { +function distance_to_elbow_diag(mx, my, x0, y0, x1, y1, cx, cy, _s, indexIn = 1, indexOut = 1) { #region var iy = sign(y1 - y0); var xx0 = x0 + 16 * _s * indexIn; var xx1 = x1 - 16 * _s * indexOut; @@ -327,9 +327,9 @@ function distance_to_elbow_diag(mx, my, x0, y0, x1, y1, cx, cy, _s, indexIn = 1, return dist; } -} +} #endregion -function distance_to_elbow_diag_corner(mx, my, x0, y0, x1, y1) { +function distance_to_elbow_diag_corner(mx, my, x0, y0, x1, y1) { #region var sx = sign(x1 - x0); var sy = sign(y1 - y0); var diag = min(abs(x0 - x1) / 2, abs(y0 - y1) / 2); @@ -340,4 +340,4 @@ function distance_to_elbow_diag_corner(mx, my, x0, y0, x1, y1) { dist = min(dist, distance_to_line(mx, my, x1, y0 + diag * sy, x1, y1)); return dist; -} \ No newline at end of file +} #endregion \ No newline at end of file diff --git a/scripts/draw_connect_elbow_diag/draw_connect_elbow_diag.yy b/scripts/draw_connect_elbow_diag/draw_connect_elbow_diag.yy new file mode 100644 index 000000000..cafe86ab9 --- /dev/null +++ b/scripts/draw_connect_elbow_diag/draw_connect_elbow_diag.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "draw_connect_elbow_diag", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "connection", + "path": "folders/functions/connection.yy", + }, +} \ No newline at end of file diff --git a/scripts/draw_connect_linear/draw_connect_linear.gml b/scripts/draw_connect_linear/draw_connect_linear.gml new file mode 100644 index 000000000..6203b0adb --- /dev/null +++ b/scripts/draw_connect_linear/draw_connect_linear.gml @@ -0,0 +1,22 @@ +function draw_line_feedback(x0, y0, x1, y1, th, c1, c0, _s) { #region + draw_line_dashed_color(x0, y0, x1, y1, th, c1, c0, 6 * _s); + return; + + var _y0 = y0 - 12 * _s; + var _y1 = y1 - 12 * _s; + + var x0e = x0 + 12 * _s * sign(x0 - x1); + var x1e = x1 - 12 * _s * sign(x0 - x1); + + draw_line_dashed_color(x0e, y0, x0e, _y0, th, c0, c0, 6 * _s); + draw_line_dashed_color(x0, y0, x0e, y0, th, c0, c0, 6 * _s); + + draw_line_dashed_color(x0e, _y0, x1e, _y1, th, c1, c0, 6 * _s); + + draw_line_dashed_color(x1e, y1, x1e, _y1, th, c1, c1, 6 * _s); + draw_line_dashed_color(x1e, y1, x1, y1, th, c1, c1, 6 * _s); +} #endregion + +function distance_line_feedback(mx, my, x0, y0, x1, y1) { #region + return distance_to_line(mx, my, x0, y0, x1, y1); +} #endregion \ No newline at end of file diff --git a/scripts/draw_line_elbow/draw_line_elbow.yy b/scripts/draw_connect_linear/draw_connect_linear.yy similarity index 54% rename from scripts/draw_line_elbow/draw_line_elbow.yy rename to scripts/draw_connect_linear/draw_connect_linear.yy index 6346e437e..7fcc352bb 100644 --- a/scripts/draw_line_elbow/draw_line_elbow.yy +++ b/scripts/draw_connect_linear/draw_connect_linear.yy @@ -1,11 +1,11 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "draw_line_elbow", + "name": "draw_connect_linear", "isCompatibility": false, "isDnD": false, "parent": { - "name": "draw", - "path": "folders/functions/draw.yy", + "name": "connection", + "path": "folders/functions/connection.yy", }, } \ No newline at end of file diff --git a/scripts/node_VFX_group_inline/node_VFX_group_inline.gml b/scripts/node_VFX_group_inline/node_VFX_group_inline.gml index c656d44a7..b3bb483f9 100644 --- a/scripts/node_VFX_group_inline/node_VFX_group_inline.gml +++ b/scripts/node_VFX_group_inline/node_VFX_group_inline.gml @@ -2,7 +2,14 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline( name = "VFX"; color = COLORS.node_blend_vfx; icon = THEME.vfx; + + inputs[| 0] = nodeValue("Loop", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true ) + .rejectArray(); + + topoList = ds_list_create(); + update_on_frame = true; + managedRenderOrder = true; if(!LOADING && !APPENDING && !CLONING) { #region var input = nodeBuild("Node_VFX_Spawner", x, y); @@ -14,4 +21,46 @@ function Node_VFX_Group_Inline(_x, _y, _group = noone) : Node_Collection_Inline( addNode(output); } #endregion + static getNextNodes = function() { #region + return __nodeLeafList(nodes); + } #endregion + + static reset = function() { #region + for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { + var node = nodes[| i]; + if(!struct_has(node, "reset")) continue; + node.reset(); + } + + var loop = getInputData(0); + if(!loop) return; + + for( var i = 0; i < TOTAL_FRAMES; i++ ) + for( var j = 0, m = ds_list_size(topoList); j < m; j++ ) { + var node = topoList[| j]; + var _ins = instanceof(node); + + if(!string_pos("Node_VFX", _ins)) + continue; + + if(_ins == "Node_VFX_Renderer" || _ins == "Node_VFX_Renderer_Output") + continue; + + node.doUpdate(i); + } + + for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { + var node = nodes[| i]; + if(!struct_has(node, "resetSeed")) continue; + node.resetSeed(); + } + } #endregion + + static update = function() { #region + if(CURRENT_FRAME == 0) { + NodeListSort(topoList, nodes); + reset(); + } + } #endregion + } \ No newline at end of file diff --git a/scripts/node_collection_inline/node_collection_inline.gml b/scripts/node_collection_inline/node_collection_inline.gml index 7f3c657b8..69718c62d 100644 --- a/scripts/node_collection_inline/node_collection_inline.gml +++ b/scripts/node_collection_inline/node_collection_inline.gml @@ -11,6 +11,9 @@ function Node_Collection_Inline(_x, _y, _group = noone) : Node(_x, _y, _group) c group_hover_al = 0; selectable = false; + input_node_type = noone; + output_node_type = noone; + static removeNode = function(node) { #region array_remove(attributes.members, node.node_id); ds_list_remove(nodes, node); @@ -33,9 +36,9 @@ function Node_Collection_Inline(_x, _y, _group = noone) : Node(_x, _y, _group) c var _rad = 6; var _stp = 15; - var _nx0 = _node.x - 32 + _rad; + var _nx0 = is_instanceof(_node, input_node_type)? _node.x + _node.w / 2 : _node.x - 32 + _rad; var _ny0 = _node.y - 32 + _rad; - var _nx1 = _node.x + (_node == self? _node.w / 2 : _node.w + 32 - _rad); + var _nx1 = is_instanceof(_node, output_node_type)? _node.x + _node.w / 2 : _node.x + _node.w + 32 - _rad; var _ny1 = _node.y + _node.h + 32 - _rad; for( var i = 0; i < 90; i += _stp ) _vertex[_ind++] = [ _nx1 + lengthdir_x(_rad, i), _ny0 + lengthdir_y(_rad, i) ]; diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index f0b51d15d..5bcd98c95 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -61,6 +61,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x #region ---- display ---- color = c_white; icon = noone; + icon_24 = noone; bg_spr = THEME.node_bg; bg_sel_spr = THEME.node_active; diff --git a/scripts/node_feedback_inline/node_feedback_inline.gml b/scripts/node_feedback_inline/node_feedback_inline.gml index a48f3fc7c..427c0639b 100644 --- a/scripts/node_feedback_inline/node_feedback_inline.gml +++ b/scripts/node_feedback_inline/node_feedback_inline.gml @@ -1,7 +1,8 @@ function Node_Feedback_Inline(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { - name = "Feedback"; - color = COLORS.node_blend_feedback; - icon = THEME.feedback; + name = "Feedback"; + color = COLORS.node_blend_feedback; + icon = THEME.feedback; + icon_24 = THEME.feedback_24; selectable = false; update_on_frame = true; diff --git a/scripts/node_iterate_each/node_iterate_each.yy b/scripts/node_iterate_each/node_iterate_each.yy index d0d3871d7..c99c5d9cb 100644 --- a/scripts/node_iterate_each/node_iterate_each.yy +++ b/scripts/node_iterate_each/node_iterate_each.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "for each", - "path": "folders/nodes/data/iterate/for each.yy", + "path": "folders/nodes/data/iterate/_legacy/for each.yy", }, } \ No newline at end of file diff --git a/scripts/node_iterate_each_inline/node_iterate_each_inline.gml b/scripts/node_iterate_each_inline/node_iterate_each_inline.gml new file mode 100644 index 000000000..31fb93988 --- /dev/null +++ b/scripts/node_iterate_each_inline/node_iterate_each_inline.gml @@ -0,0 +1,95 @@ +function Node_Iterate_Each_Inline(_x, _y, _group = noone) : Node_Collection_Inline(_x, _y, _group) constructor { + name = "Loop Array"; + color = COLORS.node_blend_loop; + + input_node = noone; + output_node = noone; + + input_node_type = Node_Iterator_Each_Inline_Input; + output_node_type = Node_Iterator_Each_Inline_Output; + iterated = 0; + + if(!LOADING && !APPENDING && !CLONING) { #region + var input = nodeBuild("Node_Iterator_Each_Inline_Input", x, y); + var output = nodeBuild("Node_Iterator_Each_Inline_Output", x + 256, y); + + output.inputs[| 0].setFrom(input.outputs[| 0]); + + addNode(input); + addNode(output); + + input_node = input; + output_node = output; + + input_node.loop = self; + output_node.loop = self; + } #endregion + + static getIterationCount = function() { #region + var _arr = input_node.inputs[| 0].getValue(); + return array_length(_arr); + } #endregion + + static bypassNextNode = function() { #region + return iterated < getIterationCount(); + } #endregion + + static getNextNodes = function() { #region + LOG_BLOCK_START(); + LOG_IF(global.FLAG.render == 1, "[outputNextNode] Get next node from inline iterate"); + + resetRender(); + LOG_IF(global.FLAG.render == 1, $"Loop restart: iteration {iterated}"); + var _nodes = __nodeLeafList(nodes); + array_push_unique(_nodes, input_node); + iterated++; + + LOG_BLOCK_END(); + + return _nodes; + } #endregion + + static refreshMember = function() { #region + ds_list_clear(nodes); + + for( var i = 0, n = array_length(attributes.members); i < n; i++ ) { + if(!ds_map_exists(PROJECT.nodeMap, attributes.members[i])) { + print($"Node not found {attributes.members[i]}"); + continue; + } + + var _node = PROJECT.nodeMap[? attributes.members[i]]; + array_push_unique(_node.context_data, self); + ds_list_add(nodes, _node); + + if(is_instanceof(_node, Node_Iterator_Each_Inline_Input)) { + input_node = _node; + input_node.loop = self; + } + + if(is_instanceof(_node, Node_Iterator_Each_Inline_Output)) { + output_node = _node; + output_node.loop = self; + } + } + + if(input_node == noone || output_node == noone) { + if(input_node) nodeDelete(input_node); + if(output_node) nodeDelete(output_node); + nodeDelete(self); + } + } #endregion + + static update = function() { #region + if(input_node == noone || output_node == noone) { + if(input_node) nodeDelete(input_node); + if(output_node) nodeDelete(output_node); + nodeDelete(self); + return; + } + + iterated = 0; + output_node.outputs[| 0].setValue([]); + } #endregion + +} \ No newline at end of file diff --git a/scripts/node_iterate_each_inline/node_iterate_each_inline.yy b/scripts/node_iterate_each_inline/node_iterate_each_inline.yy new file mode 100644 index 000000000..bcb09a57a --- /dev/null +++ b/scripts/node_iterate_each_inline/node_iterate_each_inline.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_iterate_each_inline", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "for each", + "path": "folders/nodes/data/iterate/for each.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_iterate_filter/node_iterate_filter.yy b/scripts/node_iterate_filter/node_iterate_filter.yy index 1b1b5378b..8e52f0184 100644 --- a/scripts/node_iterate_filter/node_iterate_filter.yy +++ b/scripts/node_iterate_filter/node_iterate_filter.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "for filter", - "path": "folders/nodes/data/iterate/for filter.yy", + "path": "folders/nodes/data/iterate/_legacy/for filter.yy", }, } \ No newline at end of file diff --git a/scripts/node_iterate_filter_inline/node_iterate_filter_inline.gml b/scripts/node_iterate_filter_inline/node_iterate_filter_inline.gml new file mode 100644 index 000000000..433836126 --- /dev/null +++ b/scripts/node_iterate_filter_inline/node_iterate_filter_inline.gml @@ -0,0 +1,95 @@ +function Node_Iterate_Filter_Inline(_x, _y, _group = noone) : Node_Collection_Inline(_x, _y, _group) constructor { + name = "Filter Array"; + color = COLORS.node_blend_loop; + + input_node = noone; + output_node = noone; + + input_node_type = Node_Iterator_Filter_Inline_Input; + output_node_type = Node_Iterator_Filter_Inline_Output; + iterated = 0; + + if(!LOADING && !APPENDING && !CLONING) { #region + var input = nodeBuild("Node_Iterator_Filter_Inline_Input", x, y); + var output = nodeBuild("Node_Iterator_Filter_Inline_Output", x + 256, y); + + output.inputs[| 0].setFrom(input.outputs[| 0]); + + addNode(input); + addNode(output); + + input_node = input; + output_node = output; + + input_node.loop = self; + output_node.loop = self; + } #endregion + + static getIterationCount = function() { #region + var _arr = input_node.inputs[| 0].getValue(); + return array_length(_arr); + } #endregion + + static bypassNextNode = function() { #region + return iterated < getIterationCount(); + } #endregion + + static getNextNodes = function() { #region + LOG_BLOCK_START(); + LOG_IF(global.FLAG.render == 1, "[outputNextNode] Get next node from inline iterate"); + + resetRender(); + LOG_IF(global.FLAG.render == 1, $"Loop restart: iteration {iterated}"); + var _nodes = __nodeLeafList(nodes); + array_push_unique(_nodes, input_node); + iterated++; + + LOG_BLOCK_END(); + + return _nodes; + } #endregion + + static refreshMember = function() { #region + ds_list_clear(nodes); + + for( var i = 0, n = array_length(attributes.members); i < n; i++ ) { + if(!ds_map_exists(PROJECT.nodeMap, attributes.members[i])) { + print($"Node not found {attributes.members[i]}"); + continue; + } + + var _node = PROJECT.nodeMap[? attributes.members[i]]; + array_push_unique(_node.context_data, self); + ds_list_add(nodes, _node); + + if(is_instanceof(_node, Node_Iterator_Filter_Inline_Input)) { + input_node = _node; + input_node.loop = self; + } + + if(is_instanceof(_node, Node_Iterator_Filter_Inline_Output)) { + output_node = _node; + output_node.loop = self; + } + } + + if(input_node == noone || output_node == noone) { + if(input_node) nodeDelete(input_node); + if(output_node) nodeDelete(output_node); + nodeDelete(self); + } + } #endregion + + static update = function() { #region + if(input_node == noone || output_node == noone) { + if(input_node) nodeDelete(input_node); + if(output_node) nodeDelete(output_node); + nodeDelete(self); + return; + } + + iterated = 0; + output_node.outputs[| 0].setValue([]); + } #endregion + +} \ No newline at end of file diff --git a/scripts/node_iterate_filter_inline/node_iterate_filter_inline.yy b/scripts/node_iterate_filter_inline/node_iterate_filter_inline.yy new file mode 100644 index 000000000..207ba4764 --- /dev/null +++ b/scripts/node_iterate_filter_inline/node_iterate_filter_inline.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_iterate_filter_inline", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "for filter", + "path": "folders/nodes/data/iterate/for filter.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_iterate_inline/node_iterate_inline.gml b/scripts/node_iterate_inline/node_iterate_inline.gml index 7076544b5..be53d45b8 100644 --- a/scripts/node_iterate_inline/node_iterate_inline.gml +++ b/scripts/node_iterate_inline/node_iterate_inline.gml @@ -1,12 +1,13 @@ function Node_Iterate_Inline(_x, _y, _group = noone) : Node_Collection_Inline(_x, _y, _group) constructor { - name = "Loop"; - color = COLORS.node_blend_loop; + name = "Loop"; + color = COLORS.node_blend_loop; + icon = THEME.loop; + icon_24 = THEME.loop_24; inputs[| 0] = nodeValue("Repeat", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1 ) .uncache(); managedRenderOrder = true; - selectable = false; draw_line_feed = true; draw_line_shift_x = 0; diff --git a/scripts/node_iterate_sort/node_iterate_sort.yy b/scripts/node_iterate_sort/node_iterate_sort.yy index eae8d461a..141b7a3fa 100644 --- a/scripts/node_iterate_sort/node_iterate_sort.yy +++ b/scripts/node_iterate_sort/node_iterate_sort.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "for sort", - "path": "folders/nodes/data/iterate/for sort.yy", + "path": "folders/nodes/data/iterate/_legacy/for sort.yy", }, } \ No newline at end of file diff --git a/scripts/node_iterate_sort_inline/node_iterate_sort_inline.gml b/scripts/node_iterate_sort_inline/node_iterate_sort_inline.gml new file mode 100644 index 000000000..c47326022 --- /dev/null +++ b/scripts/node_iterate_sort_inline/node_iterate_sort_inline.gml @@ -0,0 +1,153 @@ +function Node_Iterate_Sort_Inline(_x, _y, _group = noone) : Node_Collection_Inline(_x, _y, _group) constructor { + name = "Sort Array"; + color = COLORS.node_blend_loop; + + topoList = ds_list_create(); + + input_node = noone; + output_node = noone; + + input_node_type = Node_Iterator_Sort_Inline_Input; + output_node_type = Node_Iterator_Sort_Inline_Output; + iterated = 0; + + if(!LOADING && !APPENDING && !CLONING) { #region + var input = nodeBuild("Node_Iterator_Sort_Inline_Input", x, y); + var output = nodeBuild("Node_Iterator_Sort_Inline_Output", x + 256, y); + + addNode(input); + addNode(output); + + input_node = input; + output_node = output; + + input_node.loop = self; + output_node.loop = self; + } #endregion + + static isActiveDynamic = function(frame = CURRENT_FRAME) { #region + for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) + if(nodes[| i].isActiveDynamic(frame)) return true; + + return false; + } #endregion + + static getNextNodes = function() { #region + return output_node.getNextNodes(); + } #endregion + + static refreshMember = function() { #region + ds_list_clear(nodes); + + for( var i = 0, n = array_length(attributes.members); i < n; i++ ) { + if(!ds_map_exists(PROJECT.nodeMap, attributes.members[i])) { + print($"Node not found {attributes.members[i]}"); + continue; + } + + var _node = PROJECT.nodeMap[? attributes.members[i]]; + array_push_unique(_node.context_data, self); + ds_list_add(nodes, _node); + + if(is_instanceof(_node, Node_Iterator_Sort_Inline_Input)) { + input_node = _node; + input_node.loop = self; + } + + if(is_instanceof(_node, Node_Iterator_Sort_Inline_Output)) { + output_node = _node; + output_node.loop = self; + } + } + + if(input_node == noone || output_node == noone) { + if(input_node) nodeDelete(input_node); + if(output_node) nodeDelete(output_node); + nodeDelete(self); + } + } #endregion + + static update = function(frame = CURRENT_FRAME) { #region + if(input_node == noone || output_node == noone) { + if(input_node) nodeDelete(input_node); + if(output_node) nodeDelete(output_node); + nodeDelete(self); + return; + } + + if(frame == 0 || !IS_PLAYING) + NodeListSort(topoList, nodes); + + sortArray(); + } #endregion + + static swap = function(arr, a, b) { #region + var temp = arr[a]; + arr[@ a] = arr[b]; + arr[@ b] = temp; + } #endregion + + static compareValue = function(val1, val2) { #region + input_node.outputs[| 0].setValue(val1,,, false); + input_node.outputs[| 1].setValue(val2,,, false); + + resetRender(true); + RenderList(topoList); + + var res = output_node.inputs[| 0].getValue(); + //print($"Comparing value {val1}, {val2} > [{res}]"); + return res; + } #endregion + + static partition = function(arr, low, high) { #region + var pv = arr[high]; + var i = low - 1; + + for(var j = low; j < high; j++) { + if(compareValue(arr[j], pv)) continue; + + i++; + swap(arr, i, j); + } + + swap(arr, i + 1, high); + return i + 1; + } #endregion + + static quickSort = function(arr, low, high) { #region + if(low >= high) return; + + var p = partition(arr, low, high); + + quickSort(arr, low, p - 1); + quickSort(arr, p + 1, high); + } #endregion + + static sortArray = function() { #region + iterated = 0; + loop_start_time = get_timer(); + + var _frj = input_node.inputs[| 0].value_from; + var type = _frj == noone? VALUE_TYPE.any : _frj.type; + + input_node.inputs[| 0].setType(type); + input_node.outputs[| 0].setType(type); + input_node.outputs[| 1].setType(type); + + output_node.outputs[| 0].setType(type); + + if(input_node.inputs[| 0].value_from == noone) return; + + var arrIn = input_node.inputs[| 0].getValue(); + var arrOut = output_node.outputs[| 0].getValue(); + + arrOut = array_clone(arrIn); + + print($"===== Sort begin ====="); + quickSort(arrOut, 0, array_length(arrOut) - 1); + print($"Sorted {arrIn} > {arrOut}") + + output_node.outputs[| 0].setValue(arrOut); + } #endregion + +} \ No newline at end of file diff --git a/scripts/node_iterate_sort_inline/node_iterate_sort_inline.yy b/scripts/node_iterate_sort_inline/node_iterate_sort_inline.yy new file mode 100644 index 000000000..76aeb45bb --- /dev/null +++ b/scripts/node_iterate_sort_inline/node_iterate_sort_inline.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_iterate_sort_inline", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "for sort inline", + "path": "folders/nodes/data/iterate/for sort inline.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_iterator_each_inline_input/node_iterator_each_inline_input.gml b/scripts/node_iterator_each_inline_input/node_iterator_each_inline_input.gml new file mode 100644 index 000000000..ffded4a61 --- /dev/null +++ b/scripts/node_iterator_each_inline_input/node_iterator_each_inline_input.gml @@ -0,0 +1,23 @@ +function Node_Iterator_Each_Inline_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Loop Input"; + color = COLORS.node_blend_loop; + loop = noone; + + inputs[| 0] = nodeValue("Array in", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, [] ) + .setVisible(true, true); + + outputs[| 0] = nodeValue("Value in", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0 ); + + static update = function() { #region + if(!is_instanceof(loop, Node_Iterate_Each_Inline)) return; + + var _typ = inputs[| 0].value_from == noone? VALUE_TYPE.any : inputs[| 0].value_from.type; + inputs[| 0].setType(_typ); + outputs[| 0].setType(_typ); + + var val = inputs[| 0].getValue(); + var itr = loop.iterated - 1; + + outputs[| 0].setValue(array_safe_get(val, itr)); + } #endregion +} \ No newline at end of file diff --git a/scripts/node_iterator_each_inline_input/node_iterator_each_inline_input.yy b/scripts/node_iterator_each_inline_input/node_iterator_each_inline_input.yy new file mode 100644 index 000000000..8730090c1 --- /dev/null +++ b/scripts/node_iterator_each_inline_input/node_iterator_each_inline_input.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_iterator_each_inline_input", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "for each", + "path": "folders/nodes/data/iterate/for each.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_iterator_each_inline_output/node_group_input.yy b/scripts/node_iterator_each_inline_output/node_group_input.yy new file mode 100644 index 000000000..b48fa62c4 --- /dev/null +++ b/scripts/node_iterator_each_inline_output/node_group_input.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "group", + "path": "folders/nodes/data/group.yy", + }, + "resourceVersion": "1.0", + "name": "node_group_input", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_iterator_each_inline_output/node_iterator_each_inline_output.gml b/scripts/node_iterator_each_inline_output/node_iterator_each_inline_output.gml new file mode 100644 index 000000000..f041374f1 --- /dev/null +++ b/scripts/node_iterator_each_inline_output/node_iterator_each_inline_output.gml @@ -0,0 +1,33 @@ +function Node_Iterator_Each_Inline_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Loop Output"; + color = COLORS.node_blend_loop; + loop = noone; + + inputs[| 0] = nodeValue("Value out", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0 ) + .setVisible(true, true); + + outputs[| 0] = nodeValue("Array out", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, [] ); + + static getNextNodes = function() { #region + if(loop.bypassNextNode()) + return loop.getNextNodes(); + return getNextNodesRaw(); + } #endregion + + static update = function(frame = CURRENT_FRAME) { #region + if(!is_instanceof(loop, Node_Iterate_Each_Inline)) return; + + var _typ = inputs[| 0].value_from == noone? VALUE_TYPE.any : inputs[| 0].value_from.type; + inputs[| 0].setType(_typ); + outputs[| 0].setType(_typ); + + var val = getInputData(0); + var arr = outputs[| 0].getValue(); + var itr = loop.iterated - 1; + + arr[@ itr] = val; + outputs[| 0].setValue(arr); + + //print($"Output iteration {itr} = {val} | {arr}"); + } #endregion +} \ No newline at end of file diff --git a/scripts/node_iterator_each_inline_output/node_iterator_each_inline_output.yy b/scripts/node_iterator_each_inline_output/node_iterator_each_inline_output.yy new file mode 100644 index 000000000..b9dfb80d5 --- /dev/null +++ b/scripts/node_iterator_each_inline_output/node_iterator_each_inline_output.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_iterator_each_inline_output", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "for each", + "path": "folders/nodes/data/iterate/for each.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_iterator_each_input/node_iterator_each_input.yy b/scripts/node_iterator_each_input/node_iterator_each_input.yy index d3d0cb201..d56d3fe46 100644 --- a/scripts/node_iterator_each_input/node_iterator_each_input.yy +++ b/scripts/node_iterator_each_input/node_iterator_each_input.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "for each", - "path": "folders/nodes/data/iterate/for each.yy", + "path": "folders/nodes/data/iterate/_legacy/for each.yy", }, } \ No newline at end of file diff --git a/scripts/node_iterator_each_output/node_iterator_each_output.yy b/scripts/node_iterator_each_output/node_iterator_each_output.yy index e34d09f10..34e58d8e6 100644 --- a/scripts/node_iterator_each_output/node_iterator_each_output.yy +++ b/scripts/node_iterator_each_output/node_iterator_each_output.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "for each", - "path": "folders/nodes/data/iterate/for each.yy", + "path": "folders/nodes/data/iterate/_legacy/for each.yy", }, } \ No newline at end of file diff --git a/scripts/node_iterator_each_size/node_iterator_each_size.yy b/scripts/node_iterator_each_size/node_iterator_each_size.yy index 1d60aa625..065b0c90b 100644 --- a/scripts/node_iterator_each_size/node_iterator_each_size.yy +++ b/scripts/node_iterator_each_size/node_iterator_each_size.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "for each", - "path": "folders/nodes/data/iterate/for each.yy", + "path": "folders/nodes/data/iterate/_legacy/for each.yy", }, } \ No newline at end of file diff --git a/scripts/node_iterator_filter_inline_input/node_iterator_filter_inline_input.gml b/scripts/node_iterator_filter_inline_input/node_iterator_filter_inline_input.gml new file mode 100644 index 000000000..25c4b9253 --- /dev/null +++ b/scripts/node_iterator_filter_inline_input/node_iterator_filter_inline_input.gml @@ -0,0 +1,23 @@ +function Node_Iterator_Filter_Inline_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Filter Input"; + color = COLORS.node_blend_loop; + loop = noone; + + inputs[| 0] = nodeValue("Array in", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, [] ) + .setVisible(true, true); + + outputs[| 0] = nodeValue("Value in", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0 ); + + static update = function() { #region + if(!is_instanceof(loop, Node_Iterate_Filter_Inline)) return; + + var _typ = inputs[| 0].value_from == noone? VALUE_TYPE.any : inputs[| 0].value_from.type; + inputs[| 0].setType(_typ); + outputs[| 0].setType(_typ); + + var val = inputs[| 0].getValue(); + var itr = loop.iterated - 1; + + outputs[| 0].setValue(array_safe_get(val, itr)); + } #endregion +} \ No newline at end of file diff --git a/scripts/node_iterator_filter_inline_input/node_iterator_filter_inline_input.yy b/scripts/node_iterator_filter_inline_input/node_iterator_filter_inline_input.yy new file mode 100644 index 000000000..576caeecb --- /dev/null +++ b/scripts/node_iterator_filter_inline_input/node_iterator_filter_inline_input.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_iterator_filter_inline_input", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "for filter", + "path": "folders/nodes/data/iterate/for filter.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_iterator_filter_inline_output/node_group_input.yy b/scripts/node_iterator_filter_inline_output/node_group_input.yy new file mode 100644 index 000000000..b48fa62c4 --- /dev/null +++ b/scripts/node_iterator_filter_inline_output/node_group_input.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "group", + "path": "folders/nodes/data/group.yy", + }, + "resourceVersion": "1.0", + "name": "node_group_input", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_iterator_filter_inline_output/node_iterator_filter_inline_output.gml b/scripts/node_iterator_filter_inline_output/node_iterator_filter_inline_output.gml new file mode 100644 index 000000000..e1c67f82f --- /dev/null +++ b/scripts/node_iterator_filter_inline_output/node_iterator_filter_inline_output.gml @@ -0,0 +1,35 @@ +function Node_Iterator_Filter_Inline_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Filter Output"; + color = COLORS.node_blend_loop; + loop = noone; + + inputs[| 0] = nodeValue("Value out", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0 ) + .setVisible(true, true); + + inputs[| 1] = nodeValue("Filter result", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false ) + .setVisible(true, true); + + outputs[| 0] = nodeValue("Array out", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, [] ); + + static getNextNodes = function() { #region + if(loop.bypassNextNode()) + return loop.getNextNodes(); + return getNextNodesRaw(); + } #endregion + + static update = function(frame = CURRENT_FRAME) { #region + if(!is_instanceof(loop, Node_Iterate_Filter_Inline)) return; + + var _typ = inputs[| 0].value_from == noone? VALUE_TYPE.any : inputs[| 0].value_from.type; + inputs[| 0].setType(_typ); + outputs[| 0].setType(_typ); + + var val = getInputData(0); + var res = getInputData(1); + var arr = outputs[| 0].getValue(); + var itr = loop.iterated - 1; + + if(res) array_push(arr, val); + outputs[| 0].setValue(arr); + } #endregion +} \ No newline at end of file diff --git a/scripts/node_iterator_filter_inline_output/node_iterator_filter_inline_output.yy b/scripts/node_iterator_filter_inline_output/node_iterator_filter_inline_output.yy new file mode 100644 index 000000000..058e4103f --- /dev/null +++ b/scripts/node_iterator_filter_inline_output/node_iterator_filter_inline_output.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_iterator_filter_inline_output", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "for filter", + "path": "folders/nodes/data/iterate/for filter.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_iterator_filter_input/node_iterator_filter_input.yy b/scripts/node_iterator_filter_input/node_iterator_filter_input.yy index 3374e5e8b..3fd5b0dd3 100644 --- a/scripts/node_iterator_filter_input/node_iterator_filter_input.yy +++ b/scripts/node_iterator_filter_input/node_iterator_filter_input.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "for filter", - "path": "folders/nodes/data/iterate/for filter.yy", + "path": "folders/nodes/data/iterate/_legacy/for filter.yy", }, } \ No newline at end of file diff --git a/scripts/node_iterator_filter_output/node_iterator_filter_output.yy b/scripts/node_iterator_filter_output/node_iterator_filter_output.yy index 2051a6603..b0c7e7e96 100644 --- a/scripts/node_iterator_filter_output/node_iterator_filter_output.yy +++ b/scripts/node_iterator_filter_output/node_iterator_filter_output.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "for filter", - "path": "folders/nodes/data/iterate/for filter.yy", + "path": "folders/nodes/data/iterate/_legacy/for filter.yy", }, } \ No newline at end of file diff --git a/scripts/node_iterator_sort_inline_input/node_iterator_sort_inline_input.gml b/scripts/node_iterator_sort_inline_input/node_iterator_sort_inline_input.gml new file mode 100644 index 000000000..6f2b1dc84 --- /dev/null +++ b/scripts/node_iterator_sort_inline_input/node_iterator_sort_inline_input.gml @@ -0,0 +1,12 @@ +function Node_Iterator_Sort_Inline_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Sort Input"; + color = COLORS.node_blend_loop; + loop = noone; + + inputs[| 0] = nodeValue("Array in", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, [] ) + .setVisible(true, true); + + outputs[| 0] = nodeValue("Value 1", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0 ); + + outputs[| 1] = nodeValue("Value 2", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0 ); +} \ No newline at end of file diff --git a/scripts/node_iterator_sort_inline_input/node_iterator_sort_inline_input.yy b/scripts/node_iterator_sort_inline_input/node_iterator_sort_inline_input.yy new file mode 100644 index 000000000..2e083f00a --- /dev/null +++ b/scripts/node_iterator_sort_inline_input/node_iterator_sort_inline_input.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_iterator_sort_inline_input", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "for sort inline", + "path": "folders/nodes/data/iterate/for sort inline.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_iterator_sort_inline_output/node_group_input.yy b/scripts/node_iterator_sort_inline_output/node_group_input.yy new file mode 100644 index 000000000..b48fa62c4 --- /dev/null +++ b/scripts/node_iterator_sort_inline_output/node_group_input.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "group", + "path": "folders/nodes/data/group.yy", + }, + "resourceVersion": "1.0", + "name": "node_group_input", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_iterator_sort_inline_output/node_iterator_sort_inline_output.gml b/scripts/node_iterator_sort_inline_output/node_iterator_sort_inline_output.gml new file mode 100644 index 000000000..d4cb98d38 --- /dev/null +++ b/scripts/node_iterator_sort_inline_output/node_iterator_sort_inline_output.gml @@ -0,0 +1,10 @@ +function Node_Iterator_Sort_Inline_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Sort result"; + color = COLORS.node_blend_loop; + loop = noone; + + inputs[| 0] = nodeValue("Swap", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false ) + .setVisible(true, true); + + outputs[| 0] = nodeValue("Array out", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, [] ); +} \ No newline at end of file diff --git a/scripts/node_iterator_sort_inline_output/node_iterator_sort_inline_output.yy b/scripts/node_iterator_sort_inline_output/node_iterator_sort_inline_output.yy new file mode 100644 index 000000000..959bd4a27 --- /dev/null +++ b/scripts/node_iterator_sort_inline_output/node_iterator_sort_inline_output.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_iterator_sort_inline_output", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "for sort inline", + "path": "folders/nodes/data/iterate/for sort inline.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_iterator_sort_input/node_iterator_sort_input.yy b/scripts/node_iterator_sort_input/node_iterator_sort_input.yy index 4dc35c3ec..761f62a02 100644 --- a/scripts/node_iterator_sort_input/node_iterator_sort_input.yy +++ b/scripts/node_iterator_sort_input/node_iterator_sort_input.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "for sort", - "path": "folders/nodes/data/iterate/for sort.yy", + "path": "folders/nodes/data/iterate/_legacy/for sort.yy", }, } \ No newline at end of file diff --git a/scripts/node_iterator_sort_output/node_iterator_sort_output.yy b/scripts/node_iterator_sort_output/node_iterator_sort_output.yy index c7de91ddc..e78d6818b 100644 --- a/scripts/node_iterator_sort_output/node_iterator_sort_output.yy +++ b/scripts/node_iterator_sort_output/node_iterator_sort_output.yy @@ -6,6 +6,6 @@ "isDnD": false, "parent": { "name": "for sort", - "path": "folders/nodes/data/iterate/for sort.yy", + "path": "folders/nodes/data/iterate/_legacy/for sort.yy", }, } \ No newline at end of file diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index 56b687b52..5edc6f958 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -241,13 +241,13 @@ function __initNodes() { var recPath = DIRECTORY + "Nodes/recent.json"; global.RECENT_NODES = file_exists_empty(recPath)? json_load_struct(recPath) : []; if(!is_array(global.RECENT_NODES)) global.RECENT_NODES = []; - + NODE_PAGE_DEFAULT = ds_list_size(NODE_CATEGORY); ADD_NODE_PAGE = NODE_PAGE_DEFAULT; - + var fav = ds_list_create(); addNodeCatagory("Favourites", fav); - + var group = ds_list_create(); #region addNodeCatagory("Group", group, ["Node_Group"]); ds_list_add(group, "Groups"); @@ -273,7 +273,7 @@ function __initNodes() { var iter_il = ds_list_create(); #region addNodeCatagory("Loop", iter_il, ["Node_Iterate_Inline"]); ds_list_add(iter_il, "Loops"); - addNodeObject(iter_il, "Index", s_node_iterator_index, "Node_Iterator_Index", [1, Node_Iterator_Index]).hideRecent(); + addNodeObject(iter_il, "Index", s_node_iterator_index, "Node_Iterator_Index", [1, Node_Iterator_Index]).hideRecent(); addNodeObject(iter_il, "Loop amount", s_node_iterator_amount, "Node_Iterator_Length", [1, Node_Iterator_Length]).hideRecent(); #endregion @@ -289,6 +289,13 @@ function __initNodes() { addNodeObject(itere, "Array Length", s_node_iterator_length, "Node_Iterator_Each_Length", [1, Node_Iterator_Each_Length]).hideRecent(); #endregion + var itere_il = ds_list_create(); #region + addNodeCatagory("Loop", itere_il, ["Node_Iterate_Each_Inline"]); + ds_list_add(itere_il, "Loops"); + addNodeObject(itere_il, "Index", s_node_iterator_index, "Node_Iterator_Index", [1, Node_Iterator_Index]).hideRecent(); + addNodeObject(itere_il, "Array Length", s_node_iterator_length, "Node_Iterator_Length", [1, Node_Iterator_Length]).hideRecent(); + #endregion + var filter = ds_list_create(); #region addNodeCatagory("Filter", filter, ["Node_Iterate_Filter"]); ds_list_add(filter, "Groups"); @@ -301,6 +308,13 @@ function __initNodes() { addNodeObject(filter, "Array Length", s_node_iterator_length, "Node_Iterator_Each_Length", [1, Node_Iterator_Each_Length]).hideRecent(); #endregion + var filter_il = ds_list_create(); #region + addNodeCatagory("Filter", filter_il, ["Node_Iterate_Filter_Inline"]); + ds_list_add(filter_il, "Loops"); + addNodeObject(filter_il, "Index", s_node_iterator_index, "Node_Iterator_Index", [1, Node_Iterator_Index]).hideRecent(); + addNodeObject(filter_il, "Array Length", s_node_iterator_length, "Node_Iterator_Length", [1, Node_Iterator_Length]).hideRecent(); + #endregion + var feed = ds_list_create(); #region addNodeCatagory("Feedback", feed, ["Node_Feedback"]); ds_list_add(feed, "Groups"); @@ -709,28 +723,28 @@ function __initNodes() { addNodeObject(values, "Separate File Path", s_node_separate_file_path, "Node_Path_Separate_Folder", [1, Node_Path_Separate_Folder]).setVersion(1145); ds_list_add(values, "Arrays"); - addNodeObject(values, "Array", s_node_array, "Node_Array", [1, Node_Array]); - addNodeObject(values, "Array Range", s_node_array_range, "Node_Array_Range", [1, Node_Array_Range],, "Create array of numbers by setting start, end and step length."); - addNodeObject(values, "Array Add", s_node_array_add, "Node_Array_Add", [1, Node_Array_Add], ["add array"]); - addNodeObject(values, "Array Length", s_node_array_length, "Node_Array_Length", [1, Node_Array_Length]); - addNodeObject(values, "Array Get", s_node_array_get, "Node_Array_Get", [1, Node_Array_Get], ["get array"]); - addNodeObject(values, "Array Set", s_node_array_set, "Node_Array_Set", [1, Node_Array_Set], ["set array"]).setVersion(1120); - addNodeObject(values, "Array Find", s_node_array_find, "Node_Array_Find", [1, Node_Array_Find], ["find array"]).setVersion(1120); - addNodeObject(values, "Array Insert", s_node_array_insert, "Node_Array_Insert", [1, Node_Array_Insert], ["insert array"]).setVersion(1120); - addNodeObject(values, "Array Remove", s_node_array_remove, "Node_Array_Remove", [1, Node_Array_Remove], ["remove array", "delete array", "array delete"]).setVersion(1120); - addNodeObject(values, "Array Reverse", s_node_array_reverse, "Node_Array_Reverse", [1, Node_Array_Reverse], ["reverse array"]).setVersion(1120); - addNodeObject(values, "Array Shift", s_node_array_shift, "Node_Array_Shift", [1, Node_Array_Shift]).setVersion(1137); - addNodeObject(values, "Array Zip", s_node_array_zip, "Node_Array_Zip", [1, Node_Array_Zip]).setVersion(1138); - addNodeObject(values, "Array Copy", s_node_array_copy, "Node_Array_Copy", [1, Node_Array_Copy]).setVersion(1144); - addNodeObject(values, "Array Convolute",s_node_array_convolute, "Node_Array_Convolute", [1, Node_Array_Convolute]).setVersion(11540); - addNodeObject(values, "Array Composite",s_node_array_composite, "Node_Array_Composite", [1, Node_Array_Composite]).setVersion(11540); - addNodeObject(values, "Array Sample", s_node_array_sample, "Node_Array_Sample", [1, Node_Array_Sample]).setVersion(11540); - addNodeObject(values, "Sort Number", s_node_array_sort, "Node_Array_Sort", [1, Node_Array_Sort], ["array sort"]).setVersion(1120); - addNodeObject(values, "Shuffle Array", s_node_array_shuffle, "Node_Array_Shuffle", [1, Node_Array_Shuffle], ["array shuffle"]).setVersion(1120); - addNodeObject(values, "Loop Array", s_node_loop_array, "Node_Iterate_Each", [1, Node_Iterate_Each], ["iterate each", "for each", "array loop"], "Create group that iterate to each member in an array."); - addNodeObject(values, "Filter Array", s_node_filter_array, "Node_Iterate_Filter", [1, Node_Iterate_Filter],, "Filter array using condition.").setVersion(1140); - addNodeObject(values, "Sort Array", s_node_sort_array, "Node_Iterate_Sort", [1, Node_Iterate_Sort],, "Sort array using node graph.").setVersion(1143); - addNodeObject(values, "Parse CSV", s_node_csv_parse, "Node_Array_CSV_Parse", [1, Node_Array_CSV_Parse]).setVersion(1145); + addNodeObject(values, "Array", s_node_array, "Node_Array", [1, Node_Array]); + addNodeObject(values, "Array Range", s_node_array_range, "Node_Array_Range", [1, Node_Array_Range],, "Create array of numbers by setting start, end and step length."); + addNodeObject(values, "Array Add", s_node_array_add, "Node_Array_Add", [1, Node_Array_Add], ["add array"]); + addNodeObject(values, "Array Length", s_node_array_length, "Node_Array_Length", [1, Node_Array_Length]); + addNodeObject(values, "Array Get", s_node_array_get, "Node_Array_Get", [1, Node_Array_Get], ["get array"]); + addNodeObject(values, "Array Set", s_node_array_set, "Node_Array_Set", [1, Node_Array_Set], ["set array"]).setVersion(1120); + addNodeObject(values, "Array Find", s_node_array_find, "Node_Array_Find", [1, Node_Array_Find], ["find array"]).setVersion(1120); + addNodeObject(values, "Array Insert", s_node_array_insert, "Node_Array_Insert", [1, Node_Array_Insert], ["insert array"]).setVersion(1120); + addNodeObject(values, "Array Remove", s_node_array_remove, "Node_Array_Remove", [1, Node_Array_Remove], ["remove array", "delete array", "array delete"]).setVersion(1120); + addNodeObject(values, "Array Reverse", s_node_array_reverse, "Node_Array_Reverse", [1, Node_Array_Reverse], ["reverse array"]).setVersion(1120); + addNodeObject(values, "Array Shift", s_node_array_shift, "Node_Array_Shift", [1, Node_Array_Shift]).setVersion(1137); + addNodeObject(values, "Array Zip", s_node_array_zip, "Node_Array_Zip", [1, Node_Array_Zip]).setVersion(1138); + addNodeObject(values, "Array Copy", s_node_array_copy, "Node_Array_Copy", [1, Node_Array_Copy]).setVersion(1144); + addNodeObject(values, "Array Convolute",s_node_array_convolute, "Node_Array_Convolute", [1, Node_Array_Convolute]).setVersion(11540); + addNodeObject(values, "Array Composite",s_node_array_composite, "Node_Array_Composite", [1, Node_Array_Composite]).setVersion(11540); + addNodeObject(values, "Array Sample", s_node_array_sample, "Node_Array_Sample", [1, Node_Array_Sample]).setVersion(11540); + addNodeObject(values, "Sort Number", s_node_array_sort, "Node_Array_Sort", [1, Node_Array_Sort], ["array sort"]).setVersion(1120); + addNodeObject(values, "Shuffle Array", s_node_array_shuffle, "Node_Array_Shuffle", [1, Node_Array_Shuffle], ["array shuffle"]).setVersion(1120); + addNodeObject(values, "Loop Array", s_node_loop_array, "Node_Iterate_Each_Inline", [1, Node_Iterate_Each_Inline], ["iterate each", "for each", "array loop"], "Create group that iterate to each member in an array."); + addNodeObject(values, "Filter Array", s_node_filter_array, "Node_Iterate_Filter_Inline", [1, Node_Iterate_Filter_Inline],, "Filter array using condition.").setVersion(1140); + addNodeObject(values, "Sort Array", s_node_sort_array, "Node_Iterate_Sort_Inline", [1, Node_Iterate_Sort_Inline],, "Sort array using node graph.").setVersion(1143); + addNodeObject(values, "Parse CSV", s_node_csv_parse, "Node_Array_CSV_Parse", [1, Node_Array_CSV_Parse]).setVersion(1145); ds_list_add(values, "Paths"); addNodeObject(values, "Path", s_node_path, "Node_Path", [1, Node_Path]); @@ -831,11 +845,11 @@ function __initNodes() { addNodeObject(node, "Animation Control", s_node_animation_control, "Node_Animation_Control", [1, Node_Animation_Control],, "Control animation state with triggers.").setVersion(1145); ds_list_add(node, "Groups"); - addNodeObject(node, "Group", s_node_group, "Node_Group", [1, Node_Group]); - addNodeObject(node, "Feedback", s_node_feedback, "Node_Feedback", [1, Node_Feedback],, "Create a group that reuse output from last frame to the current one."); - addNodeObject(node, "Loop", s_node_loop, "Node_Iterate", [1, Node_Iterate], ["iterate", "for"], "Create group that reuse output as input repeatedly in one frame."); - addNodeObject(node, "Loop Array", s_node_loop_array, "Node_Iterate_Each", [1, Node_Iterate_Each], ["iterate each", "for each", "array loop"], "Create group that iterate to each member in an array."); - addNodeObject(node, "Filter Array", s_node_filter_array,"Node_Iterate_Filter", [1, Node_Iterate_Filter],, "Filter array using condition.").setVersion(1140); + addNodeObject(node, "Group", s_node_group, "Node_Group", [1, Node_Group]); + addNodeObject(node, "Feedback", s_node_feedback, "Node_Feedback", [1, Node_Feedback],, "Create a group that reuse output from last frame to the current one."); + addNodeObject(node, "Loop", s_node_loop, "Node_Iterate", [1, Node_Iterate], ["iterate", "for"], "Create group that reuse output as input repeatedly in one frame."); + addNodeObject(node, "Loop Array", s_node_loop_array, "Node_Iterate_Each_Inline", [1, Node_Iterate_Each_Inline], ["iterate each", "for each", "array loop"], "Create group that iterate to each member in an array."); + addNodeObject(node, "Filter Array", s_node_filter_array, "Node_Iterate_Filter_Inline", [1, Node_Iterate_Filter_Inline],, "Filter array using condition.").setVersion(1140); if(OS == os_windows) { ds_list_add(node, "Lua"); @@ -876,22 +890,22 @@ function __initNodes() { var customs = ds_list_create(); addNodeCatagory("Custom", customs); __initNodeCustom(customs); - + if(IS_PATREON) addNodeCatagory("Extra", SUPPORTER_NODES); //var vct = ds_list_create(); //addNodeCatagory("VCT", vct); // addNodeObject(vct, "Biterator", s_node_print, "Node_Biterator", [1, Node_Biterator]); - + //////////////////////////////////////////////////////////// PIXEL BUILDER //////////////////////////////////////////////////////////// - + var pb_group = ds_list_create(); #region addNodePBCatagory("Group", pb_group); ds_list_add(pb_group, "Groups"); addNodeObject(pb_group, "Input", s_node_group_input, "Node_Group_Input", [1, Node_Group_Input]).hideRecent(); addNodeObject(pb_group, "Output", s_node_group_output, "Node_Group_Output", [1, Node_Group_Output]).hideRecent(); #endregion - + var pb_draw = ds_list_create(); #region addNodePBCatagory("Draw", pb_draw); ds_list_add(pb_draw, "Fill"); @@ -908,7 +922,7 @@ function __initNodes() { addNodeObject(pb_draw, "Angle", s_node_pb_draw_angle, "Node_PB_Draw_Angle", [1, Node_PB_Draw_Angle]).hideRecent(); addNodeObject(pb_draw, "Blob", s_node_pb_draw_blob, "Node_PB_Draw_Blob", [1, Node_PB_Draw_Blob]).hideRecent(); #endregion - + var pb_box = ds_list_create(); #region addNodePBCatagory("Box", pb_box); ds_list_add(pb_box, "Layer"); @@ -923,7 +937,7 @@ function __initNodes() { addNodeObject(pb_box, "Divide Grid", s_node_pb_box_divide_grid, "Node_PB_Box_Divide_Grid", [1, Node_PB_Box_Divide_Grid]).hideRecent(); addNodeObject(pb_box, "Contract", s_node_pb_box_contract, "Node_PB_Box_Contract", [1, Node_PB_Box_Contract]).hideRecent(); #endregion - + var pb_fx = ds_list_create(); #region addNodePBCatagory("Effects", pb_fx); ds_list_add(pb_fx, "Effect"); @@ -945,7 +959,7 @@ function __initNodes() { addNodeObject(pb_fx, "Subtract", s_node_pb_fx_subtract, "Node_PB_Fx_Subtract", [1, Node_PB_Fx_Subtract]).hideRecent(); addNodeObject(pb_fx, "Intersect", s_node_pb_fx_interesct, "Node_PB_Fx_Intersect", [1, Node_PB_Fx_Intersect]).hideRecent(); #endregion - + var pb_arr = ds_list_create(); #region addNodePBCatagory("Array", pb_arr); addNodeObject(pb_arr, "Array", s_node_array, "Node_Array", [1, Node_Array]).hideRecent(); @@ -954,15 +968,15 @@ function __initNodes() { addNodeObject(pb_arr, "Array Insert", s_node_array_insert, "Node_Array_Insert", [1, Node_Array_Insert], ["insert array"]).hideRecent().setVersion(1120); addNodeObject(pb_arr, "Array Remove", s_node_array_remove, "Node_Array_Remove", [1, Node_Array_Remove], ["remove array", "delete array", "array delete"]).hideRecent().setVersion(1120); #endregion - + /////////////////////////////////////////////////////////////// PCX NODE /////////////////////////////////////////////////////////////// - + var pcx_var = ds_list_create(); #region addNodePCXCatagory("Variable", pcx_var); addNodeObject(pcx_var, "Variable", s_node_array, "Node_PCX_var", [1, Node_PCX_var]).hideRecent(); addNodeObject(pcx_var, "Fn Variable", s_node_array, "Node_PCX_fn_var", [1, Node_PCX_fn_var]).hideRecent(); #endregion - + var pcx_fn = ds_list_create(); #region addNodePCXCatagory("Functions", pcx_fn); addNodeObject(pcx_fn, "Equation", s_node_array, "Node_PCX_Equation", [1, Node_PCX_Equation]).hideRecent(); @@ -979,14 +993,14 @@ function __initNodes() { addNodeObject(pcx_fn, "Array Get", s_node_array, "Node_PCX_Array_Get", [1, Node_PCX_Array_Get]).hideRecent(); addNodeObject(pcx_fn, "Array Set", s_node_array, "Node_PCX_Array_Set", [1, Node_PCX_Array_Set]).hideRecent(); #endregion - + var pcx_flow = ds_list_create(); #region addNodePCXCatagory("Flow Control", pcx_flow); addNodeObject(pcx_flow, "Condition", s_node_array, "Node_PCX_Condition", [1, Node_PCX_Condition]).hideRecent(); #endregion - + //////////////////////////////////////////////////////////////// HIDDEN //////////////////////////////////////////////////////////////// - + var hid = ds_list_create(); #region addNodeCatagory("Hidden", hid, ["Hidden"]); addNodeObject(hid, "Input", s_node_loop_input, "Node_Iterator_Each_Input", [1, Node_Iterator_Each_Input]).hideRecent(); @@ -1006,6 +1020,16 @@ function __initNodes() { addNodeObject(hid, "Feedback", s_node_feedback, "Node_Feedback_Inline", [1, Node_Feedback_Inline]).hideRecent(); addNodeObject(hid, "Loop", s_node_loop, "Node_Iterate_Inline", [1, Node_Iterate_Inline]).hideRecent(); + addNodeObject(hid, "Loop Array", s_node_loop_array, "Node_Iterate_Each", [1, Node_Iterate_Each]).hideRecent(); + addNodeObject(hid, "Loop Input", s_node_loop_array, "Node_Iterator_Each_Inline_Input", [1, Node_Iterator_Each_Inline_Input]).hideRecent(); + addNodeObject(hid, "Loop Output", s_node_loop_array, "Node_Iterator_Each_Inline_Output", [1, Node_Iterator_Each_Inline_Output]).hideRecent(); + addNodeObject(hid, "Filter Array", s_node_filter_array, "Node_Iterate_Filter", [1, Node_Iterate_Filter],, "Filter array using condition.").hideRecent(); + addNodeObject(hid, "Filter Input", s_node_filter_array, "Node_Iterator_Filter_Inline_Input", [1, Node_Iterator_Filter_Inline_Input]).hideRecent(); + addNodeObject(hid, "Filter Output", s_node_filter_array, "Node_Iterator_Filter_Inline_Output", [1, Node_Iterator_Filter_Inline_Output]).hideRecent(); + addNodeObject(hid, "Sort Array", s_node_sort_array, "Node_Iterate_Sort", [1, Node_Iterate_Sort],, "Sort array using node graph.").hideRecent(); + addNodeObject(hid, "Sort Input", s_node_sort_array, "Node_Iterator_Sort_Inline_Input", [1, Node_Iterator_Sort_Inline_Input]).hideRecent(); + addNodeObject(hid, "Sort Output", s_node_sort_array, "Node_Iterator_Sort_Inline_Output", [1, Node_Iterator_Sort_Inline_Output]).hideRecent(); + ds_list_add(hid, "DynaSurf"); addNodeObject(hid, "Input", s_node_pixel_builder, "Node_DynaSurf_In", [1, Node_DynaSurf_In]).hideRecent(); addNodeObject(hid, "Output", s_node_pixel_builder, "Node_DynaSurf_Out", [1, Node_DynaSurf_Out]).hideRecent(); diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index 5b64a753b..658c631c3 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -139,6 +139,11 @@ enum VALUE_TAG { none = 0 } +enum LINE_STYLE { + solid, + dashed +} + function value_color(i) { #region static JUNCTION_COLORS = [ #ff9166, //int @@ -2581,33 +2586,38 @@ function drawJuncConnection(from, to, params, target = to) { #region #region +++++ CHECK HOVER +++++ var hovDist = max(th * 2, 6); - if(PANEL_GRAPH.pHOVER) - switch(PREFERENCES.curve_connection_line) { - case 0 : - hover = distance_to_line(mx, my, jx, jy, frx, fry) < max(th * 2, 6); - break; - case 1 : - if(downDirection) hover = distance_to_curve_corner(mx, my, jx, jy, frx, fry, _s) < hovDist; - else hover = distance_to_curve(mx, my, jx, jy, frx, fry, cx, cy, _s) < hovDist; + if(PANEL_GRAPH.pHOVER) { + if(feed && from.node == to.node) { + hover = distance_line_feedback(mx, my, jx, jy, frx, fry) < hovDist; + } else { + switch(PREFERENCES.curve_connection_line) { + case 0 : + hover = distance_to_line(mx, my, jx, jy, frx, fry) < hovDist; + break; + case 1 : + if(downDirection) hover = distance_to_curve_corner(mx, my, jx, jy, frx, fry, _s) < hovDist; + else hover = distance_to_curve(mx, my, jx, jy, frx, fry, cx, cy, _s) < hovDist; - if(PANEL_GRAPH.value_focus == noone) - target.draw_line_shift_hover = hover; - break; - case 2 : - if(downDirection) hover = distance_to_elbow_corner(mx, my, frx, fry, jx, jy) < hovDist; - else hover = distance_to_elbow(mx, my, frx, fry, jx, jy, cx, cy, _s, fromIndex, toIndex) < hovDist; + if(PANEL_GRAPH.value_focus == noone) + target.draw_line_shift_hover = hover; + break; + case 2 : + if(downDirection) hover = distance_to_elbow_corner(mx, my, frx, fry, jx, jy) < hovDist; + else hover = distance_to_elbow(mx, my, frx, fry, jx, jy, cx, cy, _s, fromIndex, toIndex) < hovDist; - if(PANEL_GRAPH.value_focus == noone) - target.draw_line_shift_hover = hover; - break; - case 3 : - if(downDirection) hover = distance_to_elbow_diag_corner(mx, my, frx, fry, jx, jy) < hovDist; - else hover = distance_to_elbow_diag(mx, my, frx, fry, jx, jy, cx, cy, _s, fromIndex, toIndex) < hovDist; + if(PANEL_GRAPH.value_focus == noone) + target.draw_line_shift_hover = hover; + break; + case 3 : + if(downDirection) hover = distance_to_elbow_diag_corner(mx, my, frx, fry, jx, jy) < hovDist; + else hover = distance_to_elbow_diag(mx, my, frx, fry, jx, jy, cx, cy, _s, fromIndex, toIndex) < hovDist; - if(PANEL_GRAPH.value_focus == noone) - target.draw_line_shift_hover = hover; - break; - } + if(PANEL_GRAPH.value_focus == noone) + target.draw_line_shift_hover = hover; + break; + } + } + } if(_active && hover) hovering = self; @@ -2668,24 +2678,28 @@ function drawJuncConnection(from, to, params, target = to) { #region draw_set_color(c0); - switch(PREFERENCES.curve_connection_line) { - case 0 : - if(ty == LINE_STYLE.solid) draw_line_width_color(jx, jy, frx, fry, th, c1, c0); - else draw_line_dashed_color(jx, jy, frx, fry, th, c1, c0, 6 * ss); - break; - case 1 : - if(downDirection) draw_line_curve_corner(jx, jy, frx, fry, ss, th, c0, c1); - else draw_line_curve_color(jx, jy, frx, fry, cx, cy, ss, th, c0, c1, ty); - break; - case 2 : - if(downDirection) draw_line_elbow_corner(frx, fry, jx, jy, ss, th, c0, c1, corner, fromIndex, toIndex, ty); - else draw_line_elbow_color(frx, fry, jx, jy, cx, cy, ss, th, c0, c1, corner, fromIndex, toIndex, ty); - break; - case 3 : - if(downDirection) draw_line_elbow_diag_corner(frx, fry, jx, jy, ss, th, c0, c1, corner, fromIndex, toIndex, ty); - else draw_line_elbow_diag_color(frx, fry, jx, jy, cx, cy, ss, th, c0, c1, corner, fromIndex, toIndex, ty); - break; - } + if(feed && from.node == to.node) { + draw_line_feedback(jx, jy, frx, fry, th, c1, c0, ss); + } else { + switch(PREFERENCES.curve_connection_line) { + case 0 : + if(ty == LINE_STYLE.solid) draw_line_width_color(jx, jy, frx, fry, th, c1, c0); + else draw_line_dashed_color(jx, jy, frx, fry, th, c1, c0, 6 * ss); + break; + case 1 : + if(downDirection) draw_line_curve_corner(jx, jy, frx, fry, ss, th, c0, c1); + else draw_line_curve_color(jx, jy, frx, fry, cx, cy, ss, th, c0, c1, ty); + break; + case 2 : + if(downDirection) draw_line_elbow_corner(frx, fry, jx, jy, ss, th, c0, c1, corner, fromIndex, toIndex, ty); + else draw_line_elbow_color(frx, fry, jx, jy, cx, cy, ss, th, c0, c1, corner, fromIndex, toIndex, ty); + break; + case 3 : + if(downDirection) draw_line_elbow_diag_corner(frx, fry, jx, jy, ss, th, c0, c1, corner, fromIndex, toIndex, ty); + else draw_line_elbow_diag_color(frx, fry, jx, jy, cx, cy, ss, th, c0, c1, corner, fromIndex, toIndex, ty); + break; + } + } #endregion return hovering; diff --git a/scripts/panel_graph/panel_graph.gml b/scripts/panel_graph/panel_graph.gml index 3b2e4fa0c..5b66e5952 100644 --- a/scripts/panel_graph/panel_graph.gml +++ b/scripts/panel_graph/panel_graph.gml @@ -866,7 +866,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { var _to = value_focus.value_to_loop[i]; array_push(menu, menuItem($"[{_to.junc_in.node.display_name}] {_to.junc_in.getName()}", function(data) { nodeDelete(data.params.juncTo); - }, THEME.feedback,,, { juncTo: _to })); + }, _to.icon_24,,, { juncTo: _to })); } } else { var sep = false; @@ -886,7 +886,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { var _jun = value_focus.value_from_loop.junc_out; array_push(menu, menuItem($"[{_jun.node.display_name}] {_jun.getName()}", function(data) { __junction_hovering.removeFromLoop(); - }, THEME.feedback)); + }, value_focus.value_from_loop.icon_24)); } } @@ -1283,11 +1283,32 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor { if(_connect[0] == -9) { if(_connect[1].value_from_loop != noone) nodeDelete(_connect[1].value_from_loop); + + var menu = [ + menuItem("Feedback", function(data) { + var junc_in = data.params.junc_in; + var junc_out = data.params.junc_out; + + var feed = nodeBuild("Node_Feedback_Inline", 0, 0); + feed.attributes.junc_in = [ junc_in .node.node_id, junc_in .index ]; + feed.attributes.junc_out = [ junc_out.node.node_id, junc_out.index ]; + feed.scanJunc(); + + }, THEME.feedback_24,,, { junc_in : _connect[1], junc_out : _connect[2] }), + + menuItem("Loop", function(data) { + var junc_in = data.params.junc_in; + var junc_out = data.params.junc_out; + + var feed = nodeBuild("Node_Iterate_Inline", 0, 0); + feed.attributes.junc_in = [ junc_in .node.node_id, junc_in .index ]; + feed.attributes.junc_out = [ junc_out.node.node_id, junc_out.index ]; + feed.scanJunc(); + + }, THEME.loop_24,,, { junc_in : _connect[1], junc_out : _connect[2] }), + ]; - var feed = nodeBuild(key_mod_press(SHIFT)? "Node_Iterate_Inline" : "Node_Feedback_Inline", 0, 0); - feed.attributes.junc_in = [ _connect[1].node.node_id, _connect[1].index ]; - feed.attributes.junc_out = [ _connect[2].node.node_id, _connect[2].index ]; - feed.scanJunc(); + menuCall(,,, menu); } } } else if(!value_dragging && value_focus && mouse_press(mb_left, pFOCUS) && !key_mod_press(ALT)) { diff --git a/scripts/render_data/render_data.gml b/scripts/render_data/render_data.gml index c982179af..54a0e042a 100644 --- a/scripts/render_data/render_data.gml +++ b/scripts/render_data/render_data.gml @@ -76,10 +76,16 @@ function __sortGraph(_list, _nodeList) { #region var _isRoot = true; for( var j = 0, m = ds_list_size(_node.outputs); j < m; j++ ) { - if(!array_empty(_node.outputs[| j].getJunctionTo())) { - _isRoot = false; - break; + var _to = _node.outputs[| j].getJunctionTo(); + + for( var k = 0, p = array_length(_to); k < p; k++ ) { + if(ds_list_exist(_nodeList, _to[k].node)) { + _isRoot = false; + break; + } } + + if(!_isRoot) break; } if(_isRoot) array_push(_root, _node); @@ -94,19 +100,20 @@ function __sortGraph(_list, _nodeList) { #region var _node = ds_stack_pop(_st); if(_node.topoSorted) continue; - var _isLeaf = true; var _childs = []; for( var i = 0, n = ds_list_size(_node.inputs); i < n; i++ ) { var _in = _node.inputs[| i]; - if(_in.isLeaf()) continue; - if(_in.value_from.node.topoSorted) continue; + var _fr = _in.value_from; - array_push(_childs, _in.value_from.node); - _isLeaf = false; + if(_fr == noone) continue; + if(!ds_list_exist(_nodeList, _fr.node)) continue; + if(_fr.node.topoSorted) continue; + + array_push(_childs, _fr.node); } - if(_isLeaf) { + if(array_empty(_childs)) { ds_list_add(_list, _node); _node.topoSorted = true; @@ -120,6 +127,14 @@ function __sortGraph(_list, _nodeList) { #region } } #endregion +function NodeListSort(_list, _nodeList) { #region + for( var i = 0, n = ds_list_size(_nodeList); i < n; i++ ) + _nodeList[| i].topoSorted = false; + + ds_list_clear(_list); + __sortGraph(_list, _nodeList); +} #endregion + function __nodeIsRenderLeaf(_node) { #region if(is_undefined(_node)) { LOG_IF(global.FLAG.render == 1, $"Skip undefiend [{_node}]"); return false; } if(!is_instanceof(_node, Node)) { LOG_IF(global.FLAG.render == 1, $"Skip non-node [{_node}]"); return false; } @@ -235,14 +250,6 @@ function Render(partial = false, runAction = false) { #region LOG_END(); } #endregion -function NodeListSort(_list, _nodeList) { #region - for( var i = 0, n = ds_list_size(_nodeList); i < n; i++ ) - _nodeList[| i].topoSorted = false; - - ds_list_clear(_list); - __sortGraph(_list, _nodeList); -} #endregion - function __renderListReset(list) { #region for( var i = 0; i < ds_list_size(list); i++ ) { list[| i].setRenderStatus(false); @@ -252,9 +259,9 @@ function __renderListReset(list) { #region } } #endregion -function RenderList(list, runAction = false) { #region +function RenderList(list) { #region LOG_BLOCK_START(); - LOG_IF(global.FLAG.render == 1, "=============== RENDER LIST START ==============="); + LOG_IF(global.FLAG.render == 1, $"=============== RENDER LIST START [{ds_list_size(list)}] ==============="); var queue = ds_queue_create(); try { @@ -295,7 +302,6 @@ function RenderList(list, runAction = false) { #region LOG_IF(global.FLAG.render == 1, $"Rendering {rendering.internalName} ({rendering.display_name}) : {renderable? "Update" : "Pass"}"); if(renderable) { - if(runAction && rendering.hasInspector1Update()) rendering.inspector1Update(); rendering.doUpdate(); var nextNodes = rendering.getNextNodes();