Dynamic Surface, PCX node group

This commit is contained in:
Tanasart 2023-09-11 16:08:58 +02:00
parent 786140e6ca
commit 1efeb7067a
81 changed files with 1884 additions and 264 deletions

View file

@ -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",},

View file

@ -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",},},

Binary file not shown.

View file

@ -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 = "";

View file

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

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

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

View file

@ -0,0 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "angle_functions",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "value",
"path": "folders/functions/value.yy",
},
}

View file

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

View file

@ -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();

View file

@ -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++ )

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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) {}
}

View file

@ -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",
},
}

View file

@ -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
if(_dbg) {
draw_surface_safe(_bgSurf, 0, 0);
surface_free(_bgSurf);
}
draw_surface_safe(_render, 0, 0);
#region submit
gpu_set_zwriteenable(true);
gpu_set_ztestenable(true);
gpu_set_cullmode(_back);
BLEND_MULTIPLY
draw_surface_safe(deferData.ssao);
BLEND_NORMAL
surface_reset_target();
surface_free(_render);
camera.applyCamera();
scene.reset();
scene.submitShadow(_sobj);
scene.submitShader(_sobj);
scene.apply(deferData);
scene.submit(_sobj);
surface_reset_target();
camera.resetCamera();
#endregion
#region render
var _finalRender = surface_create(_dim[0], _dim[1]);
surface_set_target(_finalRender);
DRAW_CLEAR
BLEND_ALPHA
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

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

@ -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",
},
}

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

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

View file

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

View file

@ -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",
},
}

View file

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

View file

@ -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",
},
}

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

@ -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",
},
}

View file

@ -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",
}

View file

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

View file

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

View file

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

View file

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

View file

@ -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;
@ -411,6 +416,12 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
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

View file

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

View file

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

View file

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

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "PCX",
"path": "folders/functions/PCX.yy",
"name": "value",
"path": "folders/functions/value.yy",
},
}

View file

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "widgets",
"path": "folders/widgets/widgets.yy",
},
"resourceVersion": "1.0",
"name": "rotator",
"tags": [],
"resourceType": "GMScript",
}

View file

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

View file

@ -0,0 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "rotatorRandom",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "widgets",
"path": "folders/widgets.yy",
},
}

View file

@ -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++)

View file

@ -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 = string_length(str) - 1; i > 0; i-- ) {
var subS = string_copy(str, 1, i) + tail;
for( var i = 1, n = string_length(str); i <= n; i++ ) {
var ch = string_char_at(str, i);
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) {

View file

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