diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index c23f55b91..8c9bde847 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -90,6 +90,7 @@ {"name":"audio","order":19,"path":"folders/nodes/data/audio.yy",}, {"name":"compose","order":14,"path":"folders/nodes/data/compose.yy",}, {"name":"armature","order":5,"path":"folders/nodes/data/compose/armature.yy",}, + {"name":"dynasurf","order":21,"path":"folders/nodes/data/dynasurf.yy",}, {"name":"filter","order":2,"path":"folders/nodes/data/filter.yy",}, {"name":"colors","order":4,"path":"folders/nodes/data/filter/colors.yy",}, {"name":"combine","order":1,"path":"folders/nodes/data/filter/combine.yy",}, @@ -110,6 +111,8 @@ {"name":"for sort","order":5,"path":"folders/nodes/data/iterate/for sort.yy",}, {"name":"lua","order":16,"path":"folders/nodes/data/lua.yy",}, {"name":"node","order":11,"path":"folders/nodes/data/node.yy",}, + {"name":"PCX","order":22,"path":"folders/nodes/data/PCX.yy",}, + {"name":"fn","order":2,"path":"folders/nodes/data/PCX/fn.yy",}, {"name":"pixel builder","order":20,"path":"folders/nodes/data/pixel builder.yy",}, {"name":"box","order":2,"path":"folders/nodes/data/pixel builder/box.yy",}, {"name":"draw","order":3,"path":"folders/nodes/data/pixel builder/draw.yy",}, @@ -199,6 +202,10 @@ {"name":"biterator","order":2,"path":"folders/VCT/biterator.yy",}, {"name":"widget","order":3,"path":"folders/VCT/widget.yy",}, {"name":"widgets","order":5,"path":"folders/widgets.yy",}, + {"name":"surface","order":3,"path":"folders/nodes/data/PCX/surface.yy",}, + {"name":"value","order":4,"path":"folders/nodes/data/PCX/value.yy",}, + {"name":"array","order":6,"path":"folders/nodes/data/PCX/array.yy",}, + {"name":"flow control","order":7,"path":"folders/nodes/data/PCX/flow control.yy",}, ], "ResourceOrderSettings": [ {"name":"s_node_corner","order":16,"path":"sprites/s_node_corner/s_node_corner.yy",}, @@ -212,6 +219,7 @@ {"name":"d3d_light_point","order":2,"path":"scripts/d3d_light_point/d3d_light_point.yy",}, {"name":"node_3d_camera","order":10,"path":"scripts/node_3d_camera/node_3d_camera.yy",}, {"name":"panel_preview_window","order":1,"path":"scripts/panel_preview_window/panel_preview_window.yy",}, + {"name":"node_PCX_equation","order":5,"path":"scripts/node_PCX_equation/node_PCX_equation.yy",}, {"name":"sh_scale3x","order":29,"path":"shaders/sh_scale3x/sh_scale3x.yy",}, {"name":"__node_3d","order":8,"path":"scripts/__node_3d/__node_3d.yy",}, {"name":"node_csv_file_write","order":13,"path":"scripts/node_csv_file_write/node_csv_file_write.yy",}, @@ -320,6 +328,7 @@ {"name":"node_atlas_set","order":2,"path":"scripts/node_atlas_set/node_atlas_set.yy",}, {"name":"s_node_flip","order":12,"path":"sprites/s_node_flip/s_node_flip.yy",}, {"name":"s_node_gradient_data","order":17,"path":"sprites/s_node_gradient_data/s_node_gradient_data.yy",}, + {"name":"node_PCX_fn_var","order":1,"path":"scripts/node_PCX_fn_var/node_PCX_fn_var.yy",}, {"name":"s_node_vfx_render","order":1,"path":"sprites/s_node_vfx_render/s_node_vfx_render.yy",}, {"name":"node_stack","order":2,"path":"scripts/node_stack/node_stack.yy",}, {"name":"sh_draw_r32","order":11,"path":"shaders/sh_draw_r32/sh_draw_r32.yy",}, @@ -440,6 +449,7 @@ {"name":"node_padding","order":9,"path":"scripts/node_padding/node_padding.yy",}, {"name":"node_VFX_group","order":4,"path":"scripts/node_VFX_group/node_VFX_group.yy",}, {"name":"libborderless","order":1,"path":"extensions/libborderless/libborderless.yy",}, + {"name":"node_dynamic_surface_in","order":4,"path":"scripts/node_dynamic_surface_in/node_dynamic_surface_in.yy",}, {"name":"s_node_vfx_attract","order":8,"path":"sprites/s_node_vfx_attract/s_node_vfx_attract.yy",}, {"name":"s_node_pixel_cloud","order":32,"path":"sprites/s_node_pixel_cloud/s_node_pixel_cloud.yy",}, {"name":"node_noise_grid","order":4,"path":"scripts/node_noise_grid/node_noise_grid.yy",}, @@ -653,7 +663,7 @@ {"name":"node_VFX_effect_destroy","order":12,"path":"scripts/node_VFX_effect_destroy/node_VFX_effect_destroy.yy",}, {"name":"node_cache","order":9,"path":"scripts/node_cache/node_cache.yy",}, {"name":"sh_bw","order":3,"path":"shaders/sh_bw/sh_bw.yy",}, - {"name":"real_comparison","order":1,"path":"scripts/real_comparison/real_comparison.yy",}, + {"name":"real_comparison","order":18,"path":"scripts/real_comparison/real_comparison.yy",}, {"name":"node_array_zip","order":25,"path":"scripts/node_array_zip/node_array_zip.yy",}, {"name":"fd_rectangle_get_collision_mask_sprite_image","order":5,"path":"scripts/fd_rectangle_get_collision_mask_sprite_image/fd_rectangle_get_collision_mask_sprite_image.yy",}, {"name":"s_node_stripe","order":16,"path":"sprites/s_node_stripe/s_node_stripe.yy",}, @@ -867,6 +877,7 @@ {"name":"s_node_tunnel_in","order":21,"path":"sprites/s_node_tunnel_in/s_node_tunnel_in.yy",}, {"name":"s_node_pb_draw_trapezoid","order":10,"path":"sprites/s_node_pb_draw_trapezoid/s_node_pb_draw_trapezoid.yy",}, {"name":"append_function","order":1,"path":"scripts/append_function/append_function.yy",}, + {"name":"node_3dsurf","order":5,"path":"scripts/node_3dsurf/node_3dsurf.yy",}, {"name":"fd_rectangle_reset_target","order":17,"path":"scripts/fd_rectangle_reset_target/fd_rectangle_reset_target.yy",}, {"name":"node_rate_remap","order":3,"path":"scripts/node_rate_remap/node_rate_remap.yy",}, {"name":"obj_reader","order":2,"path":"scripts/obj_reader/obj_reader.yy",}, @@ -929,6 +940,7 @@ {"name":"display_refresh","order":17,"path":"scripts/display_refresh/display_refresh.yy",}, {"name":"panel_workspace","order":6,"path":"scripts/panel_workspace/panel_workspace.yy",}, {"name":"fd_rectangle_assure_surfaces_exist","order":2,"path":"scripts/fd_rectangle_assure_surfaces_exist/fd_rectangle_assure_surfaces_exist.yy",}, + {"name":"angle_functions","order":17,"path":"scripts/angle_functions/angle_functions.yy",}, {"name":"fd_rectangle_material_surface_was_created","order":13,"path":"scripts/fd_rectangle_material_surface_was_created/fd_rectangle_material_surface_was_created.yy",}, {"name":"s_node_fluidSim_apply_velocity","order":2,"path":"sprites/s_node_fluidSim_apply_velocity/s_node_fluidSim_apply_velocity.yy",}, {"name":"fd_rectangle_destroy","order":8,"path":"scripts/fd_rectangle_destroy/fd_rectangle_destroy.yy",}, @@ -1012,6 +1024,7 @@ {"name":"s_node_vfx_input","order":12,"path":"sprites/s_node_vfx_input/s_node_vfx_input.yy",}, {"name":"node_strand_force_apply","order":6,"path":"scripts/node_strand_force_apply/node_strand_force_apply.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",}, {"name":"area_function","order":2,"path":"scripts/area_function/area_function.yy",}, {"name":"__node_3d_mesh","order":1,"path":"scripts/__node_3d_mesh/__node_3d_mesh.yy",}, @@ -1141,6 +1154,7 @@ {"name":"s_node_number","order":2,"path":"sprites/s_node_number/s_node_number.yy",}, {"name":"gif_reader","order":4,"path":"scripts/gif_reader/gif_reader.yy",}, {"name":"s_node_pb_draw_angle","order":17,"path":"sprites/s_node_pb_draw_angle/s_node_pb_draw_angle.yy",}, + {"name":"node_PCX_var","order":1,"path":"scripts/node_PCX_var/node_PCX_var.yy",}, {"name":"_f_p3","order":7,"path":"fonts/_f_p3/_f_p3.yy",}, {"name":"cornerBox","order":30,"path":"scripts/cornerBox/cornerBox.yy",}, {"name":"node_group_input","order":1,"path":"scripts/node_group_input/node_group_input.yy",}, @@ -1213,6 +1227,7 @@ {"name":"s_node_text_render","order":17,"path":"sprites/s_node_text_render/s_node_text_render.yy",}, {"name":"__init_global","order":8,"path":"scripts/__init_global/__init_global.yy",}, {"name":"sh_trail_filler_pass2","order":51,"path":"shaders/sh_trail_filler_pass2/sh_trail_filler_pass2.yy",}, + {"name":"node_PCX_array_set","order":1,"path":"scripts/node_PCX_array_set/node_PCX_array_set.yy",}, {"name":"s_node_regex_search","order":11,"path":"sprites/s_node_regex_search/s_node_regex_search.yy",}, {"name":"s_node_color_from_rgb","order":5,"path":"sprites/s_node_color_from_rgb/s_node_color_from_rgb.yy",}, {"name":"s_node_separate_file_path","order":14,"path":"sprites/s_node_separate_file_path/s_node_separate_file_path.yy",}, @@ -1295,6 +1310,7 @@ {"name":"s_node_path_transform","order":5,"path":"sprites/s_node_path_transform/s_node_path_transform.yy",}, {"name":"s_node_path_blend","order":1,"path":"sprites/s_node_path_blend/s_node_path_blend.yy",}, {"name":"s_biterator_tab_active","order":12,"path":"sprites/s_biterator_tab_active/s_biterator_tab_active.yy",}, + {"name":"dynaSurf_3d","order":2,"path":"scripts/dynaSurf_3d/dynaSurf_3d.yy",}, {"name":"s_node_3d_extrude","order":2,"path":"sprites/s_node_3d_extrude/s_node_3d_extrude.yy",}, {"name":"buttonGradient","order":4,"path":"scripts/buttonGradient/buttonGradient.yy",}, {"name":"sh_draw_downsample","order":2,"path":"shaders/sh_draw_downsample/sh_draw_downsample.yy",}, @@ -1359,6 +1375,7 @@ {"name":"fd_rectangle_set_velocity_dissipation_value","order":14,"path":"scripts/fd_rectangle_set_velocity_dissipation_value/fd_rectangle_set_velocity_dissipation_value.yy",}, {"name":"panel_history","order":7,"path":"scripts/panel_history/panel_history.yy",}, {"name":"sh_channel_H","order":3,"path":"shaders/sh_channel_H/sh_channel_H.yy",}, + {"name":"rotatorRandom","order":33,"path":"scripts/rotatorRandom/rotatorRandom.yy",}, {"name":"s_node_RGB","order":34,"path":"sprites/s_node_RGB/s_node_RGB.yy",}, {"name":"fd_rectangle_draw","order":9,"path":"scripts/fd_rectangle_draw/fd_rectangle_draw.yy",}, {"name":"node_color_palette_replacement","order":14,"path":"scripts/node_color_palette_replacement/node_color_palette_replacement.yy",}, @@ -1403,6 +1420,7 @@ {"name":"s_node_vec_split","order":6,"path":"sprites/s_node_vec_split/s_node_vec_split.yy",}, {"name":"s_node_regex_replace","order":10,"path":"sprites/s_node_regex_replace/s_node_regex_replace.yy",}, {"name":"sh_pb_hash","order":4,"path":"shaders/sh_pb_hash/sh_pb_hash.yy",}, + {"name":"node_dynamic_surface_out_height","order":3,"path":"scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.yy",}, {"name":"paddingBox","order":9,"path":"scripts/paddingBox/paddingBox.yy",}, {"name":"fd_rectangle_set_visualization_shader","order":18,"path":"scripts/fd_rectangle_set_visualization_shader/fd_rectangle_set_visualization_shader.yy",}, {"name":"s_biterator_bg","order":2,"path":"sprites/s_biterator_bg/s_biterator_bg.yy",}, @@ -1488,6 +1506,7 @@ {"name":"shader_replace_simple","order":1,"path":"extensions/shader_replace_simple/shader_replace_simple.yy",}, {"name":"d3d_cone","order":5,"path":"scripts/d3d_cone/d3d_cone.yy",}, {"name":"__rectangle","order":7,"path":"scripts/__rectangle/__rectangle.yy",}, + {"name":"node_PCX_fn_random","order":1,"path":"scripts/node_PCX_fn_random/node_PCX_fn_random.yy",}, {"name":"s_node_iterator_index","order":8,"path":"sprites/s_node_iterator_index/s_node_iterator_index.yy",}, {"name":"preferences","order":5,"path":"scripts/preferences/preferences.yy",}, {"name":"sh_fd_replace_material_advanced_glsl","order":11,"path":"shaders/sh_fd_replace_material_advanced_glsl/sh_fd_replace_material_advanced_glsl.yy",}, @@ -1514,6 +1533,7 @@ {"name":"node_strand_collision","order":8,"path":"scripts/node_strand_collision/node_strand_collision.yy",}, {"name":"s_node_atlas_get","order":2,"path":"sprites/s_node_atlas_get/s_node_atlas_get.yy",}, {"name":"sh_flood_fill_it","order":1,"path":"shaders/sh_flood_fill_it/sh_flood_fill_it.yy",}, + {"name":"node_dynamic_surface_out_width","order":2,"path":"scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.yy",}, {"name":"node_iterator_sort_input","order":1,"path":"scripts/node_iterator_sort_input/node_iterator_sort_input.yy",}, {"name":"draw_corner","order":19,"path":"scripts/draw_corner/draw_corner.yy",}, {"name":"o_dialog_preference","order":7,"path":"objects/o_dialog_preference/o_dialog_preference.yy",}, @@ -1548,6 +1568,7 @@ {"name":"s_node_gradient_palette","order":16,"path":"sprites/s_node_gradient_palette/s_node_gradient_palette.yy",}, {"name":"node_array_shuffle","order":22,"path":"scripts/node_array_shuffle/node_array_shuffle.yy",}, {"name":"panel_node_data_gen","order":9,"path":"scripts/panel_node_data_gen/panel_node_data_gen.yy",}, + {"name":"node_dynamic_surface_out","order":1,"path":"scripts/node_dynamic_surface_out/node_dynamic_surface_out.yy",}, {"name":"fd_rectangle_update_material","order":21,"path":"scripts/fd_rectangle_update_material/fd_rectangle_update_material.yy",}, {"name":"sh_perlin_tiled","order":6,"path":"shaders/sh_perlin_tiled/sh_perlin_tiled.yy",}, {"name":"sh_time_remap","order":2,"path":"shaders/sh_time_remap/sh_time_remap.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index ec4e08ecf..2a606f668 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -113,6 +113,7 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"audio","folderPath":"folders/nodes/data/audio.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"compose","folderPath":"folders/nodes/data/compose.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"armature","folderPath":"folders/nodes/data/compose/armature.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"dynasurf","folderPath":"folders/nodes/data/dynasurf.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"filter","folderPath":"folders/nodes/data/filter.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"blur","folderPath":"folders/nodes/data/filter/blur.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"colors","folderPath":"folders/nodes/data/filter/colors.yy",}, @@ -136,6 +137,8 @@ {"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":"node","folderPath":"folders/nodes/data/node.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"PCX","folderPath":"folders/nodes/data/PCX.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"fn","folderPath":"folders/nodes/data/PCX/fn.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"pixel builder","folderPath":"folders/nodes/data/pixel builder.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"box","folderPath":"folders/nodes/data/pixel builder/box.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"draw","folderPath":"folders/nodes/data/pixel builder/draw.yy",}, @@ -236,6 +239,10 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"biterator","folderPath":"folders/VCT/biterator.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widget","folderPath":"folders/VCT/widget.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widgets","folderPath":"folders/widgets.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"surface","folderPath":"folders/nodes/data/PCX/surface.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"value","folderPath":"folders/nodes/data/PCX/value.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"array","folderPath":"folders/nodes/data/PCX/array.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"flow control","folderPath":"folders/nodes/data/PCX/flow control.yy",}, ], "IncludedFiles": [ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"ApolloHelp.html","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":-1,"filePath":"datafiles",}, @@ -283,6 +290,7 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphics.json","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"1.png.tmp$$","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphics x2.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"rotator_random_mode.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_3d_preview_settings.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_3d_snap_settings.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_ac_constant.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, @@ -608,6 +616,7 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphic.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_button_bottom_left.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_button_bottom_right.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_button_hide_circle_28.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_button_hide_fill.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_button_hide_left.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_button_hide_middle.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/widget",}, @@ -732,6 +741,7 @@ {"id":{"name":"d3d_light_point","path":"scripts/d3d_light_point/d3d_light_point.yy",},}, {"id":{"name":"node_3d_camera","path":"scripts/node_3d_camera/node_3d_camera.yy",},}, {"id":{"name":"panel_preview_window","path":"scripts/panel_preview_window/panel_preview_window.yy",},}, + {"id":{"name":"node_PCX_equation","path":"scripts/node_PCX_equation/node_PCX_equation.yy",},}, {"id":{"name":"sh_scale3x","path":"shaders/sh_scale3x/sh_scale3x.yy",},}, {"id":{"name":"__node_3d","path":"scripts/__node_3d/__node_3d.yy",},}, {"id":{"name":"node_csv_file_write","path":"scripts/node_csv_file_write/node_csv_file_write.yy",},}, @@ -856,6 +866,7 @@ {"id":{"name":"s_node_flip","path":"sprites/s_node_flip/s_node_flip.yy",},}, {"id":{"name":"sh_pb_highlight","path":"shaders/sh_pb_highlight/sh_pb_highlight.yy",},}, {"id":{"name":"s_node_gradient_data","path":"sprites/s_node_gradient_data/s_node_gradient_data.yy",},}, + {"id":{"name":"node_PCX_fn_var","path":"scripts/node_PCX_fn_var/node_PCX_fn_var.yy",},}, {"id":{"name":"s_node_vfx_render","path":"sprites/s_node_vfx_render/s_node_vfx_render.yy",},}, {"id":{"name":"node_stack","path":"scripts/node_stack/node_stack.yy",},}, {"id":{"name":"sh_cell_noise","path":"shaders/sh_cell_noise/sh_cell_noise.yy",},}, @@ -993,6 +1004,7 @@ {"id":{"name":"node_padding","path":"scripts/node_padding/node_padding.yy",},}, {"id":{"name":"node_VFX_group","path":"scripts/node_VFX_group/node_VFX_group.yy",},}, {"id":{"name":"libborderless","path":"extensions/libborderless/libborderless.yy",},}, + {"id":{"name":"node_dynamic_surface_in","path":"scripts/node_dynamic_surface_in/node_dynamic_surface_in.yy",},}, {"id":{"name":"s_node_vfx_attract","path":"sprites/s_node_vfx_attract/s_node_vfx_attract.yy",},}, {"id":{"name":"s_node_pixel_cloud","path":"sprites/s_node_pixel_cloud/s_node_pixel_cloud.yy",},}, {"id":{"name":"node_noise_grid","path":"scripts/node_noise_grid/node_noise_grid.yy",},}, @@ -1164,6 +1176,7 @@ {"id":{"name":"node_scatter_points","path":"scripts/node_scatter_points/node_scatter_points.yy",},}, {"id":{"name":"pack_bottom_left","path":"scripts/pack_bottom_left/pack_bottom_left.yy",},}, {"id":{"name":"s_node_surface_to_buffer","path":"sprites/s_node_surface_to_buffer/s_node_surface_to_buffer.yy",},}, + {"id":{"name":"node_PCX_fn_math","path":"scripts/node_PCX_fn_math/node_PCX_fn_math.yy",},}, {"id":{"name":"o_dialog_lua_reference","path":"objects/o_dialog_lua_reference/o_dialog_lua_reference.yy",},}, {"id":{"name":"node_surface_data","path":"scripts/node_surface_data/node_surface_data.yy",},}, {"id":{"name":"node_strand_gravity","path":"scripts/node_strand_gravity/node_strand_gravity.yy",},}, @@ -1448,6 +1461,7 @@ {"id":{"name":"node_blur_zoom","path":"scripts/node_blur_zoom/node_blur_zoom.yy",},}, {"id":{"name":"node_bloom","path":"scripts/node_bloom/node_bloom.yy",},}, {"id":{"name":"sh_bevel","path":"shaders/sh_bevel/sh_bevel.yy",},}, + {"id":{"name":"node_dynamic_surface","path":"scripts/node_dynamic_surface/node_dynamic_surface.yy",},}, {"id":{"name":"sh_blend_overlay","path":"shaders/sh_blend_overlay/sh_blend_overlay.yy",},}, {"id":{"name":"node_sprite_stack","path":"scripts/node_sprite_stack/node_sprite_stack.yy",},}, {"id":{"name":"s_node_json_file_read","path":"sprites/s_node_json_file_read/s_node_json_file_read.yy",},}, @@ -1481,6 +1495,7 @@ {"id":{"name":"s_node_tunnel_in","path":"sprites/s_node_tunnel_in/s_node_tunnel_in.yy",},}, {"id":{"name":"s_node_pb_draw_trapezoid","path":"sprites/s_node_pb_draw_trapezoid/s_node_pb_draw_trapezoid.yy",},}, {"id":{"name":"append_function","path":"scripts/append_function/append_function.yy",},}, + {"id":{"name":"node_3dsurf","path":"scripts/node_3dsurf/node_3dsurf.yy",},}, {"id":{"name":"fd_rectangle_reset_target","path":"scripts/fd_rectangle_reset_target/fd_rectangle_reset_target.yy",},}, {"id":{"name":"node_rate_remap","path":"scripts/node_rate_remap/node_rate_remap.yy",},}, {"id":{"name":"obj_reader","path":"scripts/obj_reader/obj_reader.yy",},}, @@ -1549,6 +1564,7 @@ {"id":{"name":"display_refresh","path":"scripts/display_refresh/display_refresh.yy",},}, {"id":{"name":"panel_workspace","path":"scripts/panel_workspace/panel_workspace.yy",},}, {"id":{"name":"fd_rectangle_assure_surfaces_exist","path":"scripts/fd_rectangle_assure_surfaces_exist/fd_rectangle_assure_surfaces_exist.yy",},}, + {"id":{"name":"angle_functions","path":"scripts/angle_functions/angle_functions.yy",},}, {"id":{"name":"fd_rectangle_material_surface_was_created","path":"scripts/fd_rectangle_material_surface_was_created/fd_rectangle_material_surface_was_created.yy",},}, {"id":{"name":"s_node_fluidSim_apply_velocity","path":"sprites/s_node_fluidSim_apply_velocity/s_node_fluidSim_apply_velocity.yy",},}, {"id":{"name":"fd_rectangle_destroy","path":"scripts/fd_rectangle_destroy/fd_rectangle_destroy.yy",},}, @@ -1641,6 +1657,7 @@ {"id":{"name":"node_strand_force_apply","path":"scripts/node_strand_force_apply/node_strand_force_apply.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",},}, {"id":{"name":"o_main","path":"objects/o_main/o_main.yy",},}, {"id":{"name":"area_function","path":"scripts/area_function/area_function.yy",},}, {"id":{"name":"__node_3d_mesh","path":"scripts/__node_3d_mesh/__node_3d_mesh.yy",},}, @@ -1787,6 +1804,7 @@ {"id":{"name":"s_node_number","path":"sprites/s_node_number/s_node_number.yy",},}, {"id":{"name":"gif_reader","path":"scripts/gif_reader/gif_reader.yy",},}, {"id":{"name":"s_node_pb_draw_angle","path":"sprites/s_node_pb_draw_angle/s_node_pb_draw_angle.yy",},}, + {"id":{"name":"node_PCX_var","path":"scripts/node_PCX_var/node_PCX_var.yy",},}, {"id":{"name":"_f_p3","path":"fonts/_f_p3/_f_p3.yy",},}, {"id":{"name":"cornerBox","path":"scripts/cornerBox/cornerBox.yy",},}, {"id":{"name":"node_group_input","path":"scripts/node_group_input/node_group_input.yy",},}, @@ -1877,6 +1895,7 @@ {"id":{"name":"s_node_text_render","path":"sprites/s_node_text_render/s_node_text_render.yy",},}, {"id":{"name":"__init_global","path":"scripts/__init_global/__init_global.yy",},}, {"id":{"name":"sh_trail_filler_pass2","path":"shaders/sh_trail_filler_pass2/sh_trail_filler_pass2.yy",},}, + {"id":{"name":"node_PCX_array_set","path":"scripts/node_PCX_array_set/node_PCX_array_set.yy",},}, {"id":{"name":"sh_color_select_side","path":"shaders/sh_color_select_side/sh_color_select_side.yy",},}, {"id":{"name":"s_node_regex_search","path":"sprites/s_node_regex_search/s_node_regex_search.yy",},}, {"id":{"name":"s_node_color_from_rgb","path":"sprites/s_node_color_from_rgb/s_node_color_from_rgb.yy",},}, @@ -1975,6 +1994,7 @@ {"id":{"name":"s_node_path_blend","path":"sprites/s_node_path_blend/s_node_path_blend.yy",},}, {"id":{"name":"preview_overlay_scalar","path":"scripts/preview_overlay_scalar/preview_overlay_scalar.yy",},}, {"id":{"name":"s_biterator_tab_active","path":"sprites/s_biterator_tab_active/s_biterator_tab_active.yy",},}, + {"id":{"name":"dynaSurf_3d","path":"scripts/dynaSurf_3d/dynaSurf_3d.yy",},}, {"id":{"name":"s_node_3d_extrude","path":"sprites/s_node_3d_extrude/s_node_3d_extrude.yy",},}, {"id":{"name":"buttonGradient","path":"scripts/buttonGradient/buttonGradient.yy",},}, {"id":{"name":"sh_draw_downsample","path":"shaders/sh_draw_downsample/sh_draw_downsample.yy",},}, @@ -2038,6 +2058,7 @@ {"id":{"name":"s_node_bar_graph","path":"sprites/s_node_bar_graph/s_node_bar_graph.yy",},}, {"id":{"name":"sh_channel_B_grey","path":"shaders/sh_channel_B_grey/sh_channel_B_grey.yy",},}, {"id":{"name":"s_node_pb_fx_hash","path":"sprites/s_node_pb_fx_hash/s_node_pb_fx_hash.yy",},}, + {"id":{"name":"__node_PCX","path":"scripts/__node_PCX/__node_PCX.yy",},}, {"id":{"name":"draw_UI_scale","path":"scripts/draw_UI_scale/draw_UI_scale.yy",},}, {"id":{"name":"s_node_strandSim_update","path":"sprites/s_node_strandSim_update/s_node_strandSim_update.yy",},}, {"id":{"name":"async_functions","path":"scripts/async_functions/async_functions.yy",},}, @@ -2048,6 +2069,7 @@ {"id":{"name":"fd_rectangle_set_velocity_dissipation_value","path":"scripts/fd_rectangle_set_velocity_dissipation_value/fd_rectangle_set_velocity_dissipation_value.yy",},}, {"id":{"name":"panel_history","path":"scripts/panel_history/panel_history.yy",},}, {"id":{"name":"sh_channel_H","path":"shaders/sh_channel_H/sh_channel_H.yy",},}, + {"id":{"name":"rotatorRandom","path":"scripts/rotatorRandom/rotatorRandom.yy",},}, {"id":{"name":"s_node_RGB","path":"sprites/s_node_RGB/s_node_RGB.yy",},}, {"id":{"name":"fd_rectangle_draw","path":"scripts/fd_rectangle_draw/fd_rectangle_draw.yy",},}, {"id":{"name":"s_node_export","path":"sprites/s_node_export/s_node_export.yy",},}, @@ -2096,6 +2118,7 @@ {"id":{"name":"s_node_vec_split","path":"sprites/s_node_vec_split/s_node_vec_split.yy",},}, {"id":{"name":"s_node_regex_replace","path":"sprites/s_node_regex_replace/s_node_regex_replace.yy",},}, {"id":{"name":"sh_pb_hash","path":"shaders/sh_pb_hash/sh_pb_hash.yy",},}, + {"id":{"name":"node_dynamic_surface_out_height","path":"scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.yy",},}, {"id":{"name":"paddingBox","path":"scripts/paddingBox/paddingBox.yy",},}, {"id":{"name":"fd_rectangle_set_visualization_shader","path":"scripts/fd_rectangle_set_visualization_shader/fd_rectangle_set_visualization_shader.yy",},}, {"id":{"name":"s_biterator_bg","path":"sprites/s_biterator_bg/s_biterator_bg.yy",},}, @@ -2172,6 +2195,7 @@ {"id":{"name":"sh_displace","path":"shaders/sh_displace/sh_displace.yy",},}, {"id":{"name":"node_group","path":"scripts/node_group/node_group.yy",},}, {"id":{"name":"fd_rectangle_get_material_height","path":"scripts/fd_rectangle_get_material_height/fd_rectangle_get_material_height.yy",},}, + {"id":{"name":"node_PCX_fn_surface_height","path":"scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.yy",},}, {"id":{"name":"rangeBox","path":"scripts/rangeBox/rangeBox.yy",},}, {"id":{"name":"s_node_array_copy","path":"sprites/s_node_array_copy/s_node_array_copy.yy",},}, {"id":{"name":"node_VFX_effect_accelerate","path":"scripts/node_VFX_effect_accelerate/node_VFX_effect_accelerate.yy",},}, @@ -2195,6 +2219,7 @@ {"id":{"name":"shader_replace_simple","path":"extensions/shader_replace_simple/shader_replace_simple.yy",},}, {"id":{"name":"d3d_cone","path":"scripts/d3d_cone/d3d_cone.yy",},}, {"id":{"name":"__rectangle","path":"scripts/__rectangle/__rectangle.yy",},}, + {"id":{"name":"node_PCX_fn_random","path":"scripts/node_PCX_fn_random/node_PCX_fn_random.yy",},}, {"id":{"name":"s_node_iterator_index","path":"sprites/s_node_iterator_index/s_node_iterator_index.yy",},}, {"id":{"name":"node_de_corner","path":"scripts/node_de_corner/node_de_corner.yy",},}, {"id":{"name":"preferences","path":"scripts/preferences/preferences.yy",},}, @@ -2226,6 +2251,7 @@ {"id":{"name":"node_strand_collision","path":"scripts/node_strand_collision/node_strand_collision.yy",},}, {"id":{"name":"s_node_atlas_get","path":"sprites/s_node_atlas_get/s_node_atlas_get.yy",},}, {"id":{"name":"sh_flood_fill_it","path":"shaders/sh_flood_fill_it/sh_flood_fill_it.yy",},}, + {"id":{"name":"node_dynamic_surface_out_width","path":"scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.yy",},}, {"id":{"name":"node_iterator_sort_input","path":"scripts/node_iterator_sort_input/node_iterator_sort_input.yy",},}, {"id":{"name":"draw_corner","path":"scripts/draw_corner/draw_corner.yy",},}, {"id":{"name":"o_dialog_preference","path":"objects/o_dialog_preference/o_dialog_preference.yy",},}, @@ -2244,6 +2270,7 @@ {"id":{"name":"fd_rectangle_set_material_dissipation_value","path":"scripts/fd_rectangle_set_material_dissipation_value/fd_rectangle_set_material_dissipation_value.yy",},}, {"id":{"name":"node_iterator_output","path":"scripts/node_iterator_output/node_iterator_output.yy",},}, {"id":{"name":"panel_graph_export_image_dialog","path":"scripts/panel_graph_export_image_dialog/panel_graph_export_image_dialog.yy",},}, + {"id":{"name":"node_PCX_array_get","path":"scripts/node_PCX_array_get/node_PCX_array_get.yy",},}, {"id":{"name":"debug","path":"scripts/debug/debug.yy",},}, {"id":{"name":"node_shadow_cast","path":"scripts/node_shadow_cast/node_shadow_cast.yy",},}, {"id":{"name":"node_strand_render","path":"scripts/node_strand_render/node_strand_render.yy",},}, @@ -2267,6 +2294,7 @@ {"id":{"name":"s_node_gradient_palette","path":"sprites/s_node_gradient_palette/s_node_gradient_palette.yy",},}, {"id":{"name":"node_array_shuffle","path":"scripts/node_array_shuffle/node_array_shuffle.yy",},}, {"id":{"name":"panel_node_data_gen","path":"scripts/panel_node_data_gen/panel_node_data_gen.yy",},}, + {"id":{"name":"node_dynamic_surface_out","path":"scripts/node_dynamic_surface_out/node_dynamic_surface_out.yy",},}, {"id":{"name":"fd_rectangle_update_material","path":"scripts/fd_rectangle_update_material/fd_rectangle_update_material.yy",},}, {"id":{"name":"sh_perlin_tiled","path":"shaders/sh_perlin_tiled/sh_perlin_tiled.yy",},}, {"id":{"name":"sh_time_remap","path":"shaders/sh_time_remap/sh_time_remap.yy",},}, diff --git a/datafiles/data/themes/default.zip b/datafiles/data/themes/default.zip index 876af807f..38bf5ead3 100644 Binary files a/datafiles/data/themes/default.zip and b/datafiles/data/themes/default.zip differ diff --git a/objects/o_dialog_add_node/Create_0.gml b/objects/o_dialog_add_node/Create_0.gml index 30170dd98..46c273b51 100644 --- a/objects/o_dialog_add_node/Create_0.gml +++ b/objects/o_dialog_add_node/Create_0.gml @@ -30,8 +30,14 @@ event_inherited(); #region ---- category ---- category = NODE_CATEGORY; - if(context == "Node_Pixel_Builder") - category = NODE_PB_CATEGORY; + switch(context) { + case "Node_Pixel_Builder" : + category = NODE_PB_CATEGORY; + break; + case "Node_DynaSurf" : + category = NODE_PCX_CATEGORY; + break; + } draw_set_font(f_p0); var maxLen = 0; @@ -243,9 +249,7 @@ event_inherited(); var context = PANEL_GRAPH.getCurrentContext(); context = context == noone? "" : instanceof(context); - var start = -1; - if(category == NODE_PB_CATEGORY) - start = 0; + var start = category == NODE_CATEGORY? -1 : 0; for(var i = start; i < ds_list_size(category); i++) { var name = ""; diff --git a/scripts/__VFX/__VFX.gml b/scripts/__VFX/__VFX.gml index feaddc978..c26ce360f 100644 --- a/scripts/__VFX/__VFX.gml +++ b/scripts/__VFX/__VFX.gml @@ -127,6 +127,8 @@ function __part(_node) constructor { if(!active) return; x += speedx; + random_set_seed(seed + life); + if(ground && y + speedy > ground_y) { y = ground_y; speedy = -speedy * ground_bounce; diff --git a/scripts/__node_PCX/__node_PCX.gml b/scripts/__node_PCX/__node_PCX.gml new file mode 100644 index 000000000..d4ec3ae1a --- /dev/null +++ b/scripts/__node_PCX/__node_PCX.gml @@ -0,0 +1,6 @@ +function Node_PCX(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Compute Node"; + w = 96; + + destroy_when_upgroup = true; +} \ No newline at end of file diff --git a/scripts/__node_PCX/__node_PCX.yy b/scripts/__node_PCX/__node_PCX.yy new file mode 100644 index 000000000..f1d8832a5 --- /dev/null +++ b/scripts/__node_PCX/__node_PCX.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "__node_PCX", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "PCX", + "path": "folders/nodes/data/PCX.yy", + }, +} \ No newline at end of file diff --git a/scripts/__node_PCX/node_outline.yy b/scripts/__node_PCX/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/__node_PCX/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/_node_VFX_spawner/_node_VFX_spawner.gml b/scripts/_node_VFX_spawner/_node_VFX_spawner.gml index 169655d8a..ec1dcaf1e 100644 --- a/scripts/_node_VFX_spawner/_node_VFX_spawner.gml +++ b/scripts/_node_VFX_spawner/_node_VFX_spawner.gml @@ -20,14 +20,14 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co inputs[| 5] = nodeValue("Lifespan", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 20, 30 ]) .setDisplay(VALUE_DISPLAY.range); - inputs[| 6] = nodeValue("Spawn direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 45, 135 ]) - .setDisplay(VALUE_DISPLAY.rotation_range); + inputs[| 6] = nodeValue("Spawn direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0, 45, 135, 0, 0 ]) + .setDisplay(VALUE_DISPLAY.rotation_random); inputs[| 7] = nodeValue("Acceleration", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ]) .setDisplay(VALUE_DISPLAY.range); - inputs[| 8] = nodeValue("Orientation", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0, 0 ]) - .setDisplay(VALUE_DISPLAY.rotation_range); + inputs[| 8] = nodeValue("Orientation", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0, 0, 0, 0, 0 ]) + .setDisplay(VALUE_DISPLAY.rotation_random); inputs[| 9] = nodeValue("Rotational speed", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ]) .setDisplay(VALUE_DISPLAY.range); @@ -210,8 +210,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co if(_rotation[1] < _rotation[0]) _rotation[1] += 360; var _posDist = []; - if(_distrib == 2) - _posDist = get_points_from_dist(_dist_map, _amo, seed); + if(_distrib == 2) _posDist = get_points_from_dist(_dist_map, _amo, seed); for( var i = 0; i < _amo; i++ ) { random_set_seed(seed); @@ -220,6 +219,8 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co parts_runner = clamp(parts_runner, 0, array_length(parts) - 1); var part = parts[parts_runner]; + //print($"Frame {_time}: Spawning particle {parts_runner}, seed {seed}, {irandom(99999999)}"); + var _spr = _inSurf, _index = 0; if(is_array(_inSurf)) { if(_arr_type == 0) { @@ -274,10 +275,10 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co var _lif = irandom_range(_life[0], _life[1]); - var _rot = random_range(_rotation[0], _rotation[1]); + var _rot = angle_random_eval(_rotation); var _rot_spd = random_range(_rotation_speed[0], _rotation_speed[1]); - var _dirr = _directCenter? point_direction(_spawn_area[0], _spawn_area[1], xx, yy) : random_range(_direction[0], _direction[1]); + var _dirr = _directCenter? point_direction(_spawn_area[0], _spawn_area[1], xx, yy) : angle_random_eval(_direction); var _velo = random_range(_velocity[0], _velocity[1]); var _vx = lengthdir_x(_velo, _dirr); @@ -291,10 +292,10 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co var _alp = random_range(_alpha[0], _alpha[1]); var _bld = _blend.eval(random(1)); - part.seed = irandom(99999); + part.seed = irandom_range(100000, 999999); part.create(_spr, xx, yy, _lif); part.anim_speed = _anim_speed; - part.anim_end = _anim_end; + part.anim_end = _anim_end; var _trn = random_range(_turn[0], _turn[1]); if(_turnBi) _trn *= choose(-1, 1); @@ -314,7 +315,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co static updateParticleForward = function() {} - function reset() { + function reset() { #region spawn_index = 0; scatter_index = 0; for(var i = 0; i < array_length(parts); i++) { @@ -325,7 +326,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co render(); seed = inputs[| 32].getValue(); - var _loop = inputs[| 21].getValue(); + var _loop = inputs[| 21].getValue(); if(!_loop) return; for(var i = 0; i < PROJECT.animator.frames_total; i++) { @@ -334,9 +335,9 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co } seed = inputs[| 32].getValue(); - } + } #endregion - function checkPartPool() { + function checkPartPool() { #region var _part_amo = attributes.part_amount; var _curr_amo = array_length(parts); @@ -346,9 +347,9 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co } else if(_part_amo < _curr_amo) { array_resize(parts, _part_amo); } - } + } #endregion - static runVFX = function(_time = PROJECT.animator.current_frame, _render = true) { + static runVFX = function(_time = PROJECT.animator.current_frame, _render = true) { #region var _spawn_delay = inputs[| 1].getValue(_time); var _spawn_type = inputs[| 16].getValue(_time); var _spawn_active = inputs[| 27].getValue(_time); @@ -378,11 +379,11 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co triggerRender(); render(_time); - } + } #endregion static onStep = function() {} - static step = function() { + static step = function() { #region var _inSurf = inputs[| 0].getValue(); var _dist = inputs[| 4].getValue(); var _scatt = inputs[| 24].getValue(); @@ -406,24 +407,24 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co } onStep(); - } + } #endregion - static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { #region inputs[| 3].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny); if(onDrawOverlay != -1) onDrawOverlay(active, _x, _y, _s, _mx, _my); - } + } #endregion static onDrawOverlay = -1; - static update = function(frame = PROJECT.animator.current_frame) { + static update = function(frame = PROJECT.animator.current_frame) { #region checkPartPool(); var _spawn_type = inputs[| 16].getValue(); if(_spawn_type == 0) inputs[| 1].name = "Spawn delay"; else inputs[| 1].name = "Spawn frame"; onUpdate(); - } + } #endregion static onUpdate = function() {} @@ -433,10 +434,10 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co static onPartStep = function(part) {} static onPartDestroy = function(part) {} - static postDeserialize = function() { + static postDeserialize = function() { #region if(PROJECT.version < 11480) { for( var i = 37; i <= 39; i++ ) array_insert(load_map.inputs, i, noone); } - } + } #endregion } \ No newline at end of file diff --git a/scripts/angle_functions/angle_functions.gml b/scripts/angle_functions/angle_functions.gml new file mode 100644 index 000000000..3e3f99c1b --- /dev/null +++ b/scripts/angle_functions/angle_functions.gml @@ -0,0 +1,21 @@ +function angle_random_eval(range, seed = undefined) { + if(is_real(range)) + return range; + + if(seed != undefined) random_set_seed(seed); + + if(array_length(range) < 2) + return range + else if(array_length(range) == 2) + return irandom_range(range[0], range[1]); + else if(array_length(range) > 2) { + switch(range[0]) { + case 0 : return irandom_range(range[1], range[2]); + case 1 : return irandom_range(range[1] - range[2], range[1] + range[2]); + case 2 : return choose(irandom_range(range[1], range[2]), irandom_range(range[3], range[4])); + case 3 : return choose(irandom_range(range[1] - range[3], range[1] + range[3]), irandom_range(range[2] - range[3], range[2] + range[3])); + } + } + + return range; +} \ No newline at end of file diff --git a/scripts/angle_functions/angle_functions.yy b/scripts/angle_functions/angle_functions.yy new file mode 100644 index 000000000..9bf30553c --- /dev/null +++ b/scripts/angle_functions/angle_functions.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "angle_functions", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "value", + "path": "folders/functions/value.yy", + }, +} \ No newline at end of file diff --git a/scripts/d3d_group/d3d_group.gml b/scripts/d3d_group/d3d_group.gml index 46de9a595..0561b8e5a 100644 --- a/scripts/d3d_group/d3d_group.gml +++ b/scripts/d3d_group/d3d_group.gml @@ -61,6 +61,8 @@ function __3dGroup() constructor { static submitSel = function(scene = {}, shader = noone) { _submit(function(_obj, scene, shader) { _obj.submitSel (scene, shader); }, scene, shader); } static submitShader = function(scene = {}, shader = noone) { _submit(function(_obj, scene, shader) { _obj.submitShader (scene, shader); }, scene, shader); } + static submitShadow = function(scene = {}, object = noone) { _submit(function(_obj, scene, object) { _obj.submitShadow (scene, object); }, scene, object); } + static map = function(callback, scene = {}) { #region for( var i = 0, n = array_length(objects); i < n; i++ ) callback(objects[i], scene); diff --git a/scripts/d3d_light/d3d_light.gml b/scripts/d3d_light/d3d_light.gml index bfecaade0..e58d044eb 100644 --- a/scripts/d3d_light/d3d_light.gml +++ b/scripts/d3d_light/d3d_light.gml @@ -34,7 +34,7 @@ function __3dLight() : __3dObject() constructor { static shadowProjectEnd = function() {} - static shadowProjectVertex = function(scene, objects) { #region + static submitShadow = function(scene, objects) { #region if(!shadow_active) return; shadowProjectBegin(); diff --git a/scripts/d3d_light_point/d3d_light_point.gml b/scripts/d3d_light_point/d3d_light_point.gml index e19c0b41a..8cc5d064b 100644 --- a/scripts/d3d_light_point/d3d_light_point.gml +++ b/scripts/d3d_light_point/d3d_light_point.gml @@ -75,7 +75,7 @@ function __3dLightPoint() : __3dLight() constructor { gpu_set_ztestenable(false); } #endregion - static shadowProjectVertex = function(scene, objects) { #region + static submitShadow = function(scene, objects) { #region if(!shadow_active) return; for( var i = 0; i < 6; i++ ) diff --git a/scripts/d3d_object/d3d_object.gml b/scripts/d3d_object/d3d_object.gml index 54a52a247..8fdc6a972 100644 --- a/scripts/d3d_object/d3d_object.gml +++ b/scripts/d3d_object/d3d_object.gml @@ -116,6 +116,7 @@ function __3dObject() constructor { submitVertex(_s, sh_d3d_silhouette); } #endregion static submitShader = function(scene = {}, shader = noone) {} + static submitShadow = function(scene = {}, object = noone) {} static submitVertex = function(scene = {}, shader = noone) { #region var _shader = sh_d3d_default; diff --git a/scripts/d3d_scene/d3d_scene.gml b/scripts/d3d_scene/d3d_scene.gml index 27fbc63eb..d2ddde884 100644 --- a/scripts/d3d_scene/d3d_scene.gml +++ b/scripts/d3d_scene/d3d_scene.gml @@ -97,6 +97,8 @@ function __3dScene(camera) constructor { static submitSel = function(object, shader = noone) { _submit(function(object, shader) { object.submitSel (self, shader); }, object, shader) } static submitShader = function(object, shader = noone) { _submit(function(object, shader) { object.submitShader (self, shader); }, object, shader) } + static submitShadow = function(object) { object.submitShadow(self, object) } + static deferPass = function(object, w, h, deferData = noone) { #region if(deferData == noone) deferData = { geometry_data: [ noone, noone, noone ], @@ -109,9 +111,9 @@ function __3dScene(camera) constructor { return deferData; } #endregion - static renderBackground = function(w, h) { #region - var _bgSurf = surface_create(w, h); - surface_set_shader(_bgSurf, sh_d3d_background); + static renderBackground = function(w, h, surf = noone) { #region + surf = surface_verify(surf, w, h); + surface_set_shader(surf, sh_d3d_background); shader_set_color("light_ambient", lightAmbient); shader_set_f("cameraPosition", camera.position.toArray()); shader_set_i("env_use_mapping", is_surface(enviroment_map) ); @@ -129,7 +131,7 @@ function __3dScene(camera) constructor { matrix_set(matrix_world, matrix_build_identity()); surface_reset_shader(); - return _bgSurf; + return surf; } #endregion static geometryPass = function(deferData, object, w = 512, h = 512) { #region diff --git a/scripts/draw_circle_functions/draw_circle_functions.gml b/scripts/draw_circle_functions/draw_circle_functions.gml index 261111528..3272d2bd1 100644 --- a/scripts/draw_circle_functions/draw_circle_functions.gml +++ b/scripts/draw_circle_functions/draw_circle_functions.gml @@ -68,7 +68,7 @@ function draw_circle_angle(_x, _y, _r, _angSt, _angEd, precision = 32) { draw_primitive_end(); } -function draw_arc_th(_x, _y, _r, _th, _angSt, _angEd) { +function draw_arc_width(_x, _y, _r, _th, _angSt, _angEd) { draw_primitive_begin(pr_trianglelist); var oxI, oyI, oxO, oyO; diff --git a/scripts/draw_text_function/draw_text_function.gml b/scripts/draw_text_function/draw_text_function.gml index 43f73c69e..a474e4491 100644 --- a/scripts/draw_text_function/draw_text_function.gml +++ b/scripts/draw_text_function/draw_text_function.gml @@ -19,6 +19,8 @@ function draw_text_bbox(bbox, text) { var ss = min(bbox.w / string_width(text), bbox.h / string_height(text)); ss = max(0.5, ss); + draw_set_halign(fa_center); + draw_set_valign(fa_center); draw_text_cut(bbox.xc, bbox.yc, text, bbox.w, ss); } diff --git a/scripts/dynaSurf/dynaSurf.gml b/scripts/dynaSurf/dynaSurf.gml index 8b3434eb0..bbaa30151 100644 --- a/scripts/dynaSurf/dynaSurf.gml +++ b/scripts/dynaSurf/dynaSurf.gml @@ -23,4 +23,27 @@ function DynaSurf() constructor { } static clone = function() {} + static destroy = function() {} +} + +function Compute_DynaSurf() : DynaSurf() constructor { + drawFn = noone; + widthFn = noone; + heightFn = noone; + + static getWidth = function() { return widthFn? widthFn.eval() : 1; } + static getHeight = function() { return heightFn? heightFn.eval() : 1; } + + static draw = function(_x = 0, _y = 0, _sx = 1, _sy = 1, _ang = 0, _col = c_white, _alp = 1) { + if(drawFn == noone) return; + drawFn.evalFn({ + x: _x, + y: _y, + sx: _sx, + sy: _sy, + angle: _ang, + color: _col, + alpha: _alp + }); + } } \ No newline at end of file diff --git a/scripts/dynaSurf_3d/dynaSurf_3d.gml b/scripts/dynaSurf_3d/dynaSurf_3d.gml new file mode 100644 index 000000000..49a2aea67 --- /dev/null +++ b/scripts/dynaSurf_3d/dynaSurf_3d.gml @@ -0,0 +1,84 @@ +function dynaSurf_3d() : DynaSurf() constructor { + object = noone; + + camera = new __3dCamera(); + camTarget = new __vec3(); + camera_ay = 45; + + scene = new __3dScene(camera); + + w = 1; + h = 1; + + surfaces = array_create(4); + deferData = noone; + + static getWidth = function() { return w; } + static getHeight = function() { return h; } + + static draw = function(_x = 0, _y = 0, _xs = 1, _ys = 1, _rot = 0, _col = c_white, _alp = 1) { + var _sw = w * _xs; + var _sh = h * _xs; + + #region view + var _pos, _blend = 1; + + _pos = calculate_3d_position(camTarget.x, camTarget.y, camTarget.z, _rot, camera_ay, camera.focus_dist); + + camera.position.set(_pos); + camera.focus.set(camTarget); + + camera.setViewSize(_sw, _sh); + camera.setMatrix(); + #endregion + + #region background + //surface_free_safe(surfaces[0]); + //surfaces[0] = scene.renderBackground(_sw, _sh, surfaces[0]); + #endregion + + #region surfaces + surfaces[1] = surface_verify(surfaces[1], _sw, _sh); + surfaces[2] = surface_verify(surfaces[2], _sw, _sh); + surfaces[3] = surface_verify(surfaces[3], _sw, _sh); + deferData = scene.deferPass(object, _sw, _sh, deferData); + #endregion + + #region submit + var _px = point_rotate(0, 0, _sw / 2, _sh / 2, _rot); + var _xx = _x - _px[0]; + var _yy = _y - _px[1]; + + surface_set_target_ext(0, surfaces[1]); + surface_set_target_ext(1, surfaces[2]); + surface_set_target_ext(2, surfaces[3]); + + DRAW_CLEAR + + camera.setMatrix(); + scene.reset(); + gpu_set_cullmode(cull_counterclockwise); + + object.submitShader(scene); + object.submitShadow(scene, object); + scene.apply(deferData); + + gpu_set_cullmode(cull_noculling); + surface_reset_target(); + #endregion + + #region draw + //if(scene.draw_background) + // draw_surface_safe(surfaces[0], _xx, _yy); + draw_surface_safe(surfaces[1], _xx, _yy); + + BLEND_MULTIPLY + draw_surface_safe(deferData.ssao, _xx, _yy); + BLEND_NORMAL + #endregion + } + + static drawTile = function(_x = 0, _y = 0, _xs = 1, _ys = 1, _col = c_white, _alp = 1) {} + + static drawPart = function(_l, _t, _w, _h, _x, _y, _xs = 1, _ys = 1, _rot = 0, _col = c_white, _alp = 1) {} +} \ No newline at end of file diff --git a/scripts/dynaSurf_3d/dynaSurf_3d.yy b/scripts/dynaSurf_3d/dynaSurf_3d.yy new file mode 100644 index 000000000..9697525bd --- /dev/null +++ b/scripts/dynaSurf_3d/dynaSurf_3d.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "dynaSurf_3d", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "dynamic surface", + "path": "folders/functions/surface/dynamic surface.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_3d_camera/node_3d_camera.gml b/scripts/node_3d_camera/node_3d_camera.gml index a37b9b016..e7eb4c3a3 100644 --- a/scripts/node_3d_camera/node_3d_camera.gml +++ b/scripts/node_3d_camera/node_3d_camera.gml @@ -168,38 +168,40 @@ function Node_3D_Camera(_x, _y, _group = noone) : Node_3D_Object(_x, _y, _group) } #endregion static processData = function(_output, _data, _output_index, _array_index = 0) { #region - var _pos = _data[0]; - var _rot = _data[1]; + #region data + var _pos = _data[0]; + var _rot = _data[1]; - var _fov = _data[in_d3d + 0]; - var _clip = _data[in_d3d + 1]; - var _dim = _data[in_d3d + 2]; - var _proj = _data[in_d3d + 3]; - var _scne = _data[in_d3d + 4]; - var _ambt = _data[in_d3d + 5]; - var _dbg = _data[in_d3d + 6]; - var _back = _data[in_d3d + 7]; - var _orts = _data[in_d3d + 8]; + var _fov = _data[in_d3d + 0]; + var _clip = _data[in_d3d + 1]; + var _dim = _data[in_d3d + 2]; + var _proj = _data[in_d3d + 3]; + var _sobj = _data[in_d3d + 4]; + var _ambt = _data[in_d3d + 5]; + var _dbg = _data[in_d3d + 6]; + var _back = _data[in_d3d + 7]; + var _orts = _data[in_d3d + 8]; - var _posm = _data[in_d3d + 9]; - var _look = _data[in_d3d + 10]; - var _roll = _data[in_d3d + 11]; - var _hAng = _data[in_d3d + 12]; - var _vAng = _data[in_d3d + 13]; - var _dist = _data[in_d3d + 14]; - var _gamm = _data[in_d3d + 15]; - var _env = _data[in_d3d + 16]; + var _posm = _data[in_d3d + 9]; + var _look = _data[in_d3d + 10]; + var _roll = _data[in_d3d + 11]; + var _hAng = _data[in_d3d + 12]; + var _vAng = _data[in_d3d + 13]; + var _dist = _data[in_d3d + 14]; + var _gamm = _data[in_d3d + 15]; + var _env = _data[in_d3d + 16]; - var _aoEn = _data[in_d3d + 17]; - var _aoRa = _data[in_d3d + 18]; - var _aoBi = _data[in_d3d + 19]; - var _aoSr = _data[in_d3d + 20]; + var _aoEn = _data[in_d3d + 17]; + var _aoRa = _data[in_d3d + 18]; + var _aoBi = _data[in_d3d + 19]; + var _aoSr = _data[in_d3d + 20]; - var _nrmSmt = _data[in_d3d + 21]; + var _nrmSmt = _data[in_d3d + 21]; - var _qi1 = new BBMOD_Quaternion().FromAxisAngle(new BBMOD_Vec3(0, 1, 0), 90); - var _qi2 = new BBMOD_Quaternion().FromAxisAngle(new BBMOD_Vec3(1, 0, 0), -90); - var _qi3 = new BBMOD_Quaternion().FromAxisAngle(new BBMOD_Vec3(1, 0, 0), 90); + var _qi1 = new BBMOD_Quaternion().FromAxisAngle(new BBMOD_Vec3(0, 1, 0), 90); + var _qi2 = new BBMOD_Quaternion().FromAxisAngle(new BBMOD_Vec3(1, 0, 0), -90); + var _qi3 = new BBMOD_Quaternion().FromAxisAngle(new BBMOD_Vec3(1, 0, 0), 90); + #endregion switch(_posm) { #region ++++ camera positioning ++++ case 0 : @@ -245,74 +247,85 @@ function Node_3D_Camera(_x, _y, _group = noone) : Node_3D_Object(_x, _y, _group) object.transform.rotation = camera.rotation.Clone(); object.transform.scale.set(1, _dim[0] / _dim[1], 1); - if(_scne == noone) return; + if(_sobj == noone) return; - camera.projection = _proj; - camera.setViewFov(_fov, _clip[0], _clip[1]); - if(_proj == 0) camera.setViewSize(_dim[0], _dim[1]); - else if(_proj == 1) camera.setViewSize(1 / _orts, _dim[0] / _dim[1] / _orts); - camera.setMatrix(); + #region camera view project + camera.projection = _proj; + camera.setViewFov(_fov, _clip[0], _clip[1]); + if(_proj == 0) camera.setViewSize(_dim[0], _dim[1]); + else if(_proj == 1) camera.setViewSize(1 / _orts, _dim[0] / _dim[1] / _orts); + camera.setMatrix(); + #endregion - scene.camera = camera; - scene.lightAmbient = _ambt; - scene.gammaCorrection = _gamm; - scene.enviroment_map = _env; - scene.cull_mode = _back; - scene.ssao_enabled = _aoEn; - scene.ssao_radius = _aoRa; - scene.ssao_bias = _aoBi; - scene.ssao_strength = _aoSr; - scene.defer_normal_radius = _nrmSmt; - scene.draw_background = _dbg; + #region scene setting + scene.camera = camera; + scene.lightAmbient = _ambt; + scene.gammaCorrection = _gamm; + scene.enviroment_map = _env; + scene.cull_mode = _back; + scene.ssao_enabled = _aoEn; + scene.ssao_radius = _aoRa; + scene.ssao_bias = _aoBi; + scene.ssao_strength = _aoSr; + scene.defer_normal_radius = _nrmSmt; + scene.draw_background = _dbg; + #endregion var _bgSurf = _dbg? scene.renderBackground(_dim[0], _dim[1]) : noone; - deferData = scene.deferPass(_scne, _dim[0], _dim[1], deferData); + deferData = scene.deferPass(_sobj, _dim[0], _dim[1], deferData); - var _render = outputs[| 0].getValue(); - var _normal = outputs[| 1].getValue(); - var _depth = outputs[| 2].getValue(); + #region surface + var _render = outputs[| 0].getValue(); + var _normal = outputs[| 1].getValue(); + var _depth = outputs[| 2].getValue(); - _render = surface_verify(_render, _dim[0], _dim[1]); - _normal = surface_verify(_normal, _dim[0], _dim[1]); - _depth = surface_verify(_depth , _dim[0], _dim[1]); + _render = surface_verify(_render, _dim[0], _dim[1]); + _normal = surface_verify(_normal, _dim[0], _dim[1]); + _depth = surface_verify(_depth , _dim[0], _dim[1]); - surface_set_target_ext(0, _render); - surface_set_target_ext(1, _normal); - surface_set_target_ext(2, _depth ); + surface_set_target_ext(0, _render); + surface_set_target_ext(1, _normal); + surface_set_target_ext(2, _depth ); - DRAW_CLEAR - - gpu_set_zwriteenable(true); - gpu_set_ztestenable(true); - gpu_set_cullmode(_back); - - camera.applyCamera(); - - scene.reset(); - scene.submitShader(_scne); - scene.apply(deferData); - scene.submit(_scne); - - surface_reset_target(); - - camera.resetCamera(); - - var _finalRender = surface_create(_dim[0], _dim[1]); - surface_set_target(_finalRender); DRAW_CLEAR - BLEND_ALPHA + #endregion + + #region submit + gpu_set_zwriteenable(true); + gpu_set_ztestenable(true); + gpu_set_cullmode(_back); + + camera.applyCamera(); + + scene.reset(); + scene.submitShadow(_sobj); + scene.submitShader(_sobj); + scene.apply(deferData); + scene.submit(_sobj); - if(_dbg) { - draw_surface_safe(_bgSurf, 0, 0); - surface_free(_bgSurf); - } - draw_surface_safe(_render, 0, 0); + surface_reset_target(); + + camera.resetCamera(); + #endregion + + #region render + var _finalRender = surface_create(_dim[0], _dim[1]); + surface_set_target(_finalRender); + DRAW_CLEAR + BLEND_ALPHA - BLEND_MULTIPLY - draw_surface_safe(deferData.ssao); - BLEND_NORMAL - surface_reset_target(); - surface_free(_render); + if(_dbg) { + draw_surface_safe(_bgSurf, 0, 0); + surface_free(_bgSurf); + } + draw_surface_safe(_render, 0, 0); + + BLEND_MULTIPLY + draw_surface_safe(deferData.ssao); + BLEND_NORMAL + surface_reset_target(); + surface_free(_render); + #endregion return [ _finalRender, _normal, _depth ]; } #endregion diff --git a/scripts/node_3dsurf/node_3dsurf.gml b/scripts/node_3dsurf/node_3dsurf.gml new file mode 100644 index 000000000..b8257b551 --- /dev/null +++ b/scripts/node_3dsurf/node_3dsurf.gml @@ -0,0 +1,54 @@ +function Node_3DSurf(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { + name = "3DSurf"; + cached_object = []; + object_class = dynaSurf_3d; + + inputs[| 0] = nodeValue("Scene", self, JUNCTION_CONNECT.input, VALUE_TYPE.d3Scene, noone) + .setVisible(true, true); + + inputs[| 1] = nodeValue("Base Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 2] = nodeValue("Vertical Angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 45 ) + .setDisplay(VALUE_DISPLAY.slider, [0, 90, 1]); + + inputs[| 3] = nodeValue("Distance", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 4 ); + + outputs[| 0] = nodeValue("3DSurf", self, JUNCTION_CONNECT.output, VALUE_TYPE.dynaSurf, noone); + + input_display_list = [ 0, + ["Camera", false], 1, 2, 3, + ]; + + static getObject = function(index, class = object_class) { #region + var _obj = array_safe_get(cached_object, index, noone); + if(_obj == noone) { + _obj = new class(); + } else if(!is_instanceof(_obj, class)) { + _obj.destroy(); + _obj = new class(); + } + + cached_object[index] = _obj; + return _obj; + } #endregion + + static processData = function(_outSurf, _data, _output_index, _array_index) { + var _sobj = _data[0]; + var _dim = _data[1]; + var _vang = _data[2]; + var _dist = _data[3]; + + if(_sobj == noone) return noone; + + var _scn = getObject(_array_index); + _scn.object = _sobj; + _scn.w = _dim[0]; + _scn.h = _dim[1]; + + _scn.camera_ay = _vang; + _scn.camera.focus_dist = _dist; + + return _scn; + } +} \ No newline at end of file diff --git a/scripts/node_3dsurf/node_3dsurf.yy b/scripts/node_3dsurf/node_3dsurf.yy new file mode 100644 index 000000000..2808baf04 --- /dev/null +++ b/scripts/node_3dsurf/node_3dsurf.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_3dsurf", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "surface", + "path": "folders/nodes/data/value/surface.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_3dsurf/node_counter.yy b/scripts/node_3dsurf/node_counter.yy new file mode 100644 index 000000000..7f559330c --- /dev/null +++ b/scripts/node_3dsurf/node_counter.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "number", + "path": "folders/nodes/data/number.yy", + }, + "resourceVersion": "1.0", + "name": "node_counter", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_PCX_array_get/node_PCX_array_get.gml b/scripts/node_PCX_array_get/node_PCX_array_get.gml new file mode 100644 index 000000000..89be6f755 --- /dev/null +++ b/scripts/node_PCX_array_get/node_PCX_array_get.gml @@ -0,0 +1,16 @@ +function Node_PCX_Array_Get(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "Array Get"; + + inputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 1] = nodeValue("Index", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + static update = function() { + var _arr = inputs[| 0].getValue(); + var _ind = inputs[| 1].getValue(); + + outputs[| 0].setValue(new __funcTree("@", _arr, _ind)); + } +} \ No newline at end of file diff --git a/scripts/node_PCX_array_get/node_PCX_array_get.yy b/scripts/node_PCX_array_get/node_PCX_array_get.yy new file mode 100644 index 000000000..ef07e93d8 --- /dev/null +++ b/scripts/node_PCX_array_get/node_PCX_array_get.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_PCX_array_get", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "array", + "path": "folders/nodes/data/PCX/array.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_PCX_array_get/node_outline.yy b/scripts/node_PCX_array_get/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_PCX_array_get/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_PCX_array_set/node_PCX_array_set.gml b/scripts/node_PCX_array_set/node_PCX_array_set.gml new file mode 100644 index 000000000..980a0887e --- /dev/null +++ b/scripts/node_PCX_array_set/node_PCX_array_set.gml @@ -0,0 +1,19 @@ +function Node_PCX_Array_Set(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "Array Set"; + + inputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 1] = nodeValue("Index", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 2] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + static update = function() { + var _arr = inputs[| 0].getValue(); + var _ind = inputs[| 1].getValue(); + var _val = inputs[| 2].getValue(); + + outputs[| 0].setValue(new __funcTree("=", [ _arr, _ind ], _val)); + } +} \ No newline at end of file diff --git a/scripts/node_PCX_array_set/node_PCX_array_set.yy b/scripts/node_PCX_array_set/node_PCX_array_set.yy new file mode 100644 index 000000000..d34538f97 --- /dev/null +++ b/scripts/node_PCX_array_set/node_PCX_array_set.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_PCX_array_set", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "array", + "path": "folders/nodes/data/PCX/array.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_PCX_array_set/node_outline.yy b/scripts/node_PCX_array_set/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_PCX_array_set/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_PCX_equation/node_PCX_equation.gml b/scripts/node_PCX_equation/node_PCX_equation.gml new file mode 100644 index 000000000..5d4bb48ad --- /dev/null +++ b/scripts/node_PCX_equation/node_PCX_equation.gml @@ -0,0 +1,138 @@ +function Node_PCX_Equation(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "Equation"; + + w = 96; + ast = noone; + + inputs[| 0] = nodeValue("Equation", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, ""); + + static createNewInput = function() { #region + var index = ds_list_size(inputs); + inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ) + .setDisplay(VALUE_DISPLAY.text_box); + + inputs[| index + 1] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone ) + .setVisible(true, true); + inputs[| index + 1].editWidget.interactable = false; + } #endregion + + outputs[| 0] = nodeValue("Result", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone ); + + argument_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region + argument_renderer.x = _x; + argument_renderer.y = _y; + argument_renderer.w = _w; + + var tx = _x + ui(8); + var ty = _y + ui(8); + var hh = ui(8); + var _th = TEXTBOX_HEIGHT; + + for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) { + var _h = 0; + + var _jName = inputs[| i + 0]; + _jName.editWidget.setFocusHover(_focus, _hover); + _jName.editWidget.draw(tx, ty, ui(128), _th, _jName.showValue(), _m, _jName.display_type); + + draw_set_text(f_p1, fa_center, fa_top, COLORS._main_text_sub); + draw_text_add(tx + ui(128 + 12), ty + ui(6), "="); + + var _jValue = inputs[| i + 1]; + _jValue.editWidget.setFocusHover(_focus, _hover); + _jValue.editWidget.draw(tx + ui(128 + 24), ty, _w - ui(128 + 24 + 16), _th, _jValue.showValue(), _m); + + _h += _th + ui(6); + hh += _h; + ty += _h; + } + + argument_renderer.h = hh; + return hh; + }); #endregion + + argument_renderer.register = function(parent = noone) { #region + for( var i = input_fix_len; i < ds_list_size(inputs); i++ ) + inputs[| i].editWidget.register(parent); + } #endregion + + input_display_list = [ + ["Function", false], 0, + ["Arguments", false], argument_renderer, + ["Inputs", true], + ] + + setIsDynamicInput(2); + + if(!LOADING && !APPENDING) createNewInput(); + + static refreshDynamicInput = function() { #region + var _in = ds_list_create(); + + for( var i = 0; i < input_fix_len; i++ ) + ds_list_add(_in, inputs[| i]); + + array_resize(input_display_list, input_display_len); + + for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) { + var varName = inputs[| i].getValue(); + + if(varName != "") { + ds_list_add(_in, inputs[| i + 0]); + ds_list_add(_in, inputs[| i + 1]); + inputs[| i + 1].editWidget.setInteract(true); + inputs[| i + 1].name = varName; + + array_push(input_display_list, i + 1); + } else { + delete inputs[| i + 0]; + delete inputs[| i + 1]; + } + } + + for( var i = 0; i < ds_list_size(_in); i++ ) + _in[| i].index = i; + + ds_list_destroy(inputs); + inputs = _in; + + createNewInput(); + } #endregion + + static onValueUpdate = function(index = 0) { #region + if(LOADING || APPENDING) return; + + if(safe_mod(index - input_fix_len, data_length) == 0) //Variable name + inputs[| index + 1].name = inputs[| index].getValue(); + + refreshDynamicInput(); + } #endregion + + static update = function() { #region + var eq = inputs[| 0].getValue(); + var fn = evaluateFunctionTree(eq); + + var _fnL = new __funcList(); + + for( var i = input_fix_len; i < array_length(_data); i += data_length ) { + var _pName = inputs[| i + 0].getValue(); + var _pVal = inputs[| i + 1].getValue(); + + _fnL.addFunction(new __funcTree("=", _pName, _pVal)); + } + + _fnL.addFunction(fn); + outputs[| 0].setValue(fn); + } #endregion + + static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { #region + draw_set_text(f_h5, fa_center, fa_center, COLORS._main_text); + var str = inputs[| 0].getValue(); + + var bbox = drawGetBbox(xx, yy, _s); + var ss = string_scale(str, bbox.w, bbox.h); + draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0); + } #endregion + + static doApplyDeserialize = function() { refreshDynamicInput(); } +} \ No newline at end of file diff --git a/scripts/node_PCX_equation/node_PCX_equation.yy b/scripts/node_PCX_equation/node_PCX_equation.yy new file mode 100644 index 000000000..0af930072 --- /dev/null +++ b/scripts/node_PCX_equation/node_PCX_equation.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_PCX_equation", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "PCX", + "path": "folders/nodes/data/PCX.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_math/node_PCX_fn_math.gml b/scripts/node_PCX_fn_math/node_PCX_fn_math.gml new file mode 100644 index 000000000..47c710bf1 --- /dev/null +++ b/scripts/node_PCX_fn_math/node_PCX_fn_math.gml @@ -0,0 +1,51 @@ +function Node_PCX_fn_Math(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "Math"; + + inputs[| 0] = nodeValue("Operator", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) + .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Add", "Subtract", "Multiply", "Divide", "Power", "Modulo", "Absolute", -1, "Round", "Floor", "Ceil", + -1, "Sin", "Cos", "Tan", "Arcsin", "Arccos", "Arctan", -1, "Min", "Max", "Clamp", -1, "Lerp" ]); + + inputs[| 1] = nodeValue("x", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 2] = nodeValue("y", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 3] = nodeValue("z", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + static update = function() { + static syms = [ "+", "-", "*", "/", "$", "%", "abs", -1, "round", "floor", "ceil", + -1, "sin", "cos", "tan", "arcsin", "arccos", "arctan", -1, "min", "max", "clamp", -1, "lerp" ]; + + var _opr = inputs[| 0].getValue(); + var _x = inputs[| 1].getValue(); + var _y = inputs[| 2].getValue(); + var _sym = syms[_opr]; + + switch(_sym) { + case "abs" : + case "round" : + case "floor" : + case "ceil" : + case "sin" : + case "cos" : + case "tan" : + case "arcsin" : + case "arccos" : + case "arctan" : + inputs[| 2].setVisible(false, false); + break; + default: inputs[| 2].setVisible(true, true); + } + + switch(_sym) { + case "clamp" : + case "lerp" : + inputs[| 3].setVisible(true, true); + break; + default: inputs[| 3].setVisible(false, false); + } + + outputs[| 0].setValue(new __funcTree(_sym, _x, _y)); + } +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_math/node_PCX_fn_math.yy b/scripts/node_PCX_fn_math/node_PCX_fn_math.yy new file mode 100644 index 000000000..0a7b08d5f --- /dev/null +++ b/scripts/node_PCX_fn_math/node_PCX_fn_math.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_PCX_fn_math", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "value", + "path": "folders/nodes/data/PCX/value.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_math/node_outline.yy b/scripts/node_PCX_fn_math/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_PCX_fn_math/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_random/node_PCX_fn_random.gml b/scripts/node_PCX_fn_random/node_PCX_fn_random.gml new file mode 100644 index 000000000..53a023d8d --- /dev/null +++ b/scripts/node_PCX_fn_random/node_PCX_fn_random.gml @@ -0,0 +1,21 @@ +function Node_PCX_fn_Random(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "Random"; + + inputs[| 0] = nodeValue("Min", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 1] = nodeValue("Max", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 2] = nodeValue("Integer", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); + + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + input_display_list = [ 2, 0, 1 ]; + + static update = function() { + var _min = inputs[| 0].getValue(); + var _max = inputs[| 1].getValue(); + var _int = inputs[| 2].getValue(); + + outputs[| 0].setValue(new __funcTree(_int? "irandom" : "random", _min, _max)); + } +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_random/node_PCX_fn_random.yy b/scripts/node_PCX_fn_random/node_PCX_fn_random.yy new file mode 100644 index 000000000..396306af2 --- /dev/null +++ b/scripts/node_PCX_fn_random/node_PCX_fn_random.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_PCX_fn_random", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "value", + "path": "folders/nodes/data/PCX/value.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_random/node_outline.yy b/scripts/node_PCX_fn_random/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_PCX_fn_random/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.gml b/scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.gml new file mode 100644 index 000000000..eeb953e3a --- /dev/null +++ b/scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.gml @@ -0,0 +1,12 @@ +function Node_PCX_fn_Surface_Height(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "Surface Height"; + + inputs[| 0] = nodeValue("Surface", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + static update = function() { + var _surf = inputs[| 0].getValue(); + outputs[| 0].setValue(new __funcTree("surface_get_height", _surf)); + } +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.yy b/scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.yy new file mode 100644 index 000000000..0f8186d0d --- /dev/null +++ b/scripts/node_PCX_fn_surface_height/node_PCX_fn_surface_height.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_PCX_fn_surface_height", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "surface", + "path": "folders/nodes/data/PCX/surface.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_surface_height/node_outline.yy b/scripts/node_PCX_fn_surface_height/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_PCX_fn_surface_height/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.gml b/scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.gml new file mode 100644 index 000000000..9c9b2f3d7 --- /dev/null +++ b/scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.gml @@ -0,0 +1,12 @@ +function Node_PCX_fn_Surface_Width(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "Surface Width"; + + inputs[| 0] = nodeValue("Surface", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + static update = function() { + var _surf = inputs[| 0].getValue(); + outputs[| 0].setValue(new __funcTree("surface_get_width", _surf)); + } +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.yy b/scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.yy new file mode 100644 index 000000000..20df88d8c --- /dev/null +++ b/scripts/node_PCX_fn_surface_width/node_PCX_fn_surface_width.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_PCX_fn_surface_width", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "surface", + "path": "folders/nodes/data/PCX/surface.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_surface_width/node_outline.yy b/scripts/node_PCX_fn_surface_width/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_PCX_fn_surface_width/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_var/node_PCX_fn_var.gml b/scripts/node_PCX_fn_var/node_PCX_fn_var.gml new file mode 100644 index 000000000..291f09c9d --- /dev/null +++ b/scripts/node_PCX_fn_var/node_PCX_fn_var.gml @@ -0,0 +1,21 @@ +function Node_PCX_fn_var(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "Fn Variable"; + w = 64; + + inputs[| 0] = nodeValue("Default Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0); + + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + static update = function() { + var _def = inputs[| 0].getValue(); + + outputs[| 0].setValue(new __funcTree("≔", display_name, _def)); + } + + static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) { + var bbox = drawGetBbox(xx, yy, _s); + + draw_set_text(f_h5, fa_center, fa_center, COLORS._main_text); + draw_text_bbox(bbox, display_name); + } +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_var/node_PCX_fn_var.yy b/scripts/node_PCX_fn_var/node_PCX_fn_var.yy new file mode 100644 index 000000000..e22d0c12e --- /dev/null +++ b/scripts/node_PCX_fn_var/node_PCX_fn_var.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_PCX_fn_var", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "fn", + "path": "folders/nodes/data/PCX/fn.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_PCX_fn_var/node_outline.yy b/scripts/node_PCX_fn_var/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_PCX_fn_var/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_PCX_var/node_PCX_var.gml b/scripts/node_PCX_var/node_PCX_var.gml new file mode 100644 index 000000000..5cea8a4ae --- /dev/null +++ b/scripts/node_PCX_var/node_PCX_var.gml @@ -0,0 +1,16 @@ +function Node_PCX_var(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "Variable"; + + inputs[| 0] = nodeValue("Name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, ""); + + inputs[| 1] = nodeValue("Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, -1); + + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + static update = function() { + var _name = inputs[| 0].getValue(); + var _val = inputs[| 1].getValue(); + + outputs[| 0].setValue(new __funcTree("=", _name, _val)); + } +} \ No newline at end of file diff --git a/scripts/node_PCX_var/node_PCX_var.yy b/scripts/node_PCX_var/node_PCX_var.yy new file mode 100644 index 000000000..9ebaf2bca --- /dev/null +++ b/scripts/node_PCX_var/node_PCX_var.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_PCX_var", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "PCX", + "path": "folders/nodes/data/PCX.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_PCX_var/node_outline.yy b/scripts/node_PCX_var/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_PCX_var/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_collection/node_collection.gml b/scripts/node_collection/node_collection.gml index 2b7e6763a..a9a6ae374 100644 --- a/scripts/node_collection/node_collection.gml +++ b/scripts/node_collection/node_collection.gml @@ -79,6 +79,7 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc attributes.h = 128; tool_node = noone; + draw_input_overlay = true; array_push(attributeEditors, ["Edit separator", function() { return attributes.separator; }, button(function() { @@ -129,6 +130,7 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc } static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { + if(!draw_input_overlay) return; for(var i = custom_input_index; i < ds_list_size(inputs); i++) { var _in = inputs[| i]; var _show = _in.from.inputs[| 6].getValue(); @@ -344,7 +346,7 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc for( var i = custom_input_index; i < siz; i++ ) { var _in = inputs[| i]; - var _or = _in.from.inputs[| 5].getValue(); + var _or = _in.from.attributes.input_priority; ds_priority_add(ar, _in, _or); } @@ -373,7 +375,7 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc for( var i = custom_output_index; i < siz; i++ ) { var _out = outputs[| i]; - var _or = _out.from.inputs[| 1].getValue(); + var _or = _out.from.attributes.input_priority; ds_priority_add(ar, _out, _or); } diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index 44cf1092a..7cb529f09 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -8,6 +8,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x node_id = UUID_generate(); group = _group; + manual_deletable = true; destroy_when_upgroup = false; ds_list_add(PANEL_GRAPH.getNodeList(_group), self); @@ -71,6 +72,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x active_draw_index = -1; draw_droppable = false; + + junction_draw_pad_y = 32; #endregion #region ---- junctions ---- @@ -155,7 +158,6 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x error_noti_update = noone; error_update_enabled = false; manual_updated = false; - manual_deletable = true; #endregion #region ---- tools ---- @@ -230,8 +232,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } #endregion static setHeight = function() { #region - var _hi = ui(32); - var _ho = ui(32); + var _hi = ui(junction_draw_pad_y); + var _ho = ui(junction_draw_pad_y); for( var i = 0; i < ds_list_size(inputs); i++ ) if(inputs[| i].isVisible()) _hi += 24; @@ -250,6 +252,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x if(onSetDisplayName != noone) onSetDisplayName(); + + return self; } #endregion static setIsDynamicInput = function(_data_length = 1) { #region @@ -575,7 +579,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x } var inamo = input_display_list == -1? ds_list_size(inputs) : array_length(input_display_list); - var _in = yy + ui(32) * _s; + var _in = yy + ui(junction_draw_pad_y) * _s; for(var i = 0; i < inamo; i++) { var idx = getInputJunctionIndex(i); @@ -591,7 +595,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x var outamo = output_display_list == -1? ds_list_size(outputs) : array_length(output_display_list); xx = xx + w * _s; - _in = yy + ui(32) * _s; + _in = yy + ui(junction_draw_pad_y) * _s; for(var i = 0; i < outamo; i++) { var idx = getOutputJunctionIndex(i); jun = outputs[| idx]; diff --git a/scripts/node_dynamic_surface/node_dynamic_surface.gml b/scripts/node_dynamic_surface/node_dynamic_surface.gml new file mode 100644 index 000000000..68bb506e0 --- /dev/null +++ b/scripts/node_dynamic_surface/node_dynamic_surface.gml @@ -0,0 +1,48 @@ +function Node_DynaSurf(_x, _y, _group = noone) : Node_Collection(_x, _y, _group) constructor { + name = "Dynamic Surface"; + color = COLORS.node_blend_dynaSurf; + icon = THEME.pixel_builder; + + reset_all_child = true; + draw_input_overlay = false; + + outputs[| 0] = nodeValue("DynaSurf", self, JUNCTION_CONNECT.output, VALUE_TYPE.dynaSurf, noone); + + custom_input_index = ds_list_size(inputs); + custom_output_index = ds_list_size(outputs); + + if(!LOADING && !APPENDING && !CLONING) { + var _input = nodeBuild("Node_DynaSurf_In", -256, -32, self); + var _output = nodeBuild("Node_DynaSurf_Out", 256, -32, self); + + var _yy = -32 + 24; + var _nx = nodeBuild("Node_PCX_fn_var", 128, _yy, self).setDisplayName("x"); _output.inputs[| 1].setFrom(_nx .outputs[| 0]); _yy += 24; + var _ny = nodeBuild("Node_PCX_fn_var", 128, _yy, self).setDisplayName("y"); _output.inputs[| 2].setFrom(_ny .outputs[| 0]); _yy += 24; + var _nsx = nodeBuild("Node_PCX_fn_var", 128, _yy, self).setDisplayName("sx"); _output.inputs[| 3].setFrom(_nsx .outputs[| 0]); _yy += 24; + var _nsy = nodeBuild("Node_PCX_fn_var", 128, _yy, self).setDisplayName("sy"); _output.inputs[| 4].setFrom(_nsy .outputs[| 0]); _yy += 24; + var _nang = nodeBuild("Node_PCX_fn_var", 128, _yy, self).setDisplayName("angle"); _output.inputs[| 5].setFrom(_nang.outputs[| 0]); _yy += 24; + var _nclr = nodeBuild("Node_PCX_fn_var", 128, _yy, self).setDisplayName("color"); _output.inputs[| 6].setFrom(_nclr.outputs[| 0]); _yy += 24; + var _nalp = nodeBuild("Node_PCX_fn_var", 128, _yy, self).setDisplayName("alpha"); _output.inputs[| 7].setFrom(_nalp.outputs[| 0]); _yy += 24; + + _yy += 64; + var _outW = nodeBuild("Node_DynaSurf_Out_Width", 256, _yy, self) _yy += 64; + var _outH = nodeBuild("Node_DynaSurf_Out_Height", 256, _yy, self) _yy += 64; + UPDATE |= RENDER_TYPE.full; + } + + static update = function() { + var _dyna = new Compute_DynaSurf(); + for( var i = 0, n = ds_list_size(nodes); i < n; i++ ) { + var _n = nodes[| i]; + + if(is_instanceof(_n, Node_DynaSurf_Out)) + _dyna.drawFn = _n.outputs[| 0].getValue(); + if(is_instanceof(_n, Node_DynaSurf_Out_Width)) + _dyna.widthFn = _n.outputs[| 0].getValue(); + if(is_instanceof(_n, Node_DynaSurf_Out_Height)) + _dyna.heightFn = _n.outputs[| 0].getValue(); + } + + outputs[| 0].setValue(_dyna); + } +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface/node_dynamic_surface.yy b/scripts/node_dynamic_surface/node_dynamic_surface.yy new file mode 100644 index 000000000..71dc9be58 --- /dev/null +++ b/scripts/node_dynamic_surface/node_dynamic_surface.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_dynamic_surface", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "dynasurf", + "path": "folders/nodes/data/dynasurf.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface_in/node_dynamic_surface_in.gml b/scripts/node_dynamic_surface_in/node_dynamic_surface_in.gml new file mode 100644 index 000000000..5aa100025 --- /dev/null +++ b/scripts/node_dynamic_surface_in/node_dynamic_surface_in.gml @@ -0,0 +1,59 @@ +function Node_DynaSurf_In(_x, _y, _group = noone) : Node(_x, _y, _group) constructor { + name = "Input"; + w = 96; + + manual_deletable = false; + destroy_when_upgroup = true; + color = COLORS.node_blend_collection; + + inParent = undefined; + + attributes.input_priority = group == noone? 0 : ds_list_size(group.inputs); + array_push(attributeEditors, "Group"); + array_push(attributeEditors, ["Input Order", function() { return attributes.input_priority; }, + new textBox(TEXTBOX_INPUT.number, function(val) { + attributes.input_priority = val; + group.setHeight(); + group.sortIO(); + })]); + + outputs[| 0] = nodeValue("Value", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + static createInput = function(override_order = true) { #region + if(group == noone || !is_struct(group)) return noone; + + if(override_order) + attributes.input_priority = ds_list_size(group.inputs); + + if(!is_undefined(inParent)) + ds_list_remove(group.inputs, inParent); + + inParent = nodeValue("Value", group, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone) + .uncache() + .setVisible(true, true); + inParent.from = self; + + ds_list_add(group.inputs, inParent); + group.setHeight(); + group.sortIO(); + + return inParent; + } #endregion + + if(!LOADING && !APPENDING) createInput(); + + static step = function() { #region + if(is_undefined(inParent)) return; + + if(inParent.name != display_name) { + inParent.name = display_name; + group.inputMap[? string_replace_all(display_name, " ", "_")] = inParent; + } + } #endregion + + static update = function(frame = PROJECT.animator.current_frame) { + if(is_undefined(inParent)) return; + var _val = inParent.getValue(); + outputs[| 0].setValue(new __funcTree("", _val)); + } +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface_in/node_dynamic_surface_in.yy b/scripts/node_dynamic_surface_in/node_dynamic_surface_in.yy new file mode 100644 index 000000000..28c55011b --- /dev/null +++ b/scripts/node_dynamic_surface_in/node_dynamic_surface_in.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_dynamic_surface_in", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "dynasurf", + "path": "folders/nodes/data/dynasurf.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out/node_dynamic_surface_out.gml b/scripts/node_dynamic_surface_out/node_dynamic_surface_out.gml new file mode 100644 index 000000000..338bafc3f --- /dev/null +++ b/scripts/node_dynamic_surface_out/node_dynamic_surface_out.gml @@ -0,0 +1,42 @@ +function Node_DynaSurf_Out(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "Output"; + + manual_deletable = false; + destroy_when_upgroup = true; + + inputs[| 0] = nodeValue("Surface", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 1] = nodeValue("x", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 2] = nodeValue("y", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 3] = nodeValue("sx", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 4] = nodeValue("sy", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 5] = nodeValue("angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 6] = nodeValue("color", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + inputs[| 7] = nodeValue("alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + input_display_list = [ 0, + ["Transform", false], 1, 2, 3, 4, 5, + ["Draw", false], 6, 7, + ]; + + static update = function() { + var _surf = inputs[| 0].getValue(); + var _x = inputs[| 1].getValue(); + var _y = inputs[| 2].getValue(); + var _sx = inputs[| 3].getValue(); + var _sy = inputs[| 4].getValue(); + var _ang = inputs[| 5].getValue(); + var _clr = inputs[| 6].getValue(); + var _alp = inputs[| 7].getValue(); + + outputs[| 0].setValue(new __funcTree("draw", [ _surf, _x, _y, _sx, _sy, _ang, _clr, _alp ])); + } +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out/node_dynamic_surface_out.yy b/scripts/node_dynamic_surface_out/node_dynamic_surface_out.yy new file mode 100644 index 000000000..71714bddf --- /dev/null +++ b/scripts/node_dynamic_surface_out/node_dynamic_surface_out.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_dynamic_surface_out", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "dynasurf", + "path": "folders/nodes/data/dynasurf.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out/node_outline.yy b/scripts/node_dynamic_surface_out/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_dynamic_surface_out/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.gml b/scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.gml new file mode 100644 index 000000000..a8ea183bc --- /dev/null +++ b/scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.gml @@ -0,0 +1,17 @@ +function Node_DynaSurf_Out_Height(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "getHeight"; + + manual_deletable = false; + destroy_when_upgroup = true; + + inputs[| 0] = nodeValue("Height", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + input_display_list = [ 0 ]; + + static update = function() { + var _h = inputs[| 0].getValue(); + outputs[| 0].setValue(_h); + } +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.yy b/scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.yy new file mode 100644 index 000000000..ffdd4f31c --- /dev/null +++ b/scripts/node_dynamic_surface_out_height/node_dynamic_surface_out_height.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_dynamic_surface_out_height", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "dynasurf", + "path": "folders/nodes/data/dynasurf.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out_height/node_outline.yy b/scripts/node_dynamic_surface_out_height/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_dynamic_surface_out_height/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.gml b/scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.gml new file mode 100644 index 000000000..b1e858180 --- /dev/null +++ b/scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.gml @@ -0,0 +1,17 @@ +function Node_DynaSurf_Out_Width(_x, _y, _group = noone) : Node_PCX(_x, _y, _group) constructor { + name = "getWidth"; + + manual_deletable = false; + destroy_when_upgroup = true; + + inputs[| 0] = nodeValue("Width", self, JUNCTION_CONNECT.input, VALUE_TYPE.PCXnode, noone); + + outputs[| 0] = nodeValue("PCX", self, JUNCTION_CONNECT.output, VALUE_TYPE.PCXnode, noone); + + input_display_list = [ 0 ]; + + static update = function() { + var _w = inputs[| 0].getValue(); + outputs[| 0].setValue(_w); + } +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.yy b/scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.yy new file mode 100644 index 000000000..2855cc070 --- /dev/null +++ b/scripts/node_dynamic_surface_out_width/node_dynamic_surface_out_width.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_dynamic_surface_out_width", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "dynasurf", + "path": "folders/nodes/data/dynasurf.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_dynamic_surface_out_width/node_outline.yy b/scripts/node_dynamic_surface_out_width/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_dynamic_surface_out_width/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_group_input/node_group_input.gml b/scripts/node_group_input/node_group_input.gml index fc36c86fd..9a6b840db 100644 --- a/scripts/node_group_input/node_group_input.gml +++ b/scripts/node_group_input/node_group_input.gml @@ -4,14 +4,23 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru color = COLORS.node_blend_collection; previewable = false; auto_height = false; - input_fix_len = -1; inParent = undefined; + attributes.input_priority = group == noone? 0 : ds_list_size(group.inputs); + array_push(attributeEditors, "Group"); + array_push(attributeEditors, ["Input Order", function() { return attributes.input_priority; }, + new textBox(TEXTBOX_INPUT.number, function(val) { + attributes.input_priority = val; + group.setHeight(); + group.sortIO(); + })]); + w = 96; h = 32 + 24; min_h = h; + #region data data_type_list = [ "Integer", "Float", "Boolean", "Color", "Surface", "File Path", "Curve", "Text", "Object", "Node", "3D object", "Any", "Path", "Particle", "Rigidbody Object", @@ -46,6 +55,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru /*Mesh*/ [ "Default", ], /*Trigger*/ [ "Default", ], ]; + #endregion inputs[| 0] = nodeValue("Display type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) .setDisplay(VALUE_DISPLAY.enum_scroll, display_list[0]) @@ -95,7 +105,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru .rejectArray(); input_display_list = [ - ["Display", false], 5, 6, + ["Display", false], 6, ["Data", false], 2, 0, 4, 1, 7, 3, 8, ]; @@ -109,12 +119,12 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru attributes.inherit_name = false; } - static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) { #region if(inParent.isArray()) return; inParent.drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny); - } + } #endregion - static onValueUpdate = function(index = 0) { + static onValueUpdate = function(index = 0) { #region if(is_undefined(inParent)) return; var _dtype = inputs[| 0].getValue(); @@ -232,17 +242,13 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru if(index == 5) group.sortIO(); - } + } #endregion - static createInput = function(override_order = true) { + static createInput = function(override_order = true) { #region if(group == noone || !is_struct(group)) return noone; - if(override_order) { - input_fix_len = ds_list_size(group.inputs); - inputs[| 5].setValue(input_fix_len); - } else { - input_fix_len = inputs[| 5].getValue(); - } + if(override_order) + attributes.input_priority = ds_list_size(group.inputs); if(!is_undefined(inParent)) ds_list_remove(group.inputs, inParent); @@ -260,14 +266,14 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru onValueUpdate(0); return inParent; - } + } #endregion if(!LOADING && !APPENDING) createInput(); dtype = -1; range = 0; - static step = function() { + static step = function() { #region if(is_undefined(inParent)) return; if(inParent.name != display_name) { @@ -295,11 +301,11 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru doTrigger = 0; } } - } + } #endregion PATCH_STATIC - static update = function(frame = PROJECT.animator.current_frame) { + static update = function(frame = PROJECT.animator.current_frame) { #region if(is_undefined(inParent)) return; var _dstype = inputs[| 0].getValue(); @@ -330,20 +336,21 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru inputs[| 4].setVisible(true); break; } - } + } #endregion - static postDeserialize = function() { + static postDeserialize = function() { #region createInput(false); var _inputs = load_map.inputs; inputs[| 5].applyDeserialize(_inputs[5], load_scale); + if(PROJECT.version < 11520) attributes.input_priority = inputs[| 5].getValue(); group.sortIO(); inputs[| 2].applyDeserialize(_inputs[2], load_scale); onValueUpdate(2); - } + } #endregion - static applyDeserialize = function() { + static applyDeserialize = function() { #region var _inputs = load_map.inputs; var amo = min(array_length(_inputs), ds_list_size(inputs)); @@ -354,14 +361,14 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru inParent.name = name; onValueUpdate(0); - } + } #endregion - static onDestroy = function() { + static onDestroy = function() { #region if(is_undefined(inParent)) return; ds_list_remove(group.inputs, inParent); - } + } #endregion - static ungroup = function() { + static ungroup = function() { #region var fr = inParent.value_from; for( var i = 0; i < ds_list_size(outputs[| 0].value_to); i++ ) { @@ -370,5 +377,5 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru to.setFrom(fr); } - } + } #endregion } \ No newline at end of file diff --git a/scripts/node_group_output/node_group_output.gml b/scripts/node_group_output/node_group_output.gml index f714d52b6..4302475c6 100644 --- a/scripts/node_group_output/node_group_output.gml +++ b/scripts/node_group_output/node_group_output.gml @@ -5,6 +5,15 @@ function Node_Group_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constr previewable = false; auto_height = false; + attributes.input_priority = group == noone? 0 : ds_list_size(group.inputs); + array_push(attributeEditors, "Group"); + array_push(attributeEditors, ["Input Order", function() { return attributes.input_priority; }, + new textBox(TEXTBOX_INPUT.number, function(val) { + attributes.input_priority = val; + group.setHeight(); + group.sortIO(); + })]); + w = 96; h = 32 + 24; min_h = h; @@ -74,12 +83,8 @@ function Node_Group_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constr if(group == noone) return; if(!is_struct(group)) return; - if(override_order) { - output_index = ds_list_size(group.outputs); - inputs[| 1].setValue(output_index); - } else { - output_index = inputs[| 1].getValue(); - } + if(override_order) + attributes.input_priority = ds_list_size(group.outputs); if(!is_undefined(outParent)) ds_list_remove(group.outputs, outParent); @@ -136,6 +141,7 @@ function Node_Group_Output(_x, _y, _group = noone) : Node(_x, _y, _group) constr var _inputs = load_map.inputs; inputs[| 1].applyDeserialize(_inputs[1], load_scale); + if(PROJECT.version < 11520) attributes.input_priority = inputs[| 1].getValue(); group.sortIO(); } diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index b6061080b..4b9e4e280 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -46,11 +46,12 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { } #region nodes - globalvar ALL_NODES, ALL_NODE_LIST, NODE_CATEGORY, NODE_PAGE_DEFAULT, NODE_PB_CATEGORY; + globalvar ALL_NODES, ALL_NODE_LIST, NODE_CATEGORY, NODE_PAGE_DEFAULT, NODE_PB_CATEGORY, NODE_PCX_CATEGORY; ALL_NODES = ds_map_create(); ALL_NODE_LIST = ds_list_create(); NODE_CATEGORY = ds_list_create(); NODE_PB_CATEGORY = ds_list_create(); + NODE_PCX_CATEGORY = ds_list_create(); function nodeBuild(_name, _x, _y, _group = PANEL_GRAPH.getCurrentContext()) { if(!ds_map_exists(ALL_NODES, _name)) { @@ -87,6 +88,10 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { ds_list_add(NODE_PB_CATEGORY, { name: name, list: list, filter: filter }); } + function addNodePCXCatagory(name, list, filter = []) { + ds_list_add(NODE_PCX_CATEGORY, { name: name, list: list, filter: filter }); + } + function __initNodes() { var favPath = DIRECTORY + "Nodes/fav.json"; global.FAV_NODES = file_exists(favPath)? json_load_struct(favPath) : []; @@ -584,7 +589,8 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { addNodeObject(values, "Atlas Set", s_node_atlas_set, "Node_Atlas_Set", [1, Node_Atlas_Set]).setVersion(1141); ds_list_add(values, "Surface"); - addNodeObject(values, "IsoSurf", s_node_surface_from_buffer, "Node_IsoSurf", [1, Node_IsoSurf]).setVersion(11520); + addNodeObject(values, "Dynamic Surface", s_node_surface_from_buffer, "Node_DynaSurf", [1, Node_DynaSurf]).setVersion(11520); + addNodeObject(values, "IsoSurf", s_node_surface_from_buffer, "Node_IsoSurf", [1, Node_IsoSurf]).setVersion(11520); addNodeObject(values, "Surface from Buffer", s_node_surface_from_buffer, "Node_Surface_From_Buffer", [1, Node_Surface_From_Buffer], ["buffer to surface"], "Create surface from buffer.").setVersion(1146); ds_list_add(values, "Buffer"); @@ -743,6 +749,33 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { addNodeObject(pb_arr, "Array Remove", s_node_array_remove, "Node_Array_Remove", [1, Node_Array_Remove], ["remove array", "delete array", "array delete"]).setVersion(1120); #endregion + //////////////////////////////////////////////////////////////// PCX NODES //////////////////////////////////////////////////////////////// + + 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]); + addNodeObject(pcx_var, "Fn Variable", s_node_array, "Node_PCX_fn_var", [1, Node_PCX_fn_var]); + #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]); + + ds_list_add(pcx_fn, "Numbers"); + addNodeObject(pcx_fn, "Math", s_node_array, "Node_PCX_fn_Math", [1, Node_PCX_fn_Math]); + addNodeObject(pcx_fn, "Random", s_node_array, "Node_PCX_fn_Random", [1, Node_PCX_fn_Random]); + + ds_list_add(pcx_fn, "Surface"); + addNodeObject(pcx_fn, "Surface Width", s_node_array, "Node_PCX_fn_Surface_Width", [1, Node_PCX_fn_Surface_Width]); + addNodeObject(pcx_fn, "Surface Height", s_node_array, "Node_PCX_fn_Surface_Height", [1, Node_PCX_fn_Surface_Height]); + + ds_list_add(pcx_fn, "Array"); + addNodeObject(pcx_fn, "Array Get", s_node_array, "Node_PCX_Array_Get", [1, Node_PCX_Array_Get]); + addNodeObject(pcx_fn, "Array Set", s_node_array, "Node_PCX_Array_Set", [1, Node_PCX_Array_Set]); + #endregion + + //////////////////////////////////////////////////////////////// HIDDENS //////////////////////////////////////////////////////////////// + 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]); @@ -756,6 +789,11 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { addNodeObject(hid, "Sort Output", s_node_grid_hex_noise, "Node_Iterator_Sort_Output", [1, Node_Iterator_Sort_Output]); addNodeObject(hid, "Onion Skin", s_node_cache, "Node_Onion_Skin", [1, Node_Onion_Skin]).setVersion(1147); addNodeObject(hid, "Pixel Builder", s_node_pixel_builder, "Node_Pixel_Builder", [1, Node_Pixel_Builder]).setVersion(1150); + + addNodeObject(hid, "Input", s_node_pixel_builder, "Node_DynaSurf_In", [1, Node_DynaSurf_In]); + addNodeObject(hid, "Output", s_node_pixel_builder, "Node_DynaSurf_Out", [1, Node_DynaSurf_Out]); + addNodeObject(hid, "getWidth", s_node_pixel_builder, "Node_DynaSurf_Out_Width", [1, Node_DynaSurf_Out_Width]); + addNodeObject(hid, "getHeight", s_node_pixel_builder, "Node_DynaSurf_Out_Height", [1, Node_DynaSurf_Out_Height]); #endregion } #endregion diff --git a/scripts/node_scatter/node_scatter.gml b/scripts/node_scatter/node_scatter.gml index 204e56a9f..0d91c7c4a 100644 --- a/scripts/node_scatter/node_scatter.gml +++ b/scripts/node_scatter/node_scatter.gml @@ -12,8 +12,8 @@ function Node_Scatter(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c inputs[| 3] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1, 1 ] ) .setDisplay(VALUE_DISPLAY.vector_range); - inputs[| 4] = nodeValue("Angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [0, 0]) - .setDisplay(VALUE_DISPLAY.rotation_range); + inputs[| 4] = nodeValue("Angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 0, 0, 0, 0, 0 ]) + .setDisplay(VALUE_DISPLAY.rotation_random); inputs[| 5] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ DEF_SURF_W / 2, DEF_SURF_H / 2, DEF_SURF_W / 2, DEF_SURF_H / 2, AREA_SHAPE.rectangle ]) .setDisplay(VALUE_DISPLAY.area, function() { return inputs[| 1].getValue(); }); @@ -221,7 +221,7 @@ function Node_Scatter(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c _scy *= _v; } - var _r = (_pint? point_direction(_area[0], _area[1], _x, _y) : 0) + random_range_seed(_rota[0], _rota[1], posS); posS++; + var _r = (_pint? point_direction(_area[0], _area[1], _x, _y) : 0) + angle_random_eval(_rota, posS); posS++; if(vRot && _v != noone) _r *= _v; diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index c12ae09cf..86fe24e27 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -53,6 +53,7 @@ enum VALUE_TYPE { d3Material = 30, dynaSurf = 31, + PCXnode = 32, action = 99, } @@ -66,6 +67,7 @@ enum VALUE_DISPLAY { enum_button, rotation, rotation_range, + rotation_random, slider, slider_range, @@ -161,6 +163,7 @@ function value_color(i) { #region $ffa64d, //d3Scene $976bff, //d3Material $976bff, //dynaSurf + #c2c2d1, //PCX ]; if(i == 99) return $5dde8f; @@ -207,6 +210,8 @@ function value_bit(i) { #region case VALUE_TYPE.d3Scene : return 1 << 29 | 1 << 30; case VALUE_TYPE.d3Material : return 1 << 33; + case VALUE_TYPE.PCXnode : return 1 << 34; + case VALUE_TYPE.any : return ~0 & ~(1 << 32); } return 0; @@ -410,7 +415,13 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru _initName = _name; name = __txt_junction_name(instanceof(node), type, index, _name); name = _name; - + + switch(type) { + case VALUE_TYPE.PCXnode : + accept_array = false; + break; + } + static updateName = function() { internalName = string_lower(string_replace_all(name, " ", "_")); } updateName(); @@ -495,7 +506,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru #endregion #region ---- inspector ---- - visible = _connect == JUNCTION_CONNECT.output || _type == VALUE_TYPE.surface || _type == VALUE_TYPE.path; + visible = _connect == JUNCTION_CONNECT.output || _type == VALUE_TYPE.surface || _type == VALUE_TYPE.path || _type == VALUE_TYPE.PCXnode; show_in_inspector = true; display_type = VALUE_DISPLAY._default; @@ -613,7 +624,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru } #endregion static isAnimable = function() { #region - //if(type == VALUE_TYPE.gradient) return false; + if(type == VALUE_TYPE.PCXnode) return false; if(display_type == VALUE_DISPLAY.text_array) return false; return true; } #endregion @@ -735,14 +746,19 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru break; #endregion case VALUE_DISPLAY.rotation_range : #region editWidget = new rotatorRange(function(index, val) { - //var _val = animator.getValue(); - //_val[index] = round(val); return setValueDirect(val, index); } ); for( var i = 0, n = array_length(animators); i < n; i++ ) animators[i].suffix = " " + array_safe_get(global.displaySuffix_Range, i); + extract_node = "Node_Vector2"; + break; #endregion + case VALUE_DISPLAY.rotation_random: #region + editWidget = new rotatorRandom(function(index, val) { + return setValueDirect(val, index); + } ); + extract_node = "Node_Vector2"; break; #endregion case VALUE_DISPLAY.slider : #region diff --git a/scripts/panel_preview/panel_preview.gml b/scripts/panel_preview/panel_preview.gml index 1b288f388..0bc643eca 100644 --- a/scripts/panel_preview/panel_preview.gml +++ b/scripts/panel_preview/panel_preview.gml @@ -816,19 +816,12 @@ function Panel_Preview() : PanelContent() constructor { d3_scene_light0.shadow_map_scale = d3_view_camera.focus_dist * 2; var _prev_obj = _prev_node.getPreviewObjects(); - d3_scene_light0.shadowProjectVertex(d3_scene_preview, _prev_obj); + d3_scene_light0.submitShadow(d3_scene_preview, _prev_obj); for( var i = 0, n = array_length(_prev_obj); i < n; i++ ) { var _prev = _prev_obj[i]; - if(_prev == noone) - continue; - if(!is_instanceof(_prev, __3dGroup)) - continue; - - _prev.map(function(object, params) { - if(!is_instanceof(object, __3dLight)) return; - object.shadowProjectVertex(params.scene, params.objs); - }, { scene: d3_scene_preview, objs:_prev_obj }); + if(_prev == noone) continue; + _prev.submitShadow(d3_scene_preview, _prev_obj); } } #endregion @@ -912,15 +905,10 @@ function Panel_Preview() : PanelContent() constructor { BLEND_MULTIPLY draw_surface_safe(d3_deferData.ssao); BLEND_NORMAL - - //draw_clear(c_white); - //draw_surface_safe(d3_scene_preview.geometry_data[2]); break; case 1 : draw_surface_safe(d3_surface_normal); break; case 2 : draw_surface_safe(d3_surface_depth); break; } - - draw_surface_stretched_safe(d3_scene_light0.shadow_map, 64, 64, 128, 128); #endregion #region outline diff --git a/scripts/pcx_ast/pcx_ast.gml b/scripts/pcx_ast/pcx_ast.gml index 1c78f9456..1549e4546 100644 --- a/scripts/pcx_ast/pcx_ast.gml +++ b/scripts/pcx_ast/pcx_ast.gml @@ -2,26 +2,36 @@ global.EVALUATE_HEAD = noone; global.FUNCTIONS = ds_map_create(); - global.FUNCTIONS[? "sin"] = [ ["radian"], function(val) { return sin(val[0]); } ]; - global.FUNCTIONS[? "cos"] = [ ["radian"], function(val) { return cos(val[0]); } ]; - global.FUNCTIONS[? "tan"] = [ ["radian"], function(val) { return tan(val[0]); } ]; + global.FUNCTIONS[? "sin"] = [ ["radian"], function(val) { return sin(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "cos"] = [ ["radian"], function(val) { return cos(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "tan"] = [ ["radian"], function(val) { return tan(array_safe_get(val, 0)); } ]; - global.FUNCTIONS[? "arcsin"] = [ ["number"], function(val) { return arcsin(val[0]); } ]; - global.FUNCTIONS[? "arccos"] = [ ["number"], function(val) { return arccos(val[0]); } ]; - global.FUNCTIONS[? "arctan"] = [ ["number"], function(val) { return arctan(val[0]); } ]; + global.FUNCTIONS[? "dsin"] = [ ["degree"], function(val) { return dsin(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "dcos"] = [ ["degree"], function(val) { return dcos(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "dtan"] = [ ["degree"], function(val) { return dtan(array_safe_get(val, 0)); } ]; - global.FUNCTIONS[? "abs"] = [ ["number"], function(val) { return abs(val[0]); } ]; - global.FUNCTIONS[? "round"] = [ ["number"], function(val) { return round(val[0]); } ]; - global.FUNCTIONS[? "ceil"] = [ ["number"], function(val) { return ceil(val[0]); } ]; - global.FUNCTIONS[? "floor"] = [ ["number"], function(val) { return floor(val[0]); } ]; - global.FUNCTIONS[? "fract"] = [ ["number"], function(val) { return frac(val[0]); } ]; - global.FUNCTIONS[? "sign"] = [ ["number"], function(val) { return sign(val[0]); } ]; + global.FUNCTIONS[? "arcsin"] = [ ["x"], function(val) { return arcsin(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "arccos"] = [ ["x"], function(val) { return arccos(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "arctan"] = [ ["x"], function(val) { return arctan(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "arctan2"] = [ ["y", "x"], function(val) { return arctan2(array_safe_get(val, 0), array_safe_get(val, 1)); } ]; - global.FUNCTIONS[? "min"] = [ ["number", "number"], function(val) { return min(array_safe_get(val, 0), array_safe_get(val, 1)); } ]; - global.FUNCTIONS[? "max"] = [ ["number", "number"], function(val) { return max(array_safe_get(val, 0), array_safe_get(val, 1)); } ]; - global.FUNCTIONS[? "clamp"] = [ ["number", "min = 0", "max = 1"], function(val) { return clamp(array_safe_get(val, 0), array_safe_get(val, 1, 0), array_safe_get(val, 2, 1)); } ]; + global.FUNCTIONS[? "darcsin"] = [ ["x"], function(val) { return darcsin(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "darccos"] = [ ["x"], function(val) { return darccos(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "darctan"] = [ ["x"], function(val) { return darctan(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "darctan2"] = [ ["y", "x"], function(val) { return darctan2(array_safe_get(val, 0), array_safe_get(val, 1)); } ]; - global.FUNCTIONS[? "lerp"] = [ ["number_0", "number_1", "amount"], function(val) { return lerp(array_safe_get(val, 0), array_safe_get(val, 1), array_safe_get(val, 2)); } ]; + global.FUNCTIONS[? "abs"] = [ ["x"], function(val) { return abs(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "round"] = [ ["x"], function(val) { return round(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "ceil"] = [ ["x"], function(val) { return ceil(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "floor"] = [ ["x"], function(val) { return floor(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "fract"] = [ ["x"], function(val) { return frac(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "sign"] = [ ["x"], function(val) { return sign(array_safe_get(val, 0)); } ]; + + global.FUNCTIONS[? "min"] = [ ["x", "y"], function(val) { return min(array_safe_get(val, 0), array_safe_get(val, 1)); } ]; + global.FUNCTIONS[? "max"] = [ ["x", "y"], function(val) { return max(array_safe_get(val, 0), array_safe_get(val, 1)); } ]; + global.FUNCTIONS[? "clamp"] = [ ["x", "min = 0", "max = 1"], function(val) { return clamp(array_safe_get(val, 0), array_safe_get(val, 1, 0), array_safe_get(val, 2, 1)); } ]; + + global.FUNCTIONS[? "lerp"] = [ ["x", "y", "amount"], function(val) { return lerp(array_safe_get(val, 0), array_safe_get(val, 1), array_safe_get(val, 2)); } ]; global.FUNCTIONS[? "wiggle"] = [ ["time", "frequency", "octave = 1", "seed = 0"], function(val) { return wiggle(0, 1, PROJECT.animator.frameTotal / array_safe_get(val, 1), @@ -51,10 +61,19 @@ return 0; } ]; - global.FUNCTIONS[? "string"] = [ ["value"], function(val) { return string(val[0]); } ]; - global.FUNCTIONS[? "number"] = [ ["value"], function(val) { return toNumber(val[0]); } ]; - global.FUNCTIONS[? "chr"] = [ ["number"], function(val) { return chr(val[0]); } ]; - global.FUNCTIONS[? "ord"] = [ ["char"], function(val) { return ord(val[0]); } ]; + global.FUNCTIONS[? "string"] = [ ["value"], function(val) { return string(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "number"] = [ ["value"], function(val) { return toNumber(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "chr"] = [ ["x"], function(val) { return chr(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "ord"] = [ ["char"], function(val) { return ord(array_safe_get(val, 0)); } ]; + + global.FUNCTIONS[? "draw"] = [ ["surface", "x = 0", "y = 0", "xs = 1", "ys = 1", "rot = 0", "color = white", "alpha = 1"], + function(val) { return draw_surface_ext_safe(array_safe_get(val, 0, -1), array_safe_get(val, 1, 0), array_safe_get(val, 2, 0), + array_safe_get(val, 3, 1), array_safe_get(val, 4, 1), array_safe_get(val, 5, 0), + array_safe_get(val, 6, c_white), array_safe_get(val, 7, 1)); + } ]; + + global.FUNCTIONS[? "surface_get_width"] = [ ["surface"], function(val) { return surface_get_width_safe(array_safe_get(val, 0)); } ]; + global.FUNCTIONS[? "surface_get_height"] = [ ["surface"], function(val) { return surface_get_height_safe(array_safe_get(val, 0)); } ]; globalvar PROJECT_VARIABLES; PROJECT_VARIABLES = {}; @@ -87,7 +106,7 @@ animated } - function __funcList() constructor { + function __funcList() constructor { #region funcTrees = []; static addFunction = function(fn) { @@ -119,9 +138,9 @@ return val; } - } + } #endregion - function __funcIf() constructor { + function __funcIf() constructor { #region condition = noone; if_true = new __funcList(); if_false = new __funcList(); @@ -149,9 +168,9 @@ if(res) return if_true == noone? 0 : if_true.eval(params); else return if_false == noone? 0 : if_false.eval(params); } - } + } #endregion - function __funcFor() constructor { + function __funcFor() constructor { #region itr_array = false; cond_init = noone; @@ -213,31 +232,29 @@ } } } - } + } #endregion - function __funcTree(symbol, l = noone, r = noone) constructor { + function __funcTree(symbol, l = noone, r = noone) constructor { #region self.symbol = symbol; self.l = l; self.r = r; dependency = []; - static _string = function(str) { + static _string = function(str) { #region return string_char_at(str, 1) == "\"" && string_char_at(str, string_length(str)) == "\""; - } + } #endregion - static _string_trim = function(str) { + static _string_trim = function(str) { #region return string_trim(str, [ "\"" ]); - } + } #endregion - static getVal = function(val, params = {}, getRaw = false) { + static getVal = function(val, params = {}, getRaw = false) { #region if(is_struct(val)) return val.eval(params, getRaw); if(is_real(val)) return val; if(getRaw) return val; if(is_string(val)) val = string_trim(val); - //printIf(global.LOG_EXPRESSION, $" [ get struct {params}[{val}] ]"); - if(struct_has(params, val)) return struct_try_get(params, val); @@ -247,9 +264,9 @@ return _string_trim(val); return nodeGetData(val); - } + } #endregion - static _validate = function(val) { + static _validate = function(val) { #region if(is_real(val)) return true; if(is_string(val)) return true; if(is_struct(val)) return val.validate(); @@ -268,9 +285,9 @@ array_push_unique(dependency, strs[0]); return true; - } + } #endregion - static validate = function() { + static validate = function() { #region dependency = []; if(ds_map_exists(global.FUNCTIONS, symbol)) { @@ -287,9 +304,9 @@ } return _validate(l) && _validate(r); - } + } #endregion - static _isAnimated = function(val) { + static _isAnimated = function(val) { #region if(is_real(val)) return EXPRESS_TREE_ANIM.none; if(is_struct(val)) return val._isAnimated(); @@ -300,18 +317,18 @@ } return EXPRESS_TREE_ANIM.none; - } + } #endregion - static isAnimated = function() { + static isAnimated = function() { #region var anim = EXPRESS_TREE_ANIM.none; anim = max(anim, _isAnimated(l)); if(symbol != "@") anim = max(anim, _isAnimated(r)); return anim; - } + } #endregion - static eval = function(params = {}, isLeft = false) { + static eval = function(params = {}, isLeft = false) { #region if(ds_map_exists(global.FUNCTIONS, symbol)) { if(!is_array(l)) return 0; @@ -369,6 +386,10 @@ params[$ v1] = v2; res = v2; } + } else if(symbol == "≔") { // function default replacement + if(!struct_exists(params, v1)) + params[$ v1] = v2; + res = params[$ v1]; } else if(is_array(v1) && !is_array(v2)) { // evaluate value res = array_create(array_length(v1)); for( var i = 0, n = array_length(res); i < n; i++ ) @@ -413,9 +434,20 @@ } return res; - } + } #endregion - static eval_real = function(v1, v2, _symbol = symbol) { + static evalFn = function(params) { #region + if(!ds_map_exists(global.FUNCTIONS, symbol)) return; + + if(!is_array(params)) return 0; + + var _fn = global.FUNCTIONS[? symbol]; + var _ev = _fn[1]; + var res = _ev(params); + return res; + } #endregion + + static eval_real = function(v1, v2, _symbol = symbol) { #region switch(_symbol) { case "+": case "⊕": @@ -445,22 +477,14 @@ case "≥": return (is_real(v1) && is_real(v2))? v1 >= v2 : 0; case ">": return (is_real(v1) && is_real(v2))? v1 > v2 : 0; case "<": return (is_real(v1) && is_real(v2))? v1 < v2 : 0; - - case "sin" : return is_real(v1)? sin(v1) : 0; - case "cos" : return is_real(v1)? cos(v1) : 0; - case "tan" : return is_real(v1)? tan(v1) : 0; - case "abs" : return is_real(v1)? abs(v1) : 0; - case "round" : return is_real(v1)? round(v1) : 0; - case "ceil" : return is_real(v1)? ceil(v1) : 0; - case "floor" : return is_real(v1)? floor(v1) : 0; } return v1; - } - } + } #endregion + } #endregion - function evaluateFunction(fx, params = {}) { + function evaluateFunction(fx, params = {}) { #region if(isNumber(fx)) return toNumber(fx); return evaluateFunctionList(fx).eval(params); - } + } #endregion #endregion \ No newline at end of file diff --git a/scripts/pcx_parse/pcx_parse.gml b/scripts/pcx_parse/pcx_parse.gml index 51e6627cd..8ca66f2bd 100644 --- a/scripts/pcx_parse/pcx_parse.gml +++ b/scripts/pcx_parse/pcx_parse.gml @@ -8,7 +8,7 @@ global.EQUATION_PRES[? "*"] = 2; global.EQUATION_PRES[? "/"] = 2; global.EQUATION_PRES[? "%"] = 2; - global.EQUATION_PRES[? "$"] = 3; + global.EQUATION_PRES[? "$"] = 3; //power global.EQUATION_PRES[? "&"] = 5; global.EQUATION_PRES[? "|"] = 4; diff --git a/scripts/real_comparison/real_comparison.yy b/scripts/real_comparison/real_comparison.yy index 20c82ac01..0acc75f69 100644 --- a/scripts/real_comparison/real_comparison.yy +++ b/scripts/real_comparison/real_comparison.yy @@ -5,7 +5,7 @@ "isCompatibility": false, "isDnD": false, "parent": { - "name": "PCX", - "path": "folders/functions/PCX.yy", + "name": "value", + "path": "folders/functions/value.yy", }, } \ No newline at end of file diff --git a/scripts/rotatorRandom/rotator.yy b/scripts/rotatorRandom/rotator.yy new file mode 100644 index 000000000..4fc21f0fe --- /dev/null +++ b/scripts/rotatorRandom/rotator.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "widgets", + "path": "folders/widgets/widgets.yy", + }, + "resourceVersion": "1.0", + "name": "rotator", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/rotatorRandom/rotatorRandom.gml b/scripts/rotatorRandom/rotatorRandom.gml new file mode 100644 index 000000000..3882503f2 --- /dev/null +++ b/scripts/rotatorRandom/rotatorRandom.gml @@ -0,0 +1,413 @@ +function rotatorRandom(_onModify) : widget() constructor { + onModify = _onModify; + + dragging = -1; + drag_sv = 0; + drag_sa = 0; + + mode = 0; + tb_min_0 = new textBox(TEXTBOX_INPUT.number, function(val) { return onModify(1, val); } ).setSlidable(true, 1); + tb_max_0 = new textBox(TEXTBOX_INPUT.number, function(val) { return onModify(2, val); } ).setSlidable(true, 1); + tb_min_1 = new textBox(TEXTBOX_INPUT.number, function(val) { return onModify(3, val); } ).setSlidable(true, 1); + tb_max_1 = new textBox(TEXTBOX_INPUT.number, function(val) { return onModify(4, val); } ).setSlidable(true, 1); + + tooltip = new tooltipSelector("Mode", ["Range", "Span", "Double Range", "Double Span"]); + + static setInteract = function(interactable = noone) { + self.interactable = interactable; + tb_min_0.interactable = interactable; + tb_max_0.interactable = interactable; + + if(mode == 2 || mode == 3) tb_min_1.interactable = interactable; + if(mode == 2) tb_max_1.interactable = interactable; + } + + static register = function(parent = noone) { + tb_min_0.register(parent); + tb_max_0.register(parent); + + if(mode == 2 || mode == 3) tb_min_1.register(parent); + if(mode == 2) tb_max_1.register(parent); + } + + static drawParam = function(params) { + return draw(params.x, params.y, params.w, params.data, params.m); + } + + static draw = function(_x, _y, _w, _data, _m) { + x = _x; + y = _y; + w = _w; + h = ui(80); + + _x += _w / 2; + + mode = _data[0]; + + var knx = _x; + var kny = _y + h / 2; + var px, py, _r = ui(28); + + draw_sprite(THEME.rotator_bg, 0, _x, kny); + + tooltip.index = mode; + if(buttonInstant(THEME.button_hide_circle_28, knx - ui(28 / 2), kny - ui(28 / 2), ui(28), ui(28), _m, active, hover, tooltip, THEME.rotator_random_mode, mode) == 2) { #region + mode = (mode + 1) % 4; + onModify(0, mode); + + if(mode == 0) { + onModify(1, 0); + onModify(2, 180); + } else if(mode == 1) { + onModify(1, (_data[1] + _data[2]) / 2); + onModify(2, abs(_data[1] - _data[2]) / 2); + } else if(mode == 2) { + onModify(1, 0); + onModify(2, 90); + onModify(3, 180); + onModify(4, 270); + } else if(mode == 3) { + onModify(1, 45); + onModify(2, 225); + onModify(3, 45); + } + } #endregion + + switch(mode) { + case 0 : + tb_min_0.setFocusHover(active, hover); + tb_max_0.setFocusHover(active, hover); + + tb_min_0.draw(knx - ui(40 + 16 + 80), kny - TEXTBOX_HEIGHT / 2, ui(80), TEXTBOX_HEIGHT, array_safe_get(_data, 1), _m); + tb_max_0.draw(knx + ui(40 + 16), kny - TEXTBOX_HEIGHT / 2, ui(80), TEXTBOX_HEIGHT, array_safe_get(_data, 2), _m); + + var _a0 = _data[1]; + var _a1 = _data[2]; + + px[0] = knx + lengthdir_x(_r, _a0); + px[1] = knx + lengthdir_x(_r, _a1); + + py[0] = kny + lengthdir_y(_r, _a0); + py[1] = kny + lengthdir_y(_r, _a1); + + #region draw arc + var hover_arc = false; + var diss = point_distance(_m[0], _m[1], knx, kny); + if(abs(diss - _r) < 6 || dragging == 2) + hover_arc = true; + + for(var i = 0; i < 2; i++) { + if(point_in_circle(_m[0], _m[1], px[i], py[i], ui(20))) + hover_arc = false; + } + + draw_set_color(hover_arc? COLORS.widget_rotator_range_hover : COLORS.widget_rotator_range); + draw_arc_width(knx, kny, _r, 3, _a0, _a1); + + for(var i = 0; i < 2; i++) + draw_sprite(THEME.rotator_knob, 0, px[i], py[i]); + #endregion + + if(dragging > -1) { #region + var val = point_direction(knx, kny, _m[0], _m[1]); + if(key_mod_press(CTRL)) val = round(val / 15) * 15; + + var delta = angle_difference(point_direction(knx, kny, _m[0], _m[1]), drag_sa); + var val, real_val = drag_sv; + + if(dragging == 2) { + var modi = false; + real_val[1] = round(delta + drag_sv[1]); + val = key_mod_press(CTRL)? round(real_val[1] / 15) * 15 : real_val[1]; + modi |= onModify(1, val); + + real_val[2] = round(delta + drag_sv[2]); + val = key_mod_press(CTRL)? round(real_val[2] / 15) * 15 : real_val[2]; + modi |= onModify(2, val); + + if(modi) UNDO_HOLDING = true; + } else { + var _o = _data[dragging]; + real_val = round(delta + drag_sv); + val = key_mod_press(CTRL)? round(real_val / 15) * 15 : real_val; + + draw_sprite(THEME.rotator_knob, 1, px[dragging], py[dragging]); + + if(_data[dragging] != val) { + var modi = false; + modi |= onModify(1 + dragging, val); + + if(key_mod_press(ALT)) { + var dt = val - _o; + modi |= onModify(1 + !dragging, _data[!dragging] - dt); + } + + if(modi) UNDO_HOLDING = true; + } + } + + drag_sa = point_direction(knx, kny, _m[0], _m[1]); + drag_sv = real_val; + + if(mouse_release(mb_left)) { + dragging = -1; + UNDO_HOLDING = false; + } + #endregion + } else if(hover) { #region + for(var i = 0; i < 2; i++) { + if(point_in_circle(_m[0], _m[1], px[i], py[i], ui(20))) { + draw_sprite(THEME.rotator_knob, 1, px[i], py[i]); + + if(mouse_press(mb_left, active)) { + dragging = i; + drag_sv = _data[1 + i]; + drag_sa = point_direction(knx, kny, _m[0], _m[1]); + } + } + } + if(dragging == -1 && hover_arc && mouse_press(mb_left, active)) { + dragging = 2; + drag_sv = _data; + drag_sa = point_direction(knx, kny, _m[0], _m[1]); + } + #endregion + } + break; + case 1 : + tb_min_0.setFocusHover(active, hover); + tb_max_0.setFocusHover(active, hover); + + tb_min_0.draw(knx - ui(40 + 16 + 80), kny - TEXTBOX_HEIGHT / 2, ui(80), TEXTBOX_HEIGHT, array_safe_get(_data, 1), _m); + tb_max_0.draw(knx + ui(40 + 16), kny - TEXTBOX_HEIGHT / 2, ui(80), TEXTBOX_HEIGHT, array_safe_get(_data, 2), _m); + + var _a0 = _data[1] - _data[2]; + var _a1 = _data[1] + _data[2]; + + px[0] = knx + lengthdir_x(_r, _a0); + py[0] = kny + lengthdir_y(_r, _a0); + + px[1] = knx + lengthdir_x(_r, _a1); + py[1] = kny + lengthdir_y(_r, _a1); + + px[2] = knx + lengthdir_x(_r, (_a0 + _a1) / 2); + py[2] = kny + lengthdir_y(_r, (_a0 + _a1) / 2); + + #region draw arc + draw_set_color(COLORS.widget_rotator_range); + draw_arc_width(knx, kny, _r, 3, _a0, _a1); + + for( var i = 0; i < 3; i++ ) + draw_sprite(THEME.rotator_knob, 0, px[i], py[i]); + #endregion + + if(dragging > -1) { #region + var val = point_direction(knx, kny, _m[0], _m[1]); + if(key_mod_press(CTRL)) val = round(val / 15) * 15; + + var delta = angle_difference(point_direction(knx, kny, _m[0], _m[1]), drag_sa); + var val, real_val = drag_sv; + + if(dragging == 2) { + real_val[1] = round(delta + drag_sv[1]); + val = key_mod_press(CTRL)? round(real_val[1] / 15) * 15 : real_val[1]; + + draw_sprite(THEME.rotator_knob, 1, px[2], py[2]); + + if(onModify(1, val)) UNDO_HOLDING = true; + } else { + real_val[2] = round(drag_sv[2] + (delta * (dragging? 1 : -1))); + val = key_mod_press(CTRL)? round(real_val[2] / 15) * 15 : real_val[2]; + + draw_sprite(THEME.rotator_knob, 1, px[dragging], py[dragging]); + + if(onModify(2, val)) UNDO_HOLDING = true; + } + + drag_sa = point_direction(knx, kny, _m[0], _m[1]); + drag_sv = real_val; + + if(mouse_release(mb_left)) { + dragging = -1; + UNDO_HOLDING = false; + } + #endregion + } else if(hover) { #region + for(var i = 0; i < 3; i++) { + if(point_in_circle(_m[0], _m[1], px[i], py[i], ui(20))) { + draw_sprite(THEME.rotator_knob, 1, px[i], py[i]); + + if(mouse_press(mb_left, active)) { + dragging = i; + drag_sv = _data; + drag_sa = point_direction(knx, kny, _m[0], _m[1]); + } + } + } + #endregion + } + break; + case 2 : + tb_min_0.setFocusHover(active, hover); + tb_max_0.setFocusHover(active, hover); + tb_min_1.setFocusHover(active, hover); + tb_max_1.setFocusHover(active, hover); + + tb_min_0.draw(knx - ui(40 + 16 + 80), kny - TEXTBOX_HEIGHT / 2 - ui(20), ui(80), TEXTBOX_HEIGHT, array_safe_get(_data, 1), _m); + tb_max_0.draw(knx + ui(40 + 16), kny - TEXTBOX_HEIGHT / 2 - ui(20), ui(80), TEXTBOX_HEIGHT, array_safe_get(_data, 2), _m); + tb_min_1.draw(knx - ui(40 + 16 + 80), kny - TEXTBOX_HEIGHT / 2 + ui(20), ui(80), TEXTBOX_HEIGHT, array_safe_get(_data, 3), _m); + tb_max_1.draw(knx + ui(40 + 16), kny - TEXTBOX_HEIGHT / 2 + ui(20), ui(80), TEXTBOX_HEIGHT, array_safe_get(_data, 4), _m); + + var _a0 = _data[1]; + var _a1 = _data[2]; + var _a2 = _data[3]; + var _a3 = _data[4]; + + px[0] = knx + lengthdir_x(_r, _a0); + py[0] = kny + lengthdir_y(_r, _a0); + + px[1] = knx + lengthdir_x(_r, _a1); + py[1] = kny + lengthdir_y(_r, _a1); + + px[2] = knx + lengthdir_x(_r, _a2); + py[2] = kny + lengthdir_y(_r, _a2); + + px[3] = knx + lengthdir_x(_r, _a3); + py[3] = kny + lengthdir_y(_r, _a3); + + #region draw arc + draw_set_color(COLORS.widget_rotator_range); + draw_arc_width(knx, kny, _r, 3, _a0, _a1); + draw_arc_width(knx, kny, _r, 3, _a2, _a3); + + for( var i = 0; i < 4; i++ ) + draw_sprite(THEME.rotator_knob, 0, px[i], py[i]); + #endregion + + if(dragging > -1) { #region + var val = point_direction(knx, kny, _m[0], _m[1]); + if(key_mod_press(CTRL)) val = round(val / 15) * 15; + + var delta = angle_difference(point_direction(knx, kny, _m[0], _m[1]), drag_sa); + var val, real_val = drag_sv; + var ind = dragging + 1; + + real_val[ind] = round(drag_sv[ind] + (delta * (ind? 1 : -1))); + val = key_mod_press(CTRL)? round(real_val[ind] / 15) * 15 : real_val[ind]; + + draw_sprite(THEME.rotator_knob, 1, px[dragging], py[dragging]); + + if(onModify(ind, val)) UNDO_HOLDING = true; + + drag_sa = point_direction(knx, kny, _m[0], _m[1]); + drag_sv = real_val; + + if(mouse_release(mb_left)) { + dragging = -1; + UNDO_HOLDING = false; + } + #endregion + } else if(hover) { #region + for(var i = 0; i < 4; i++) { + if(point_in_circle(_m[0], _m[1], px[i], py[i], ui(20))) { + draw_sprite(THEME.rotator_knob, 1, px[i], py[i]); + + if(mouse_press(mb_left, active)) { + dragging = i; + drag_sv = _data; + drag_sa = point_direction(knx, kny, _m[0], _m[1]); + } + } + } + #endregion + } + break; + case 3 : + tb_min_0.setFocusHover(active, hover); + tb_max_0.setFocusHover(active, hover); + tb_min_1.setFocusHover(active, hover); + + tb_min_0.draw(knx - ui(40 + 16 + 80), kny - TEXTBOX_HEIGHT / 2 - ui(20), ui(80), TEXTBOX_HEIGHT, array_safe_get(_data, 1), _m); + tb_max_0.draw(knx - ui(40 + 16 + 80), kny - TEXTBOX_HEIGHT / 2 + ui(20), ui(80), TEXTBOX_HEIGHT, array_safe_get(_data, 2), _m); + tb_min_1.draw(knx + ui(40 + 16), kny - TEXTBOX_HEIGHT / 2, ui(80), TEXTBOX_HEIGHT, array_safe_get(_data, 3), _m); + + var _a0 = _data[1]; + var _a1 = _data[2]; + + var _a2 = _data[1] - _data[3]; + var _a3 = _data[1] + _data[3]; + var _a4 = _data[2] - _data[3]; + var _a5 = _data[2] + _data[3]; + + px[0] = knx + lengthdir_x(_r, _a0); + py[0] = kny + lengthdir_y(_r, _a0); + + px[1] = knx + lengthdir_x(_r, _a1); + py[1] = kny + lengthdir_y(_r, _a1); + + px[2] = knx + lengthdir_x(_r, _a2); + py[2] = kny + lengthdir_y(_r, _a2); + + px[3] = knx + lengthdir_x(_r, _a3); + py[3] = kny + lengthdir_y(_r, _a3); + + px[4] = knx + lengthdir_x(_r, _a4); + py[4] = kny + lengthdir_y(_r, _a4); + + px[5] = knx + lengthdir_x(_r, _a5); + py[5] = kny + lengthdir_y(_r, _a5); + + #region draw arc + draw_set_color(COLORS.widget_rotator_range); + draw_arc_width(knx, kny, _r, 3, _a2, _a3); + draw_arc_width(knx, kny, _r, 3, _a4, _a5); + + draw_sprite(THEME.rotator_knob, 0, px[0], py[0]); + draw_sprite(THEME.rotator_knob, 0, px[1], py[1]); + #endregion + + if(dragging > -1) { #region + var val = point_direction(knx, kny, _m[0], _m[1]); + if(key_mod_press(CTRL)) val = round(val / 15) * 15; + + var delta = angle_difference(point_direction(knx, kny, _m[0], _m[1]), drag_sa); + var val, real_val = drag_sv; + var ind = dragging + 1; + + real_val[ind] = round(drag_sv[ind] + (delta * (ind? 1 : -1))); + val = key_mod_press(CTRL)? round(real_val[ind] / 15) * 15 : real_val[ind]; + + draw_sprite(THEME.rotator_knob, 1, px[dragging], py[dragging]); + + if(onModify(ind, val)) UNDO_HOLDING = true; + + drag_sa = point_direction(knx, kny, _m[0], _m[1]); + drag_sv = real_val; + + if(mouse_release(mb_left)) { + dragging = -1; + UNDO_HOLDING = false; + } + #endregion + } else if(hover) { #region + for(var i = 0; i < 2; i++) { + if(point_in_circle(_m[0], _m[1], px[i], py[i], ui(20))) { + draw_sprite(THEME.rotator_knob, 1, px[i], py[i]); + + if(mouse_press(mb_left, active)) { + dragging = i; + drag_sv = _data; + drag_sa = point_direction(knx, kny, _m[0], _m[1]); + } + } + } + #endregion + } + break; + } + + resetFocus(); + + return h; + } +} \ No newline at end of file diff --git a/scripts/rotatorRandom/rotatorRandom.yy b/scripts/rotatorRandom/rotatorRandom.yy new file mode 100644 index 000000000..849787e9a --- /dev/null +++ b/scripts/rotatorRandom/rotatorRandom.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "rotatorRandom", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "widgets", + "path": "folders/widgets.yy", + }, +} \ No newline at end of file diff --git a/scripts/rotatorRange/rotatorRange.gml b/scripts/rotatorRange/rotatorRange.gml index 80f7dda88..21e47a259 100644 --- a/scripts/rotatorRange/rotatorRange.gml +++ b/scripts/rotatorRange/rotatorRange.gml @@ -72,7 +72,7 @@ function rotatorRange(_onModify) : widget() constructor { } draw_set_color(hover_arc? COLORS.widget_rotator_range_hover : COLORS.widget_rotator_range); - draw_arc_th(_x, knob_y, _r, 3, _data[0], _data[1]); + draw_arc_width(_x, knob_y, _r, 3, _data[0], _data[1]); #endregion for(var i = 0; i < 2; i++) diff --git a/scripts/string_cut/string_cut.gml b/scripts/string_cut/string_cut.gml index fb8dbeacb..ecdd0c101 100644 --- a/scripts/string_cut/string_cut.gml +++ b/scripts/string_cut/string_cut.gml @@ -1,23 +1,14 @@ function string_cut(str, w, tail = "...", scale = 1) { - var ww = 0; - var ind = 1; - var ss = ""; - var _str = str; - var tw = string_width(tail) * scale; - if(string_width(str) <= w) return str; + if(string_width(str) * scale <= w) return str; - var amo = string_length(str); - - for( var i = 1, n = string_length(str); i <= n; i++ ) { - var ch = string_char_at(str, i); + for( var i = string_length(str) - 1; i > 0; i-- ) { + var subS = string_copy(str, 1, i) + tail; - if(string_width(ss + ch) + tw > w) - return ss + tail; - - ss += ch; + if(string_width(subS) * scale <= w) + return subS; } - return ss; + return ""; } function string_cut_line(str, w) { diff --git a/scripts/textBox/textBox.gml b/scripts/textBox/textBox.gml index da5d532e0..90eed2161 100644 --- a/scripts/textBox/textBox.gml +++ b/scripts/textBox/textBox.gml @@ -43,8 +43,9 @@ function textBox(_input, _onModify, _extras = noone) : textInput(_input, _onModi text_surface = surface_create(1, 1); - static setSlidable = function(slidable = true) { #region + static setSlidable = function(slidable = true, slideStep = slide_speed) { #region self.slidable = slidable; + slide_speed = slideStep; return self; } #endregion