Panel change
|
@ -79,6 +79,7 @@
|
||||||
{"name":"rigidSim","order":16,"path":"folders/nodes/data/rigidSim.yy",},
|
{"name":"rigidSim","order":16,"path":"folders/nodes/data/rigidSim.yy",},
|
||||||
{"name":"transform","order":8,"path":"folders/nodes/data/transform.yy",},
|
{"name":"transform","order":8,"path":"folders/nodes/data/transform.yy",},
|
||||||
{"name":"value","order":3,"path":"folders/nodes/data/value.yy",},
|
{"name":"value","order":3,"path":"folders/nodes/data/value.yy",},
|
||||||
|
{"name":"struct","order":6,"path":"folders/nodes/data/value/struct.yy",},
|
||||||
{"name":"VFX","order":13,"path":"folders/nodes/data/VFX.yy",},
|
{"name":"VFX","order":13,"path":"folders/nodes/data/VFX.yy",},
|
||||||
{"name":"icons","order":6,"path":"folders/nodes/icons.yy",},
|
{"name":"icons","order":6,"path":"folders/nodes/icons.yy",},
|
||||||
{"name":"3D","order":133,"path":"folders/nodes/icons/3D.yy",},
|
{"name":"3D","order":133,"path":"folders/nodes/icons/3D.yy",},
|
||||||
|
@ -97,6 +98,7 @@
|
||||||
{"name":"color","order":46,"path":"folders/nodes/icons/value/color.yy",},
|
{"name":"color","order":46,"path":"folders/nodes/icons/value/color.yy",},
|
||||||
{"name":"number","order":47,"path":"folders/nodes/icons/value/number.yy",},
|
{"name":"number","order":47,"path":"folders/nodes/icons/value/number.yy",},
|
||||||
{"name":"path","order":48,"path":"folders/nodes/icons/value/path.yy",},
|
{"name":"path","order":48,"path":"folders/nodes/icons/value/path.yy",},
|
||||||
|
{"name":"struct","order":50,"path":"folders/nodes/icons/value/struct.yy",},
|
||||||
{"name":"texts","order":49,"path":"folders/nodes/icons/value/texts.yy",},
|
{"name":"texts","order":49,"path":"folders/nodes/icons/value/texts.yy",},
|
||||||
{"name":"VFX","order":134,"path":"folders/nodes/icons/VFX.yy",},
|
{"name":"VFX","order":134,"path":"folders/nodes/icons/VFX.yy",},
|
||||||
{"name":"panels","order":2,"path":"folders/panels.yy",},
|
{"name":"panels","order":2,"path":"folders/panels.yy",},
|
||||||
|
@ -128,6 +130,7 @@
|
||||||
{"name":"panel_function","order":5,"path":"scripts/panel_function/panel_function.yy",},
|
{"name":"panel_function","order":5,"path":"scripts/panel_function/panel_function.yy",},
|
||||||
{"name":"node_time_remap","order":3,"path":"scripts/node_time_remap/node_time_remap.yy",},
|
{"name":"node_time_remap","order":3,"path":"scripts/node_time_remap/node_time_remap.yy",},
|
||||||
{"name":"sh_perlin","order":1,"path":"shaders/sh_perlin/sh_perlin.yy",},
|
{"name":"sh_perlin","order":1,"path":"shaders/sh_perlin/sh_perlin.yy",},
|
||||||
|
{"name":"node_tool","order":10,"path":"scripts/node_tool/node_tool.yy",},
|
||||||
{"name":"sh_find_pixel","order":46,"path":"shaders/sh_find_pixel/sh_find_pixel.yy",},
|
{"name":"sh_find_pixel","order":46,"path":"shaders/sh_find_pixel/sh_find_pixel.yy",},
|
||||||
{"name":"sh_scale3x","order":29,"path":"shaders/sh_scale3x/sh_scale3x.yy",},
|
{"name":"sh_scale3x","order":29,"path":"shaders/sh_scale3x/sh_scale3x.yy",},
|
||||||
{"name":"node_csv_file_write","order":13,"path":"scripts/node_csv_file_write/node_csv_file_write.yy",},
|
{"name":"node_csv_file_write","order":13,"path":"scripts/node_csv_file_write/node_csv_file_write.yy",},
|
||||||
|
@ -253,6 +256,7 @@
|
||||||
{"name":"fd_rectangle_create_view","order":3,"path":"scripts/fd_rectangle_create_view/fd_rectangle_create_view.yy",},
|
{"name":"fd_rectangle_create_view","order":3,"path":"scripts/fd_rectangle_create_view/fd_rectangle_create_view.yy",},
|
||||||
{"name":"node_fluid_vortex","order":8,"path":"scripts/node_fluid_vortex/node_fluid_vortex.yy",},
|
{"name":"node_fluid_vortex","order":8,"path":"scripts/node_fluid_vortex/node_fluid_vortex.yy",},
|
||||||
{"name":"sh_cell_noise_round","order":9,"path":"shaders/sh_cell_noise_round/sh_cell_noise_round.yy",},
|
{"name":"sh_cell_noise_round","order":9,"path":"shaders/sh_cell_noise_round/sh_cell_noise_round.yy",},
|
||||||
|
{"name":"s_node_path_plot","order":12,"path":"sprites/s_node_path_plot/s_node_path_plot.yy",},
|
||||||
{"name":"json_functions","order":8,"path":"scripts/json_functions/json_functions.yy",},
|
{"name":"json_functions","order":8,"path":"scripts/json_functions/json_functions.yy",},
|
||||||
{"name":"event_recorder","order":3,"path":"scripts/event_recorder/event_recorder.yy",},
|
{"name":"event_recorder","order":3,"path":"scripts/event_recorder/event_recorder.yy",},
|
||||||
{"name":"s_node_path_l_system","order":10,"path":"sprites/s_node_path_l_system/s_node_path_l_system.yy",},
|
{"name":"s_node_path_l_system","order":10,"path":"sprites/s_node_path_l_system/s_node_path_l_system.yy",},
|
||||||
|
@ -268,6 +272,7 @@
|
||||||
{"name":"__node","order":9,"path":"scripts/__node/__node.yy",},
|
{"name":"__node","order":9,"path":"scripts/__node/__node.yy",},
|
||||||
{"name":"fd_rectangle_add_velocity","order":5,"path":"scripts/fd_rectangle_add_velocity/fd_rectangle_add_velocity.yy",},
|
{"name":"fd_rectangle_add_velocity","order":5,"path":"scripts/fd_rectangle_add_velocity/fd_rectangle_add_velocity.yy",},
|
||||||
{"name":"sh_level_selector","order":23,"path":"shaders/sh_level_selector/sh_level_selector.yy",},
|
{"name":"sh_level_selector","order":23,"path":"shaders/sh_level_selector/sh_level_selector.yy",},
|
||||||
|
{"name":"checkboxGroup","order":28,"path":"scripts/checkboxGroup/checkboxGroup.yy",},
|
||||||
{"name":"s_node_pixel_find","order":13,"path":"sprites/s_node_pixel_find/s_node_pixel_find.yy",},
|
{"name":"s_node_pixel_find","order":13,"path":"sprites/s_node_pixel_find/s_node_pixel_find.yy",},
|
||||||
{"name":"sh_noise_grid_tri","order":25,"path":"shaders/sh_noise_grid_tri/sh_noise_grid_tri.yy",},
|
{"name":"sh_noise_grid_tri","order":25,"path":"shaders/sh_noise_grid_tri/sh_noise_grid_tri.yy",},
|
||||||
{"name":"globals","order":1,"path":"scripts/globals/globals.yy",},
|
{"name":"globals","order":1,"path":"scripts/globals/globals.yy",},
|
||||||
|
@ -319,6 +324,7 @@
|
||||||
{"name":"sh_blur_box_contrast","order":3,"path":"shaders/sh_blur_box_contrast/sh_blur_box_contrast.yy",},
|
{"name":"sh_blur_box_contrast","order":3,"path":"shaders/sh_blur_box_contrast/sh_blur_box_contrast.yy",},
|
||||||
{"name":"sh_fd_calculate_pressure_jacobi_glsl","order":8,"path":"shaders/sh_fd_calculate_pressure_jacobi_glsl/sh_fd_calculate_pressure_jacobi_glsl.yy",},
|
{"name":"sh_fd_calculate_pressure_jacobi_glsl","order":8,"path":"shaders/sh_fd_calculate_pressure_jacobi_glsl/sh_fd_calculate_pressure_jacobi_glsl.yy",},
|
||||||
{"name":"node_color_from_rgb","order":7,"path":"scripts/node_color_from_rgb/node_color_from_rgb.yy",},
|
{"name":"node_color_from_rgb","order":7,"path":"scripts/node_color_from_rgb/node_color_from_rgb.yy",},
|
||||||
|
{"name":"node_struct_get","order":1,"path":"scripts/node_struct_get/node_struct_get.yy",},
|
||||||
{"name":"curveBox","order":8,"path":"scripts/curveBox/curveBox.yy",},
|
{"name":"curveBox","order":8,"path":"scripts/curveBox/curveBox.yy",},
|
||||||
{"name":"s_node_iterator_length","order":24,"path":"sprites/s_node_iterator_length/s_node_iterator_length.yy",},
|
{"name":"s_node_iterator_length","order":24,"path":"sprites/s_node_iterator_length/s_node_iterator_length.yy",},
|
||||||
{"name":"preview_overlay_vector","order":2,"path":"scripts/preview_overlay_vector/preview_overlay_vector.yy",},
|
{"name":"preview_overlay_vector","order":2,"path":"scripts/preview_overlay_vector/preview_overlay_vector.yy",},
|
||||||
|
@ -909,6 +915,7 @@
|
||||||
{"name":"fd_rectangle_get_material_type","order":14,"path":"scripts/fd_rectangle_get_material_type/fd_rectangle_get_material_type.yy",},
|
{"name":"fd_rectangle_get_material_type","order":14,"path":"scripts/fd_rectangle_get_material_type/fd_rectangle_get_material_type.yy",},
|
||||||
{"name":"node_area","order":5,"path":"scripts/node_area/node_area.yy",},
|
{"name":"node_area","order":5,"path":"scripts/node_area/node_area.yy",},
|
||||||
{"name":"s_node_posterize","order":31,"path":"sprites/s_node_posterize/s_node_posterize.yy",},
|
{"name":"s_node_posterize","order":31,"path":"sprites/s_node_posterize/s_node_posterize.yy",},
|
||||||
|
{"name":"s_node_struct_get","order":1,"path":"sprites/s_node_struct_get/s_node_struct_get.yy",},
|
||||||
{"name":"s_node_vfx_vortex","order":4,"path":"sprites/s_node_vfx_vortex/s_node_vfx_vortex.yy",},
|
{"name":"s_node_vfx_vortex","order":4,"path":"sprites/s_node_vfx_vortex/s_node_vfx_vortex.yy",},
|
||||||
{"name":"s_node_array_add","order":1,"path":"sprites/s_node_array_add/s_node_array_add.yy",},
|
{"name":"s_node_array_add","order":1,"path":"sprites/s_node_array_add/s_node_array_add.yy",},
|
||||||
{"name":"s_node_image_sequence_to_anim","order":9,"path":"sprites/s_node_image_sequence_to_anim/s_node_image_sequence_to_anim.yy",},
|
{"name":"s_node_image_sequence_to_anim","order":9,"path":"sprites/s_node_image_sequence_to_anim/s_node_image_sequence_to_anim.yy",},
|
||||||
|
@ -1000,6 +1007,7 @@
|
||||||
{"name":"node_frame","order":1,"path":"scripts/node_frame/node_frame.yy",},
|
{"name":"node_frame","order":1,"path":"scripts/node_frame/node_frame.yy",},
|
||||||
{"name":"s_node_scale_algo","order":7,"path":"sprites/s_node_scale_algo/s_node_scale_algo.yy",},
|
{"name":"s_node_scale_algo","order":7,"path":"sprites/s_node_scale_algo/s_node_scale_algo.yy",},
|
||||||
{"name":"sh_sdf_dist","order":4,"path":"shaders/sh_sdf_dist/sh_sdf_dist.yy",},
|
{"name":"sh_sdf_dist","order":4,"path":"shaders/sh_sdf_dist/sh_sdf_dist.yy",},
|
||||||
|
{"name":"node_path_plot","order":12,"path":"scripts/node_path_plot/node_path_plot.yy",},
|
||||||
{"name":"sh_de_corner","order":15,"path":"shaders/sh_de_corner/sh_de_corner.yy",},
|
{"name":"sh_de_corner","order":15,"path":"shaders/sh_de_corner/sh_de_corner.yy",},
|
||||||
{"name":"node_rigid_object_spawner","order":6,"path":"scripts/node_rigid_object_spawner/node_rigid_object_spawner.yy",},
|
{"name":"node_rigid_object_spawner","order":6,"path":"scripts/node_rigid_object_spawner/node_rigid_object_spawner.yy",},
|
||||||
{"name":"o_dialog_graph_connection","order":5,"path":"objects/o_dialog_graph_connection/o_dialog_graph_connection.yy",},
|
{"name":"o_dialog_graph_connection","order":5,"path":"objects/o_dialog_graph_connection/o_dialog_graph_connection.yy",},
|
||||||
|
|
|
@ -104,6 +104,7 @@
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"color","folderPath":"folders/nodes/data/value/color.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"color","folderPath":"folders/nodes/data/value/color.yy",},
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"number","folderPath":"folders/nodes/data/value/number.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"number","folderPath":"folders/nodes/data/value/number.yy",},
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"path","folderPath":"folders/nodes/data/value/path.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"path","folderPath":"folders/nodes/data/value/path.yy",},
|
||||||
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"struct","folderPath":"folders/nodes/data/value/struct.yy",},
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"texts","folderPath":"folders/nodes/data/value/texts.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"texts","folderPath":"folders/nodes/data/value/texts.yy",},
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"VFX","folderPath":"folders/nodes/data/VFX.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"VFX","folderPath":"folders/nodes/data/VFX.yy",},
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"icons","folderPath":"folders/nodes/icons.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"icons","folderPath":"folders/nodes/icons.yy",},
|
||||||
|
@ -123,6 +124,7 @@
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"color","folderPath":"folders/nodes/icons/value/color.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"color","folderPath":"folders/nodes/icons/value/color.yy",},
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"number","folderPath":"folders/nodes/icons/value/number.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"number","folderPath":"folders/nodes/icons/value/number.yy",},
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"path","folderPath":"folders/nodes/icons/value/path.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"path","folderPath":"folders/nodes/icons/value/path.yy",},
|
||||||
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"struct","folderPath":"folders/nodes/icons/value/struct.yy",},
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"texts","folderPath":"folders/nodes/icons/value/texts.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"texts","folderPath":"folders/nodes/icons/value/texts.yy",},
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"VFX","folderPath":"folders/nodes/icons/VFX.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"VFX","folderPath":"folders/nodes/icons/VFX.yy",},
|
||||||
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"panels","folderPath":"folders/panels.yy",},
|
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"panels","folderPath":"folders/panels.yy",},
|
||||||
|
@ -156,6 +158,9 @@
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Assets.zip","CopyToMask":-1,"filePath":"datafiles/data",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Assets.zip","CopyToMask":-1,"filePath":"datafiles/data",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Collections.zip","CopyToMask":-1,"filePath":"datafiles/data",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Collections.zip","CopyToMask":-1,"filePath":"datafiles/data",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"icon.png","CopyToMask":-1,"filePath":"datafiles/data",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"icon.png","CopyToMask":-1,"filePath":"datafiles/data",},
|
||||||
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"layouts.zip","CopyToMask":-1,"filePath":"datafiles/data",},
|
||||||
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Horizontal.json","CopyToMask":-1,"filePath":"datafiles/data/layouts",},
|
||||||
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Vertical.json","CopyToMask":-1,"filePath":"datafiles/data/layouts",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"en.json","CopyToMask":-1,"filePath":"datafiles/data/locale",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"en.json","CopyToMask":-1,"filePath":"datafiles/data/locale",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"storepage_533260_english.json","CopyToMask":-1,"filePath":"datafiles/data/locale",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"storepage_533260_english.json","CopyToMask":-1,"filePath":"datafiles/data/locale",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"node_guides.json","CopyToMask":-1,"filePath":"datafiles/data/nodes",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"node_guides.json","CopyToMask":-1,"filePath":"datafiles/data/nodes",},
|
||||||
|
@ -367,6 +372,7 @@
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_keyframe_selecting.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/timeline",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_keyframe_selecting.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/timeline",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_keyframes.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/timeline",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_keyframes.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/timeline",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphics.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphics.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
||||||
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_canvas_channel.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_canvas_tools_bucket.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_canvas_tools_bucket.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_canvas_tools_ellip_fill.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_canvas_tools_ellip_fill.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_canvas_tools_ellip.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_canvas_tools_ellip.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
||||||
|
@ -384,6 +390,7 @@
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_path_tools_add.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_path_tools_add.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_path_tools_anchor.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_path_tools_anchor.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_path_tools_circle.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_path_tools_circle.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
||||||
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_path_tools_draw.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_path_tools_rectangle.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_path_tools_rectangle.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_splice_draw.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_splice_draw.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphic.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/UI",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphic.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/UI",},
|
||||||
|
@ -454,6 +461,10 @@
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"LICENSE.txt","CopyToMask":-1,"filePath":"datafiles/ImageMagick",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"LICENSE.txt","CopyToMask":-1,"filePath":"datafiles/ImageMagick",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"magick.exe","CopyToMask":-1,"filePath":"datafiles/ImageMagick",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"magick.exe","CopyToMask":-1,"filePath":"datafiles/ImageMagick",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"LuaLicense.txt","CopyToMask":-1,"filePath":"datafiles",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"LuaLicense.txt","CopyToMask":-1,"filePath":"datafiles",},
|
||||||
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"mf.dll","CopyToMask":-1,"filePath":"datafiles",},
|
||||||
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"mfcore.dll","CopyToMask":-1,"filePath":"datafiles",},
|
||||||
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"mfplat.dll","CopyToMask":-1,"filePath":"datafiles",},
|
||||||
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"README.txt","CopyToMask":-1,"filePath":"datafiles",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"arrowRight.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"arrowRight.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Bevel.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Bevel.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
|
||||||
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Broken heart.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
|
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Broken heart.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
|
||||||
|
@ -497,6 +508,7 @@
|
||||||
{"id":{"name":"node_time_remap","path":"scripts/node_time_remap/node_time_remap.yy",},},
|
{"id":{"name":"node_time_remap","path":"scripts/node_time_remap/node_time_remap.yy",},},
|
||||||
{"id":{"name":"sh_perlin","path":"shaders/sh_perlin/sh_perlin.yy",},},
|
{"id":{"name":"sh_perlin","path":"shaders/sh_perlin/sh_perlin.yy",},},
|
||||||
{"id":{"name":"sh_normal_light","path":"shaders/sh_normal_light/sh_normal_light.yy",},},
|
{"id":{"name":"sh_normal_light","path":"shaders/sh_normal_light/sh_normal_light.yy",},},
|
||||||
|
{"id":{"name":"node_tool","path":"scripts/node_tool/node_tool.yy",},},
|
||||||
{"id":{"name":"sh_find_pixel","path":"shaders/sh_find_pixel/sh_find_pixel.yy",},},
|
{"id":{"name":"sh_find_pixel","path":"shaders/sh_find_pixel/sh_find_pixel.yy",},},
|
||||||
{"id":{"name":"sh_scale3x","path":"shaders/sh_scale3x/sh_scale3x.yy",},},
|
{"id":{"name":"sh_scale3x","path":"shaders/sh_scale3x/sh_scale3x.yy",},},
|
||||||
{"id":{"name":"node_csv_file_write","path":"scripts/node_csv_file_write/node_csv_file_write.yy",},},
|
{"id":{"name":"node_csv_file_write","path":"scripts/node_csv_file_write/node_csv_file_write.yy",},},
|
||||||
|
@ -638,6 +650,7 @@
|
||||||
{"id":{"name":"fd_rectangle_create_view","path":"scripts/fd_rectangle_create_view/fd_rectangle_create_view.yy",},},
|
{"id":{"name":"fd_rectangle_create_view","path":"scripts/fd_rectangle_create_view/fd_rectangle_create_view.yy",},},
|
||||||
{"id":{"name":"node_fluid_vortex","path":"scripts/node_fluid_vortex/node_fluid_vortex.yy",},},
|
{"id":{"name":"node_fluid_vortex","path":"scripts/node_fluid_vortex/node_fluid_vortex.yy",},},
|
||||||
{"id":{"name":"sh_cell_noise_round","path":"shaders/sh_cell_noise_round/sh_cell_noise_round.yy",},},
|
{"id":{"name":"sh_cell_noise_round","path":"shaders/sh_cell_noise_round/sh_cell_noise_round.yy",},},
|
||||||
|
{"id":{"name":"s_node_path_plot","path":"sprites/s_node_path_plot/s_node_path_plot.yy",},},
|
||||||
{"id":{"name":"json_functions","path":"scripts/json_functions/json_functions.yy",},},
|
{"id":{"name":"json_functions","path":"scripts/json_functions/json_functions.yy",},},
|
||||||
{"id":{"name":"event_recorder","path":"scripts/event_recorder/event_recorder.yy",},},
|
{"id":{"name":"event_recorder","path":"scripts/event_recorder/event_recorder.yy",},},
|
||||||
{"id":{"name":"s_node_path_l_system","path":"sprites/s_node_path_l_system/s_node_path_l_system.yy",},},
|
{"id":{"name":"s_node_path_l_system","path":"sprites/s_node_path_l_system/s_node_path_l_system.yy",},},
|
||||||
|
@ -655,6 +668,8 @@
|
||||||
{"id":{"name":"fd_rectangle_add_velocity","path":"scripts/fd_rectangle_add_velocity/fd_rectangle_add_velocity.yy",},},
|
{"id":{"name":"fd_rectangle_add_velocity","path":"scripts/fd_rectangle_add_velocity/fd_rectangle_add_velocity.yy",},},
|
||||||
{"id":{"name":"sh_level_selector","path":"shaders/sh_level_selector/sh_level_selector.yy",},},
|
{"id":{"name":"sh_level_selector","path":"shaders/sh_level_selector/sh_level_selector.yy",},},
|
||||||
{"id":{"name":"string_eval","path":"scripts/string_eval/string_eval.yy",},},
|
{"id":{"name":"string_eval","path":"scripts/string_eval/string_eval.yy",},},
|
||||||
|
{"id":{"name":"s_node_struct","path":"sprites/s_node_struct/s_node_struct.yy",},},
|
||||||
|
{"id":{"name":"checkboxGroup","path":"scripts/checkboxGroup/checkboxGroup.yy",},},
|
||||||
{"id":{"name":"s_node_pixel_find","path":"sprites/s_node_pixel_find/s_node_pixel_find.yy",},},
|
{"id":{"name":"s_node_pixel_find","path":"sprites/s_node_pixel_find/s_node_pixel_find.yy",},},
|
||||||
{"id":{"name":"sh_noise_grid_tri","path":"shaders/sh_noise_grid_tri/sh_noise_grid_tri.yy",},},
|
{"id":{"name":"sh_noise_grid_tri","path":"shaders/sh_noise_grid_tri/sh_noise_grid_tri.yy",},},
|
||||||
{"id":{"name":"globals","path":"scripts/globals/globals.yy",},},
|
{"id":{"name":"globals","path":"scripts/globals/globals.yy",},},
|
||||||
|
@ -692,6 +707,7 @@
|
||||||
{"id":{"name":"font_loader","path":"scripts/font_loader/font_loader.yy",},},
|
{"id":{"name":"font_loader","path":"scripts/font_loader/font_loader.yy",},},
|
||||||
{"id":{"name":"point_rotate","path":"scripts/point_rotate/point_rotate.yy",},},
|
{"id":{"name":"point_rotate","path":"scripts/point_rotate/point_rotate.yy",},},
|
||||||
{"id":{"name":"s_node_vfx_variable","path":"sprites/s_node_vfx_variable/s_node_vfx_variable.yy",},},
|
{"id":{"name":"s_node_vfx_variable","path":"sprites/s_node_vfx_variable/s_node_vfx_variable.yy",},},
|
||||||
|
{"id":{"name":"node_struct","path":"scripts/node_struct/node_struct.yy",},},
|
||||||
{"id":{"name":"node_displacement","path":"scripts/node_displacement/node_displacement.yy",},},
|
{"id":{"name":"node_displacement","path":"scripts/node_displacement/node_displacement.yy",},},
|
||||||
{"id":{"name":"mask_function","path":"scripts/mask_function/mask_function.yy",},},
|
{"id":{"name":"mask_function","path":"scripts/mask_function/mask_function.yy",},},
|
||||||
{"id":{"name":"text_file","path":"scripts/text_file/text_file.yy",},},
|
{"id":{"name":"text_file","path":"scripts/text_file/text_file.yy",},},
|
||||||
|
@ -714,6 +730,7 @@
|
||||||
{"id":{"name":"sh_blur_box_contrast","path":"shaders/sh_blur_box_contrast/sh_blur_box_contrast.yy",},},
|
{"id":{"name":"sh_blur_box_contrast","path":"shaders/sh_blur_box_contrast/sh_blur_box_contrast.yy",},},
|
||||||
{"id":{"name":"sh_fd_calculate_pressure_jacobi_glsl","path":"shaders/sh_fd_calculate_pressure_jacobi_glsl/sh_fd_calculate_pressure_jacobi_glsl.yy",},},
|
{"id":{"name":"sh_fd_calculate_pressure_jacobi_glsl","path":"shaders/sh_fd_calculate_pressure_jacobi_glsl/sh_fd_calculate_pressure_jacobi_glsl.yy",},},
|
||||||
{"id":{"name":"node_color_from_rgb","path":"scripts/node_color_from_rgb/node_color_from_rgb.yy",},},
|
{"id":{"name":"node_color_from_rgb","path":"scripts/node_color_from_rgb/node_color_from_rgb.yy",},},
|
||||||
|
{"id":{"name":"node_struct_get","path":"scripts/node_struct_get/node_struct_get.yy",},},
|
||||||
{"id":{"name":"node_transform","path":"scripts/node_transform/node_transform.yy",},},
|
{"id":{"name":"node_transform","path":"scripts/node_transform/node_transform.yy",},},
|
||||||
{"id":{"name":"curveBox","path":"scripts/curveBox/curveBox.yy",},},
|
{"id":{"name":"curveBox","path":"scripts/curveBox/curveBox.yy",},},
|
||||||
{"id":{"name":"s_node_iterator_length","path":"sprites/s_node_iterator_length/s_node_iterator_length.yy",},},
|
{"id":{"name":"s_node_iterator_length","path":"sprites/s_node_iterator_length/s_node_iterator_length.yy",},},
|
||||||
|
@ -1384,6 +1401,7 @@
|
||||||
{"id":{"name":"node_area","path":"scripts/node_area/node_area.yy",},},
|
{"id":{"name":"node_area","path":"scripts/node_area/node_area.yy",},},
|
||||||
{"id":{"name":"s_node_vfx_accel","path":"sprites/s_node_vfx_accel/s_node_vfx_accel.yy",},},
|
{"id":{"name":"s_node_vfx_accel","path":"sprites/s_node_vfx_accel/s_node_vfx_accel.yy",},},
|
||||||
{"id":{"name":"s_node_posterize","path":"sprites/s_node_posterize/s_node_posterize.yy",},},
|
{"id":{"name":"s_node_posterize","path":"sprites/s_node_posterize/s_node_posterize.yy",},},
|
||||||
|
{"id":{"name":"s_node_struct_get","path":"sprites/s_node_struct_get/s_node_struct_get.yy",},},
|
||||||
{"id":{"name":"s_node_vfx_vortex","path":"sprites/s_node_vfx_vortex/s_node_vfx_vortex.yy",},},
|
{"id":{"name":"s_node_vfx_vortex","path":"sprites/s_node_vfx_vortex/s_node_vfx_vortex.yy",},},
|
||||||
{"id":{"name":"s_node_array_add","path":"sprites/s_node_array_add/s_node_array_add.yy",},},
|
{"id":{"name":"s_node_array_add","path":"sprites/s_node_array_add/s_node_array_add.yy",},},
|
||||||
{"id":{"name":"s_node_counter","path":"sprites/s_node_counter/s_node_counter.yy",},},
|
{"id":{"name":"s_node_counter","path":"sprites/s_node_counter/s_node_counter.yy",},},
|
||||||
|
@ -1488,6 +1506,7 @@
|
||||||
{"id":{"name":"node_frame","path":"scripts/node_frame/node_frame.yy",},},
|
{"id":{"name":"node_frame","path":"scripts/node_frame/node_frame.yy",},},
|
||||||
{"id":{"name":"s_node_scale_algo","path":"sprites/s_node_scale_algo/s_node_scale_algo.yy",},},
|
{"id":{"name":"s_node_scale_algo","path":"sprites/s_node_scale_algo/s_node_scale_algo.yy",},},
|
||||||
{"id":{"name":"sh_sdf_dist","path":"shaders/sh_sdf_dist/sh_sdf_dist.yy",},},
|
{"id":{"name":"sh_sdf_dist","path":"shaders/sh_sdf_dist/sh_sdf_dist.yy",},},
|
||||||
|
{"id":{"name":"node_path_plot","path":"scripts/node_path_plot/node_path_plot.yy",},},
|
||||||
{"id":{"name":"node_bw","path":"scripts/node_bw/node_bw.yy",},},
|
{"id":{"name":"node_bw","path":"scripts/node_bw/node_bw.yy",},},
|
||||||
{"id":{"name":"sh_de_corner","path":"shaders/sh_de_corner/sh_de_corner.yy",},},
|
{"id":{"name":"sh_de_corner","path":"shaders/sh_de_corner/sh_de_corner.yy",},},
|
||||||
{"id":{"name":"node_rigid_object_spawner","path":"scripts/node_rigid_object_spawner/node_rigid_object_spawner.yy",},},
|
{"id":{"name":"node_rigid_object_spawner","path":"scripts/node_rigid_object_spawner/node_rigid_object_spawner.yy",},},
|
||||||
|
|
18
datafiles/README.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
This file was provided by: https://www.dll-files.com/
|
||||||
|
|
||||||
|
If you downloaded it from somewhere else, please let us know: info@dll-files.com
|
||||||
|
|
||||||
|
DLL-Files.com is owned and operated by Tilf AB, Sweden. The collection of DLL files as a whole (falls under the “collection copyright” laws) are © Copyright Tilf AB
|
||||||
|
|
||||||
|
The individual DLL files are provided free of charge with the understanding that the user is familiar with their use.
|
||||||
|
|
||||||
|
If you need help installing the file, please see:
|
||||||
|
https://www.dll-files.com/support/
|
||||||
|
or ask your question in the forum:
|
||||||
|
https://forum.dll-files.com/
|
||||||
|
|
||||||
|
DISCLAIMER AND LIMITATION OF LIABILITY
|
||||||
|
|
||||||
|
The Following Refers to all Files with the Extension of "dll" or dlls compressed as "zip".
|
||||||
|
|
||||||
|
All files are provided on an as is basis. No guarantees or warranties are given or implied. Downloading files from this site is free of charge and the user assumes all risks of any damages that may occur, including but not limited to loss of data, damages to hardware, or loss of business profits. We do our best to ensure that all files are virus-free using available means. However, all files have not been tested for functionality or contamination. Many have been sent to us by visitors like yourself. Thus, we suggest that you do a virus scan using an up-to-date version of an anti-virus program before use. Please use at your own risk.
|
BIN
datafiles/data/layouts.zip
Normal file
29
datafiles/data/layouts/Horizontal.json
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"split": "h",
|
||||||
|
"width": -400,
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"split": "v",
|
||||||
|
"width": -48,
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"split": "v",
|
||||||
|
"width": -400,
|
||||||
|
"content": [
|
||||||
|
{ "content": "PREVIEW" },
|
||||||
|
{ "content": "GRAPH" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ "content": "ANIMATION" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ "content": "INSPECTOR" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"collection": {
|
||||||
|
"parent": "GRAPH",
|
||||||
|
"width": 460,
|
||||||
|
"split": "h"
|
||||||
|
}
|
||||||
|
}
|
29
datafiles/data/layouts/Vertical.json
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"split": "h",
|
||||||
|
"width": -400,
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"split": "v",
|
||||||
|
"width": -300,
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"split": "h",
|
||||||
|
"width": 400,
|
||||||
|
"content": [
|
||||||
|
{ "content": "PREVIEW" },
|
||||||
|
{ "content": "GRAPH" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ "content": "ANIMATION" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ "content": "INSPECTOR" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"collection": {
|
||||||
|
"parent": "ANIMATION",
|
||||||
|
"width": 500,
|
||||||
|
"split": "h"
|
||||||
|
}
|
||||||
|
}
|
|
@ -998,28 +998,28 @@
|
||||||
},
|
},
|
||||||
"node_junctions_array": {
|
"node_junctions_array": {
|
||||||
"path": "./node/s_node_junctions_array.png",
|
"path": "./node/s_node_junctions_array.png",
|
||||||
"subimages": 16,
|
"subimages": 17,
|
||||||
"xorigin": 16,
|
"xorigin": 16,
|
||||||
"yorigin": 16,
|
"yorigin": 16,
|
||||||
"slice": null
|
"slice": null
|
||||||
},
|
},
|
||||||
"node_junctions_array_hover": {
|
"node_junctions_array_hover": {
|
||||||
"path": "./node/s_node_junctions_array_hover.png",
|
"path": "./node/s_node_junctions_array_hover.png",
|
||||||
"subimages": 16,
|
"subimages": 17,
|
||||||
"xorigin": 16,
|
"xorigin": 16,
|
||||||
"yorigin": 16,
|
"yorigin": 16,
|
||||||
"slice": null
|
"slice": null
|
||||||
},
|
},
|
||||||
"node_junctions_single": {
|
"node_junctions_single": {
|
||||||
"path": "./node/s_node_junctions_single.png",
|
"path": "./node/s_node_junctions_single.png",
|
||||||
"subimages": 16,
|
"subimages": 17,
|
||||||
"xorigin": 16,
|
"xorigin": 16,
|
||||||
"yorigin": 16,
|
"yorigin": 16,
|
||||||
"slice": null
|
"slice": null
|
||||||
},
|
},
|
||||||
"node_junctions_single_hover": {
|
"node_junctions_single_hover": {
|
||||||
"path": "./node/s_node_junctions_single_hover.png",
|
"path": "./node/s_node_junctions_single_hover.png",
|
||||||
"subimages": 16,
|
"subimages": 17,
|
||||||
"xorigin": 16,
|
"xorigin": 16,
|
||||||
"yorigin": 16,
|
"yorigin": 16,
|
||||||
"slice": null
|
"slice": null
|
||||||
|
@ -1551,6 +1551,20 @@
|
||||||
"yorigin": 24,
|
"yorigin": 24,
|
||||||
"slice": null
|
"slice": null
|
||||||
},
|
},
|
||||||
|
"path_tools_draw": {
|
||||||
|
"path": "./tool/s_path_tools_draw.png",
|
||||||
|
"subimages": 1,
|
||||||
|
"xorigin": 24,
|
||||||
|
"yorigin": 24,
|
||||||
|
"slice": null
|
||||||
|
},
|
||||||
|
"tools_canvas_channel": {
|
||||||
|
"path": "./tool/s_canvas_channel.png",
|
||||||
|
"subimages": 4,
|
||||||
|
"xorigin": 12,
|
||||||
|
"yorigin": 12,
|
||||||
|
"slice": null
|
||||||
|
},
|
||||||
"splice_draw": {
|
"splice_draw": {
|
||||||
"path": "./tool/s_splice_draw.png",
|
"path": "./tool/s_splice_draw.png",
|
||||||
"subimages": 1,
|
"subimages": 1,
|
||||||
|
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 6 KiB |
BIN
datafiles/data/themes/default/graphics/tool/s_canvas_channel.png
Normal file
After Width: | Height: | Size: 700 B |
After Width: | Height: | Size: 870 B |
BIN
datafiles/mf.dll
Normal file
BIN
datafiles/mfcore.dll
Normal file
BIN
datafiles/mfplat.dll
Normal file
|
@ -10,9 +10,6 @@
|
||||||
gpu_set_tex_mip_enable(mip_off);
|
gpu_set_tex_mip_enable(mip_off);
|
||||||
gc_enable(true);
|
gc_enable(true);
|
||||||
gc_target_frame_time(100);
|
gc_target_frame_time(100);
|
||||||
|
|
||||||
window_set_min_width(480)
|
|
||||||
window_set_min_height(480);
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region window
|
#region window
|
||||||
|
@ -24,9 +21,8 @@
|
||||||
gameframe_button_array = [ game_frame_button_create("", s_kenney, 0, function() {}),
|
gameframe_button_array = [ game_frame_button_create("", s_kenney, 0, function() {}),
|
||||||
game_frame_button_create("", s_kenney, 0, function() {}),
|
game_frame_button_create("", s_kenney, 0, function() {}),
|
||||||
];
|
];
|
||||||
} else if(OS == os_macosx) {
|
} else if(OS == os_macosx)
|
||||||
mac_window_init();
|
mac_window_init();
|
||||||
}
|
|
||||||
|
|
||||||
depth = 0;
|
depth = 0;
|
||||||
win_wp = WIN_W;
|
win_wp = WIN_W;
|
||||||
|
@ -49,6 +45,8 @@
|
||||||
kb_hold = false;
|
kb_hold = false;
|
||||||
kb_hkey = 0;
|
kb_hkey = 0;
|
||||||
|
|
||||||
|
panelInit();
|
||||||
|
|
||||||
//show_debug_overlay(true);
|
//show_debug_overlay(true);
|
||||||
//display_set_timing_method(tm_sleep);
|
//display_set_timing_method(tm_sleep);
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@ if(OS == os_windows && gameframe_is_minimized()) {
|
||||||
noti_warning(exception_print(e));
|
noti_warning(exception_print(e));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
panelDraw();
|
||||||
|
|
||||||
gameframe_update();
|
gameframe_update();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
case VALUE_TYPE.float :
|
case VALUE_TYPE.float :
|
||||||
case VALUE_TYPE.integer :
|
case VALUE_TYPE.integer :
|
||||||
case VALUE_TYPE.text :
|
case VALUE_TYPE.text :
|
||||||
|
case VALUE_TYPE.struct :
|
||||||
case VALUE_TYPE.path :
|
case VALUE_TYPE.path :
|
||||||
draw_tooltip_text(string_real(content));
|
draw_tooltip_text(string_real(content));
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -142,4 +142,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
//print("===== Step end =====");
|
//print("===== Step end =====");
|
||||||
|
|
||||||
|
if(keyboard_check_pressed(ord("Q")))
|
||||||
|
panelSerialize();
|
|
@ -6,312 +6,4 @@ enum FORCE_TYPE {
|
||||||
Vortex,
|
Vortex,
|
||||||
Turbulence,
|
Turbulence,
|
||||||
Destroy
|
Destroy
|
||||||
}
|
|
||||||
/*
|
|
||||||
function Node_Particle_Effector(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
|
||||||
name = "Effector";
|
|
||||||
previewable = false;
|
|
||||||
color = COLORS.node_blend_vfx;
|
|
||||||
icon = THEME.vfx;
|
|
||||||
|
|
||||||
w = 96;
|
|
||||||
h = 32 + 24;
|
|
||||||
min_h = h;
|
|
||||||
|
|
||||||
inputs[| 0] = nodeValue("Particle data", self, JUNCTION_CONNECT.input, VALUE_TYPE.object, -1 )
|
|
||||||
.setVisible(true, true);
|
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Output dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2 )
|
|
||||||
.setDisplay(VALUE_DISPLAY.vector);
|
|
||||||
|
|
||||||
inputs[| 2] = nodeValue("Area", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 16, 16, 4, 4, AREA_SHAPE.rectangle ])
|
|
||||||
.setDisplay(VALUE_DISPLAY.area);
|
|
||||||
|
|
||||||
inputs[| 3] = nodeValue("Falloff", self, JUNCTION_CONNECT.input, VALUE_TYPE.curve, CURVE_DEF_01 );
|
|
||||||
|
|
||||||
inputs[| 4] = nodeValue("Falloff distance", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 4 );
|
|
||||||
|
|
||||||
inputs[| 5] = nodeValue("Effect type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
|
|
||||||
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Wind", "Accelerate", "Attract", "Repel", "Vortex", "Turbulence", "Destroy" ] );
|
|
||||||
|
|
||||||
inputs[| 6] = nodeValue("Effect Vector", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ -1, 0 ] )
|
|
||||||
.setDisplay(VALUE_DISPLAY.vector);
|
|
||||||
|
|
||||||
inputs[| 7] = nodeValue("Strength", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1 );
|
|
||||||
|
|
||||||
inputs[| 8] = nodeValue("Rotate particle", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ] )
|
|
||||||
.setDisplay(VALUE_DISPLAY.rotation_range);
|
|
||||||
|
|
||||||
inputs[| 9] = nodeValue("Scale particle", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0, 0 ] )
|
|
||||||
.setDisplay(VALUE_DISPLAY.vector_range);
|
|
||||||
|
|
||||||
inputs[| 10] = nodeValue("Turbulence scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 16 );
|
|
||||||
|
|
||||||
input_display_list = [ 0, 1,
|
|
||||||
["Area", false], 2, 3, 4,
|
|
||||||
["Effect", false], 5, 10, 7, 6, 8, 9
|
|
||||||
];
|
|
||||||
|
|
||||||
outputs[| 0] = nodeValue("Particle data", self, JUNCTION_CONNECT.output, VALUE_TYPE.object, -1 );
|
|
||||||
|
|
||||||
current_data = [];
|
|
||||||
|
|
||||||
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) {
|
|
||||||
inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny);
|
|
||||||
|
|
||||||
var parts = inputs[| 0].getValue();
|
|
||||||
if(!parts) return;
|
|
||||||
|
|
||||||
var _area = current_data[2];
|
|
||||||
var _fall = current_data[3];
|
|
||||||
var _fads = current_data[4];
|
|
||||||
var _type = current_data[5];
|
|
||||||
var _vect = current_data[6];
|
|
||||||
|
|
||||||
var _area_x = _area[0];
|
|
||||||
var _area_y = _area[1];
|
|
||||||
var _area_w = _area[2];
|
|
||||||
var _area_h = _area[3];
|
|
||||||
var _area_t = _area[4];
|
|
||||||
|
|
||||||
var _area_x0 = _area_x - _area_w;
|
|
||||||
var _area_x1 = _area_x + _area_w;
|
|
||||||
var _area_y0 = _area_y - _area_h;
|
|
||||||
var _area_y1 = _area_y + _area_h;
|
|
||||||
|
|
||||||
for(var i = 0; i < array_length(parts); i++) {
|
|
||||||
var part = parts[i];
|
|
||||||
var pv = part.getPivot();
|
|
||||||
var px = _x + part.x * _s;
|
|
||||||
var py = _y + part.y * _s;
|
|
||||||
|
|
||||||
var str = 0;
|
|
||||||
if(_area_t == AREA_SHAPE.rectangle) {
|
|
||||||
if(point_in_rectangle(pv[0], pv[1], _area_x0, _area_y0, _area_x1, _area_y1)) {
|
|
||||||
var _dst = min( distance_to_line(pv[0], pv[1], _area_x0, _area_y0, _area_x1, _area_y0),
|
|
||||||
distance_to_line(pv[0], pv[1], _area_x0, _area_y1, _area_x1, _area_y1),
|
|
||||||
distance_to_line(pv[0], pv[1], _area_x0, _area_y0, _area_x0, _area_y1),
|
|
||||||
distance_to_line(pv[0], pv[1], _area_x1, _area_y0, _area_x1, _area_y1));
|
|
||||||
str = eval_curve_x(_fall, clamp(_dst / _fads, 0., 1.));
|
|
||||||
}
|
|
||||||
} else if(_area_t == AREA_SHAPE.elipse) {
|
|
||||||
if(point_in_circle(pv[0], pv[1], _area_x, _area_y, min(_area_w, _area_h))) {
|
|
||||||
var _dst = point_distance(pv[0], pv[1], _area_x, _area_y);
|
|
||||||
str = eval_curve_x(_fall, clamp(_dst / _fads, 0., 1.));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var ss = 0.5 + 0.5 * str;
|
|
||||||
var cc = str < 0.5? merge_color(COLORS.heat[0], COLORS.heat[1], str * 2)
|
|
||||||
: merge_color(COLORS.heat[1], COLORS.heat[2], str * 2 - 1);
|
|
||||||
draw_set_color(cc);
|
|
||||||
var vx = 0, vy = 0;
|
|
||||||
var scale = 8;
|
|
||||||
|
|
||||||
switch(_type) {
|
|
||||||
case FORCE_TYPE.Wind :
|
|
||||||
vx = _vect[0] * scale * str * _s;
|
|
||||||
vy = _vect[1] * scale * str * _s;
|
|
||||||
|
|
||||||
draw_line(px, py, px + vx, py + vy);
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Attract :
|
|
||||||
var dirr = point_direction(pv[0], pv[1], _area_x, _area_y);
|
|
||||||
vx = lengthdir_x(str * scale * _s, dirr);
|
|
||||||
vy = lengthdir_y(str * scale * _s, dirr);
|
|
||||||
|
|
||||||
draw_line(px, py, px + vx, py + vy);
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Repel :
|
|
||||||
var dirr = point_direction(_area_x, _area_y, pv[0], pv[1]);
|
|
||||||
vx = lengthdir_x(str * scale * _s, dirr);
|
|
||||||
vy = lengthdir_y(str * scale * _s, dirr);
|
|
||||||
|
|
||||||
draw_line(px, py, px + vx, py + vy);
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Vortex :
|
|
||||||
var dirr = point_direction(_area_x, _area_y, pv[0], pv[1]) + 90;
|
|
||||||
vx = lengthdir_x(str * scale * _s, dirr);
|
|
||||||
vy = lengthdir_y(str * scale * _s, dirr);
|
|
||||||
|
|
||||||
draw_line(px, py, px + vx, py + vy);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
draw_sprite_ui_uniform(THEME.preview_crosshair, 0, px, py, 1, cc, ss);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static updateParticleForward = function(_render = true) {
|
|
||||||
update();
|
|
||||||
|
|
||||||
var pt = outputs[| 0];
|
|
||||||
for( var i = 0; i < ds_list_size(pt.value_to); i++ ) {
|
|
||||||
var _n = pt.value_to[| i];
|
|
||||||
if(_n.value_from != pt) continue;
|
|
||||||
|
|
||||||
if(variable_struct_exists(_n.node, "updateParticleForward"))
|
|
||||||
_n.node.updateParticleForward();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static step = function() {
|
|
||||||
var _type = inputs[| 5].getValue();
|
|
||||||
switch(_type) {
|
|
||||||
case FORCE_TYPE.Wind :
|
|
||||||
inputs[| 6].setVisible(true);
|
|
||||||
inputs[| 10].setVisible(false);
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Accelerate :
|
|
||||||
inputs[| 6].setVisible(true);
|
|
||||||
inputs[| 10].setVisible(false);
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Turbulence :
|
|
||||||
inputs[| 6].setVisible(true);
|
|
||||||
inputs[| 10].setVisible(true);
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Destroy :
|
|
||||||
inputs[| 6].setVisible(false);
|
|
||||||
inputs[| 8].setVisible(false);
|
|
||||||
inputs[| 9].setVisible(false);
|
|
||||||
inputs[| 10].setVisible(false);
|
|
||||||
break;
|
|
||||||
default :
|
|
||||||
inputs[| 6].setVisible(false);
|
|
||||||
inputs[| 10].setVisible(false);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function affect(part) {
|
|
||||||
if(!part.active) return;
|
|
||||||
|
|
||||||
var _area = current_data[2];
|
|
||||||
var _fall = current_data[3];
|
|
||||||
var _fads = current_data[4];
|
|
||||||
var _type = current_data[5];
|
|
||||||
var _vect = current_data[6];
|
|
||||||
var _sten = current_data[7];
|
|
||||||
|
|
||||||
var _rot_range = current_data[8];
|
|
||||||
var _sca_range = current_data[9];
|
|
||||||
|
|
||||||
var _area_x = _area[0];
|
|
||||||
var _area_y = _area[1];
|
|
||||||
var _area_w = _area[2];
|
|
||||||
var _area_h = _area[3];
|
|
||||||
var _area_t = _area[4];
|
|
||||||
|
|
||||||
var _area_x0 = _area_x - _area_w;
|
|
||||||
var _area_x1 = _area_x + _area_w;
|
|
||||||
var _area_y0 = _area_y - _area_h;
|
|
||||||
var _area_y1 = _area_y + _area_h;
|
|
||||||
|
|
||||||
random_set_seed(part.seed);
|
|
||||||
var _rot = random_range(_rot_range[0], _rot_range[1]);
|
|
||||||
var _sca = [ random_range(_sca_range[0], _sca_range[1]), random_range(_sca_range[2], _sca_range[3]) ];
|
|
||||||
|
|
||||||
var str = 0;
|
|
||||||
var pv = part.getPivot();
|
|
||||||
|
|
||||||
if(_area_t == AREA_SHAPE.rectangle) {
|
|
||||||
if(point_in_rectangle(pv[0], pv[1], _area_x0, _area_y0, _area_x1, _area_y1)) {
|
|
||||||
var _dst = min( distance_to_line(pv[0], pv[1], _area_x0, _area_y0, _area_x1, _area_y0),
|
|
||||||
distance_to_line(pv[0], pv[1], _area_x0, _area_y1, _area_x1, _area_y1),
|
|
||||||
distance_to_line(pv[0], pv[1], _area_x0, _area_y0, _area_x0, _area_y1),
|
|
||||||
distance_to_line(pv[0], pv[1], _area_x1, _area_y0, _area_x1, _area_y1));
|
|
||||||
str = eval_curve_x(_fall, clamp(_dst / _fads, 0., 1.));
|
|
||||||
}
|
|
||||||
} else if(_area_t == AREA_SHAPE.elipse) {
|
|
||||||
if(point_in_circle(pv[0], pv[1], _area_x, _area_y, min(_area_w, _area_h))) {
|
|
||||||
var _dst = point_distance(pv[0], pv[1], _area_x, _area_y);
|
|
||||||
str = eval_curve_x(_fall, clamp(_dst / _fads, 0., 1.));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(str == 0) return;
|
|
||||||
|
|
||||||
switch(_type) {
|
|
||||||
case FORCE_TYPE.Wind :
|
|
||||||
part.x = part.x + _vect[0] * _sten * str;
|
|
||||||
part.y = part.y + _vect[1] * _sten * str;
|
|
||||||
|
|
||||||
part.rot += _rot * str;
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Accelerate :
|
|
||||||
part.sx = part.sx + _vect[0] * _sten * str;
|
|
||||||
part.sy = part.sy + _vect[1] * _sten * str;
|
|
||||||
|
|
||||||
part.rot += _rot * str;
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Attract :
|
|
||||||
var dirr = point_direction(pv[0], pv[1], _area_x, _area_y);
|
|
||||||
|
|
||||||
part.x = part.x + lengthdir_x(_sten * str, dirr);
|
|
||||||
part.y = part.y + lengthdir_y(_sten * str, dirr);
|
|
||||||
|
|
||||||
part.rot += _rot * str;
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Repel :
|
|
||||||
var dirr = point_direction(_area_x, _area_y, pv[0], pv[1]);
|
|
||||||
|
|
||||||
part.x = part.x + lengthdir_x(_sten * str, dirr);
|
|
||||||
part.y = part.y + lengthdir_y(_sten * str, dirr);
|
|
||||||
|
|
||||||
part.rot += _rot * str;
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Vortex :
|
|
||||||
var dirr = point_direction(_area_x, _area_y, pv[0], pv[1]) + 90;
|
|
||||||
|
|
||||||
part.x = part.x + lengthdir_x(_sten * str, dirr);
|
|
||||||
part.y = part.y + lengthdir_y(_sten * str, dirr);
|
|
||||||
|
|
||||||
part.rot += _rot * str;
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Turbulence :
|
|
||||||
var t_scale = current_data[10];
|
|
||||||
var per = (perlin_noise(pv[0] / t_scale, pv[1] / t_scale, 4, part.seed) - 0.5) * 2;
|
|
||||||
per *= str;
|
|
||||||
|
|
||||||
part.x = part.x + _vect[0] * per;
|
|
||||||
part.y = part.y + _vect[1] * per;
|
|
||||||
|
|
||||||
part.rot += _rot * per;
|
|
||||||
break;
|
|
||||||
case FORCE_TYPE.Destroy :
|
|
||||||
if(random(1) < _sten)
|
|
||||||
part.kill();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var scx_s = _sca[0] * str;
|
|
||||||
var scy_s = _sca[1] * str;
|
|
||||||
if(scx_s < 0) part.scx = lerp_linear(part.scx, 0, abs(scx_s));
|
|
||||||
else part.scx += sign(part.scx) * scx_s;
|
|
||||||
if(scy_s < 0) part.scy = lerp_linear(part.scy, 0, abs(scy_s));
|
|
||||||
else part.scy += sign(part.scy) * scy_s;
|
|
||||||
}
|
|
||||||
|
|
||||||
static update = function(frame = ANIMATOR.current_frame) {
|
|
||||||
outputs[| 0].setValue(inputs[| 0].getValue());
|
|
||||||
var jun = outputs[| 0];
|
|
||||||
for(var j = 0; j < ds_list_size(jun.value_to); j++) {
|
|
||||||
if(jun.value_to[| j].value_from == jun) {
|
|
||||||
jun.value_to[| j].node.doUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
render();
|
|
||||||
}
|
|
||||||
|
|
||||||
function render(_time = ANIMATOR.current_frame) {
|
|
||||||
var parts = inputs[| 0].getValue(_time);
|
|
||||||
if(!parts) return;
|
|
||||||
|
|
||||||
for(var i = 0; i < ds_list_size(inputs); i++) {
|
|
||||||
current_data[i] = inputs[| i].getValue();
|
|
||||||
}
|
|
||||||
for(var i = 0; i < array_length(parts); i++)
|
|
||||||
affect(parts[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
59
scripts/checkboxGroup/checkboxGroup.gml
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
function checkBoxGroup(sprs, _onClick) : widget() constructor {
|
||||||
|
self.sprs = sprs;
|
||||||
|
self.size = sprite_get_number(sprs);
|
||||||
|
onClick = _onClick;
|
||||||
|
|
||||||
|
holding = noone;
|
||||||
|
|
||||||
|
static trigger = function(ind, val) {
|
||||||
|
onClick(ind, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
static draw = function(_x, _y, _value, _m, ss = ui(28), halign = fa_left, valign = fa_top) {
|
||||||
|
x = _x;
|
||||||
|
y = _y;
|
||||||
|
w = ss * size;
|
||||||
|
h = ss;
|
||||||
|
|
||||||
|
var _dx, _dy;
|
||||||
|
switch(halign) {
|
||||||
|
case fa_left: _dx = _x; break;
|
||||||
|
case fa_center: _dx = _x - ss / 2; break;
|
||||||
|
case fa_right: _dx = _x - ss; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(valign) {
|
||||||
|
case fa_top: _dy = _y; break;
|
||||||
|
case fa_center: _dy = _y - ss / 2; break;
|
||||||
|
case fa_bottom: _dy = _y - ss; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mouse_release(mb_left))
|
||||||
|
holding = noone;
|
||||||
|
|
||||||
|
var aa = interactable * 0.25 + 0.75;
|
||||||
|
for( var i = 0; i < size; i++ ) {
|
||||||
|
var spr = i == 0 ? THEME.button_left : (i == size - 1? THEME.button_right : THEME.button_middle);
|
||||||
|
draw_sprite_stretched_ext(spr, _value[i] * 2, _dx, _dy, ss, ss, c_white, aa);
|
||||||
|
|
||||||
|
if(hover && point_in_rectangle(_m[0], _m[1], _dx, _dy, _dx + ss, _dy + ss)) {
|
||||||
|
if(holding != noone)
|
||||||
|
trigger(i, holding);
|
||||||
|
|
||||||
|
if(mouse_press(mb_left, active)) {
|
||||||
|
trigger(i, !_value[i]);
|
||||||
|
holding = _value[i];
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if(mouse_press(mb_left)) deactivate();
|
||||||
|
draw_sprite_stretched_ext(sprs, i, _dx, _dy, ss, ss, c_white, 0.5 + _value[i] * 0.5);
|
||||||
|
|
||||||
|
_dx += ss;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(WIDGET_CURRENT == self)
|
||||||
|
draw_sprite_stretched(THEME.widget_selecting, 0, _dx - ui(3), _dy - ui(3), ss + ui(6), ss + ui(6));
|
||||||
|
|
||||||
|
resetFocus();
|
||||||
|
}
|
||||||
|
}
|
11
scripts/checkboxGroup/checkboxGroup.yy
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMScript",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "checkboxGroup",
|
||||||
|
"isCompatibility": false,
|
||||||
|
"isDnD": false,
|
||||||
|
"parent": {
|
||||||
|
"name": "widgets",
|
||||||
|
"path": "folders/widgets.yy",
|
||||||
|
},
|
||||||
|
}
|
|
@ -71,7 +71,7 @@ function exception_print(e) {
|
||||||
function setException() {
|
function setException() {
|
||||||
exception_unhandled_handler(function(ex) {
|
exception_unhandled_handler(function(ex) {
|
||||||
var path = string(DIRECTORY) + "prev_crash.pxc";
|
var path = string(DIRECTORY) + "prev_crash.pxc";
|
||||||
SAVE_AT(path);
|
if(!SAVING) SAVE_AT(path);
|
||||||
|
|
||||||
var tt = "\n-------------------------- OH NO --------------------------\n\n";
|
var tt = "\n-------------------------- OH NO --------------------------\n\n";
|
||||||
tt += "\n" + ex.longMessage;
|
tt += "\n" + ex.longMessage;
|
||||||
|
@ -104,7 +104,7 @@ function setException() {
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
setException();
|
//setException();
|
||||||
|
|
||||||
function resetException() {
|
function resetException() {
|
||||||
exception_unhandled_handler(undefined);
|
exception_unhandled_handler(undefined);
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
function display_refresh() {
|
function display_refresh() {
|
||||||
o_main.win_wp = WIN_W;
|
o_main.win_wp = WIN_W;
|
||||||
o_main.win_hp = WIN_H;
|
o_main.win_hp = WIN_H;
|
||||||
room_width = WIN_W;
|
room_width = WIN_W;
|
||||||
room_height = WIN_H;
|
room_height = WIN_H;
|
||||||
|
|
||||||
display_set_gui_size(WIN_SW, WIN_SH);
|
display_set_gui_size(WIN_SW, WIN_SH);
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
globalvar VERSION, SAVEFILE_VERSION, VERSION_STRING;
|
globalvar VERSION, SAVEFILE_VERSION, VERSION_STRING;
|
||||||
VERSION = 1138;
|
VERSION = 1138;
|
||||||
SAVEFILE_VERSION = 1138;
|
SAVEFILE_VERSION = 1380;
|
||||||
VERSION_STRING = "1.13.8";
|
VERSION_STRING = "1.13.8";
|
||||||
|
|
||||||
globalvar NODES, NODE_MAP, APPEND_MAP, HOTKEYS, HOTKEY_CONTEXT, NODE_INSTANCES;
|
globalvar NODES, NODE_MAP, APPEND_MAP, HOTKEYS, HOTKEY_CONTEXT, NODE_INSTANCES;
|
||||||
|
|
|
@ -41,22 +41,22 @@ function draw_code(_x, _y, str) {
|
||||||
var tx = _x
|
var tx = _x
|
||||||
var ty = _y;
|
var ty = _y;
|
||||||
|
|
||||||
var isStr = true;
|
var isStr = true;
|
||||||
var stringSplice = string_splice(str, "\"");
|
var strSpl = string_splice(str, "\"");
|
||||||
var amo = array_length(stringSplice);
|
var amo = array_length(strSpl);
|
||||||
var word;
|
var word;
|
||||||
|
|
||||||
for( var i = 0; i < amo; i++ ) {
|
for( var i = 0; i < amo; i++ ) {
|
||||||
var _w = stringSplice[i];
|
var _w = strSpl[i];
|
||||||
_w = string_trim_end(_w);
|
_w = string_trim_end(_w);
|
||||||
|
|
||||||
isStr = !isStr;
|
isStr = !isStr;
|
||||||
|
|
||||||
if(isStr) {
|
if(isStr) {
|
||||||
word = "\"" + _w;
|
word = "\"" + string(_w);
|
||||||
if(i < amo - 1) word += "\"";
|
if(i < amo - 1) word += "\"";
|
||||||
|
|
||||||
draw_set_color(isStr? COLORS.lua_highlight_string : COLORS._main_text);
|
draw_set_color(COLORS.lua_highlight_string);
|
||||||
draw_text(tx, ty, word);
|
draw_text(tx, ty, word);
|
||||||
tx += string_width(word);
|
tx += string_width(word);
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -27,13 +27,15 @@ function luaArgumentRenderer() {
|
||||||
draw_text_add(tx + ui(8), ty + _th + ui(6) + ui(6), "Value");
|
draw_text_add(tx + ui(8), ty + _th + ui(6) + ui(6), "Value");
|
||||||
|
|
||||||
var _jValue = inputs[| i + 2];
|
var _jValue = inputs[| i + 2];
|
||||||
_jValue.editWidget.setActiveFocus(_focus, _hover);
|
if(_jValue.editWidget != noone) {
|
||||||
if(_typ == 2) {
|
_jValue.editWidget.setActiveFocus(_focus, _hover);
|
||||||
_jValue.editWidget.draw(tx + ui(64), ty + _th + ui(6), _w - ui(64), ui(96), _jValue.showValue(), _m, argument_renderer.rx, argument_renderer.ry);
|
if(_typ == 2) {
|
||||||
_h += ui(96 + 8);
|
_jValue.editWidget.draw(tx + ui(64), ty + _th + ui(6), _w - ui(64), ui(96), _jValue.showValue(), _m, argument_renderer.rx, argument_renderer.ry);
|
||||||
} else {
|
_h += ui(96 + 8);
|
||||||
_jValue.editWidget.draw(tx + ui(64), ty + _th + ui(6), _w - ui(64), TEXTBOX_HEIGHT, _jValue.showValue(), _m);
|
} else {
|
||||||
_h += TEXTBOX_HEIGHT + ui(8);
|
_jValue.editWidget.draw(tx + ui(64), ty + _th + ui(6), _w - ui(64), TEXTBOX_HEIGHT, _jValue.showValue(), _m);
|
||||||
|
_h += TEXTBOX_HEIGHT + ui(8);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hh += _h;
|
hh += _h;
|
||||||
|
@ -48,7 +50,8 @@ function luaArgumentRenderer() {
|
||||||
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
|
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
|
||||||
inputs[| i + 1].editWidget.register(parent);
|
inputs[| i + 1].editWidget.register(parent);
|
||||||
inputs[| i + 0].editWidget.register(parent);
|
inputs[| i + 0].editWidget.register(parent);
|
||||||
inputs[| i + 2].editWidget.register(parent);
|
if(inputs[| i + 2].editWidget != noone)
|
||||||
|
inputs[| i + 2].editWidget.register(parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -39,17 +39,26 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
["Display", false], 5, 8, 9, 10,
|
["Display", false], 5, 8, 9, 10,
|
||||||
];
|
];
|
||||||
|
|
||||||
canvas_surface = surface_create(1, 1);
|
canvas_surface = surface_create(1, 1);
|
||||||
|
drawing_surface = surface_create(1, 1);
|
||||||
surface_buffer = buffer_create(1 * 1 * 4, buffer_fixed, 2);
|
surface_buffer = buffer_create(1 * 1 * 4, buffer_fixed, 2);
|
||||||
surface_w = 1;
|
surface_w = 1;
|
||||||
surface_h = 1;
|
surface_h = 1;
|
||||||
|
|
||||||
|
tool_channel_edit = new checkBoxGroup(THEME.tools_canvas_channel, function(ind, val) { tool_attribute.channel[ind] = val; });
|
||||||
|
tool_attribute.channel = [ true, true, true, true ];
|
||||||
|
tool_attribute.alpha = 1;
|
||||||
|
tool_settings = [
|
||||||
|
[ "Channel", tool_channel_edit, "channel", tool_attribute ],
|
||||||
|
[ "Alpha", new textBox(TEXTBOX_INPUT.number, function(alp) { tool_attribute.alpha = alp; }), "alpha", tool_attribute ],
|
||||||
|
];
|
||||||
|
|
||||||
tools = [
|
tools = [
|
||||||
[ "Pencil", THEME.canvas_tools_pencil ],
|
new NodeTool( "Pencil", THEME.canvas_tools_pencil ),
|
||||||
[ "Eraser", THEME.canvas_tools_eraser ],
|
new NodeTool( "Eraser", THEME.canvas_tools_eraser ),
|
||||||
[ "Rectangle", [ THEME.canvas_tools_rect, THEME.canvas_tools_rect_fill ]],
|
new NodeTool( "Rectangle", [ THEME.canvas_tools_rect, THEME.canvas_tools_rect_fill ]),
|
||||||
[ "Ellipse", [ THEME.canvas_tools_ellip, THEME.canvas_tools_ellip_fill ]],
|
new NodeTool( "Ellipse", [ THEME.canvas_tools_ellip, THEME.canvas_tools_ellip_fill ]),
|
||||||
[ "Fill", THEME.canvas_tools_bucket ],
|
new NodeTool( "Fill", THEME.canvas_tools_bucket ),
|
||||||
];
|
];
|
||||||
|
|
||||||
draw_stack = ds_list_create();
|
draw_stack = ds_list_create();
|
||||||
|
@ -66,6 +75,18 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
apply_surface();
|
apply_surface();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function apply_draw_surface() {
|
||||||
|
BLEND_ALPHA;
|
||||||
|
if(isUsingTool(1))
|
||||||
|
gpu_set_blendmode(bm_subtract);
|
||||||
|
draw_surface_ext(drawing_surface, 0, 0, 1, 1, 0, c_white, tool_attribute.alpha);
|
||||||
|
|
||||||
|
surface_set_target(drawing_surface);
|
||||||
|
draw_clear_alpha(0, 0);
|
||||||
|
surface_reset_target();
|
||||||
|
BLEND_NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
function apply_surface() {
|
function apply_surface() {
|
||||||
var _dim = inputs[| 0].getValue();
|
var _dim = inputs[| 0].getValue();
|
||||||
var _bg = inputs[| 8].getValue();
|
var _bg = inputs[| 8].getValue();
|
||||||
|
@ -82,6 +103,8 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
surface_buffer = buffer_create(_dim[0] * _dim[1] * 4, buffer_fixed, 4);
|
surface_buffer = buffer_create(_dim[0] * _dim[1] * 4, buffer_fixed, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drawing_surface = surface_verify(drawing_surface, _dim[0], _dim[1]);
|
||||||
|
|
||||||
surface_set_target(_outSurf);
|
surface_set_target(_outSurf);
|
||||||
draw_clear_alpha(0, 0);
|
draw_clear_alpha(0, 0);
|
||||||
BLEND_ALPHA
|
BLEND_ALPHA
|
||||||
|
@ -133,7 +156,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
var _sw = surface_get_width(_brush);
|
var _sw = surface_get_width(_brush);
|
||||||
var _sh = surface_get_height(_brush);
|
var _sh = surface_get_height(_brush);
|
||||||
|
|
||||||
draw_surface_ext(_brush, _x - floor(_sw / 2), _y - floor(_sh / 2), 1, 1, 0, draw_get_color(), 1);
|
draw_surface_ext(_brush, _x - floor(_sw / 2), _y - floor(_sh / 2), 1, 1, 0, draw_get_color(), draw_get_alpha());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,7 +307,10 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
spanBelow = false;
|
spanBelow = false;
|
||||||
|
|
||||||
while(x1 < surface_w && ff_fillable(colorBase, colorFill, x1, y1, thr)) {
|
while(x1 < surface_w && ff_fillable(colorBase, colorFill, x1, y1, thr)) {
|
||||||
|
draw_set_alpha(tool_attribute.alpha);
|
||||||
draw_point(x1, y1);
|
draw_point(x1, y1);
|
||||||
|
draw_set_alpha(1);
|
||||||
|
|
||||||
buffer_seek(surface_buffer, buffer_seek_start, (surface_w * y1 + x1) * 4);
|
buffer_seek(surface_buffer, buffer_seek_start, (surface_w * y1 + x1) * 4);
|
||||||
buffer_write(surface_buffer, buffer_u32, colorFill);
|
buffer_write(surface_buffer, buffer_u32, colorFill);
|
||||||
|
|
||||||
|
@ -345,6 +371,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
var _c1 = get_color_buffer(_x, _y);
|
var _c1 = get_color_buffer(_x, _y);
|
||||||
var thr = _thres * _thres;
|
var thr = _thres * _thres;
|
||||||
|
|
||||||
|
draw_set_alpha(tool_attribute.alpha);
|
||||||
for( var i = 0; i < w; i++ ) {
|
for( var i = 0; i < w; i++ ) {
|
||||||
for( var j = 0; j < h; j++ ) {
|
for( var j = 0; j < h; j++ ) {
|
||||||
if(i == _x && j == _y) {
|
if(i == _x && j == _y) {
|
||||||
|
@ -356,7 +383,8 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
if(color_diff(_c1, _c2, true) <= thr)
|
if(color_diff(_c1, _c2, true) <= thr)
|
||||||
draw_point(i, j);
|
draw_point(i, j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
draw_set_alpha(1);
|
||||||
|
|
||||||
surface_update();
|
surface_update();
|
||||||
}
|
}
|
||||||
|
@ -391,114 +419,122 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
surface_set_target(canvas_surface);
|
surface_set_target(canvas_surface);
|
||||||
draw_set_color(_col);
|
draw_set_color(_col);
|
||||||
|
|
||||||
var _tool = PANEL_PREVIEW.tool_index;
|
gpu_set_colorwriteenable(tool_attribute.channel[0], tool_attribute.channel[1], tool_attribute.channel[2], tool_attribute.channel[3]);
|
||||||
var _sub_tool = PANEL_PREVIEW.tool_sub_index;
|
|
||||||
|
|
||||||
if(active) {
|
if(isUsingTool(0) || isUsingTool(1)) {
|
||||||
if(_tool == 0 || _tool == 1) {
|
if(key_mod_press(SHIFT) && key_mod_press(CTRL)) {
|
||||||
if(_tool == 0) BLEND_ALPHA;
|
var aa = point_direction(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y);
|
||||||
|
var dd = point_distance(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y);
|
||||||
if(_tool == 1) {
|
var _a = round(aa / 45) * 45;
|
||||||
gpu_set_blendmode(bm_subtract);
|
dd = dd * cos(degtorad(_a - aa));
|
||||||
gpu_set_colorwriteenable(false, false, false, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(key_mod_press(SHIFT) && key_mod_press(CTRL)) {
|
|
||||||
var aa = point_direction(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y);
|
|
||||||
var dd = point_distance(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y);
|
|
||||||
var _a = round(aa / 45) * 45;
|
|
||||||
dd = dd * cos(degtorad(_a - aa));
|
|
||||||
|
|
||||||
mouse_cur_x = mouse_pre_draw_x + lengthdir_x(dd, _a);
|
mouse_cur_x = mouse_pre_draw_x + lengthdir_x(dd, _a);
|
||||||
mouse_cur_y = mouse_pre_draw_y + lengthdir_y(dd, _a);
|
mouse_cur_y = mouse_pre_draw_y + lengthdir_y(dd, _a);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(mouse_press(mb_left)) {
|
if(mouse_press(mb_left, active)) {
|
||||||
|
drawing_surface = surface_verify(drawing_surface, _dim[0], _dim[1]);
|
||||||
|
BLEND_ALPHA;
|
||||||
|
surface_set_target(drawing_surface);
|
||||||
|
draw_clear_alpha(0, 0);
|
||||||
draw_point_size(mouse_cur_x, mouse_cur_y, _siz, _brush);
|
draw_point_size(mouse_cur_x, mouse_cur_y, _siz, _brush);
|
||||||
|
surface_reset_target();
|
||||||
|
|
||||||
mouse_holding = true;
|
mouse_holding = true;
|
||||||
if(key_mod_press(SHIFT)) {
|
if(key_mod_press(SHIFT)) {
|
||||||
|
BLEND_ALPHA;
|
||||||
|
surface_set_target(drawing_surface);
|
||||||
draw_line_size(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y, _siz, _brush);
|
draw_line_size(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y, _siz, _brush);
|
||||||
mouse_holding = false;
|
surface_reset_target();
|
||||||
}
|
mouse_holding = false;
|
||||||
|
|
||||||
mouse_pre_draw_x = mouse_cur_x;
|
apply_draw_surface();
|
||||||
mouse_pre_draw_y = mouse_cur_y;
|
surface_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mouse_pre_draw_x = mouse_cur_x;
|
||||||
|
mouse_pre_draw_y = mouse_cur_y;
|
||||||
|
}
|
||||||
|
|
||||||
if(mouse_holding && mouse_click(mb_left, active)) {
|
if(mouse_holding && mouse_click(mb_left, active)) {
|
||||||
if(mouse_pre_draw_x != mouse_cur_x || mouse_pre_draw_y != mouse_cur_y) {
|
if(mouse_pre_draw_x != mouse_cur_x || mouse_pre_draw_y != mouse_cur_y) {
|
||||||
|
BLEND_ALPHA;
|
||||||
|
surface_set_target(drawing_surface);
|
||||||
draw_point_size(mouse_cur_x, mouse_cur_y, _siz, _brush);
|
draw_point_size(mouse_cur_x, mouse_cur_y, _siz, _brush);
|
||||||
draw_line_size(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y, _siz, _brush);
|
draw_line_size(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y, _siz, _brush);
|
||||||
}
|
surface_reset_target();
|
||||||
|
|
||||||
mouse_pre_draw_x = mouse_cur_x;
|
|
||||||
mouse_pre_draw_y = mouse_cur_y;
|
|
||||||
}
|
|
||||||
|
|
||||||
BLEND_NORMAL;
|
|
||||||
|
|
||||||
if(_tool == 1)
|
|
||||||
gpu_set_colorwriteenable(true, true, true, true);
|
|
||||||
|
|
||||||
if(mouse_release(mb_left)) {
|
|
||||||
surface_update();
|
|
||||||
mouse_holding = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mouse_pre_draw_x = mouse_cur_x;
|
||||||
|
mouse_pre_draw_y = mouse_cur_y;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mouse_holding && mouse_release(mb_left)) {
|
||||||
|
mouse_holding = false;
|
||||||
|
apply_draw_surface();
|
||||||
|
surface_update();
|
||||||
|
}
|
||||||
|
|
||||||
|
BLEND_NORMAL;
|
||||||
|
|
||||||
|
mouse_pre_x = mouse_cur_x;
|
||||||
|
mouse_pre_y = mouse_cur_y;
|
||||||
|
apply_surface();
|
||||||
|
|
||||||
|
} else if(isUsingTool(2) || isUsingTool(3)) {
|
||||||
|
if(mouse_holding && key_mod_press(SHIFT)) {
|
||||||
|
var ww = mouse_cur_x - mouse_pre_x;
|
||||||
|
var hh = mouse_cur_y - mouse_pre_y;
|
||||||
|
var ss = max(abs(ww), abs(hh));
|
||||||
|
|
||||||
|
mouse_cur_x = mouse_pre_x + ss * sign(ww);
|
||||||
|
mouse_cur_y = mouse_pre_y + ss * sign(hh);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mouse_press(mb_left, active)) {
|
||||||
mouse_pre_x = mouse_cur_x;
|
mouse_pre_x = mouse_cur_x;
|
||||||
mouse_pre_y = mouse_cur_y;
|
mouse_pre_y = mouse_cur_y;
|
||||||
apply_surface();
|
|
||||||
|
|
||||||
} else if(_tool == 2 || _tool == 3) {
|
|
||||||
if(mouse_holding && key_mod_press(SHIFT)) {
|
|
||||||
var ww = mouse_cur_x - mouse_pre_x;
|
|
||||||
var hh = mouse_cur_y - mouse_pre_y;
|
|
||||||
var ss = max(abs(ww), abs(hh));
|
|
||||||
|
|
||||||
mouse_cur_x = mouse_pre_x + ss * sign(ww);
|
mouse_holding = true;
|
||||||
mouse_cur_y = mouse_pre_y + ss * sign(hh);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(mouse_press(mb_left)) {
|
if(mouse_holding && mouse_release(mb_left)) {
|
||||||
mouse_pre_x = mouse_cur_x;
|
BLEND_ALPHA;
|
||||||
mouse_pre_y = mouse_cur_y;
|
surface_set_target(drawing_surface);
|
||||||
|
draw_clear_alpha(0, 0);
|
||||||
|
if(isUsingTool(2))
|
||||||
|
draw_rect_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, isUsingTool(2, 1), _brush);
|
||||||
|
else if(isUsingTool(3))
|
||||||
|
draw_ellp_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, isUsingTool(3, 1), _brush);
|
||||||
|
surface_reset_target();
|
||||||
|
BLEND_NORMAL;
|
||||||
|
|
||||||
mouse_holding = true;
|
apply_draw_surface();
|
||||||
}
|
surface_update();
|
||||||
|
mouse_holding = false;
|
||||||
|
}
|
||||||
|
apply_surface();
|
||||||
|
|
||||||
if(mouse_release(mb_left)) {
|
} else if(isUsingTool(4)) {
|
||||||
BLEND_ALPHA;
|
if(point_in_rectangle(mouse_cur_x, mouse_cur_y, 0, 0, _surf_w - 1, _surf_h - 1) && mouse_press(mb_left)) {
|
||||||
if(_tool == 2)
|
switch(_fill_type) {
|
||||||
draw_rect_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, _sub_tool, _brush);
|
case 0 :
|
||||||
else if(_tool == 3)
|
flood_fill_scanline(mouse_cur_x, mouse_cur_y, canvas_surface, _thr, false);
|
||||||
draw_ellp_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, _sub_tool, _brush);
|
break;
|
||||||
BLEND_NORMAL;
|
case 1 :
|
||||||
|
flood_fill_scanline(mouse_cur_x, mouse_cur_y, canvas_surface, _thr, true);
|
||||||
surface_update();
|
break;
|
||||||
mouse_holding = false;
|
case 2 :
|
||||||
|
canvas_fill(mouse_cur_x, mouse_cur_y, canvas_surface, _thr);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
apply_surface();
|
|
||||||
|
|
||||||
} else if(_tool == 4) {
|
|
||||||
if(point_in_rectangle(mouse_cur_x, mouse_cur_y, 0, 0, _surf_w - 1, _surf_h - 1) && mouse_press(mb_left)) {
|
|
||||||
switch(_fill_type) {
|
|
||||||
case 0 :
|
|
||||||
flood_fill_scanline(mouse_cur_x, mouse_cur_y, canvas_surface, _thr, false);
|
|
||||||
break;
|
|
||||||
case 1 :
|
|
||||||
flood_fill_scanline(mouse_cur_x, mouse_cur_y, canvas_surface, _thr, true);
|
|
||||||
break;
|
|
||||||
case 2 :
|
|
||||||
canvas_fill(mouse_cur_x, mouse_cur_y, canvas_surface, _thr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
surface_update();
|
surface_update();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
draw_set_alpha(1);
|
||||||
|
gpu_set_colorwriteenable(true, true, true, true);
|
||||||
surface_reset_target();
|
surface_reset_target();
|
||||||
|
|
||||||
#region preview
|
#region preview
|
||||||
|
@ -513,31 +549,34 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
draw_clear_alpha(0, 0);
|
draw_clear_alpha(0, 0);
|
||||||
BLEND_ALPHA;
|
BLEND_ALPHA;
|
||||||
|
|
||||||
if(is_surface(_bg))
|
if(is_surface(_bg)) draw_surface_stretched_ext(_bg, 0, 0, _dim[0], _dim[1], c_white, _bga);
|
||||||
draw_surface_stretched_ext(_bg, 0, 0, _dim[0], _dim[1], c_white, _bga);
|
|
||||||
draw_surface(canvas_surface, 0, 0);
|
draw_surface(canvas_surface, 0, 0);
|
||||||
|
|
||||||
|
BLEND_ALPHA;
|
||||||
|
if(isUsingTool(1))
|
||||||
|
gpu_set_blendmode(bm_subtract);
|
||||||
|
draw_surface_ext(drawing_surface, 0, 0, 1, 1, 0, c_white, tool_attribute.alpha);
|
||||||
|
BLEND_NORMAL;
|
||||||
|
|
||||||
draw_set_color(_col);
|
draw_set_color(_col);
|
||||||
if(_tool == 0 || _tool == 1) {
|
if(isUsingTool(0) || isUsingTool(1)) {
|
||||||
if(key_mod_press(SHIFT))
|
if(key_mod_press(SHIFT))
|
||||||
draw_line_size(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y, _siz, _brush);
|
draw_line_size(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y, _siz, _brush);
|
||||||
else
|
else
|
||||||
draw_point_size(mouse_cur_x, mouse_cur_y, _siz, _brush);
|
draw_point_size(mouse_cur_x, mouse_cur_y, _siz, _brush);
|
||||||
|
|
||||||
if(_tool == 1) gpu_set_blendmode(bm_normal);
|
if(isUsingTool(1)) gpu_set_blendmode(bm_normal);
|
||||||
} else if (_tool == 2 || _tool == 3) {
|
} else if (mouse_holding) {
|
||||||
if(mouse_holding) {
|
if(isUsingTool(2))
|
||||||
if(_tool == 2)
|
draw_rect_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, isUsingTool(2, 1), _brush);
|
||||||
draw_rect_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, _sub_tool, _brush);
|
else if(isUsingTool(3))
|
||||||
else if(_tool == 3)
|
draw_ellp_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, isUsingTool(3, 1), _brush);
|
||||||
draw_ellp_size(mouse_pre_x, mouse_pre_y, mouse_cur_x, mouse_cur_y, _siz, _sub_tool, _brush);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BLEND_NORMAL;
|
BLEND_NORMAL;
|
||||||
surface_reset_target();
|
surface_reset_target();
|
||||||
|
|
||||||
if (_tool == 2 || _tool == 3) {
|
if (isUsingTool(2) || isUsingTool(3)) {
|
||||||
if(mouse_holding) {
|
if(mouse_holding) {
|
||||||
var _pr_x = _x + mouse_pre_x * _s;
|
var _pr_x = _x + mouse_pre_x * _s;
|
||||||
var _pr_y = _y + mouse_pre_y * _s;
|
var _pr_y = _y + mouse_pre_y * _s;
|
||||||
|
@ -549,7 +588,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_tool > -1 && point_in_rectangle(mouse_cur_x, mouse_cur_y, 0, 0, _surf_w - 1, _surf_h - 1)) {
|
if(!isNotUsingTool() && point_in_rectangle(mouse_cur_x, mouse_cur_y, 0, 0, _surf_w - 1, _surf_h - 1)) {
|
||||||
var _pr_x = _x + mouse_cur_x * _s;
|
var _pr_x = _x + mouse_cur_x * _s;
|
||||||
var _pr_y = _y + mouse_cur_y * _s;
|
var _pr_y = _y + mouse_cur_y * _s;
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,8 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
metadata = new MetaDataManager();
|
metadata = new MetaDataManager();
|
||||||
|
|
||||||
attributes[? "Separator"] = [];
|
attributes[? "Separator"] = [];
|
||||||
|
attributes[? "w"] = 128;
|
||||||
|
attributes[? "h"] = 128;
|
||||||
|
|
||||||
inspUpdateTooltip = get_text("panel_inspector_execute", "Execute node contents");
|
inspUpdateTooltip = get_text("panel_inspector_execute", "Execute node contents");
|
||||||
inspUpdateIcon = [ THEME.sequence_control, 1, COLORS._main_value_positive ];
|
inspUpdateIcon = [ THEME.sequence_control, 1, COLORS._main_value_positive ];
|
||||||
|
@ -106,9 +108,24 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
return instanceBase.getNodeList();
|
return instanceBase.getNodeList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static setHeight = function() {
|
||||||
|
var _hi = ui(32);
|
||||||
|
var _ho = ui(32);
|
||||||
|
|
||||||
|
for( var i = 0; i < ds_list_size(inputs); i++ )
|
||||||
|
if(inputs[| i].isVisible()) _hi += 24;
|
||||||
|
|
||||||
|
for( var i = 0; i < ds_list_size(outputs); i++ )
|
||||||
|
if(outputs[| i].isVisible()) _ho += 24;
|
||||||
|
|
||||||
|
var preH = (preview_surface && previewable)? 128 : 0;
|
||||||
|
|
||||||
|
h = max(min_h, preH, _hi, _ho);
|
||||||
|
}
|
||||||
|
|
||||||
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) {
|
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) {
|
||||||
for(var i = custom_input_index; i < ds_list_size(inputs); i++) {
|
for(var i = custom_input_index; i < ds_list_size(inputs); i++) {
|
||||||
var _in = inputs[| i];
|
var _in = inputs[| i];
|
||||||
var _show = _in.from.inputs[| 6].getValue();
|
var _show = _in.from.inputs[| 6].getValue();
|
||||||
|
|
||||||
if(!_show) continue;
|
if(!_show) continue;
|
||||||
|
@ -229,6 +246,8 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
DOUBLE_CLICK = false;
|
DOUBLE_CLICK = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
w = attributes[? "w"];
|
||||||
|
|
||||||
onStep();
|
onStep();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -376,12 +395,16 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
static attributeSerialize = function() {
|
static attributeSerialize = function() {
|
||||||
var att = ds_map_create();
|
var att = ds_map_create();
|
||||||
att[? "Separator"] = json_stringify(attributes[? "Separator"]);
|
att[? "Separator"] = json_stringify(attributes[? "Separator"]);
|
||||||
|
att[? "w"] = attributes[? "w"];
|
||||||
|
att[? "h"] = attributes[? "h"];
|
||||||
return att;
|
return att;
|
||||||
}
|
}
|
||||||
|
|
||||||
static attributeDeserialize = function(attr) {
|
static attributeDeserialize = function(attr) {
|
||||||
if(ds_map_exists(attr, "Separator"))
|
if(ds_map_exists(attr, "Separator"))
|
||||||
attributes[? "Separator"] = json_parse(attr[? "Separator"]);
|
attributes[? "Separator"] = json_parse(attr[? "Separator"]);
|
||||||
|
attributes[? "w"] = ds_map_try_get(attr, "w", 128);
|
||||||
|
attributes[? "h"] = ds_map_try_get(attr, "h", 128);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -59,6 +59,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
|
||||||
preview_alpha = 1;
|
preview_alpha = 1;
|
||||||
preview_x = 0;
|
preview_x = 0;
|
||||||
preview_y = 0;
|
preview_y = 0;
|
||||||
|
preview_align = fa_center;
|
||||||
|
|
||||||
rendered = false;
|
rendered = false;
|
||||||
update_on_frame = false;
|
update_on_frame = false;
|
||||||
|
@ -85,6 +86,9 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
|
||||||
manual_updated = false;
|
manual_updated = false;
|
||||||
manual_deletable = true;
|
manual_deletable = true;
|
||||||
|
|
||||||
|
tool_settings = [];
|
||||||
|
tool_attribute = {};
|
||||||
|
|
||||||
static initTooltip = function() {
|
static initTooltip = function() {
|
||||||
if(!struct_has(global.NODE_GUIDE, instanceof(self))) return;
|
if(!struct_has(global.NODE_GUIDE, instanceof(self))) return;
|
||||||
|
|
||||||
|
@ -647,8 +651,15 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
|
||||||
var pw = surface_get_width(surf);
|
var pw = surface_get_width(surf);
|
||||||
var ph = surface_get_height(surf);
|
var ph = surface_get_height(surf);
|
||||||
var ps = min((w * _s - 8) / pw, (h * _s - 8) / ph);
|
var ps = min((w * _s - 8) / pw, (h * _s - 8) / ph);
|
||||||
var px = xx + w * _s / 2 - pw * ps / 2;
|
var px = xx + w * _s / 2 - pw * ps / 2, py = yy;
|
||||||
var py = yy + h * _s / 2 - ph * ps / 2;
|
switch(preview_align) {
|
||||||
|
case fa_center :
|
||||||
|
py = yy + h * _s / 2 - ph * ps / 2;
|
||||||
|
break;
|
||||||
|
case fa_top :
|
||||||
|
py = yy;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
var aa = 0.5 + 0.5 * renderActive;
|
var aa = 0.5 + 0.5 * renderActive;
|
||||||
draw_surface_ext_safe(surf, px, py, ps, ps, 0, c_white, aa);
|
draw_surface_ext_safe(surf, px, py, ps, ps, 0, c_white, aa);
|
||||||
|
@ -992,6 +1003,20 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
|
||||||
return nodes;
|
return nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static isNotUsingTool = function() {
|
||||||
|
return PANEL_PREVIEW.tool_current == noone;
|
||||||
|
}
|
||||||
|
|
||||||
|
static isUsingTool = function(index, subtool = noone) {
|
||||||
|
if(tools == -1)
|
||||||
|
return false;
|
||||||
|
if(PANEL_PREVIEW.tool_current != tools[index])
|
||||||
|
return false;
|
||||||
|
if(subtool == noone)
|
||||||
|
return true;
|
||||||
|
return tools[index].selecting == subtool;
|
||||||
|
}
|
||||||
|
|
||||||
static clone = function(target = PANEL_GRAPH.getCurrentContext()) {
|
static clone = function(target = PANEL_GRAPH.getCurrentContext()) {
|
||||||
CLONING = true;
|
CLONING = true;
|
||||||
var _type = instanceof(self);
|
var _type = instanceof(self);
|
||||||
|
@ -1023,6 +1048,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
|
||||||
|
|
||||||
static serialize = function(scale = false, preset = false) {
|
static serialize = function(scale = false, preset = false) {
|
||||||
var _map = ds_map_create();
|
var _map = ds_map_create();
|
||||||
|
//print(" > Serializing: " + name);
|
||||||
|
|
||||||
if(!preset) {
|
if(!preset) {
|
||||||
_map[? "id"] = node_id;
|
_map[? "id"] = node_id;
|
||||||
|
@ -1095,15 +1121,17 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
|
||||||
|
|
||||||
static postDeserialize = function() {}
|
static postDeserialize = function() {}
|
||||||
static processDeserialize = function() {}
|
static processDeserialize = function() {}
|
||||||
|
|
||||||
static applyDeserialize = function(preset = false) {
|
static applyDeserialize = function(preset = false) {
|
||||||
var _inputs = load_map[? "inputs"];
|
var _inputs = load_map[? "inputs"];
|
||||||
var amo = min(ds_list_size(inputs), ds_list_size(_inputs));
|
var amo = min(ds_list_size(inputs), ds_list_size(_inputs));
|
||||||
|
|
||||||
printIf(TESTING, " > Applying deserialize to node " + name);
|
printIf(TESTING, " > Applying deserialize to node " + name + " (amount: " + string(amo) + ")");
|
||||||
|
|
||||||
for(var i = 0; i < amo; i++)
|
for(var i = 0; i < amo; i++) {
|
||||||
|
if(inputs[| i] == noone) continue;
|
||||||
inputs[| i].applyDeserialize(_inputs[| i], load_scale, preset);
|
inputs[| i].applyDeserialize(_inputs[| i], load_scale, preset);
|
||||||
|
}
|
||||||
|
|
||||||
printIf(TESTING, " > Applying deserialize to node " + name + " completed");
|
printIf(TESTING, " > Applying deserialize to node " + name + " completed");
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
inputs[| 5] = nodeValue("Order", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
inputs[| 5] = nodeValue("Order", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
.rejectArray();
|
.rejectArray();
|
||||||
|
|
||||||
inputs[| 6] = nodeValue("Display gizmo", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true)
|
inputs[| 6] = nodeValue("Display preview gizmo", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true)
|
||||||
.rejectArray();
|
.rejectArray();
|
||||||
|
|
||||||
inputs[| 7] = nodeValue("Step", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.01)
|
inputs[| 7] = nodeValue("Step", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.01)
|
||||||
|
|
|
@ -38,14 +38,18 @@ function Node_Json_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
outputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.output, VALUE_TYPE.path, "")
|
outputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.output, VALUE_TYPE.path, "")
|
||||||
.setVisible(true, true);
|
.setVisible(true, true);
|
||||||
|
|
||||||
|
outputs[| 1] = nodeValue("Struct", self, JUNCTION_CONNECT.output, VALUE_TYPE.struct, {});
|
||||||
|
|
||||||
data_length = 1;
|
data_length = 1;
|
||||||
input_fix_len = ds_list_size(inputs);
|
input_fix_len = ds_list_size(inputs);
|
||||||
|
output_fix_len = ds_list_size(outputs);
|
||||||
|
|
||||||
static createNewInput = function() {
|
static createNewInput = function() {
|
||||||
var index = ds_list_size(inputs);
|
var index = ds_list_size(inputs);
|
||||||
inputs[| index] = nodeValue("Key", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" )
|
inputs[| index] = nodeValue("Key", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" )
|
||||||
.setVisible(true, true);
|
.setVisible(true, true);
|
||||||
|
|
||||||
|
var index = ds_list_size(outputs);
|
||||||
outputs[| index] = nodeValue("Values", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0 )
|
outputs[| index] = nodeValue("Values", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0 )
|
||||||
.setVisible(true, true);
|
.setVisible(true, true);
|
||||||
}
|
}
|
||||||
|
@ -76,20 +80,26 @@ function Node_Json_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
var _in = ds_list_create();
|
var _in = ds_list_create();
|
||||||
var _ot = ds_list_create();
|
var _ot = ds_list_create();
|
||||||
|
|
||||||
for( var i = 0; i < ds_list_size(inputs); i++ ) {
|
for( var i = 0; i < input_fix_len; i++ )
|
||||||
if(i < input_fix_len || inputs[| i].getValue() != "") {
|
ds_list_add(_in, inputs[| i]);
|
||||||
ds_list_add(_in, inputs[| i]);
|
|
||||||
ds_list_add(_ot, outputs[| i]);
|
for( var i = 0; i < output_fix_len; i++ )
|
||||||
|
ds_list_add(_ot, outputs[| i]);
|
||||||
|
|
||||||
|
for( var i = input_fix_len; i < ds_list_size(inputs); i++ ) {
|
||||||
|
if(inputs[| i].getValue() != "") {
|
||||||
|
ds_list_add(_in, inputs[| i + 0]);
|
||||||
|
ds_list_add(_ot, outputs[| i + 1]);
|
||||||
} else {
|
} else {
|
||||||
delete inputs[| i];
|
delete inputs[| i + 0];
|
||||||
delete outputs[| i];
|
delete outputs[| i + 1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for( var i = 0; i < ds_list_size(_in); i++ ) {
|
for( var i = 0; i < ds_list_size(_in); i++ )
|
||||||
_in[| i].index = i;
|
_in[| i].index = i;
|
||||||
|
for( var i = 0; i < ds_list_size(_ot); i++ )
|
||||||
_ot[| i].index = i;
|
_ot[| i].index = i;
|
||||||
}
|
|
||||||
|
|
||||||
ds_list_destroy(inputs);
|
ds_list_destroy(inputs);
|
||||||
inputs = _in;
|
inputs = _in;
|
||||||
|
@ -132,21 +142,39 @@ function Node_Json_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
if(path == "") return;
|
if(path == "") return;
|
||||||
if(path_current != path) updatePaths(path);
|
if(path_current != path) updatePaths(path);
|
||||||
|
|
||||||
|
outputs[| 1].setValue(content);
|
||||||
|
|
||||||
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) {
|
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) {
|
||||||
var key = inputs[| i].getValue();
|
var key = inputs[| i].getValue();
|
||||||
|
var out = outputs[| i + 1];
|
||||||
|
|
||||||
outputs[| i].name = key;
|
out.name = key;
|
||||||
if(variable_struct_exists(content, key)) {
|
var keys = string_splice(key, ".");
|
||||||
var val = variable_struct_get(content, key);
|
var _str = content;
|
||||||
outputs[| i].setValue(val);
|
|
||||||
|
for( var j = 0; j < array_length(keys); j++ ) {
|
||||||
|
var k = keys[j];
|
||||||
|
|
||||||
if(is_array(val) && array_length(val))
|
if(!variable_struct_exists(_str, k)) {
|
||||||
outputs[| i].type = is_string(val[0])? VALUE_TYPE.text : VALUE_TYPE.float;
|
out.setValue(0);
|
||||||
else
|
out.type = VALUE_TYPE.float;
|
||||||
outputs[| i].type = is_string(val)? VALUE_TYPE.text : VALUE_TYPE.float;
|
break;
|
||||||
} else {
|
}
|
||||||
outputs[| i].setValue(0);
|
|
||||||
outputs[| i].type = VALUE_TYPE.float;
|
var val = variable_struct_get(_str, k);
|
||||||
|
if(j == array_length(keys) - 1) {
|
||||||
|
if(is_struct(val))
|
||||||
|
out.type = VALUE_TYPE.struct;
|
||||||
|
else if(is_array(val) && array_length(val))
|
||||||
|
out.type = is_string(val[0])? VALUE_TYPE.text : VALUE_TYPE.float;
|
||||||
|
else
|
||||||
|
out.type = is_string(val)? VALUE_TYPE.text : VALUE_TYPE.float;
|
||||||
|
|
||||||
|
out.setValue(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_struct(val)) _str = val;
|
||||||
|
else break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,9 @@ function Node_Json_File_Write(_x, _y, _group = noone) : Node(_x, _y, _group) con
|
||||||
.setDisplay(VALUE_DISPLAY.path_save, ["*.json", ""])
|
.setDisplay(VALUE_DISPLAY.path_save, ["*.json", ""])
|
||||||
.rejectArray();
|
.rejectArray();
|
||||||
|
|
||||||
|
inputs[| 1] = nodeValue("Struct", self, JUNCTION_CONNECT.input, VALUE_TYPE.struct, {})
|
||||||
|
.setVisible(true, true);
|
||||||
|
|
||||||
static createNewInput = function() {
|
static createNewInput = function() {
|
||||||
var index = ds_list_size(inputs);
|
var index = ds_list_size(inputs);
|
||||||
inputs[| index + 0] = nodeValue("Key", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
|
inputs[| index + 0] = nodeValue("Key", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
|
||||||
|
@ -20,7 +23,7 @@ function Node_Json_File_Write(_x, _y, _group = noone) : Node(_x, _y, _group) con
|
||||||
array_push(input_display_list, index + 1);
|
array_push(input_display_list, index + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
input_display_list = [ 0,
|
input_display_list = [ 0, 1,
|
||||||
["Inputs", false],
|
["Inputs", false],
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -38,6 +41,12 @@ function Node_Json_File_Write(_x, _y, _group = noone) : Node(_x, _y, _group) con
|
||||||
|
|
||||||
array_resize(input_display_list, input_display_len);
|
array_resize(input_display_list, input_display_len);
|
||||||
|
|
||||||
|
if(inputs[| 1].value_from != noone) {
|
||||||
|
ds_list_destroy(inputs);
|
||||||
|
inputs = _in;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
|
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
|
||||||
if(inputs[| i].getValue() != "") {
|
if(inputs[| i].getValue() != "") {
|
||||||
ds_list_add(_in, inputs[| i + 0]);
|
ds_list_add(_in, inputs[| i + 0]);
|
||||||
|
@ -76,20 +85,32 @@ function Node_Json_File_Write(_x, _y, _group = noone) : Node(_x, _y, _group) con
|
||||||
if(path == "") return;
|
if(path == "") return;
|
||||||
if(filename_ext(path) != ".json")
|
if(filename_ext(path) != ".json")
|
||||||
path += ".json";
|
path += ".json";
|
||||||
|
|
||||||
var cont = {};
|
var cont = {};
|
||||||
for( var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length ) {
|
|
||||||
var _key = inputs[| i + 0].getValue();
|
if(inputs[| 1].value_from == noone) {
|
||||||
var _val = inputs[| i + 1].getValue();
|
for( var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length ) {
|
||||||
|
var _key = inputs[| i + 0].getValue();
|
||||||
|
var _val = inputs[| i + 1].getValue();
|
||||||
|
|
||||||
inputs[| i + 1].type = inputs[| i + 1].value_from? inputs[| i + 1].value_from.type : VALUE_TYPE.any;
|
inputs[| i + 1].type = inputs[| i + 1].value_from? inputs[| i + 1].value_from.type : VALUE_TYPE.any;
|
||||||
|
|
||||||
variable_struct_set(cont, _key, _val);
|
variable_struct_set(cont, _key, _val);
|
||||||
}
|
}
|
||||||
|
} else
|
||||||
|
cont = inputs[| 1].getValue();
|
||||||
|
|
||||||
json_save_struct(path, cont);
|
json_save_struct(path, cont);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function step() {
|
||||||
|
for(var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length) {
|
||||||
|
var inp = inputs[| i + 1];
|
||||||
|
var typ = inp.value_from == noone? VALUE_TYPE.any : inp.value_from.type;
|
||||||
|
inp.type = typ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static update = function(frame = ANIMATOR.current_frame) { writeFile(); }
|
static update = function(frame = ANIMATOR.current_frame) { writeFile(); }
|
||||||
static onInspectorUpdate = function() { writeFile(); }
|
static onInspectorUpdate = function() { writeFile(); }
|
||||||
|
|
||||||
|
|
|
@ -311,9 +311,12 @@ function valueAnimator(_val, _prop) constructor {
|
||||||
_value_list[| 0] = values[| i].time;
|
_value_list[| 0] = values[| i].time;
|
||||||
|
|
||||||
var val = values[| i].value;
|
var val = values[| i].value;
|
||||||
if(is_struct(val)) {
|
|
||||||
|
if(prop.type == VALUE_TYPE.struct)
|
||||||
|
_value_list[| 1] = json_stringify(val);
|
||||||
|
else if(is_struct(val))
|
||||||
_value_list[| 1] = val.serialize();
|
_value_list[| 1] = val.serialize();
|
||||||
} else if(typeArray(prop.display_type) && is_array(val)) {
|
else if(typeArray(prop.display_type) && is_array(val)) {
|
||||||
var __v = ds_list_create();
|
var __v = ds_list_create();
|
||||||
for(var j = 0; j < array_length(val); j++) {
|
for(var j = 0; j < array_length(val); j++) {
|
||||||
if(is_struct(val[j]) && struct_has(val[j], "serialize"))
|
if(is_struct(val[j]) && struct_has(val[j], "serialize"))
|
||||||
|
@ -323,9 +326,8 @@ function valueAnimator(_val, _prop) constructor {
|
||||||
}
|
}
|
||||||
_value_list[| 1] = __v;
|
_value_list[| 1] = __v;
|
||||||
ds_list_mark_as_list(_value_list, 1);
|
ds_list_mark_as_list(_value_list, 1);
|
||||||
} else {
|
} else
|
||||||
_value_list[| 1] = values[| i].value;
|
_value_list[| 1] = values[| i].value;
|
||||||
}
|
|
||||||
|
|
||||||
_value_list[| 2] = ds_list_create_from_array(values[| i].ease_in);
|
_value_list[| 2] = ds_list_create_from_array(values[| i].ease_in);
|
||||||
ds_list_mark_as_list(_value_list, 2);
|
ds_list_mark_as_list(_value_list, 2);
|
||||||
|
@ -384,7 +386,9 @@ function valueAnimator(_val, _prop) constructor {
|
||||||
var ease_out_type = ds_list_get(_keyframe, 5, CURVE_TYPE.bezier);
|
var ease_out_type = ds_list_get(_keyframe, 5, CURVE_TYPE.bezier);
|
||||||
var _val = value;
|
var _val = value;
|
||||||
|
|
||||||
if(prop.type == VALUE_TYPE.path && prop.display_type == VALUE_DISPLAY.path_array) {
|
if(prop.type == VALUE_TYPE.struct)
|
||||||
|
_val = json_parse(value);
|
||||||
|
else if(prop.type == VALUE_TYPE.path && prop.display_type == VALUE_DISPLAY.path_array) {
|
||||||
for(var j = 0; j < ds_list_size(value); j++)
|
for(var j = 0; j < ds_list_size(value); j++)
|
||||||
_val[j] = value[| j];
|
_val[j] = value[| j];
|
||||||
} else if(prop.type == VALUE_TYPE.color && prop.display_type == VALUE_DISPLAY.gradient) {
|
} else if(prop.type == VALUE_TYPE.color && prop.display_type == VALUE_DISPLAY.gradient) {
|
||||||
|
|
|
@ -120,8 +120,8 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
var _rangeMax = max(_ratio[0], _ratio[1]);
|
var _rangeMax = max(_ratio[0], _ratio[1]);
|
||||||
if(_rangeMax == 1) _rangeMax = 0.99999;
|
if(_rangeMax == 1) _rangeMax = 0.99999;
|
||||||
|
|
||||||
var _rtStr = _rangeMin;
|
var _rtStr = min(_rangeMin, _rangeMax);
|
||||||
var _rtLen = _rangeMax - _rangeMin;
|
var _rtMax = max(_rangeMin, _rangeMax);
|
||||||
|
|
||||||
var _use_path = _pat != noone;
|
var _use_path = _pat != noone;
|
||||||
|
|
||||||
|
@ -150,30 +150,31 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
else if(struct_has(_pat, "getLineCount"))
|
else if(struct_has(_pat, "getLineCount"))
|
||||||
lineLen = _pat.getLineCount();
|
lineLen = _pat.getLineCount();
|
||||||
|
|
||||||
|
if(_rtMax > 0)
|
||||||
for( var i = 0; i < lineLen; i++ ) {
|
for( var i = 0; i < lineLen; i++ ) {
|
||||||
var ww = min(_rtLen, 1 / _seg);
|
var _stepLen = min(_rtMax, 1 / _seg);
|
||||||
|
if(_stepLen <= 0.00001) continue;
|
||||||
|
|
||||||
var _total = _rtLen;
|
var _total = _rtMax;
|
||||||
var _total_prev = _total;
|
var _total_prev = _total;
|
||||||
var _freeze = 0;
|
var _freeze = 0;
|
||||||
var _prog_curr = frac(_shift + _rtStr) - ww;
|
var _prog_curr = frac(_shift) - _stepLen;
|
||||||
var _prog = _prog_curr + 1;
|
var _prog = _prog_curr + 1;
|
||||||
var _prog_eli = 0;
|
var _prog_total = 0;
|
||||||
var points = [];
|
var points = [];
|
||||||
|
|
||||||
while(_total > 0) {
|
while(_total > 0) {
|
||||||
if(_rtLen == 0) break;
|
if(_prog_curr >= 1) //cut overflow path
|
||||||
if(ww <= 0.001) break;
|
_prog_curr = frac(_prog_curr);
|
||||||
|
else
|
||||||
if(_prog_curr >= 1) _prog_curr = frac(_prog_curr);
|
_prog_curr = min(_prog_curr + min(_total, _stepLen), 1); //move forward _stepLen or _total (if less) stop at 1
|
||||||
else _prog_curr = min(_prog_curr + min(_total, ww), 1);
|
_prog_total += min(_total, _stepLen);
|
||||||
_prog_eli = _prog_eli + min(_total, ww);
|
|
||||||
|
|
||||||
var p = arrPath? _pat[i].getPointRatio(_prog_curr) : _pat.getPointRatio(_prog_curr, i);
|
var p = arrPath? _pat[i].getPointRatio(_prog_curr) : _pat.getPointRatio(_prog_curr, i);
|
||||||
_nx = p[0];
|
_nx = p[0];
|
||||||
_ny = p[1];
|
_ny = p[1];
|
||||||
|
|
||||||
if(_total < _rtLen) {
|
if(_total < _rtMax) {
|
||||||
var _d = point_direction(_ox, _oy, _nx, _ny);
|
var _d = point_direction(_ox, _oy, _nx, _ny);
|
||||||
_nx += lengthdir_x(random1D(_sed + _sedIndex, -_wig, _wig), _d + 90);
|
_nx += lengthdir_x(random1D(_sed + _sedIndex, -_wig, _wig), _d + 90);
|
||||||
_sedIndex++;
|
_sedIndex++;
|
||||||
|
@ -182,11 +183,12 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
_sedIndex++;
|
_sedIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
array_push(points, [_nx, _ny, _prog_eli / _rtLen, _prog_curr]);
|
if(_prog_total > _rtStr) //prevent drawing point before range start.
|
||||||
|
array_push(points, [_nx, _ny, _prog_total / _rtMax, _prog_curr]);
|
||||||
|
|
||||||
if(_prog_curr > _prog)
|
if(_prog_curr > _prog)
|
||||||
_total -= _prog_curr - _prog;
|
_total -= _prog_curr - _prog;
|
||||||
|
|
||||||
_prog = _prog_curr;
|
_prog = _prog_curr;
|
||||||
_ox = _nx;
|
_ox = _nx;
|
||||||
_oy = _ny;
|
_oy = _ny;
|
||||||
|
@ -195,7 +197,7 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
_total_prev = _total;
|
_total_prev = _total;
|
||||||
}
|
}
|
||||||
|
|
||||||
lines[i] = points;
|
array_push(lines, points);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var x0, y0, x1, y1;
|
var x0, y0, x1, y1;
|
||||||
|
@ -208,17 +210,17 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
var _d = point_direction(x0, y0, x1, y1);
|
var _d = point_direction(x0, y0, x1, y1);
|
||||||
var _od = _d, _nd = _d;
|
var _od = _d, _nd = _d;
|
||||||
|
|
||||||
var ww = _rtLen / _seg;
|
var ww = _rtMax / _seg;
|
||||||
var _total = _rtLen;
|
var _total = _rtMax;
|
||||||
var _prog_curr = frac(_shift + _rtStr) - ww;
|
var _prog_curr = frac(_shift) - ww;
|
||||||
var _prog = _prog_curr + 1;
|
var _prog = _prog_curr + 1;
|
||||||
var _prog_eli = 0;
|
var _prog_total = 0;
|
||||||
var points = [];
|
var points = [];
|
||||||
|
|
||||||
while(_total > 0) {
|
while(_total > 0) {
|
||||||
if(_prog_curr >= 1) _prog_curr = 0;
|
if(_prog_curr >= 1) _prog_curr = 0;
|
||||||
else _prog_curr = min(_prog_curr + min(_total, ww), 1);
|
else _prog_curr = min(_prog_curr + min(_total, ww), 1);
|
||||||
_prog_eli += min(_total, ww);
|
_prog_total += min(_total, ww);
|
||||||
|
|
||||||
_nx = x0 + lengthdir_x(_l * _prog_curr, _d);
|
_nx = x0 + lengthdir_x(_l * _prog_curr, _d);
|
||||||
_ny = y0 + lengthdir_y(_l * _prog_curr, _d);
|
_ny = y0 + lengthdir_y(_l * _prog_curr, _d);
|
||||||
|
@ -227,7 +229,8 @@ function Node_Line(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
_nx += lengthdir_x(wgLen, _d + 90);
|
_nx += lengthdir_x(wgLen, _d + 90);
|
||||||
_ny += lengthdir_y(wgLen, _d + 90);
|
_ny += lengthdir_y(wgLen, _d + 90);
|
||||||
|
|
||||||
array_push(points, [_nx, _ny, _prog_eli / _rtLen, _prog_curr]);
|
if(_prog_total > _rtStr) //prevent drawing point before range start.
|
||||||
|
array_push(points, [_nx, _ny, _prog_total / _rtMax, _prog_curr]);
|
||||||
|
|
||||||
if(_prog_curr > _prog)
|
if(_prog_curr > _prog)
|
||||||
_total -= (_prog_curr - _prog);
|
_total -= (_prog_curr - _prog);
|
||||||
|
|
|
@ -5,7 +5,7 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
inputs[| 0] = nodeValue("Function name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "render" + string(irandom_range(100000, 999999)));
|
inputs[| 0] = nodeValue("Function name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "render" + string(irandom_range(100000, 999999)));
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Return type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
inputs[| 1] = nodeValue("Return type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Number", "String" ], { update_hover: false });
|
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Number", "String", "Struct" ], { update_hover: false });
|
||||||
|
|
||||||
inputs[| 2] = nodeValue("Lua code", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "", o_dialog_lua_reference)
|
inputs[| 2] = nodeValue("Lua code", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "", o_dialog_lua_reference)
|
||||||
.setDisplay(VALUE_DISPLAY.code);
|
.setDisplay(VALUE_DISPLAY.code);
|
||||||
|
@ -13,12 +13,14 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
inputs[| 3] = nodeValue("Execution thread", self, JUNCTION_CONNECT.input, VALUE_TYPE.node, noone)
|
inputs[| 3] = nodeValue("Execution thread", self, JUNCTION_CONNECT.input, VALUE_TYPE.node, noone)
|
||||||
.setVisible(false, true);
|
.setVisible(false, true);
|
||||||
|
|
||||||
|
inputs[| 4] = nodeValue("Execute on frame", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true)
|
||||||
|
|
||||||
static createNewInput = function() {
|
static createNewInput = function() {
|
||||||
var index = ds_list_size(inputs);
|
var index = ds_list_size(inputs);
|
||||||
inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
|
inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
|
||||||
|
|
||||||
inputs[| index + 1] = nodeValue("Argument type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
|
inputs[| index + 1] = nodeValue("Argument type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
|
||||||
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Number", "String", "Surface" ], { update_hover: false });
|
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Number", "String", "Surface", "Struct" ], { update_hover: false });
|
||||||
inputs[| index + 1].editWidget.interactable = false;
|
inputs[| index + 1].editWidget.interactable = false;
|
||||||
|
|
||||||
inputs[| index + 2] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 )
|
inputs[| index + 2] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 )
|
||||||
|
@ -32,7 +34,7 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
|
|
||||||
luaArgumentRenderer();
|
luaArgumentRenderer();
|
||||||
|
|
||||||
input_display_list = [ 3,
|
input_display_list = [ 3, 4,
|
||||||
["Function", false], 0, 1,
|
["Function", false], 0, 1,
|
||||||
["Arguments", false], argument_renderer,
|
["Arguments", false], argument_renderer,
|
||||||
["Script", false], 2,
|
["Script", false], 2,
|
||||||
|
@ -47,6 +49,7 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
argument_val = [];
|
argument_val = [];
|
||||||
|
|
||||||
lua_state = lua_create();
|
lua_state = lua_create();
|
||||||
|
lua_error_handler = _lua_error;
|
||||||
|
|
||||||
error_notification = noone;
|
error_notification = noone;
|
||||||
compiled = false;
|
compiled = false;
|
||||||
|
@ -73,8 +76,9 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
|
|
||||||
var _type = inputs[| 1].getValue();
|
var _type = inputs[| 1].getValue();
|
||||||
switch(_type) {
|
switch(_type) {
|
||||||
case 0 : outputs[| 1].type = VALUE_TYPE.float; break;
|
case 0 : outputs[| 1].type = VALUE_TYPE.float; break;
|
||||||
case 1 : outputs[| 1].type = VALUE_TYPE.text; break;
|
case 1 : outputs[| 1].type = VALUE_TYPE.text; break;
|
||||||
|
case 2 : outputs[| 1].type = VALUE_TYPE.struct; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +103,8 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
ds_list_add(_in, inputs[| i + 2]);
|
ds_list_add(_in, inputs[| i + 2]);
|
||||||
|
|
||||||
inputs[| i + 1].editWidget.interactable = true;
|
inputs[| i + 1].editWidget.interactable = true;
|
||||||
inputs[| i + 2].editWidget.interactable = true;
|
if(inputs[| i + 2].editWidget != noone)
|
||||||
|
inputs[| i + 2].editWidget.interactable = true;
|
||||||
|
|
||||||
array_push(input_display_list, i + 2);
|
array_push(input_display_list, i + 2);
|
||||||
} else {
|
} else {
|
||||||
|
@ -146,6 +151,7 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
case 0 : inputs[| index + 1].type = VALUE_TYPE.float; break;
|
case 0 : inputs[| index + 1].type = VALUE_TYPE.float; break;
|
||||||
case 1 : inputs[| index + 1].type = VALUE_TYPE.text; break;
|
case 1 : inputs[| index + 1].type = VALUE_TYPE.text; break;
|
||||||
case 2 : inputs[| index + 1].type = VALUE_TYPE.surface; break;
|
case 2 : inputs[| index + 1].type = VALUE_TYPE.surface; break;
|
||||||
|
case 3 : inputs[| index + 1].type = VALUE_TYPE.struct; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
inputs[| index + 1].setDisplay(VALUE_DISPLAY._default);
|
inputs[| index + 1].setDisplay(VALUE_DISPLAY._default);
|
||||||
|
@ -167,30 +173,30 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
|
|
||||||
var _func = inputs[| 0].getValue();
|
var _func = inputs[| 0].getValue();
|
||||||
var _dimm = inputs[| 1].getValue();
|
var _dimm = inputs[| 1].getValue();
|
||||||
|
var _exec = inputs[| 4].getValue();
|
||||||
|
|
||||||
|
if(!_exec) return;
|
||||||
|
|
||||||
argument_val = [];
|
argument_val = [];
|
||||||
for( var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length ) {
|
for( var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length )
|
||||||
array_push(argument_val, inputs[| i + 2].getValue());
|
array_push(argument_val, inputs[| i + 2].getValue());
|
||||||
}
|
|
||||||
|
|
||||||
if(ANIMATOR.current_frame == 0) { //rerfesh state on the first frame
|
//if(ANIMATOR.current_frame == 0) { //rerfesh state on the first frame
|
||||||
lua_state_destroy(lua_state);
|
// lua_state_destroy(lua_state);
|
||||||
lua_state = lua_create();
|
// lua_state = lua_create();
|
||||||
}
|
// addCode();
|
||||||
|
//}
|
||||||
|
|
||||||
lua_projectData(getState());
|
lua_projectData(getState());
|
||||||
|
|
||||||
var res = 0;
|
var res = 0;
|
||||||
try {
|
try res = lua_call_w(getState(), _func, argument_val);
|
||||||
res = lua_call_w(getState(), _func, argument_val);
|
catch(e) noti_warning(exception_print(e),, self);
|
||||||
} catch(e) {
|
|
||||||
noti_warning(exception_print(e),, self);
|
|
||||||
}
|
|
||||||
|
|
||||||
outputs[| 1].setValue(res);
|
outputs[| 1].setValue(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
static onInspectorUpdate = function() { //compile
|
static addCode = function() {
|
||||||
var _func = inputs[| 0].getValue();
|
var _func = inputs[| 0].getValue();
|
||||||
var _code = inputs[| 2].getValue();
|
var _code = inputs[| 2].getValue();
|
||||||
argument_name = [];
|
argument_name = [];
|
||||||
|
@ -207,8 +213,13 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
lua_code += ")\n";
|
lua_code += ")\n";
|
||||||
lua_code += _code;
|
lua_code += _code;
|
||||||
lua_code += "\nend";
|
lua_code += "\nend";
|
||||||
|
//print(lua_code);
|
||||||
|
|
||||||
lua_add_code(getState(), lua_code);
|
lua_add_code(getState(), lua_code);
|
||||||
|
}
|
||||||
|
|
||||||
|
static onInspectorUpdate = function() { //compile
|
||||||
|
addCode();
|
||||||
|
|
||||||
compiled = true;
|
compiled = true;
|
||||||
|
|
||||||
|
@ -224,6 +235,9 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
static postDeserialize = function() {
|
static postDeserialize = function() {
|
||||||
var _inputs = load_map[? "inputs"];
|
var _inputs = load_map[? "inputs"];
|
||||||
|
|
||||||
|
if(LOADING_VERSION < 1380 && !CLONING)
|
||||||
|
ds_list_insert(_inputs, 4, noone);
|
||||||
|
|
||||||
for(var i = input_fix_len; i < ds_list_size(_inputs); i += data_length)
|
for(var i = input_fix_len; i < ds_list_size(_inputs); i += data_length)
|
||||||
createNewInput();
|
createNewInput();
|
||||||
}
|
}
|
||||||
|
@ -241,6 +255,7 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
case 0 : inputs[| i + 2].type = VALUE_TYPE.float; break;
|
case 0 : inputs[| i + 2].type = VALUE_TYPE.float; break;
|
||||||
case 1 : inputs[| i + 2].type = VALUE_TYPE.text; break;
|
case 1 : inputs[| i + 2].type = VALUE_TYPE.text; break;
|
||||||
case 2 : inputs[| i + 2].type = VALUE_TYPE.surface; break;
|
case 2 : inputs[| i + 2].type = VALUE_TYPE.surface; break;
|
||||||
|
case 3 : inputs[| i + 2].type = VALUE_TYPE.struct; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
inputs[| i + 2].setDisplay(VALUE_DISPLAY._default);
|
inputs[| i + 2].setDisplay(VALUE_DISPLAY._default);
|
||||||
|
|
|
@ -19,6 +19,7 @@ function Node_Lua_Global(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
];
|
];
|
||||||
|
|
||||||
lua_state = lua_create();
|
lua_state = lua_create();
|
||||||
|
lua_error_handler = _lua_error;
|
||||||
|
|
||||||
is_beginning = false;
|
is_beginning = false;
|
||||||
error_notification = noone;
|
error_notification = noone;
|
||||||
|
@ -65,18 +66,17 @@ function Node_Lua_Global(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
var _code = inputs[| 0].getValue();
|
var _code = inputs[| 0].getValue();
|
||||||
var _type = inputs[| 1].getValue();
|
var _type = inputs[| 1].getValue();
|
||||||
|
|
||||||
if(ANIMATOR.current_frame == 0) { //rerfesh state on the first frame
|
//if(ANIMATOR.current_frame == 0) { //rerfesh state on the first frame
|
||||||
lua_state_destroy(lua_state);
|
// lua_state_destroy(lua_state);
|
||||||
lua_state = lua_create();
|
// lua_state = lua_create();
|
||||||
}
|
// addCode();
|
||||||
|
//}
|
||||||
|
|
||||||
lua_projectData(getState());
|
lua_projectData(getState());
|
||||||
|
|
||||||
if(ANIMATOR.current_frame == 0 || _type == 1) {
|
if(ANIMATOR.current_frame == 0 || _type == 1) {
|
||||||
try
|
try lua_add_code(getState(), _code);
|
||||||
lua_add_code(getState(), _code);
|
catch(e) noti_warning(exception_print(e),, self);
|
||||||
catch(e)
|
|
||||||
noti_warning(exception_print(e),, self);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,12 +13,14 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
inputs[| 3] = nodeValue("Execution thread", self, JUNCTION_CONNECT.input, VALUE_TYPE.node, noone)
|
inputs[| 3] = nodeValue("Execution thread", self, JUNCTION_CONNECT.input, VALUE_TYPE.node, noone)
|
||||||
.setVisible(false, true);
|
.setVisible(false, true);
|
||||||
|
|
||||||
|
inputs[| 4] = nodeValue("Execute on frame", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true)
|
||||||
|
|
||||||
static createNewInput = function() {
|
static createNewInput = function() {
|
||||||
var index = ds_list_size(inputs);
|
var index = ds_list_size(inputs);
|
||||||
inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
|
inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
|
||||||
|
|
||||||
inputs[| index + 1] = nodeValue("Argument type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
|
inputs[| index + 1] = nodeValue("Argument type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
|
||||||
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Number", "String", "Surface" ], { update_hover: false });
|
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Number", "String", "Surface", "Struct" ], { update_hover: false });
|
||||||
inputs[| index + 1].editWidget.interactable = false;
|
inputs[| index + 1].editWidget.interactable = false;
|
||||||
|
|
||||||
inputs[| index + 2] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 )
|
inputs[| index + 2] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 )
|
||||||
|
@ -32,7 +34,7 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
|
|
||||||
luaArgumentRenderer();
|
luaArgumentRenderer();
|
||||||
|
|
||||||
input_display_list = [ 3,
|
input_display_list = [ 3, 4,
|
||||||
["Function", false], 0, 1,
|
["Function", false], 0, 1,
|
||||||
["Arguments", false], argument_renderer,
|
["Arguments", false], argument_renderer,
|
||||||
["Script", false], 2,
|
["Script", false], 2,
|
||||||
|
@ -47,6 +49,7 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
argument_val = [];
|
argument_val = [];
|
||||||
|
|
||||||
lua_state = lua_create();
|
lua_state = lua_create();
|
||||||
|
lua_error_handler = _lua_error;
|
||||||
|
|
||||||
error_notification = noone;
|
error_notification = noone;
|
||||||
compiled = false;
|
compiled = false;
|
||||||
|
@ -93,7 +96,8 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
ds_list_add(_in, inputs[| i + 2]);
|
ds_list_add(_in, inputs[| i + 2]);
|
||||||
|
|
||||||
inputs[| i + 1].editWidget.interactable = true;
|
inputs[| i + 1].editWidget.interactable = true;
|
||||||
inputs[| i + 2].editWidget.interactable = true;
|
if(inputs[| i + 2].editWidget != noone)
|
||||||
|
inputs[| i + 2].editWidget.interactable = true;
|
||||||
|
|
||||||
if(LOADING || APPENDING) {
|
if(LOADING || APPENDING) {
|
||||||
var type = inputs[| i + 1].getValue();
|
var type = inputs[| i + 1].getValue();
|
||||||
|
@ -101,6 +105,7 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
case 0 : inputs[| i + 2].type = VALUE_TYPE.float; break;
|
case 0 : inputs[| i + 2].type = VALUE_TYPE.float; break;
|
||||||
case 1 : inputs[| i + 2].type = VALUE_TYPE.text; break;
|
case 1 : inputs[| i + 2].type = VALUE_TYPE.text; break;
|
||||||
case 2 : inputs[| i + 2].type = VALUE_TYPE.surface; break;
|
case 2 : inputs[| i + 2].type = VALUE_TYPE.surface; break;
|
||||||
|
case 3 : inputs[| i + 2].type = VALUE_TYPE.struct; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
inputs[| i + 2].setDisplay(VALUE_DISPLAY._default);
|
inputs[| i + 2].setDisplay(VALUE_DISPLAY._default);
|
||||||
|
@ -151,6 +156,7 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
case 0 : inputs[| index + 1].type = VALUE_TYPE.float; break;
|
case 0 : inputs[| index + 1].type = VALUE_TYPE.float; break;
|
||||||
case 1 : inputs[| index + 1].type = VALUE_TYPE.text; break;
|
case 1 : inputs[| index + 1].type = VALUE_TYPE.text; break;
|
||||||
case 2 : inputs[| index + 1].type = VALUE_TYPE.surface; break;
|
case 2 : inputs[| index + 1].type = VALUE_TYPE.surface; break;
|
||||||
|
case 3 : inputs[| index + 1].type = VALUE_TYPE.struct; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
inputs[| index + 1].setDisplay(VALUE_DISPLAY._default);
|
inputs[| index + 1].setDisplay(VALUE_DISPLAY._default);
|
||||||
|
@ -172,16 +178,20 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
|
|
||||||
var _func = inputs[| 0].getValue();
|
var _func = inputs[| 0].getValue();
|
||||||
var _dimm = inputs[| 1].getValue();
|
var _dimm = inputs[| 1].getValue();
|
||||||
|
var _exec = inputs[| 4].getValue();
|
||||||
|
|
||||||
|
if(!_exec) return;
|
||||||
|
|
||||||
argument_val = [];
|
argument_val = [];
|
||||||
for( var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length ) {
|
for( var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length ) {
|
||||||
array_push(argument_val, inputs[| i + 2].getValue());
|
array_push(argument_val, inputs[| i + 2].getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ANIMATOR.current_frame == 0) { //rerfesh state on the first frame
|
//if(ANIMATOR.current_frame == 0) { //rerfesh state on the first frame
|
||||||
lua_state_destroy(lua_state);
|
// lua_state_destroy(lua_state);
|
||||||
lua_state = lua_create();
|
// lua_state = lua_create();
|
||||||
}
|
// addCode();
|
||||||
|
//}
|
||||||
|
|
||||||
lua_projectData(getState());
|
lua_projectData(getState());
|
||||||
|
|
||||||
|
@ -189,17 +199,14 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
_outSurf = surface_verify(_outSurf, _dimm[0], _dimm[1]);
|
_outSurf = surface_verify(_outSurf, _dimm[0], _dimm[1]);
|
||||||
|
|
||||||
surface_set_target(_outSurf);
|
surface_set_target(_outSurf);
|
||||||
try {
|
try lua_call_w(getState(), _func, argument_val);
|
||||||
lua_call_w(getState(), _func, argument_val);
|
catch(e) noti_warning(exception_print(e),, self);
|
||||||
} catch(e) {
|
|
||||||
noti_warning(exception_print(e),, self);
|
|
||||||
}
|
|
||||||
surface_reset_target();
|
surface_reset_target();
|
||||||
|
|
||||||
outputs[| 1].setValue(_outSurf);
|
outputs[| 1].setValue(_outSurf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static onInspectorUpdate = function() { //compile
|
static addCode = function() {
|
||||||
var _func = inputs[| 0].getValue();
|
var _func = inputs[| 0].getValue();
|
||||||
var _code = inputs[| 2].getValue();
|
var _code = inputs[| 2].getValue();
|
||||||
argument_name = [];
|
argument_name = [];
|
||||||
|
@ -218,7 +225,10 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
lua_code += "\nend";
|
lua_code += "\nend";
|
||||||
|
|
||||||
lua_add_code(getState(), lua_code);
|
lua_add_code(getState(), lua_code);
|
||||||
|
}
|
||||||
|
|
||||||
|
static onInspectorUpdate = function() { //compile
|
||||||
|
addCode();
|
||||||
compiled = true;
|
compiled = true;
|
||||||
|
|
||||||
for( var i = 0; i < ds_list_size(outputs[| 0].value_to); i++ ) {
|
for( var i = 0; i < ds_list_size(outputs[| 0].value_to); i++ ) {
|
||||||
|
@ -233,6 +243,9 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
static postDeserialize = function() {
|
static postDeserialize = function() {
|
||||||
var _inputs = load_map[? "inputs"];
|
var _inputs = load_map[? "inputs"];
|
||||||
|
|
||||||
|
if(LOADING_VERSION < 1380 && !CLONING)
|
||||||
|
ds_list_insert(_inputs, 4, noone);
|
||||||
|
|
||||||
for(var i = input_fix_len; i < ds_list_size(_inputs); i += data_length)
|
for(var i = input_fix_len; i < ds_list_size(_inputs); i += data_length)
|
||||||
createNewInput();
|
createNewInput();
|
||||||
}
|
}
|
||||||
|
@ -250,6 +263,7 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru
|
||||||
case 0 : inputs[| i + 2].type = VALUE_TYPE.float; break;
|
case 0 : inputs[| i + 2].type = VALUE_TYPE.float; break;
|
||||||
case 1 : inputs[| i + 2].type = VALUE_TYPE.text; break;
|
case 1 : inputs[| i + 2].type = VALUE_TYPE.text; break;
|
||||||
case 2 : inputs[| i + 2].type = VALUE_TYPE.surface; break;
|
case 2 : inputs[| i + 2].type = VALUE_TYPE.surface; break;
|
||||||
|
case 3 : inputs[| i + 2].type = VALUE_TYPE.struct; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
inputs[| i + 2].setDisplay(VALUE_DISPLAY._default);
|
inputs[| i + 2].setDisplay(VALUE_DISPLAY._default);
|
||||||
|
|
|
@ -14,18 +14,21 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
.setDisplay(VALUE_DISPLAY.enum_scroll, ["Entire line", "Segment"])
|
.setDisplay(VALUE_DISPLAY.enum_scroll, ["Entire line", "Segment"])
|
||||||
.rejectArray();
|
.rejectArray();
|
||||||
|
|
||||||
|
inputs[| 3] = nodeValue("Round anchor", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false)
|
||||||
|
.rejectArray();
|
||||||
|
|
||||||
input_display_list = [
|
input_display_list = [
|
||||||
["Path", false], 0, 2, 1,
|
["Path", false], 0, 2, 1, 3,
|
||||||
["Anchors", false],
|
["Anchors", false],
|
||||||
];
|
];
|
||||||
|
|
||||||
input_fix_len = ds_list_size(inputs);
|
input_fix_len = ds_list_size(inputs);
|
||||||
input_display_list_len = array_length(input_display_list);
|
input_display_list_len = array_length(input_display_list);
|
||||||
|
|
||||||
function createAnchor(_x, _y) {
|
function createAnchor(_x, _y, _dxx = 0, _dxy = 0, _dyx = 0, _dyy = 0) {
|
||||||
var index = ds_list_size(inputs);
|
var index = ds_list_size(inputs);
|
||||||
|
|
||||||
inputs[| index] = nodeValue("Anchor", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ _x, _y, 0, 0, 0, 0 ])
|
inputs[| index] = nodeValue("Anchor", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ _x, _y, _dxx, _dxy, _dyx, _dyy ])
|
||||||
.setDisplay(VALUE_DISPLAY.vector);
|
.setDisplay(VALUE_DISPLAY.vector);
|
||||||
array_push(input_display_list, index);
|
array_push(input_display_list, index);
|
||||||
|
|
||||||
|
@ -37,11 +40,16 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
|
||||||
outputs[| 1] = nodeValue("Path data", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self);
|
outputs[| 1] = nodeValue("Path data", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self);
|
||||||
|
|
||||||
|
tool_pathDrawer = new NodeTool( "Draw path", THEME.path_tools_draw )
|
||||||
|
.addSetting("Smoothness", VALUE_TYPE.float, function(val) { tool_pathDrawer.attribute.thres = val; }, "thres", 4)
|
||||||
|
.addSetting("Replace", VALUE_TYPE.boolean, function() { tool_pathDrawer.attribute.create = !tool_pathDrawer.attribute.create; }, "create", true);
|
||||||
|
|
||||||
tools = [
|
tools = [
|
||||||
[ "Anchor add / remove (+ Shift)", THEME.path_tools_add ],
|
new NodeTool( "Anchor add / remove (+ Shift)", THEME.path_tools_add ),
|
||||||
[ "Edit Control point", THEME.path_tools_anchor ],
|
new NodeTool( "Edit Control point", THEME.path_tools_anchor ),
|
||||||
[ "Rectangle path", THEME.path_tools_rectangle ],
|
tool_pathDrawer,
|
||||||
[ "Circle path", THEME.path_tools_circle ],
|
new NodeTool( "Rectangle path", THEME.path_tools_rectangle ),
|
||||||
|
new NodeTool( "Circle path", THEME.path_tools_circle ),
|
||||||
];
|
];
|
||||||
|
|
||||||
anchors = [];
|
anchors = [];
|
||||||
|
@ -49,6 +57,7 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
length_total = 0;
|
length_total = 0;
|
||||||
|
|
||||||
drag_point = -1;
|
drag_point = -1;
|
||||||
|
drag_points = [];
|
||||||
drag_type = 0;
|
drag_type = 0;
|
||||||
drag_point_mx = 0;
|
drag_point_mx = 0;
|
||||||
drag_point_my = 0;
|
drag_point_my = 0;
|
||||||
|
@ -69,11 +78,11 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
var sample = PREF_MAP[? "path_resolution"];
|
var sample = PREF_MAP[? "path_resolution"];
|
||||||
var loop = inputs[| 1].getValue();
|
var loop = inputs[| 1].getValue();
|
||||||
var ansize = ds_list_size(inputs) - input_fix_len;
|
var ansize = ds_list_size(inputs) - input_fix_len;
|
||||||
|
|
||||||
if(drag_point > -1) {
|
if(drag_point > -1) {
|
||||||
var dx = value_snap(drag_point_sx + (_mx - drag_point_mx) / _s, _snx);
|
var dx = value_snap(drag_point_sx + (_mx - drag_point_mx) / _s, _snx);
|
||||||
var dy = value_snap(drag_point_sy + (_my - drag_point_my) / _s, _sny);
|
var dy = value_snap(drag_point_sy + (_my - drag_point_my) / _s, _sny);
|
||||||
|
|
||||||
if(drag_type < 2) {
|
if(drag_type < 2) {
|
||||||
var inp = inputs[| input_fix_len + drag_point];
|
var inp = inputs[| input_fix_len + drag_point];
|
||||||
var anc = inp.getValue();
|
var anc = inp.getValue();
|
||||||
|
@ -110,6 +119,106 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
|
||||||
inp.setValue(anc);
|
inp.setValue(anc);
|
||||||
} else if(drag_type == 2) {
|
} else if(drag_type == 2) {
|
||||||
|
var ox, oy, nx, ny;
|
||||||
|
var pxx = (_mx - _x) / _s;
|
||||||
|
var pxy = (_my - _y) / _s;
|
||||||
|
|
||||||
|
draw_set_color(COLORS._main_accent);
|
||||||
|
for( var i = 0; i < array_length(drag_points); i++ ) {
|
||||||
|
var _p = drag_points[i];
|
||||||
|
nx = _x + _p[0] * _s;
|
||||||
|
ny = _y + _p[1] * _s;
|
||||||
|
|
||||||
|
if(i)
|
||||||
|
draw_line(ox, oy, nx, ny);
|
||||||
|
|
||||||
|
ox = nx;
|
||||||
|
oy = ny;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(point_distance(drag_point_mx, drag_point_my, pxx, pxy) > 4) {
|
||||||
|
array_push(drag_points, [ pxx, pxy ]);
|
||||||
|
|
||||||
|
drag_point_mx = pxx;
|
||||||
|
drag_point_my = pxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mouse_release(mb_left)) {
|
||||||
|
var amo = array_length(drag_points);
|
||||||
|
var _p = 0;
|
||||||
|
var points = [];
|
||||||
|
var thres = tool_pathDrawer.attribute.thres;
|
||||||
|
var replace = tool_pathDrawer.attribute.create;
|
||||||
|
var asize = ds_list_size(inputs) - input_fix_len;
|
||||||
|
|
||||||
|
for( var i = 0; i < amo; i++ ) {
|
||||||
|
var pT = drag_points[i];
|
||||||
|
|
||||||
|
if(i == 0 || i == amo - 1) {
|
||||||
|
array_push(points, i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var maxT = 0;
|
||||||
|
var pF = drag_points[_p];
|
||||||
|
|
||||||
|
for( var j = _p; j < i; j++ ) {
|
||||||
|
var pP = drag_points[j];
|
||||||
|
|
||||||
|
maxT = max(maxT, distance_to_line(pP[0], pP[1], pF[0], pF[1], pT[0], pT[1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(maxT >= thres) {
|
||||||
|
array_push(points, i);
|
||||||
|
_p = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var amo = array_length(points);
|
||||||
|
if(!replace) amo = min(amo, asize);
|
||||||
|
|
||||||
|
var i = 0;
|
||||||
|
var anc = [];
|
||||||
|
|
||||||
|
for( i = 0; i < amo; i++ ) {
|
||||||
|
var _ind = points[i];
|
||||||
|
var _p = drag_points[_ind];
|
||||||
|
var dxx = 0;
|
||||||
|
var dxy = 0;
|
||||||
|
var dyx = 0;
|
||||||
|
var dyy = 0;
|
||||||
|
|
||||||
|
if(i > 0 && i < amo - 1) {
|
||||||
|
var _p0 = drag_points[points[i - 1]];
|
||||||
|
var _p1 = drag_points[points[i + 1]];
|
||||||
|
|
||||||
|
var d0 = point_direction(_p0[0], _p0[1], _p[0], _p[1]);
|
||||||
|
var d1 = point_direction(_p[0], _p[1], _p1[0], _p1[1]);
|
||||||
|
|
||||||
|
var dd = d0 + angle_difference(d1, d0) / 2;
|
||||||
|
var ds0 = point_distance(_p0[0], _p0[1], _p[0], _p[1]);
|
||||||
|
var ds1 = point_distance(_p[0], _p[1], _p1[0], _p1[1]);
|
||||||
|
|
||||||
|
dxx = lengthdir_x(ds0 / 3, dd + 180);
|
||||||
|
dxy = lengthdir_y(ds0 / 3, dd + 180);
|
||||||
|
dyx = lengthdir_x(ds1 / 3, dd);
|
||||||
|
dyy = lengthdir_y(ds1 / 3, dd);
|
||||||
|
}
|
||||||
|
|
||||||
|
anc = [_p[0], _p[1], dxx, dxy, dyx, dyy];
|
||||||
|
if(input_fix_len + i >= ds_list_size(inputs))
|
||||||
|
createAnchor(_p[0], _p[1], dxx, dxy, dyx, dyy);
|
||||||
|
else
|
||||||
|
inputs[| input_fix_len + i].setValue(anc);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!replace) {
|
||||||
|
for(; i < asize; i++ ) {
|
||||||
|
inputs[| input_fix_len + i].setValue(anc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(drag_type == 3) {
|
||||||
var minx = min((_mx - _x) / _s, (drag_point_mx - _x) / _s);
|
var minx = min((_mx - _x) / _s, (drag_point_mx - _x) / _s);
|
||||||
var maxx = max((_mx - _x) / _s, (drag_point_mx - _x) / _s);
|
var maxx = max((_mx - _x) / _s, (drag_point_mx - _x) / _s);
|
||||||
var miny = min((_my - _y) / _s, (drag_point_my - _y) / _s);
|
var miny = min((_my - _y) / _s, (drag_point_my - _y) / _s);
|
||||||
|
@ -144,7 +253,7 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
|
||||||
for( var i = 0; i < 4; i++ )
|
for( var i = 0; i < 4; i++ )
|
||||||
inputs[| input_fix_len + i].setValue(a[i]);
|
inputs[| input_fix_len + i].setValue(a[i]);
|
||||||
} else if(drag_type == 3) {
|
} else if(drag_type == 4) {
|
||||||
var minx = min((_mx - _x) / _s, (drag_point_mx - _x) / _s);
|
var minx = min((_mx - _x) / _s, (drag_point_mx - _x) / _s);
|
||||||
var maxx = max((_mx - _x) / _s, (drag_point_mx - _x) / _s);
|
var maxx = max((_mx - _x) / _s, (drag_point_mx - _x) / _s);
|
||||||
var miny = min((_my - _y) / _s, (drag_point_my - _y) / _s);
|
var miny = min((_my - _y) / _s, (drag_point_my - _y) / _s);
|
||||||
|
@ -197,7 +306,6 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
inputs[| input_fix_len + i].setValue(a[i]);
|
inputs[| input_fix_len + i].setValue(a[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(mouse_release(mb_left))
|
if(mouse_release(mb_left))
|
||||||
drag_point = -1;
|
drag_point = -1;
|
||||||
}
|
}
|
||||||
|
@ -225,7 +333,7 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
_ny = _y + p[1] * _s;
|
_ny = _y + p[1] * _s;
|
||||||
|
|
||||||
if(j) {
|
if(j) {
|
||||||
if((key_mod_press(CTRL) || PANEL_PREVIEW.tool_index == 0) && distance_to_line(_mx, _my, _ox, _oy, _nx, _ny) < 4)
|
if((key_mod_press(CTRL) || isUsingTool(0)) && distance_to_line(_mx, _my, _ox, _oy, _nx, _ny) < 4)
|
||||||
line_hover = i;
|
line_hover = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,10 +416,44 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
hover_type = -1;
|
hover_type = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(isUsingTool(2)) {
|
||||||
|
draw_sprite_ui_uniform(THEME.path_tools_draw, 0, _mx + 16, _my + 16);
|
||||||
|
|
||||||
if(anchor_hover != -1) {
|
if(mouse_press(mb_left, active)) {
|
||||||
|
var replace = tool_pathDrawer.attribute.create;
|
||||||
|
if(replace) {
|
||||||
|
while(ds_list_size(inputs) > input_fix_len)
|
||||||
|
ds_list_delete(inputs, input_fix_len);
|
||||||
|
array_resize(input_display_list, input_display_list_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
drag_point = 0;
|
||||||
|
drag_type = 2;
|
||||||
|
drag_points = [ [ (_mx - _x) / _s, (_my - _y) / _s ] ];
|
||||||
|
drag_point_mx = (_mx - _x) / _s;
|
||||||
|
drag_point_my = (_my - _y) / _s;
|
||||||
|
}
|
||||||
|
} else if(isUsingTool(3) || isUsingTool(4)) {
|
||||||
|
draw_sprite_ui_uniform(THEME.cursor_path_add, 0, _mx + 16, _my + 16);
|
||||||
|
|
||||||
|
if(mouse_press(mb_left, active)) {
|
||||||
|
while(ds_list_size(inputs) > input_fix_len)
|
||||||
|
ds_list_delete(inputs, input_fix_len);
|
||||||
|
array_resize(input_display_list, input_display_list_len);
|
||||||
|
|
||||||
|
drag_point = 0;
|
||||||
|
drag_type = isUsingTool(3)? 3 : 4;
|
||||||
|
drag_point_mx = _mx;
|
||||||
|
drag_point_my = _my;
|
||||||
|
inputs[| 1].setValue(true);
|
||||||
|
|
||||||
|
repeat(4)
|
||||||
|
createAnchor(value_snap((_mx - _x) / _s, _snx), value_snap((_my - _y) / _s, _sny));
|
||||||
|
}
|
||||||
|
} else if(anchor_hover != -1) {
|
||||||
var _a = inputs[| input_fix_len + anchor_hover].getValue();
|
var _a = inputs[| input_fix_len + anchor_hover].getValue();
|
||||||
if(PANEL_PREVIEW.tool_index == 1) {
|
if(isUsingTool(1)) {
|
||||||
draw_sprite_ui_uniform(THEME.cursor_path_anchor, 0, _mx + 16, _my + 16);
|
draw_sprite_ui_uniform(THEME.cursor_path_anchor, 0, _mx + 16, _my + 16);
|
||||||
|
|
||||||
if(mouse_press(mb_left, active)) {
|
if(mouse_press(mb_left, active)) {
|
||||||
|
@ -363,7 +505,7 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(key_mod_press(CTRL) || PANEL_PREVIEW.tool_index == 0) {
|
} else if(key_mod_press(CTRL) || isUsingTool(0)) {
|
||||||
draw_sprite_ui_uniform(THEME.cursor_path_add, 0, _mx + 16, _my + 16);
|
draw_sprite_ui_uniform(THEME.cursor_path_add, 0, _mx + 16, _my + 16);
|
||||||
|
|
||||||
if(mouse_press(mb_left, active)) {
|
if(mouse_press(mb_left, active)) {
|
||||||
|
@ -384,30 +526,13 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
drag_point_sx = (_mx - _x) / _s;
|
drag_point_sx = (_mx - _x) / _s;
|
||||||
drag_point_sy = (_my - _y) / _s;
|
drag_point_sy = (_my - _y) / _s;
|
||||||
}
|
}
|
||||||
} else if(PANEL_PREVIEW.tool_index >= 2) {
|
|
||||||
draw_sprite_ui_uniform(THEME.cursor_path_add, 0, _mx + 16, _my + 16);
|
|
||||||
|
|
||||||
if(mouse_press(mb_left, active)) {
|
|
||||||
while(ds_list_size(inputs) > input_fix_len) {
|
|
||||||
ds_list_delete(inputs, input_fix_len);
|
|
||||||
}
|
|
||||||
array_resize(input_display_list, input_display_list_len);
|
|
||||||
|
|
||||||
drag_point = 0;
|
|
||||||
drag_type = PANEL_PREVIEW.tool_index;
|
|
||||||
drag_point_mx = _mx;
|
|
||||||
drag_point_my = _my;
|
|
||||||
inputs[| 1].setValue(true);
|
|
||||||
|
|
||||||
repeat(4)
|
|
||||||
createAnchor(value_snap((_mx - _x) / _s, _snx), value_snap((_my - _y) / _s, _sny));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static updateLength = function() {
|
static updateLength = function() {
|
||||||
length_total = 0;
|
length_total = 0;
|
||||||
var loop = inputs[| 1].getValue();
|
var loop = inputs[| 1].getValue();
|
||||||
|
var rond = inputs[| 3].getValue();
|
||||||
var ansize = ds_list_size(inputs) - input_fix_len;
|
var ansize = ds_list_size(inputs) - input_fix_len;
|
||||||
if(ansize < 2) {
|
if(ansize < 2) {
|
||||||
lengths = [];
|
lengths = [];
|
||||||
|
@ -431,6 +556,11 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
anchors[i] = _a0;
|
anchors[i] = _a0;
|
||||||
anchors[i + 1] = _a1;
|
anchors[i + 1] = _a1;
|
||||||
|
|
||||||
|
if(rond) {
|
||||||
|
_a0[0] = round(_a0[0]); _a0[1] = round(_a0[1]);
|
||||||
|
_a1[0] = round(_a1[0]); _a1[1] = round(_a1[1]);
|
||||||
|
}
|
||||||
|
|
||||||
var l = 0;
|
var l = 0;
|
||||||
|
|
||||||
var _ox = 0, _oy = 0, _nx = 0, _ny = 0, p = 0;
|
var _ox = 0, _oy = 0, _nx = 0, _ny = 0, p = 0;
|
||||||
|
@ -454,12 +584,15 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
|
||||||
static getSegmentRatio = function(_rat) {
|
static getSegmentRatio = function(_rat) {
|
||||||
var loop = inputs[| 1].getValue();
|
var loop = inputs[| 1].getValue();
|
||||||
|
var rond = inputs[| 3].getValue();
|
||||||
var ansize = array_length(lengths);
|
var ansize = array_length(lengths);
|
||||||
var amo = ds_list_size(inputs) - input_fix_len;
|
var amo = ds_list_size(inputs) - input_fix_len;
|
||||||
|
|
||||||
if(amo < 1) return [0, 0];
|
if(amo < 1) return [0, 0];
|
||||||
if(_rat < 0) {
|
if(_rat < 0) {
|
||||||
var _p0 = inputs[| input_fix_len].getValue();
|
var _p0 = inputs[| input_fix_len].getValue();
|
||||||
|
if(rond)
|
||||||
|
return [round(_p0[0]), round(_p0[1])];
|
||||||
return [_p0[0], _p0[1]];
|
return [_p0[0], _p0[1]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,6 +604,8 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
if(_i1 >= amo) {
|
if(_i1 >= amo) {
|
||||||
if(!loop) {
|
if(!loop) {
|
||||||
var _p1 = inputs[| ds_list_size(inputs) - 1].getValue()
|
var _p1 = inputs[| ds_list_size(inputs) - 1].getValue()
|
||||||
|
if(rond)
|
||||||
|
return [round(_p1[0]), round(_p1[1])];
|
||||||
return [_p1[0], _p1[1]];
|
return [_p1[0], _p1[1]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -480,6 +615,11 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
var _a0 = inputs[| input_fix_len + _i0].getValue();
|
var _a0 = inputs[| input_fix_len + _i0].getValue();
|
||||||
var _a1 = inputs[| input_fix_len + _i1].getValue();
|
var _a1 = inputs[| input_fix_len + _i1].getValue();
|
||||||
|
|
||||||
|
if(rond) {
|
||||||
|
_a0[0] = round(_a0[0]); _a0[1] = round(_a0[1]);
|
||||||
|
_a1[0] = round(_a1[0]); _a1[1] = round(_a1[1]);
|
||||||
|
}
|
||||||
|
|
||||||
return eval_bezier(_t, _a0[0], _a0[1], _a1[0], _a1[1], _a0[0] + _a0[4], _a0[1] + _a0[5], _a1[0] + _a1[2], _a1[1] + _a1[3]);
|
return eval_bezier(_t, _a0[0], _a0[1], _a1[0], _a1[1], _a0[0] + _a0[4], _a0[1] + _a0[5], _a1[0] + _a1[2], _a1[1] + _a1[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -487,6 +627,7 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
|
||||||
static getPointRatio = function(_rat) {
|
static getPointRatio = function(_rat) {
|
||||||
var loop = inputs[| 1].getValue();
|
var loop = inputs[| 1].getValue();
|
||||||
|
var rond = inputs[| 3].getValue();
|
||||||
var ansize = array_length(lengths);
|
var ansize = array_length(lengths);
|
||||||
var amo = ds_list_size(inputs) - input_fix_len;
|
var amo = ds_list_size(inputs) - input_fix_len;
|
||||||
|
|
||||||
|
@ -499,6 +640,11 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
_a0 = anchors[i];
|
_a0 = anchors[i];
|
||||||
_a1 = anchors[safe_mod(i + 1, amo)];
|
_a1 = anchors[safe_mod(i + 1, amo)];
|
||||||
|
|
||||||
|
if(rond) {
|
||||||
|
_a0[0] = round(_a0[0]); _a0[1] = round(_a0[1]);
|
||||||
|
_a1[0] = round(_a1[0]); _a1[1] = round(_a1[1]);
|
||||||
|
}
|
||||||
|
|
||||||
if(pix > lengths[i]) {
|
if(pix > lengths[i]) {
|
||||||
pix -= lengths[i];
|
pix -= lengths[i];
|
||||||
continue;
|
continue;
|
||||||
|
@ -508,7 +654,8 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
|
||||||
if(!is_array(_a0) || !is_array(_a1))
|
if(!is_array(_a0) || !is_array(_a1))
|
||||||
return [0, 0];
|
return [0, 0];
|
||||||
return eval_bezier(_t, _a0[0], _a0[1], _a1[0], _a1[1], _a0[0] + _a0[4], _a0[1] + _a0[5], _a1[0] + _a1[2], _a1[1] + _a1[3]);
|
var _p = eval_bezier(_t, _a0[0], _a0[1], _a1[0], _a1[1], _a0[0] + _a0[4], _a0[1] + _a0[5], _a1[0] + _a1[2], _a1[1] + _a1[3]);
|
||||||
|
return _p;
|
||||||
}
|
}
|
||||||
|
|
||||||
return [0, 0];
|
return [0, 0];
|
||||||
|
@ -574,6 +721,9 @@ function Node_Path(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
static postDeserialize = function() {
|
static postDeserialize = function() {
|
||||||
var _inputs = load_map[? "inputs"];
|
var _inputs = load_map[? "inputs"];
|
||||||
|
|
||||||
|
if(LOADING_VERSION < 1380 && !CLONING)
|
||||||
|
ds_list_insert(_inputs, 3, noone);
|
||||||
|
|
||||||
for(var i = input_fix_len; i < ds_list_size(_inputs); i++)
|
for(var i = input_fix_len; i < ds_list_size(_inputs); i++)
|
||||||
createAnchor(0, 0);
|
createAnchor(0, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
w = 96;
|
w = 96;
|
||||||
|
|
||||||
input_fix_len = ds_list_size(inputs);
|
input_fix_len = ds_list_size(inputs);
|
||||||
data_length = 1;
|
data_length = 1;
|
||||||
|
|
||||||
outputs[| 0] = nodeValue("Path array", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self);
|
outputs[| 0] = nodeValue("Path array", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self);
|
||||||
|
|
||||||
|
@ -22,11 +22,10 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
static refreshDynamicInput = function() {
|
static refreshDynamicInput = function() {
|
||||||
var _l = ds_list_create();
|
var _l = ds_list_create();
|
||||||
|
|
||||||
for( var i = 0; i < input_fix_len; i++ ) {
|
for( var i = 0; i < input_fix_len; i++ )
|
||||||
_l[| i] = inputs[| i];
|
_l[| i] = inputs[| i];
|
||||||
}
|
|
||||||
|
|
||||||
for( var i = input_fix_len; i < ds_list_size(inputs); i++ ) {
|
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
|
||||||
if(inputs[| i].value_from)
|
if(inputs[| i].value_from)
|
||||||
ds_list_add(_l, inputs[| i]);
|
ds_list_add(_l, inputs[| i]);
|
||||||
else
|
else
|
||||||
|
@ -50,7 +49,7 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
|
|
||||||
static getLineCount = function() {
|
static getLineCount = function() {
|
||||||
var l = 0;
|
var l = 0;
|
||||||
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) {
|
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i += data_length ) {
|
||||||
var _path = inputs[| i].getValue();
|
var _path = inputs[| i].getValue();
|
||||||
l += struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
|
l += struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
|
||||||
}
|
}
|
||||||
|
@ -62,7 +61,7 @@ function Node_Path_Array(_x, _y, _group = noone) : Node(_x, _y, _group) construc
|
||||||
}
|
}
|
||||||
|
|
||||||
static getPointRatio = function(_rat, ind = 0) {
|
static getPointRatio = function(_rat, ind = 0) {
|
||||||
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i++ ) {
|
for( var i = input_fix_len; i < ds_list_size(inputs) - 1; i += data_length ) {
|
||||||
var _path = inputs[| i].getValue();
|
var _path = inputs[| i].getValue();
|
||||||
var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
|
var lc = struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ function Node_Path_Builder(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
.setVisible(true, true)
|
.setVisible(true, true)
|
||||||
.setArrayDepth(2);
|
.setArrayDepth(2);
|
||||||
|
|
||||||
inputs[| 1] = nodeValue("Connected", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false);
|
inputs[| 1] = nodeValue("Connected", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false, "If set to true, will draw a single path from one point to another. If not set will treat each pair of points as an individual line.");
|
||||||
|
|
||||||
outputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self);
|
outputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self);
|
||||||
|
|
||||||
|
@ -30,6 +30,9 @@ function Node_Path_Builder(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
_p0 = array_safe_get(_lines, floor(_st) + 0,, ARRAY_OVERFLOW._default);
|
_p0 = array_safe_get(_lines, floor(_st) + 0,, ARRAY_OVERFLOW._default);
|
||||||
_p1 = array_safe_get(_lines, floor(_st) + 1,, ARRAY_OVERFLOW._default);
|
_p1 = array_safe_get(_lines, floor(_st) + 1,, ARRAY_OVERFLOW._default);
|
||||||
|
|
||||||
|
if(!is_array(_p0)) return [0, 0];
|
||||||
|
if(!is_array(_p1)) return [0, 0];
|
||||||
|
|
||||||
_x = lerp(_p0[0], _p1[0], frac(_st));
|
_x = lerp(_p0[0], _p1[0], frac(_st));
|
||||||
_y = lerp(_p0[1], _p1[1], frac(_st));
|
_y = lerp(_p0[1], _p1[1], frac(_st));
|
||||||
|
|
||||||
|
@ -38,6 +41,9 @@ function Node_Path_Builder(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
_p0 = array_safe_get(_lines, _ind * 2 + 0,, ARRAY_OVERFLOW._default);
|
_p0 = array_safe_get(_lines, _ind * 2 + 0,, ARRAY_OVERFLOW._default);
|
||||||
_p1 = array_safe_get(_lines, _ind * 2 + 1,, ARRAY_OVERFLOW._default);
|
_p1 = array_safe_get(_lines, _ind * 2 + 1,, ARRAY_OVERFLOW._default);
|
||||||
|
|
||||||
|
if(!is_array(_p0)) return [0, 0];
|
||||||
|
if(!is_array(_p1)) return [0, 0];
|
||||||
|
|
||||||
_x = lerp(_p0[0], _p1[0], _rat);
|
_x = lerp(_p0[0], _p1[0], _rat);
|
||||||
_y = lerp(_p0[1], _p1[1], _rat);
|
_y = lerp(_p0[1], _p1[1], _rat);
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ function Node_Path_L_System(_x, _y, _group = noone) : Node(_x, _y, _group) const
|
||||||
|
|
||||||
inputs[| 4] = nodeValue("Starting rule", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "", o_dialog_l_system);
|
inputs[| 4] = nodeValue("Starting rule", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "", o_dialog_l_system);
|
||||||
|
|
||||||
inputs[| 5] = nodeValue("End replacement", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "");
|
inputs[| 5] = nodeValue("End replacement", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "", "Replace symbol of the last generated rule, for example a=F to replace all a with F. Use comma to separate different replacements.");
|
||||||
|
|
||||||
inputs[| 6] = nodeValue("Starting angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 90)
|
inputs[| 6] = nodeValue("Starting angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 90)
|
||||||
.setDisplay(VALUE_DISPLAY.rotation);
|
.setDisplay(VALUE_DISPLAY.rotation);
|
||||||
|
|
164
scripts/node_path_plot/node_path_plot.gml
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
function Node_Path_Plot(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
name = "Plot Path";
|
||||||
|
previewable = false;
|
||||||
|
|
||||||
|
w = 96;
|
||||||
|
|
||||||
|
inputs[| 0] = nodeValue("Output scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 8, 8 ])
|
||||||
|
.setDisplay(VALUE_DISPLAY.vector);
|
||||||
|
|
||||||
|
inputs[| 1] = nodeValue("Coordinate", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
|
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Cartesian", "Polar" ]);
|
||||||
|
|
||||||
|
eq_type_car = [ "x function", "y function", "parametric" ];
|
||||||
|
eq_type_pol = [ "r function", "O function", "parametric" ];
|
||||||
|
inputs[| 2] = nodeValue("Equation type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
||||||
|
.setDisplay(VALUE_DISPLAY.enum_scroll, eq_type_car);
|
||||||
|
|
||||||
|
inputs[| 3] = nodeValue("0 function", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "");
|
||||||
|
inputs[| 4] = nodeValue("1 function", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "");
|
||||||
|
|
||||||
|
inputs[| 5] = nodeValue("Origin", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ def_surf_size / 2, def_surf_size / 2 ] )
|
||||||
|
.setDisplay(VALUE_DISPLAY.vector);
|
||||||
|
|
||||||
|
inputs[| 6] = nodeValue("Range", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 1 ])
|
||||||
|
.setDisplay(VALUE_DISPLAY.slider_range, [ -1, 1, 0.01 ]);
|
||||||
|
|
||||||
|
inputs[| 7] = nodeValue("Input scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ])
|
||||||
|
.setDisplay(VALUE_DISPLAY.vector);
|
||||||
|
|
||||||
|
inputs[| 8] = nodeValue("Input shift", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ])
|
||||||
|
.setDisplay(VALUE_DISPLAY.vector);
|
||||||
|
|
||||||
|
outputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self);
|
||||||
|
|
||||||
|
input_display_list = [
|
||||||
|
[ "Variable", false ], 5, 7, 8, 0,
|
||||||
|
[ "Equation", false ], 1, 2, 3, 4, 6,
|
||||||
|
]
|
||||||
|
|
||||||
|
static getLineCount = function() { return 1; }
|
||||||
|
static getSegmentCount = function() { return 0; }
|
||||||
|
|
||||||
|
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) {
|
||||||
|
inputs[| 5].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny);
|
||||||
|
}
|
||||||
|
|
||||||
|
static getPointRatio = function(_rat, ind = 0) {
|
||||||
|
var _sca = inputs[| 0].getValue();
|
||||||
|
var _coor = inputs[| 1].getValue();
|
||||||
|
var _eqa = inputs[| 2].getValue();
|
||||||
|
var _eq0 = inputs[| 3].getValue();
|
||||||
|
var _eq1 = inputs[| 4].getValue();
|
||||||
|
var _orig = inputs[| 5].getValue();
|
||||||
|
var _ran = inputs[| 6].getValue();
|
||||||
|
var _iran = inputs[| 7].getValue();
|
||||||
|
var _shf = inputs[| 8].getValue();
|
||||||
|
|
||||||
|
_rat = _ran[0] + (_rat * (_ran[1] - _ran[0]));
|
||||||
|
|
||||||
|
var _p = [ 0, 0 ];
|
||||||
|
|
||||||
|
switch(_coor) {
|
||||||
|
case 0 :
|
||||||
|
switch(_eqa) {
|
||||||
|
case 0 :
|
||||||
|
_p[0] = _rat * _iran[0] + _shf[0];
|
||||||
|
_p[1] = evaluateFunction(_eq0, { x: _rat * _iran[0] + _shf[0] });
|
||||||
|
break;
|
||||||
|
case 1 :
|
||||||
|
_p[0] = evaluateFunction(_eq0, { y: _rat * _iran[1] + _shf[1] });
|
||||||
|
_p[1] = _rat * _iran[1] + _shf[1];
|
||||||
|
break;
|
||||||
|
case 2 :
|
||||||
|
_p[0] = evaluateFunction(_eq0, { t: _rat * _iran[0] + _shf[0] });
|
||||||
|
_p[1] = evaluateFunction(_eq1, { t: _rat * _iran[1] + _shf[1] });
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1 :
|
||||||
|
var _a = [ 0, 0 ];
|
||||||
|
switch(_eqa) {
|
||||||
|
case 0 :
|
||||||
|
_a[0] = _rat * _iran[0] + _shf[0];
|
||||||
|
_a[1] = evaluateFunction(_eq0, { r: _rat * _iran[0] + _shf[0] });
|
||||||
|
break;
|
||||||
|
case 1 :
|
||||||
|
_a[0] = evaluateFunction(_eq0, { O: _rat * _iran[1] + _shf[1] });
|
||||||
|
_a[1] = _rat * _iran[1] + _shf[1];
|
||||||
|
break;
|
||||||
|
case 2 :
|
||||||
|
_a[0] = evaluateFunction(_eq0, { t: _rat * _iran[0] + _shf[0] });
|
||||||
|
_a[1] = evaluateFunction(_eq1, { t: _rat * _iran[1] + _shf[1] });
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
_p[0] = cos(_a[1]) * _a[0];
|
||||||
|
_p[1] = -sin(_a[1]) * _a[0];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
_p[0] = _p[0] * _sca[0] + _orig[0];
|
||||||
|
_p[1] = -_p[1] * _sca[1] + _orig[1];
|
||||||
|
|
||||||
|
return _p;
|
||||||
|
}
|
||||||
|
|
||||||
|
function step() {
|
||||||
|
var _coor = inputs[| 1].getValue();
|
||||||
|
var _eqa = inputs[| 2].getValue();
|
||||||
|
|
||||||
|
inputs[| 2].editWidget.data_list = _coor? eq_type_pol : eq_type_car;
|
||||||
|
inputs[| 2].display_data = _coor? eq_type_pol : eq_type_car;
|
||||||
|
|
||||||
|
switch(_coor) {
|
||||||
|
case 0 :
|
||||||
|
switch(_eqa) {
|
||||||
|
case 0 :
|
||||||
|
inputs[| 3].name = "f(x) = ";
|
||||||
|
inputs[| 4].setVisible(false);
|
||||||
|
inputs[| 6].name = "x range";
|
||||||
|
break;
|
||||||
|
case 1 :
|
||||||
|
inputs[| 3].name = "f(y) = ";
|
||||||
|
inputs[| 4].setVisible(false);
|
||||||
|
inputs[| 6].name = "y range";
|
||||||
|
break;
|
||||||
|
case 2 :
|
||||||
|
inputs[| 3].name = "x(t) = ";
|
||||||
|
inputs[| 4].name = "y(t) = ";
|
||||||
|
inputs[| 4].setVisible(true);
|
||||||
|
inputs[| 6].name = "t range";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1 :
|
||||||
|
switch(_eqa) {
|
||||||
|
case 0 :
|
||||||
|
inputs[| 3].name = "f(r) = ";
|
||||||
|
inputs[| 4].setVisible(false);
|
||||||
|
inputs[| 6].name = "r range";
|
||||||
|
break;
|
||||||
|
case 1 :
|
||||||
|
inputs[| 3].name = "f(O) = ";
|
||||||
|
inputs[| 4].setVisible(false);
|
||||||
|
inputs[| 6].name = "O range";
|
||||||
|
break;
|
||||||
|
case 2 :
|
||||||
|
inputs[| 3].name = "r(t) = ";
|
||||||
|
inputs[| 4].name = "O(t) = ";
|
||||||
|
inputs[| 4].setVisible(true);
|
||||||
|
inputs[| 6].name = "t range";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function update() { outputs[| 0].setValue(self); }
|
||||||
|
|
||||||
|
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) {
|
||||||
|
var bbox = drawGetBbox(xx, yy, _s);
|
||||||
|
draw_sprite_fit(s_node_path_trim, 0, bbox.xc, bbox.yc, bbox.w, bbox.h);
|
||||||
|
}
|
||||||
|
}
|
11
scripts/node_path_plot/node_path_plot.yy
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMScript",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "node_path_plot",
|
||||||
|
"isCompatibility": false,
|
||||||
|
"isDnD": false,
|
||||||
|
"parent": {
|
||||||
|
"name": "path",
|
||||||
|
"path": "folders/nodes/data/value/path.yy",
|
||||||
|
},
|
||||||
|
}
|
|
@ -16,8 +16,21 @@ function Node_Path_Transform(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
inputs[| 3] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ])
|
inputs[| 3] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ])
|
||||||
.setDisplay(VALUE_DISPLAY.vector);
|
.setDisplay(VALUE_DISPLAY.vector);
|
||||||
|
|
||||||
|
inputs[| 4] = nodeValue("Anchor", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ])
|
||||||
|
.setDisplay(VALUE_DISPLAY.vector);
|
||||||
|
|
||||||
outputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self);
|
outputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.output, VALUE_TYPE.pathnode, self);
|
||||||
|
|
||||||
|
static drawOverlay = function(active, _x, _y, _s, _mx, _my, _snx, _sny) {
|
||||||
|
var pos = inputs[| 4].getValue();
|
||||||
|
var px = _x + pos[0] * _s;
|
||||||
|
var py = _y + pos[1] * _s;
|
||||||
|
|
||||||
|
active &= !inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny);
|
||||||
|
active &= !inputs[| 2].drawOverlay(active, px, py, _s, _mx, _my, _snx, _sny);
|
||||||
|
active &= !inputs[| 4].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny, THEME.anchor );
|
||||||
|
}
|
||||||
|
|
||||||
static getLineCount = function() {
|
static getLineCount = function() {
|
||||||
var _path = inputs[| 0].getValue();
|
var _path = inputs[| 0].getValue();
|
||||||
return struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
|
return struct_has(_path, "getLineCount")? _path.getLineCount() : 1;
|
||||||
|
@ -33,6 +46,7 @@ function Node_Path_Transform(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
var _pos = inputs[| 1].getValue();
|
var _pos = inputs[| 1].getValue();
|
||||||
var _rot = inputs[| 2].getValue();
|
var _rot = inputs[| 2].getValue();
|
||||||
var _sca = inputs[| 3].getValue();
|
var _sca = inputs[| 3].getValue();
|
||||||
|
var _anc = inputs[| 4].getValue();
|
||||||
|
|
||||||
if(is_array(_path)) {
|
if(is_array(_path)) {
|
||||||
_path = array_safe_get(_path, ind);
|
_path = array_safe_get(_path, ind);
|
||||||
|
@ -45,13 +59,10 @@ function Node_Path_Transform(_x, _y, _group = noone) : Node(_x, _y, _group) cons
|
||||||
var _b = struct_has(_path, "getBoundary")? _path.getBoundary() : [0, 0, 0, 0];
|
var _b = struct_has(_path, "getBoundary")? _path.getBoundary() : [0, 0, 0, 0];
|
||||||
var _p = _path.getPointRatio(_rat, ind);
|
var _p = _path.getPointRatio(_rat, ind);
|
||||||
|
|
||||||
var cx = (_b[0] + _b[2]) / 2;
|
_p[0] = _anc[0] + (_p[0] - _anc[0]) * _sca[0];
|
||||||
var cy = (_b[1] + _b[1]) / 2;
|
_p[1] = _anc[1] + (_p[1] - _anc[1]) * _sca[1];
|
||||||
|
|
||||||
_p[0] = cx + (_p[0] - cx) * _sca[0];
|
_p = point_rotate(_p[0], _p[1], _anc[0], _anc[1], _rot);
|
||||||
_p[1] = cy + (_p[1] - cy) * _sca[1];
|
|
||||||
|
|
||||||
_p = point_rotate(_p[0], _p[1], cx, cy, _rot);
|
|
||||||
|
|
||||||
_p[0] += _pos[0];
|
_p[0] += _pos[0];
|
||||||
_p[1] += _pos[1];
|
_p[1] += _pos[1];
|
||||||
|
|
|
@ -420,14 +420,19 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor {
|
||||||
addNodeObject(values, "Trim Path", s_node_path_trim, "Node_Path_Trim", [1, Node_Path_Trim]).setVersion(1130);
|
addNodeObject(values, "Trim Path", s_node_path_trim, "Node_Path_Trim", [1, Node_Path_Trim]).setVersion(1130);
|
||||||
addNodeObject(values, "Wave Path", s_node_path_wave, "Node_Path_Wave", [1, Node_Path_Wave], ["zigzag path"]).setVersion(1130);
|
addNodeObject(values, "Wave Path", s_node_path_wave, "Node_Path_Wave", [1, Node_Path_Wave], ["zigzag path"]).setVersion(1130);
|
||||||
addNodeObject(values, "Reverse Path", s_node_path_reverse, "Node_Path_Reverse", [1, Node_Path_Reverse]).setVersion(1130);
|
addNodeObject(values, "Reverse Path", s_node_path_reverse, "Node_Path_Reverse", [1, Node_Path_Reverse]).setVersion(1130);
|
||||||
addNodeObject(values, "Path Builder", s_node_path_builder, "Node_Path_Builder", [1, Node_Path_Builder]).setVersion(1137);
|
addNodeObject(values, "Path Builder", s_node_path_builder, "Node_Path_Builder", [1, Node_Path_Builder],, "Create path from array of vec2 points.").setVersion(1137);
|
||||||
addNodeObject(values, "L system", s_node_path_l_system, "Node_Path_L_System", [1, Node_Path_L_System]).setVersion(1137);
|
addNodeObject(values, "L system", s_node_path_l_system, "Node_Path_L_System", [1, Node_Path_L_System]).setVersion(1137);
|
||||||
|
addNodeObject(values, "Path plot", s_node_path_plot, "Node_Path_Plot", [1, Node_Path_Plot]).setVersion(1138);
|
||||||
|
|
||||||
ds_list_add(values, "Boolean");
|
ds_list_add(values, "Boolean");
|
||||||
addNodeObject(values, "Boolean", s_node_boolean, "Node_Boolean", [1, Node_Boolean]);
|
addNodeObject(values, "Boolean", s_node_boolean, "Node_Boolean", [1, Node_Boolean]);
|
||||||
addNodeObject(values, "Compare", s_node_compare, "Node_Compare", [0, Node_create_Compare], ["equal", "greater", "lesser"]);
|
addNodeObject(values, "Compare", s_node_compare, "Node_Compare", [0, Node_create_Compare], ["equal", "greater", "lesser"]);
|
||||||
addNodeObject(values, "Logic Opr", s_node_logic_opr, "Node_Logic", [0, Node_create_Logic], [ "and", "or", "not", "nand", "nor" , "xor" ]);
|
addNodeObject(values, "Logic Opr", s_node_logic_opr, "Node_Logic", [0, Node_create_Logic], [ "and", "or", "not", "nand", "nor" , "xor" ]);
|
||||||
|
|
||||||
|
ds_list_add(values, "Struct");
|
||||||
|
addNodeObject(values, "Struct", s_node_struct, "Node_Struct", [1, Node_Struct]);
|
||||||
|
addNodeObject(values, "Struct Get", s_node_struct_get, "Node_Struct_Get", [1, Node_Struct_Get]);
|
||||||
|
|
||||||
var color = ds_list_create();
|
var color = ds_list_create();
|
||||||
addNodeCatagory("Color", color);
|
addNodeCatagory("Color", color);
|
||||||
ds_list_add(color, "Colors");
|
ds_list_add(color, "Colors");
|
||||||
|
|
|
@ -77,8 +77,8 @@ function Node_Rigid_Object(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
newMesh(0);
|
newMesh(0);
|
||||||
|
|
||||||
tools = [
|
tools = [
|
||||||
[ "Mesh edit", THEME.mesh_tool_edit ],
|
new NodeTool( "Mesh edit", THEME.mesh_tool_edit ),
|
||||||
[ "Anchor remove", THEME.mesh_tool_delete ],
|
new NodeTool( "Anchor remove", THEME.mesh_tool_delete ),
|
||||||
];
|
];
|
||||||
|
|
||||||
static getPreviewValue = function() { return inputs[| 6]; }
|
static getPreviewValue = function() { return inputs[| 6]; }
|
||||||
|
@ -103,7 +103,6 @@ function Node_Rigid_Object(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
var lx = attributes[? mshx];
|
var lx = attributes[? mshx];
|
||||||
var ly = attributes[? mshy];
|
var ly = attributes[? mshy];
|
||||||
var len = ds_list_size(lx);
|
var len = ds_list_size(lx);
|
||||||
var _tool = PANEL_PREVIEW.tool_index;
|
|
||||||
|
|
||||||
if(previewing == 0) {
|
if(previewing == 0) {
|
||||||
if(_shp == 2) {
|
if(_shp == 2) {
|
||||||
|
@ -182,7 +181,7 @@ function Node_Rigid_Object(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
|
|
||||||
draw_line_width(_dx0, _dy0, _dx1, _dy1, hover == i + 0.5? 4 : 2);
|
draw_line_width(_dx0, _dy0, _dx1, _dy1, hover == i + 0.5? 4 : 2);
|
||||||
|
|
||||||
if(_tool == 0 && distance_to_line(_mx, _my, _dx0, _dy0, _dx1, _dy1) < 6)
|
if(isUsingTool(0) && distance_to_line(_mx, _my, _dx0, _dy0, _dx1, _dy1) < 6)
|
||||||
_hover = i + 0.5;
|
_hover = i + 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,13 +196,13 @@ function Node_Rigid_Object(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
var _dy = _y + _py * _s;
|
var _dy = _y + _py * _s;
|
||||||
|
|
||||||
//draw_text(_dx, _dy - 8, i);
|
//draw_text(_dx, _dy - 8, i);
|
||||||
if(_tool == -1)
|
if(isNotUsingTool())
|
||||||
draw_circle(_dx, _dy, 4, false)
|
draw_circle(_dx, _dy, 4, false)
|
||||||
else
|
else {
|
||||||
draw_sprite_ui_uniform(THEME.anchor_selector, hover == i, _dx, _dy);
|
draw_sprite_ui_uniform(THEME.anchor_selector, hover == i, _dx, _dy);
|
||||||
|
if(point_distance(_mx, _my, _dx, _dy) < 8)
|
||||||
if(_tool >= 0 && point_distance(_mx, _my, _dx, _dy) < 8)
|
_hover = i;
|
||||||
_hover = i;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hover = _hover;
|
hover = _hover;
|
||||||
|
@ -227,13 +226,13 @@ function Node_Rigid_Object(_x, _y, _group = noone) : Node(_x, _y, _group) constr
|
||||||
|
|
||||||
if(frac(hover) == 0) {
|
if(frac(hover) == 0) {
|
||||||
if(mouse_click(mb_left, active)) {
|
if(mouse_click(mb_left, active)) {
|
||||||
if(_tool == 0) {
|
if(isUsingTool(0)) {
|
||||||
anchor_dragging = hover;
|
anchor_dragging = hover;
|
||||||
anchor_drag_sx = lx[| hover];
|
anchor_drag_sx = lx[| hover];
|
||||||
anchor_drag_sy = ly[| hover];
|
anchor_drag_sy = ly[| hover];
|
||||||
anchor_drag_mx = _mx;
|
anchor_drag_mx = _mx;
|
||||||
anchor_drag_my = _my;
|
anchor_drag_my = _my;
|
||||||
} else if(_tool == 1) {
|
} else if(isUsingTool(1)) {
|
||||||
if(ds_list_size(lx) > 3) {
|
if(ds_list_size(lx) > 3) {
|
||||||
ds_list_delete(lx, hover);
|
ds_list_delete(lx, hover);
|
||||||
ds_list_delete(ly, hover);
|
ds_list_delete(ly, hover);
|
||||||
|
|
102
scripts/node_struct/node_struct.gml
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
function Node_Struct(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
name = "Struct";
|
||||||
|
previewable = false;
|
||||||
|
|
||||||
|
w = 96;
|
||||||
|
|
||||||
|
outputs[| 0] = nodeValue("Struct", self, JUNCTION_CONNECT.output, VALUE_TYPE.struct, {});
|
||||||
|
|
||||||
|
static createNewInput = function() {
|
||||||
|
var index = ds_list_size(inputs);
|
||||||
|
inputs[| index + 0] = nodeValue("Key", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" );
|
||||||
|
|
||||||
|
inputs[| index + 1] = nodeValue("value", self, JUNCTION_CONNECT.input, VALUE_TYPE.any, 0 )
|
||||||
|
.setVisible(false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
input_fix_len = ds_list_size(inputs);
|
||||||
|
data_length = 2;
|
||||||
|
|
||||||
|
if(!LOADING && !APPENDING) createNewInput();
|
||||||
|
|
||||||
|
static refreshDynamicInput = function() {
|
||||||
|
var _in = ds_list_create();
|
||||||
|
|
||||||
|
for( var i = 0; i < input_fix_len; i++ )
|
||||||
|
ds_list_add(_in, inputs[| i]);
|
||||||
|
|
||||||
|
for( var i = input_fix_len; i < ds_list_size(inputs); i += data_length ) {
|
||||||
|
if(inputs[| i].getValue() != "") {
|
||||||
|
ds_list_add(_in, inputs[| i + 0]);
|
||||||
|
ds_list_add(_in, inputs[| i + 1].setVisible(false, true));
|
||||||
|
} 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
static onValueUpdate = function(index = 0) {
|
||||||
|
if(LOADING || APPENDING) return;
|
||||||
|
|
||||||
|
if(safe_mod(index - input_fix_len, data_length) == 0) { //Variable name
|
||||||
|
inputs[| index + 1].name = inputs[| index].getValue() + " value";
|
||||||
|
}
|
||||||
|
|
||||||
|
refreshDynamicInput();
|
||||||
|
}
|
||||||
|
|
||||||
|
function step() {
|
||||||
|
for(var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length) {
|
||||||
|
var inp = inputs[| i + 1];
|
||||||
|
var typ = inp.value_from == noone? VALUE_TYPE.any : inp.value_from.type;
|
||||||
|
inp.type = typ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
var str = {};
|
||||||
|
|
||||||
|
for(var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length) {
|
||||||
|
var key = inputs[| i + 0].getValue();
|
||||||
|
var val = inputs[| i + 1].getValue();
|
||||||
|
|
||||||
|
str[$ key] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
outputs[| 0].setValue(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) {
|
||||||
|
var bbox = drawGetBbox(xx, yy, _s);
|
||||||
|
draw_set_text(f_p0b, fa_left, fa_center, COLORS._main_text);
|
||||||
|
|
||||||
|
for(var i = input_fix_len; i < ds_list_size(inputs) - data_length; i += data_length) {
|
||||||
|
var key = inputs[| i + 0].getValue();
|
||||||
|
var val = inputs[| i + 1];
|
||||||
|
|
||||||
|
draw_set_color(value_color(val.type));
|
||||||
|
draw_text_transformed(bbox.x0 + 6 * _s, inputs[| i + 0].y - 1 * _s, key, _s, _s, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static postDeserialize = function() {
|
||||||
|
var _inputs = load_map[? "inputs"];
|
||||||
|
|
||||||
|
for(var i = input_fix_len; i < ds_list_size(_inputs); i += data_length)
|
||||||
|
createNewInput();
|
||||||
|
}
|
||||||
|
|
||||||
|
static doApplyDeserialize = function() {
|
||||||
|
refreshDynamicInput();
|
||||||
|
}
|
||||||
|
}
|
11
scripts/node_struct/node_struct.yy
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMScript",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "node_struct",
|
||||||
|
"isCompatibility": false,
|
||||||
|
"isDnD": false,
|
||||||
|
"parent": {
|
||||||
|
"name": "struct",
|
||||||
|
"path": "folders/nodes/data/value/struct.yy",
|
||||||
|
},
|
||||||
|
}
|
57
scripts/node_struct_get/node_struct_get.gml
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
function Node_Struct_Get(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
|
||||||
|
name = "Struct Get";
|
||||||
|
previewable = false;
|
||||||
|
|
||||||
|
w = 96;
|
||||||
|
|
||||||
|
inputs[| 0] = nodeValue("Struct", self, JUNCTION_CONNECT.input, VALUE_TYPE.struct, {})
|
||||||
|
.setVisible(true, true);
|
||||||
|
|
||||||
|
inputs[| 1] = nodeValue("Key", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "");
|
||||||
|
|
||||||
|
outputs[| 0] = nodeValue("Struct", self, JUNCTION_CONNECT.output, VALUE_TYPE.struct, {});
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
var str = inputs[| 0].getValue();
|
||||||
|
var key = inputs[| 1].getValue();
|
||||||
|
|
||||||
|
var keys = string_splice(key, ".");
|
||||||
|
var _str = str;
|
||||||
|
|
||||||
|
var out = outputs[| 0];
|
||||||
|
|
||||||
|
for( var j = 0; j < array_length(keys); j++ ) {
|
||||||
|
var k = keys[j];
|
||||||
|
|
||||||
|
if(!variable_struct_exists(_str, k)) {
|
||||||
|
out.setValue(0);
|
||||||
|
out.type = VALUE_TYPE.float;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
var val = variable_struct_get(_str, k);
|
||||||
|
if(j == array_length(keys) - 1) {
|
||||||
|
if(is_struct(val))
|
||||||
|
out.type = VALUE_TYPE.struct;
|
||||||
|
else if(is_array(val) && array_length(val))
|
||||||
|
out.type = is_string(val[0])? VALUE_TYPE.text : VALUE_TYPE.float;
|
||||||
|
else
|
||||||
|
out.type = is_string(val)? VALUE_TYPE.text : VALUE_TYPE.float;
|
||||||
|
|
||||||
|
out.setValue(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_struct(val)) _str = val;
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) {
|
||||||
|
var bbox = drawGetBbox(xx, yy, _s);
|
||||||
|
var str = inputs[| 1].getValue();
|
||||||
|
|
||||||
|
draw_set_text(f_h5, fa_center, fa_center, COLORS._main_text);
|
||||||
|
var ss = string_scale(str, bbox.w, bbox.h);
|
||||||
|
draw_text_transformed(bbox.xc, bbox.yc, str, ss, ss, 0);
|
||||||
|
}
|
||||||
|
}
|
11
scripts/node_struct_get/node_struct_get.yy
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMScript",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "node_struct_get",
|
||||||
|
"isCompatibility": false,
|
||||||
|
"isDnD": false,
|
||||||
|
"parent": {
|
||||||
|
"name": "struct",
|
||||||
|
"path": "folders/nodes/data/value/struct.yy",
|
||||||
|
},
|
||||||
|
}
|
47
scripts/node_tool/node_tool.gml
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
function NodeTool(name, spr) constructor {
|
||||||
|
self.name = name;
|
||||||
|
self.spr = spr;
|
||||||
|
|
||||||
|
subtools = is_array(spr)? array_length(spr) : 0;
|
||||||
|
selecting = 0;
|
||||||
|
settings = [];
|
||||||
|
attribute = {};
|
||||||
|
|
||||||
|
static addSetting = function(name, type, onEdit, keyAttr, val) {
|
||||||
|
var w;
|
||||||
|
|
||||||
|
switch(type) {
|
||||||
|
case VALUE_TYPE.float :
|
||||||
|
w = new textBox(TEXTBOX_INPUT.number, onEdit);
|
||||||
|
w.font = f_p2;
|
||||||
|
break;
|
||||||
|
case VALUE_TYPE.boolean :
|
||||||
|
w = new checkBox(onEdit);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
array_push(settings, [ name, w, keyAttr, attribute ]);
|
||||||
|
attribute[$ keyAttr] = val;
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
static toggle = function() {
|
||||||
|
if(subtools == 0) {
|
||||||
|
PANEL_PREVIEW.tool_current = PANEL_PREVIEW.tool_current == self? noone : self;
|
||||||
|
} else {
|
||||||
|
if(PANEL_PREVIEW.tool_current != self) {
|
||||||
|
PANEL_PREVIEW.tool_current = self;
|
||||||
|
selecting = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
selecting++;
|
||||||
|
if(selecting == subtools) {
|
||||||
|
selecting = 0;
|
||||||
|
PANEL_PREVIEW.tool_current = noone;
|
||||||
|
} else
|
||||||
|
PANEL_PREVIEW.tool_current = self;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
scripts/node_tool/node_tool.yy
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMScript",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "node_tool",
|
||||||
|
"isCompatibility": false,
|
||||||
|
"isDnD": false,
|
||||||
|
"parent": {
|
||||||
|
"name": "__base__",
|
||||||
|
"path": "folders/nodes/data/__base__.yy",
|
||||||
|
},
|
||||||
|
}
|
|
@ -23,6 +23,7 @@ enum VALUE_TYPE {
|
||||||
particle = 13,
|
particle = 13,
|
||||||
rigid = 14,
|
rigid = 14,
|
||||||
fdomain = 15,
|
fdomain = 15,
|
||||||
|
struct = 16,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum VALUE_DISPLAY {
|
enum VALUE_DISPLAY {
|
||||||
|
@ -96,6 +97,7 @@ function value_color(i) {
|
||||||
$5dde8f, //particle
|
$5dde8f, //particle
|
||||||
$e3ff66, //rigid
|
$e3ff66, //rigid
|
||||||
#4da6ff, //fdomain
|
#4da6ff, //fdomain
|
||||||
|
$5d3f8c, //struct
|
||||||
];
|
];
|
||||||
return JUNCTION_COLORS[safe_mod(max(0, i), array_length(JUNCTION_COLORS))];
|
return JUNCTION_COLORS[safe_mod(max(0, i), array_length(JUNCTION_COLORS))];
|
||||||
}
|
}
|
||||||
|
@ -116,6 +118,7 @@ function value_bit(i) {
|
||||||
case VALUE_TYPE.particle : return 1 << 16;
|
case VALUE_TYPE.particle : return 1 << 16;
|
||||||
case VALUE_TYPE.rigid : return 1 << 17;
|
case VALUE_TYPE.rigid : return 1 << 17;
|
||||||
case VALUE_TYPE.fdomain : return 1 << 18;
|
case VALUE_TYPE.fdomain : return 1 << 18;
|
||||||
|
case VALUE_TYPE.struct : return 1 << 19;
|
||||||
|
|
||||||
case VALUE_TYPE.node : return 1 << 32;
|
case VALUE_TYPE.node : return 1 << 32;
|
||||||
|
|
||||||
|
@ -189,7 +192,8 @@ function typeIncompatible(from, to) {
|
||||||
case VALUE_DISPLAY.vector_range :
|
case VALUE_DISPLAY.vector_range :
|
||||||
case VALUE_DISPLAY.puppet_control :
|
case VALUE_DISPLAY.puppet_control :
|
||||||
case VALUE_DISPLAY.padding :
|
case VALUE_DISPLAY.padding :
|
||||||
case VALUE_DISPLAY.curve : return true;
|
case VALUE_DISPLAY.curve :
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1389,6 +1393,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
||||||
static serialize = function(scale = false, preset = false) {
|
static serialize = function(scale = false, preset = false) {
|
||||||
var _map = ds_map_create();
|
var _map = ds_map_create();
|
||||||
|
|
||||||
|
//print(" = > Serializing: " + name);
|
||||||
ds_map_add_list(_map, "raw value", animator.serialize(scale));
|
ds_map_add_list(_map, "raw value", animator.serialize(scale));
|
||||||
|
|
||||||
_map[? "on end"] = on_end;
|
_map[? "on end"] = on_end;
|
||||||
|
|
|
@ -46,8 +46,8 @@ function Node_Mesh_Warp(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
||||||
input_display_index = array_length(input_display_list);
|
input_display_index = array_length(input_display_list);
|
||||||
|
|
||||||
tools = [
|
tools = [
|
||||||
[ "Add / Remove (+ Shift) control point", THEME.control_add ],
|
new NodeTool( "Add / Remove (+ Shift) control point", THEME.control_add ),
|
||||||
[ "Pin / unpin (+ Shift) mesh", THEME.control_pin ]
|
new NodeTool( "Pin / unpin (+ Shift) mesh", THEME.control_pin )
|
||||||
];
|
];
|
||||||
|
|
||||||
attributes[? "pin"] = ds_map_create();
|
attributes[? "pin"] = ds_map_create();
|
||||||
|
@ -72,10 +72,8 @@ function Node_Mesh_Warp(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
||||||
hover = i;
|
hover = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
var _tool = PANEL_PREVIEW.tool_index;
|
|
||||||
|
|
||||||
if(!active) return;
|
if(!active) return;
|
||||||
if(_tool == 0) {
|
if(isUsingTool(0)) {
|
||||||
if(key_mod_press(SHIFT))
|
if(key_mod_press(SHIFT))
|
||||||
draw_sprite_ui_uniform(THEME.cursor_path_remove, 0, _mx + 16, _my + 16);
|
draw_sprite_ui_uniform(THEME.cursor_path_remove, 0, _mx + 16, _my + 16);
|
||||||
else
|
else
|
||||||
|
@ -98,7 +96,7 @@ function Node_Mesh_Warp(_x, _y, _group = noone) : Node_Processor(_x, _y, _group)
|
||||||
reset();
|
reset();
|
||||||
control(input_display_list);
|
control(input_display_list);
|
||||||
}
|
}
|
||||||
} else if(_tool == 1) {
|
} else if(isUsingTool(1)) {
|
||||||
draw_sprite_ui_uniform(key_mod_press(SHIFT)? THEME.cursor_path_remove : THEME.cursor_path_add, 0, _mx + 16, _my + 16);
|
draw_sprite_ui_uniform(key_mod_press(SHIFT)? THEME.cursor_path_remove : THEME.cursor_path_add, 0, _mx + 16, _my + 16);
|
||||||
|
|
||||||
draw_set_color(COLORS._main_accent);
|
draw_set_color(COLORS._main_accent);
|
||||||
|
|
|
@ -9,7 +9,7 @@ function Panel_Animation() : PanelContent() constructor {
|
||||||
context_str = "Animation";
|
context_str = "Animation";
|
||||||
|
|
||||||
timeline_h = ui(28);
|
timeline_h = ui(28);
|
||||||
min_w = ui(348);
|
min_w = ui(32);
|
||||||
min_h = ui(48);
|
min_h = ui(48);
|
||||||
tool_width = ui(280);
|
tool_width = ui(280);
|
||||||
|
|
||||||
|
@ -1359,6 +1359,9 @@ function Panel_Animation() : PanelContent() constructor {
|
||||||
|
|
||||||
function drawAnimationControl() {
|
function drawAnimationControl() {
|
||||||
var bx = ui(8);
|
var bx = ui(8);
|
||||||
|
if(w < ui(348))
|
||||||
|
bx = w / 2 - ui(36) * 6 / 2;
|
||||||
|
|
||||||
var by = h - ui(40);
|
var by = h - ui(40);
|
||||||
if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, get_text("stop", "Stop"), THEME.sequence_control, 4, ANIMATOR.is_playing? COLORS._main_accent : COLORS._main_icon) == 2) {
|
if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, get_text("stop", "Stop"), THEME.sequence_control, 4, ANIMATOR.is_playing? COLORS._main_accent : COLORS._main_icon) == 2) {
|
||||||
ANIMATOR.is_playing = false;
|
ANIMATOR.is_playing = false;
|
||||||
|
@ -1393,6 +1396,8 @@ function Panel_Animation() : PanelContent() constructor {
|
||||||
ANIMATOR.setFrame(ANIMATOR.real_frame + 1);
|
ANIMATOR.setFrame(ANIMATOR.real_frame + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(w < ui(348)) return;
|
||||||
|
|
||||||
bx = w - ui(44);
|
bx = w - ui(44);
|
||||||
if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, get_text("panel_animation_animation_settings", "Animation settings"), THEME.animation_setting, 2) == 2)
|
if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, get_text("panel_animation_animation_settings", "Animation settings"), THEME.animation_setting, 2) == 2)
|
||||||
dialogCall(o_dialog_animation, x + bx + 32, y + by - 8);
|
dialogCall(o_dialog_animation, x + bx + 32, y + by - 8);
|
||||||
|
@ -1414,9 +1419,13 @@ function Panel_Animation() : PanelContent() constructor {
|
||||||
function drawContent(panel) {
|
function drawContent(panel) {
|
||||||
draw_clear_alpha(COLORS.panel_bg_clear, 0);
|
draw_clear_alpha(COLORS.panel_bg_clear, 0);
|
||||||
|
|
||||||
drawTimeline();
|
if(w < ui(348)) {
|
||||||
if(dope_sheet_h > 8)
|
draw_sprite_stretched(THEME.ui_panel_bg, 1, ui(8), h - ui(32 + 8), w - ui(16), ui(32));
|
||||||
drawDopesheet();
|
} else {
|
||||||
|
drawTimeline();
|
||||||
|
if(dope_sheet_h > 8)
|
||||||
|
drawDopesheet();
|
||||||
|
}
|
||||||
drawAnimationControl();
|
drawAnimationControl();
|
||||||
|
|
||||||
if(timeline_show_time > -1) {
|
if(timeline_show_time > -1) {
|
||||||
|
|
|
@ -19,6 +19,7 @@ function Panel(_parent, _x, _y, _w, _h) constructor {
|
||||||
y = _y;
|
y = _y;
|
||||||
w = _w;
|
w = _w;
|
||||||
h = _h;
|
h = _h;
|
||||||
|
split = -1;
|
||||||
|
|
||||||
min_w = ui(32);
|
min_w = ui(32);
|
||||||
min_h = ui(32);
|
min_h = ui(32);
|
||||||
|
@ -26,6 +27,7 @@ function Panel(_parent, _x, _y, _w, _h) constructor {
|
||||||
dragging = -1;
|
dragging = -1;
|
||||||
drag_sval = 0;
|
drag_sval = 0;
|
||||||
drag_sm = 0;
|
drag_sm = 0;
|
||||||
|
mouse_active = true;
|
||||||
|
|
||||||
content_surface = surface_create_valid(w, h);
|
content_surface = surface_create_valid(w, h);
|
||||||
mask_surface = surface_create_valid(w, h);
|
mask_surface = surface_create_valid(w, h);
|
||||||
|
@ -60,9 +62,8 @@ function Panel(_parent, _x, _y, _w, _h) constructor {
|
||||||
if(content != noone)
|
if(content != noone)
|
||||||
content.refresh();
|
content.refresh();
|
||||||
|
|
||||||
for( var i = 0; i < ds_list_size(childs); i++ ) {
|
for( var i = 0; i < ds_list_size(childs); i++ )
|
||||||
childs[| i].refresh();
|
childs[| i].refresh();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function move(dx, dy) {
|
function move(dx, dy) {
|
||||||
|
@ -97,19 +98,48 @@ function Panel(_parent, _x, _y, _w, _h) constructor {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshSize() {
|
function refreshSize() { //refresh content surface after resize
|
||||||
for(var i = 0; i < ds_list_size(childs); i++)
|
|
||||||
childs[| i].refreshSize();
|
|
||||||
|
|
||||||
refreshContentSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
function refreshContentSize() {
|
|
||||||
if(content) {
|
if(content) {
|
||||||
content.w = w;
|
content.w = w;
|
||||||
content.h = h;
|
content.h = h;
|
||||||
content.onResize();
|
content.onResize();
|
||||||
|
} else if(ds_list_size(childs) == 2) {
|
||||||
|
print("=== Refreshing (" + string(w) + ", " + string(h) + ") " + string(split) + " ===");
|
||||||
|
|
||||||
|
var tw = childs[| 0].w + childs[| 1].w;
|
||||||
|
var th = childs[| 0].h + childs[| 1].h;
|
||||||
|
|
||||||
|
var fixChild = childs[| 1].x == x && childs[| 1].y == y;
|
||||||
|
|
||||||
|
childs[| fixChild].x = x;
|
||||||
|
childs[| fixChild].y = y;
|
||||||
|
|
||||||
|
if(split == 0) {
|
||||||
|
childs[| fixChild].w = childs[| fixChild].w / tw * w;
|
||||||
|
childs[| fixChild].h = h;
|
||||||
|
|
||||||
|
childs[| !fixChild].x = x + childs[| fixChild].w;
|
||||||
|
childs[| !fixChild].y = y;
|
||||||
|
|
||||||
|
childs[| !fixChild].w = w - childs[| fixChild].w;
|
||||||
|
childs[| !fixChild].h = h;
|
||||||
|
} else if(split == 1) {
|
||||||
|
childs[| fixChild].w = w;
|
||||||
|
childs[| fixChild].h = childs[| fixChild].h / th * h;
|
||||||
|
|
||||||
|
childs[| !fixChild].x = x;
|
||||||
|
childs[| !fixChild].y = y + childs[| fixChild].h;
|
||||||
|
|
||||||
|
childs[| !fixChild].w = w;
|
||||||
|
childs[| !fixChild].h = h - childs[| fixChild].h;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i = 0; i < ds_list_size(childs); i++) {
|
||||||
|
childs[| i].refreshSize();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
function resize(dw, dh, oppose = ANCHOR.left) {
|
function resize(dw, dh, oppose = ANCHOR.left) {
|
||||||
|
@ -139,7 +169,7 @@ function Panel(_parent, _x, _y, _w, _h) constructor {
|
||||||
resetMask();
|
resetMask();
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshContentSize();
|
refreshSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
function set(_content) {
|
function set(_content) {
|
||||||
|
@ -153,6 +183,7 @@ function Panel(_parent, _x, _y, _w, _h) constructor {
|
||||||
if(_w < 0) _w = w + _w;
|
if(_w < 0) _w = w + _w;
|
||||||
var _panelParent = new Panel(parent, x, y, w, h);
|
var _panelParent = new Panel(parent, x, y, w, h);
|
||||||
_panelParent.anchor = anchor;
|
_panelParent.anchor = anchor;
|
||||||
|
_panelParent.split = 0;
|
||||||
|
|
||||||
var _panelL = self;
|
var _panelL = self;
|
||||||
ds_list_add(_panelParent.childs, _panelL);
|
ds_list_add(_panelParent.childs, _panelL);
|
||||||
|
@ -185,6 +216,7 @@ function Panel(_parent, _x, _y, _w, _h) constructor {
|
||||||
if(_h < 0) _h = h + _h;
|
if(_h < 0) _h = h + _h;
|
||||||
var _panelParent = new Panel(parent, x, y, w, h);
|
var _panelParent = new Panel(parent, x, y, w, h);
|
||||||
_panelParent.anchor = anchor;
|
_panelParent.anchor = anchor;
|
||||||
|
_panelParent.split = 1;
|
||||||
|
|
||||||
var _panelT = self;
|
var _panelT = self;
|
||||||
ds_list_add(_panelParent.childs, _panelT);
|
ds_list_add(_panelParent.childs, _panelT);
|
||||||
|
@ -213,6 +245,8 @@ function Panel(_parent, _x, _y, _w, _h) constructor {
|
||||||
function stepBegin() {
|
function stepBegin() {
|
||||||
if(content) content.panelStepBegin(self);
|
if(content) content.panelStepBegin(self);
|
||||||
|
|
||||||
|
if(o_main.panel_dragging != noone) dragging = -1;
|
||||||
|
|
||||||
if(dragging == 1) {
|
if(dragging == 1) {
|
||||||
var _mx = clamp(mouse_mx, ui(16), WIN_W - ui(16));
|
var _mx = clamp(mouse_mx, ui(16), WIN_W - ui(16));
|
||||||
var dw = _mx - drag_sm;
|
var dw = _mx - drag_sm;
|
||||||
|
@ -310,10 +344,19 @@ function Panel(_parent, _x, _y, _w, _h) constructor {
|
||||||
|
|
||||||
function draw() {
|
function draw() {
|
||||||
if(content != noone) {
|
if(content != noone) {
|
||||||
drawPanel();
|
if(!keyboard_check(ord("W")))
|
||||||
|
drawPanel();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(keyboard_check(ord("W")) && point_in_rectangle(mouse_mx, mouse_my, x, y, x + w, y + h)) {
|
||||||
|
draw_set_color(c_lime);
|
||||||
|
draw_set_alpha(0.1);
|
||||||
|
draw_rectangle(x + 8, y + 8, x + w - 8, y + h - 8, false);
|
||||||
|
draw_set_alpha(1);
|
||||||
|
draw_rectangle(x + 8, y + 8, x + w - 8, y + h - 8, true);
|
||||||
|
}
|
||||||
|
|
||||||
if(ds_list_empty(childs))
|
if(ds_list_empty(childs))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -360,6 +403,11 @@ function Panel(_parent, _x, _y, _w, _h) constructor {
|
||||||
|
|
||||||
function drawPanel() {
|
function drawPanel() {
|
||||||
if(w <= ui(16)) return;
|
if(w <= ui(16)) return;
|
||||||
|
var p = ui(8);
|
||||||
|
var m_in = point_in_rectangle(mouse_mx, mouse_my, x + p, y + p, x + w - p, y + h - p);
|
||||||
|
var m_ot = point_in_rectangle(mouse_mx, mouse_my, x, y, x + w, y + h);
|
||||||
|
mouse_active = m_in;
|
||||||
|
|
||||||
draw_sprite_stretched(THEME.ui_panel_bg, 0, x + padding, y + padding, w - padding * 2, h - padding * 2);
|
draw_sprite_stretched(THEME.ui_panel_bg, 0, x + padding, y + padding, w - padding * 2, h - padding * 2);
|
||||||
|
|
||||||
if(!is_surface(mask_surface)) {
|
if(!is_surface(mask_surface)) {
|
||||||
|
@ -383,9 +431,71 @@ function Panel(_parent, _x, _y, _w, _h) constructor {
|
||||||
surface_reset_target();
|
surface_reset_target();
|
||||||
|
|
||||||
draw_surface_safe(content_surface, x, y);
|
draw_surface_safe(content_surface, x, y);
|
||||||
|
|
||||||
|
if(FOCUS == self) {
|
||||||
|
draw_sprite_stretched_ext(THEME.ui_panel_active, 0, x + padding, y + padding, w - padding * 2, h - padding * 2, COLORS._main_accent, 1);
|
||||||
|
if(content && !m_in && m_ot && DOUBLE_CLICK) {
|
||||||
|
content.dragSurface = surface_clone(content_surface);
|
||||||
|
o_main.panel_dragging = content;
|
||||||
|
|
||||||
|
content = noone;
|
||||||
|
var ind = !ds_list_find_index(parent.childs, self); //index of the other child
|
||||||
|
var sib = parent.childs[| ind];
|
||||||
|
|
||||||
|
if(parent.childs[| ind].content == noone) { //other child is compound panel
|
||||||
|
var gparent = parent.parent;
|
||||||
|
var pind = ds_list_find_index(gparent.childs, parent); //index of parent in grandparent object
|
||||||
|
gparent.childs[| pind] = sib;
|
||||||
|
gparent.refreshSize();
|
||||||
|
} else { //other child is content panel, set parent to content panel
|
||||||
|
parent.set(sib.content);
|
||||||
|
ds_list_clear(parent.childs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(FOCUS == self)
|
if(o_main.panel_dragging != noone && m_ot) {
|
||||||
draw_sprite_stretched_ext(THEME.ui_panel_active, 0, x + padding, y + padding, w - padding * 2, h - padding * 2, COLORS._main_accent, 1);
|
var dx = (mouse_mx - x) / w;
|
||||||
|
var dy = (mouse_my - y) / h;
|
||||||
|
var p = ui(8);
|
||||||
|
|
||||||
|
draw_set_color(COLORS._main_accent);
|
||||||
|
o_main.panel_hovering = self;
|
||||||
|
|
||||||
|
if(dx + dy > 1) {
|
||||||
|
if((1 - dx) + dy > 1) {
|
||||||
|
draw_set_alpha(.4);
|
||||||
|
draw_roundrect_ext(x + p, y + h / 2 + p, x + w - p, y + h - p, 8, 8, false);
|
||||||
|
draw_set_alpha(1.);
|
||||||
|
draw_roundrect_ext(x + p, y + h / 2 + p, x + w - p, y + h - p, 8, 8, true);
|
||||||
|
|
||||||
|
o_main.panel_split = 3;
|
||||||
|
} else {
|
||||||
|
draw_set_alpha(.4);
|
||||||
|
draw_roundrect_ext(x + p + w / 2, y + p, x + w - p, y + h - p, 8, 8, false);
|
||||||
|
draw_set_alpha(1.);
|
||||||
|
draw_roundrect_ext(x + p + w / 2, y + p, x + w - p, y + h - p, 8, 8, true);
|
||||||
|
|
||||||
|
o_main.panel_split = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if((1 - dx) + dy > 1) {
|
||||||
|
draw_set_alpha(.4);
|
||||||
|
draw_roundrect_ext(x + p, y + p, x + w / 2 - p, y + h - p, 8, 8, false);
|
||||||
|
draw_set_alpha(1.);
|
||||||
|
draw_roundrect_ext(x + p, y + p, x + w / 2 - p, y + h - p, 8, 8, true);
|
||||||
|
|
||||||
|
o_main.panel_split = 2;
|
||||||
|
} else {
|
||||||
|
draw_set_alpha(.4);
|
||||||
|
draw_roundrect_ext(x + p, y + p, x + w - p, y + h / 2 - p, 8, 8, false);
|
||||||
|
draw_set_alpha(1.);
|
||||||
|
draw_roundrect_ext(x + p, y + p, x + w - p, y + h / 2 - p, 8, 8, true);
|
||||||
|
|
||||||
|
o_main.panel_split = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function remove() {
|
function remove() {
|
||||||
|
@ -406,6 +516,7 @@ function PanelContent() constructor {
|
||||||
draggable = true;
|
draggable = true;
|
||||||
expandable = true;
|
expandable = true;
|
||||||
|
|
||||||
|
panel = noone;
|
||||||
mx = 0;
|
mx = 0;
|
||||||
my = 0;
|
my = 0;
|
||||||
|
|
||||||
|
@ -420,6 +531,8 @@ function PanelContent() constructor {
|
||||||
pFOCUS = false;
|
pFOCUS = false;
|
||||||
pHOVER = false;
|
pHOVER = false;
|
||||||
|
|
||||||
|
dragSurface = surface_create(1, 1);
|
||||||
|
|
||||||
function refresh() {
|
function refresh() {
|
||||||
onResize();
|
onResize();
|
||||||
}
|
}
|
||||||
|
@ -438,6 +551,7 @@ function PanelContent() constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSetPanel(panel) {
|
function onSetPanel(panel) {
|
||||||
|
self.panel = panel;
|
||||||
setPanelSize(panel);
|
setPanelSize(panel);
|
||||||
initSize();
|
initSize();
|
||||||
onResize();
|
onResize();
|
||||||
|
@ -458,8 +572,8 @@ function PanelContent() constructor {
|
||||||
function stepBegin() {}
|
function stepBegin() {}
|
||||||
|
|
||||||
function draw(panel) {
|
function draw(panel) {
|
||||||
pFOCUS = FOCUS == panel;
|
pFOCUS = FOCUS == panel && panel.mouse_active;
|
||||||
pHOVER = HOVER == panel;
|
pHOVER = HOVER == panel && panel.mouse_active;
|
||||||
|
|
||||||
drawContent(panel);
|
drawContent(panel);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,51 @@
|
||||||
PANEL_COLLECTION = 0;
|
PANEL_COLLECTION = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function loadPanelStruct(panel, str) {
|
||||||
|
if(variable_struct_exists(str, "split")) {
|
||||||
|
var pan = panel;
|
||||||
|
if(str.split == "v")
|
||||||
|
pan = panel.split_v(ui(str.width));
|
||||||
|
else if(str.split == "h")
|
||||||
|
pan = panel.split_h(ui(str.width));
|
||||||
|
|
||||||
|
if(variable_struct_exists(str, "content")) {
|
||||||
|
loadPanelStruct(pan[0], str.content[0]);
|
||||||
|
loadPanelStruct(pan[1], str.content[1]);
|
||||||
|
}
|
||||||
|
} else if(variable_struct_exists(str, "content"))
|
||||||
|
panel.set(getPanelFromName(str.content));
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPanelFromName(name) {
|
||||||
|
switch(name) {
|
||||||
|
case "INSPECTOR" : return PANEL_INSPECTOR;
|
||||||
|
case "ANIMATION" : return PANEL_ANIMATION;
|
||||||
|
case "PREVIEW" : return PANEL_PREVIEW;
|
||||||
|
case "GRAPH" : return PANEL_GRAPH;
|
||||||
|
}
|
||||||
|
|
||||||
|
return noone;
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadPanel(path, panel) {
|
||||||
|
var f = json_load_struct(path);
|
||||||
|
loadPanelStruct(panel, f.panel);
|
||||||
|
|
||||||
|
if(PREF_MAP[? "panel_collection"]) {
|
||||||
|
var pan = getPanelFromName(f.collection.parent);
|
||||||
|
var p;
|
||||||
|
|
||||||
|
if(f.collection.split == "v")
|
||||||
|
p = pan.panel.split_v(ui(f.collection.width));
|
||||||
|
else if(f.collection.split == "h")
|
||||||
|
p = pan.panel.split_h(ui(f.collection.width));
|
||||||
|
|
||||||
|
p[0].set(PANEL_COLLECTION);
|
||||||
|
p[1].set(pan);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function setPanel() {
|
function setPanel() {
|
||||||
PANEL_MAIN = new Panel(noone, ui(2), ui(2), WIN_SW - ui(4), WIN_SH - ui(4));
|
PANEL_MAIN = new Panel(noone, ui(2), ui(2), WIN_SW - ui(4), WIN_SH - ui(4));
|
||||||
|
|
||||||
|
@ -50,45 +95,8 @@
|
||||||
var split_menu = PANEL_MAIN.split_v(ui(40));
|
var split_menu = PANEL_MAIN.split_v(ui(40));
|
||||||
split_menu[0].set(PANEL_MENU);
|
split_menu[0].set(PANEL_MENU);
|
||||||
|
|
||||||
var split_ins = split_menu[1].split_h(ui(-400));
|
zip_unzip("data/layouts.zip", DIRECTORY);
|
||||||
split_ins[1].set(PANEL_INSPECTOR);
|
loadPanel(DIRECTORY + "layouts/" + PREF_MAP[? "panel_layout_file"] + ".json", split_menu[1]);
|
||||||
|
|
||||||
switch(PREF_MAP[? "panel_layout"]) {
|
|
||||||
case 0 :
|
|
||||||
var split_anim = split_ins[0].split_v(ui(-48));
|
|
||||||
split_anim[1].set(PANEL_ANIMATION);
|
|
||||||
|
|
||||||
var split_prev = split_anim[0].split_v(ui(-500));
|
|
||||||
if(split_prev == noone) break;
|
|
||||||
|
|
||||||
split_prev[0].set(PANEL_PREVIEW);
|
|
||||||
split_prev[1].set(PANEL_GRAPH);
|
|
||||||
|
|
||||||
if(PREF_MAP[? "panel_collection"]) {
|
|
||||||
var pane = split_prev[1].split_h(ui(460));
|
|
||||||
if(pane == noone) break;
|
|
||||||
pane[1].set(PANEL_GRAPH);
|
|
||||||
pane[0].set(PANEL_COLLECTION);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 1 :
|
|
||||||
var split_anim = split_ins[0].split_v(ui(-300));
|
|
||||||
split_anim[1].set(PANEL_ANIMATION);
|
|
||||||
|
|
||||||
var split_prev = split_anim[0].split_h(ui(400));
|
|
||||||
if(split_prev == noone) break;
|
|
||||||
|
|
||||||
split_prev[0].set(PANEL_PREVIEW);
|
|
||||||
split_prev[1].set(PANEL_GRAPH);
|
|
||||||
|
|
||||||
if(PREF_MAP[? "panel_collection"]) {
|
|
||||||
var pane = split_anim[1].split_h(ui(500));
|
|
||||||
if(pane == noone) break;
|
|
||||||
pane[1].set(PANEL_ANIMATION);
|
|
||||||
pane[0].set(PANEL_COLLECTION);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
PANEL_ANIMATION.updatePropertyList();
|
PANEL_ANIMATION.updatePropertyList();
|
||||||
PANEL_MAIN.refresh();
|
PANEL_MAIN.refresh();
|
||||||
|
@ -111,6 +119,57 @@
|
||||||
|
|
||||||
return _res;
|
return _res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function panelInit() {
|
||||||
|
panel_dragging = noone;
|
||||||
|
panel_hovering = noone;
|
||||||
|
panel_split = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function panelDraw() {
|
||||||
|
if(panel_dragging) {
|
||||||
|
draw_surface_ext(panel_dragging.dragSurface, mouse_mx + 8, mouse_my + 8, 0.5, 0.5, 0, c_white, 0.5);
|
||||||
|
|
||||||
|
if(mouse_release(mb_left)) {
|
||||||
|
var p = [];
|
||||||
|
var c = panel_hovering.content;
|
||||||
|
panel_hovering.content = noone;
|
||||||
|
|
||||||
|
switch(panel_split) {
|
||||||
|
case 0 : p = panel_hovering.split_v( panel_hovering.h / 2); break;
|
||||||
|
case 1 : p = panel_hovering.split_h( panel_hovering.w / 2); break;
|
||||||
|
case 2 : p = panel_hovering.split_h( panel_hovering.w / 2); break;
|
||||||
|
case 3 : p = panel_hovering.split_v( panel_hovering.h / 2); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
p[(panel_split + 1) % 2].set(c);
|
||||||
|
p[(panel_split + 0) % 2].set(panel_dragging);
|
||||||
|
|
||||||
|
panel_hovering.refreshSize();
|
||||||
|
|
||||||
|
panel_hovering = noone;
|
||||||
|
panel_dragging = noone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function panelSerialize() {
|
||||||
|
var cont = _panelSerialize(PANEL_MAIN);
|
||||||
|
print(json_stringify(cont, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
function _panelSerialize(panel) {
|
||||||
|
var cont = {};
|
||||||
|
|
||||||
|
cont.content = panel.content == noone? noone : instanceof(panel.content);
|
||||||
|
cont.split = panel.split;
|
||||||
|
|
||||||
|
cont.child = [];
|
||||||
|
for( var i = 0; i < ds_list_size(panel.childs); i++ )
|
||||||
|
cont.child[i] = _panelSerialize(panel.childs[| i]);
|
||||||
|
|
||||||
|
return cont;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region fullscreen
|
#region fullscreen
|
||||||
|
|
|
@ -22,6 +22,8 @@ function Panel_Inspector() : PanelContent() constructor {
|
||||||
keyframe_drag_st = 0;
|
keyframe_drag_st = 0;
|
||||||
|
|
||||||
anim_toggling = false;
|
anim_toggling = false;
|
||||||
|
anim_hold = noone;
|
||||||
|
visi_hold = noone;
|
||||||
|
|
||||||
min_w = ui(160);
|
min_w = ui(160);
|
||||||
lineBreak = true;
|
lineBreak = true;
|
||||||
|
@ -33,12 +35,12 @@ function Panel_Inspector() : PanelContent() constructor {
|
||||||
tb_prop_filter = new textBox(TEXTBOX_INPUT.text, function(txt) {
|
tb_prop_filter = new textBox(TEXTBOX_INPUT.text, function(txt) {
|
||||||
filter_text = txt;
|
filter_text = txt;
|
||||||
})
|
})
|
||||||
tb_prop_filter.no_empty = false;
|
tb_prop_filter.no_empty = false;
|
||||||
tb_prop_filter.auto_update = true;
|
tb_prop_filter.auto_update = true;
|
||||||
tb_prop_filter.font = f_p0;
|
tb_prop_filter.font = f_p0;
|
||||||
tb_prop_filter.color = COLORS._main_text_sub;
|
tb_prop_filter.color = COLORS._main_text_sub;
|
||||||
tb_prop_filter.align = fa_center;
|
tb_prop_filter.align = fa_center;
|
||||||
tb_prop_filter.hide = true;
|
tb_prop_filter.hide = true;
|
||||||
filter_text = "";
|
filter_text = "";
|
||||||
|
|
||||||
current_meta = -1;
|
current_meta = -1;
|
||||||
|
@ -287,6 +289,9 @@ function Panel_Inspector() : PanelContent() constructor {
|
||||||
var index = jun.value_from == noone? jun.animator.is_anim : 2;
|
var index = jun.value_from == noone? jun.animator.is_anim : 2;
|
||||||
draw_sprite_ui_uniform(THEME.animate_clock, index, butx, lb_y, 1,, 0.8);
|
draw_sprite_ui_uniform(THEME.animate_clock, index, butx, lb_y, 1,, 0.8);
|
||||||
if(_hover && point_in_circle(_m[0], _m[1], butx, lb_y, ui(10))) {
|
if(_hover && point_in_circle(_m[0], _m[1], butx, lb_y, ui(10))) {
|
||||||
|
if(anim_hold != noone)
|
||||||
|
jun.animator.is_anim = anim_hold;
|
||||||
|
|
||||||
draw_sprite_ui_uniform(THEME.animate_clock, index, butx, lb_y, 1,, 1);
|
draw_sprite_ui_uniform(THEME.animate_clock, index, butx, lb_y, 1,, 1);
|
||||||
TOOLTIP = jun.value_from == noone? get_text("panel_inspector_toggle_anim", "Toggle animation") : get_text("panel_inspector_remove_link", "Remove link");
|
TOOLTIP = jun.value_from == noone? get_text("panel_inspector_toggle_anim", "Toggle animation") : get_text("panel_inspector_remove_link", "Remove link");
|
||||||
|
|
||||||
|
@ -296,12 +301,16 @@ function Panel_Inspector() : PanelContent() constructor {
|
||||||
else {
|
else {
|
||||||
recordAction(ACTION_TYPE.var_modify, jun.animator, [ jun.animator.is_anim, "is_anim", jun.name + " animation" ]);
|
recordAction(ACTION_TYPE.var_modify, jun.animator, [ jun.animator.is_anim, "is_anim", jun.name + " animation" ]);
|
||||||
jun.animator.is_anim = !jun.animator.is_anim;
|
jun.animator.is_anim = !jun.animator.is_anim;
|
||||||
|
anim_hold = jun.animator.is_anim;
|
||||||
}
|
}
|
||||||
PANEL_ANIMATION.updatePropertyList();
|
PANEL_ANIMATION.updatePropertyList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(anim_hold != noone && mouse_release(mb_left))
|
||||||
|
anim_hold = noone;
|
||||||
|
|
||||||
butx += ui(20);
|
butx += ui(20);
|
||||||
if(!global_var) {
|
if(!global_var) {
|
||||||
if(jun.global_use) {
|
if(jun.global_use) {
|
||||||
|
@ -310,16 +319,24 @@ function Panel_Inspector() : PanelContent() constructor {
|
||||||
index = jun.visible;
|
index = jun.visible;
|
||||||
draw_sprite_ui_uniform(THEME.junc_visible, index, butx, lb_y, 1,, 0.8);
|
draw_sprite_ui_uniform(THEME.junc_visible, index, butx, lb_y, 1,, 0.8);
|
||||||
if(_hover && point_in_circle(_m[0], _m[1], butx, lb_y, ui(10))) {
|
if(_hover && point_in_circle(_m[0], _m[1], butx, lb_y, ui(10))) {
|
||||||
|
if(visi_hold != noone)
|
||||||
|
jun.visible = visi_hold;
|
||||||
|
|
||||||
draw_sprite_ui_uniform(THEME.junc_visible, index, butx, lb_y, 1,, 1);
|
draw_sprite_ui_uniform(THEME.junc_visible, index, butx, lb_y, 1,, 1);
|
||||||
TOOLTIP = get_text("visibility", "Visibility");
|
TOOLTIP = get_text("visibility", "Visibility");
|
||||||
|
|
||||||
if(mouse_press(mb_left, pFOCUS))
|
if(mouse_press(mb_left, pFOCUS)) {
|
||||||
jun.visible = !jun.visible;
|
jun.visible = !jun.visible;
|
||||||
|
visi_hold = jun.visible;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
draw_sprite_ui_uniform(THEME.node_use_global, 0, butx, lb_y, 1,, 0.8);
|
draw_sprite_ui_uniform(THEME.node_use_global, 0, butx, lb_y, 1,, 0.8);
|
||||||
|
|
||||||
|
if(visi_hold != noone && mouse_release(mb_left))
|
||||||
|
visi_hold = noone;
|
||||||
|
|
||||||
var cc = COLORS._main_text;
|
var cc = COLORS._main_text;
|
||||||
if(jun.global_use)
|
if(jun.global_use)
|
||||||
cc = GLOBAL.inputGetable(jun, jun.global_key)? COLORS._main_value_positive : COLORS._main_value_negative;
|
cc = GLOBAL.inputGetable(jun, jun.global_key)? COLORS._main_value_positive : COLORS._main_value_negative;
|
||||||
|
|
|
@ -140,10 +140,25 @@ function Panel_Menu() : PanelContent() constructor {
|
||||||
}),
|
}),
|
||||||
]],
|
]],
|
||||||
[ get_text("panel_menu_panels", "Panels"), [
|
[ get_text("panel_menu_panels", "Panels"), [
|
||||||
menuItemGroup(get_text("panel_menu_workspace", "Workspace"), [
|
menuItem(get_text("panel_menu_workspace", "Workspace"), function(_x, _y, _depth) {
|
||||||
[ THEME.workspace_horizontal, function() { clearPanel(); PREF_MAP[? "panel_layout"] = 0; setPanel(); PREF_SAVE(); } ],
|
var arr = [], lays = [];
|
||||||
[ THEME.workspace_vertical, function() { clearPanel(); PREF_MAP[? "panel_layout"] = 1; setPanel(); PREF_SAVE(); } ]
|
var f = file_find_first(DIRECTORY + "layouts/*", 0);
|
||||||
]),
|
while(f != "") {
|
||||||
|
array_push(lays, filename_name_only(f));
|
||||||
|
f = file_find_next();
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i = 0; i < array_length(lays); i++) {
|
||||||
|
array_push(arr, menuItem(lays[i],
|
||||||
|
function(_x, _y, _depth, _path) {
|
||||||
|
PREF_MAP[? "panel_layout_file"] = _path;
|
||||||
|
PREF_SAVE();
|
||||||
|
setPanel();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
return submenuCall(_x, _y, _depth, arr);
|
||||||
|
}).setIsShelf(),
|
||||||
-1,
|
-1,
|
||||||
menuItem(get_text("panel_menu_collections", "Collections"), function() {
|
menuItem(get_text("panel_menu_collections", "Collections"), function() {
|
||||||
clearPanel();
|
clearPanel();
|
||||||
|
|
|
@ -48,10 +48,12 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
grid_opacity = 0.5;
|
grid_opacity = 0.5;
|
||||||
grid_color = COLORS.panel_preview_grid;
|
grid_color = COLORS.panel_preview_grid;
|
||||||
|
|
||||||
tool_index = -1;
|
tool_x = 0;
|
||||||
tool_sub_index = 0;
|
tool_x_to = 0;
|
||||||
|
tool_x_max = 0;
|
||||||
|
tool_current = noone;
|
||||||
|
|
||||||
right_menu_y = 8;
|
right_menu_y = 8;
|
||||||
mouse_on_preview = false;
|
mouse_on_preview = false;
|
||||||
|
|
||||||
resetViewOnDoubleClick = true;
|
resetViewOnDoubleClick = true;
|
||||||
|
@ -242,7 +244,7 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
canvas_hover = true;
|
canvas_hover = point_in_rectangle(mx, my, 0, toolbar_height, w, h - toolbar_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
function fullView() {
|
function fullView() {
|
||||||
|
@ -272,7 +274,7 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
var node = getNodePreview();
|
var node = getNodePreview();
|
||||||
if(node == noone) return;
|
if(node == noone) return;
|
||||||
|
|
||||||
node.preview_channel = sbChannelIndex[index];
|
node.preview_channel = array_safe_get(sbChannelIndex, index);
|
||||||
});
|
});
|
||||||
|
|
||||||
sbChannelIndex = [];
|
sbChannelIndex = [];
|
||||||
|
@ -285,9 +287,10 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
var chName = [];
|
var chName = [];
|
||||||
sbChannelIndex = [];
|
sbChannelIndex = [];
|
||||||
|
|
||||||
var ww = ui(96);
|
var currName = _node.outputs[| _node.preview_channel].name;
|
||||||
var hh = toolbar_height - ui(12);
|
|
||||||
draw_set_text(f_p0, fa_center, fa_center);
|
draw_set_text(f_p0, fa_center, fa_center);
|
||||||
|
var ww = clamp(w - ui(240), string_width(currName) + ui(48), ui(200));
|
||||||
|
var hh = toolbar_height - ui(12);
|
||||||
|
|
||||||
for( var i = 0; i < ds_list_size(_node.outputs); i++ ) {
|
for( var i = 0; i < ds_list_size(_node.outputs); i++ ) {
|
||||||
if(_node.outputs[| i].type != VALUE_TYPE.surface) continue;
|
if(_node.outputs[| i].type != VALUE_TYPE.surface) continue;
|
||||||
|
@ -300,7 +303,7 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
sbChannel.hover = pHOVER;
|
sbChannel.hover = pHOVER;
|
||||||
sbChannel.active = pFOCUS;
|
sbChannel.active = pFOCUS;
|
||||||
|
|
||||||
sbChannel.draw(_x - ww, _y - hh / 2, ww, hh, _node.outputs[| _node.preview_channel].name, [mx, my], x, y);
|
sbChannel.draw(_x - ww, _y - hh / 2, ww, hh, currName, [mx, my], x, y);
|
||||||
right_menu_y += ui(40);
|
right_menu_y += ui(40);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -461,7 +464,7 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawPreviewOverlay() {
|
function drawPreviewOverlay() {
|
||||||
right_menu_y = ui(32);
|
right_menu_y = toolbar_height - ui(4);
|
||||||
draw_set_text(f_p0, fa_right, fa_top, fps >= ANIMATOR.framerate? COLORS._main_text_sub : COLORS._main_value_negative);
|
draw_set_text(f_p0, fa_right, fa_top, fps >= ANIMATOR.framerate? COLORS._main_text_sub : COLORS._main_value_negative);
|
||||||
draw_text(w - ui(8), right_menu_y, "fps " + string(fps));
|
draw_text(w - ui(8), right_menu_y, "fps " + string(fps));
|
||||||
right_menu_y += string_height("l");
|
right_menu_y += string_height("l");
|
||||||
|
@ -493,7 +496,7 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
var prev_size = ui(48);
|
var prev_size = ui(48);
|
||||||
preview_x = lerp_float(preview_x, preview_x_to, 4);
|
preview_x = lerp_float(preview_x, preview_x_to, 4);
|
||||||
|
|
||||||
if(pHOVER && my > h - toolbar_height - prev_size - ui(16)) {
|
if(pHOVER && my > h - toolbar_height - prev_size - ui(16) && my > toolbar_height) {
|
||||||
canvas_hover = false;
|
canvas_hover = false;
|
||||||
|
|
||||||
if(mouse_wheel_down()) preview_x_to = clamp(preview_x_to - prev_size, - preview_x_max, 0);
|
if(mouse_wheel_down()) preview_x_to = clamp(preview_x_to - prev_size, - preview_x_max, 0);
|
||||||
|
@ -587,7 +590,11 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
_sny = grid_height;
|
_sny = grid_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
_node.drawOverlay(active && isHover && !key_mod_press(CTRL), cx, cy, canvas_s, _mx, _my, _snx, _sny);
|
var overlayHover = active && isHover && point_in_rectangle(mx, my, 0, toolbar_height, w, h - toolbar_height);
|
||||||
|
if(_node.tools != -1)
|
||||||
|
overlayHover &= mx > ui(48);
|
||||||
|
|
||||||
|
_node.drawOverlay(overlayHover && !key_mod_press(CTRL), cx, cy, canvas_s, _mx, _my, _snx, _sny);
|
||||||
|
|
||||||
if(_node.tools != -1) {
|
if(_node.tools != -1) {
|
||||||
var xx = ui(8);
|
var xx = ui(8);
|
||||||
|
@ -595,43 +602,31 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
|
|
||||||
for(var i = 0; i < array_length(_node.tools); i++) {
|
for(var i = 0; i < array_length(_node.tools); i++) {
|
||||||
var b = buttonInstant(THEME.button, xx, yy, ui(40), ui(40), [_mx, _my], pFOCUS, isHover);
|
var b = buttonInstant(THEME.button, xx, yy, ui(40), ui(40), [_mx, _my], pFOCUS, isHover);
|
||||||
var toggle = false;
|
var tool = _node.tools[i];
|
||||||
if(b == 1)
|
|
||||||
TOOLTIP = _node.tools[i][0];
|
if(b == 1) {
|
||||||
else if(b == 2)
|
TOOLTIP = tool.name;
|
||||||
toggle = true;
|
mouse_on_preview = false;
|
||||||
|
} if(b == 2)
|
||||||
|
tool.toggle();
|
||||||
|
|
||||||
if(pFOCUS && keyboard_check_pressed(ord(string(i + 1))))
|
if(pFOCUS && keyboard_check_pressed(ord(string(i + 1))))
|
||||||
toggle = true;
|
tool.toggle();
|
||||||
|
|
||||||
if(toggle) {
|
|
||||||
if(is_array(_node.tools[i][1])) {
|
|
||||||
if(tool_index == i) {
|
|
||||||
tool_sub_index++;
|
|
||||||
if(tool_sub_index >= array_length(_node.tools[i][1])) {
|
|
||||||
tool_index = -1;
|
|
||||||
tool_sub_index = 0;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
tool_index = i;
|
|
||||||
} else
|
|
||||||
tool_index = tool_index == i? -1 : i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(tool_index == i)
|
if(tool_current == tool)
|
||||||
draw_sprite_stretched(THEME.button, 2, xx, yy, ui(40), ui(40));
|
draw_sprite_stretched(THEME.button, 2, xx, yy, ui(40), ui(40));
|
||||||
|
|
||||||
if(is_array(_node.tools[i][1])) {
|
if(tool.subtools > 0)
|
||||||
var _ind = safe_mod(tool_sub_index, array_length(_node.tools[i][1]));
|
draw_sprite_ui_uniform(tool.spr[tool.selecting], 0, xx + ui(20), yy + ui(20));
|
||||||
draw_sprite_ui_uniform(_node.tools[i][1][_ind], 0, xx + ui(20), yy + ui(20));
|
else
|
||||||
} else
|
draw_sprite_ui_uniform(tool.spr, 0, xx + ui(20), yy + ui(20));
|
||||||
draw_sprite_ui_uniform(_node.tools[i][1], 0, xx + ui(20), yy + ui(20));
|
|
||||||
yy += ui(48);
|
yy += ui(48);
|
||||||
}
|
}
|
||||||
}
|
} else
|
||||||
|
tool_current = noone;
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawToolBar() {
|
function drawToolBar(_node) {
|
||||||
toolbar_height = ui(40);
|
toolbar_height = ui(40);
|
||||||
var ty = h - toolbar_height;
|
var ty = h - toolbar_height;
|
||||||
//draw_sprite_stretched_ext(THEME.toolbar_shadow, 0, 0, ty - 12 + 4, w, 12, c_white, 0.5);
|
//draw_sprite_stretched_ext(THEME.toolbar_shadow, 0, 0, ty - 12 + 4, w, 12, c_white, 0.5);
|
||||||
|
@ -639,36 +634,89 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
var scHeight = ui(32);
|
var scHeight = ui(32);
|
||||||
|
|
||||||
draw_set_color(COLORS.panel_toolbar_fill);
|
draw_set_color(COLORS.panel_toolbar_fill);
|
||||||
draw_set_alpha(0.5);
|
|
||||||
draw_rectangle(0, 0, w, scHeight, false);
|
draw_rectangle(0, 0, w, scHeight, false);
|
||||||
draw_set_alpha(1);
|
|
||||||
|
|
||||||
var cx = ui(10);
|
|
||||||
var cy = ui(10);
|
|
||||||
var cw = ui(32);
|
|
||||||
var ch = scHeight - ui(16);
|
|
||||||
|
|
||||||
if(sample_color != noone) {
|
|
||||||
draw_set_color(sample_color);
|
|
||||||
draw_rectangle(cx, cy, cx + cw, cy + ch, false);
|
|
||||||
}
|
|
||||||
draw_set_color(COLORS.panel_toolbar_outline);
|
draw_set_color(COLORS.panel_toolbar_outline);
|
||||||
draw_rectangle(cx, cy, cx + cw, cy + ch, true);
|
draw_line(0, scHeight, w, scHeight);
|
||||||
|
|
||||||
if(sample_color != noone) {
|
|
||||||
var tx = cx + cw + ui(16);
|
|
||||||
var hx = color_get_hex(sample_color);
|
|
||||||
draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text);
|
|
||||||
draw_text(tx, cy + ch / 2, hx);
|
|
||||||
|
|
||||||
tx += string_width(hx) + ui(8);
|
|
||||||
draw_set_color(COLORS._main_text_sub);
|
|
||||||
draw_text(tx, cy + ch / 2, "(" + string(color_get_alpha(sample_color)) + ")");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(sample_x != noone) {
|
if(tool_current != noone) { //tool settings
|
||||||
draw_set_text(f_p0, fa_right, fa_center, COLORS._main_text_sub);
|
var settings = PANEL_GRAPH.node_focus.tool_settings;
|
||||||
draw_text(w - ui(10), cy + ch / 2, "[" + string(sample_x) + ", " + string(sample_y) + "]");
|
var len = array_length(settings);
|
||||||
|
for( var i = 0; i < array_length(tool_current.settings); i++ )
|
||||||
|
settings[len + i] = tool_current.settings[i];
|
||||||
|
|
||||||
|
tool_x = lerp_float(tool_x, tool_x_to, 5);
|
||||||
|
var tolx = tool_x + ui(16);
|
||||||
|
var toly = ui(8);
|
||||||
|
var tolw = ui(64);
|
||||||
|
var tolh = toolbar_height - ui(20);
|
||||||
|
var tol_max_w = ui(32);
|
||||||
|
|
||||||
|
for( var i = 0; i < array_length(settings); i++ ) {
|
||||||
|
var sett = settings[i];
|
||||||
|
var nme = sett[0];
|
||||||
|
var wdg = sett[1];
|
||||||
|
var key = sett[2];
|
||||||
|
var atr = sett[3];
|
||||||
|
|
||||||
|
draw_set_text(f_p2, fa_left, fa_center, COLORS._main_text_sub);
|
||||||
|
draw_text(tolx, toolbar_height / 2 - ui(2), nme);
|
||||||
|
tolx += string_width(nme) + ui(8);
|
||||||
|
tol_max_w += string_width(nme) + ui(8);
|
||||||
|
|
||||||
|
wdg.setActiveFocus(pFOCUS, pHOVER);
|
||||||
|
switch(instanceof(wdg)) {
|
||||||
|
case "textBox" :
|
||||||
|
wdg.draw(tolx, toly, tolw, tolh, atr[$ key], [ mx, my ]);
|
||||||
|
break;
|
||||||
|
case "checkBoxGroup" :
|
||||||
|
tolw = tolh * wdg.size;
|
||||||
|
wdg.draw(tolx, toly, atr[$ key], [ mx, my ], tolh);
|
||||||
|
break;
|
||||||
|
case "checkBox" :
|
||||||
|
tolw = tolh;
|
||||||
|
wdg.draw(tolx, toly, atr[$ key], [ mx, my ], tolh);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
tolx += tolw + ui(16);
|
||||||
|
tol_max_w += tolw + ui(16);
|
||||||
|
}
|
||||||
|
|
||||||
|
tol_max_w = max(0, tol_max_w - w);
|
||||||
|
if(point_in_rectangle(mx, my, 0, 0, w, toolbar_height)) {
|
||||||
|
if(mouse_wheel_up()) tool_x_to = clamp(tool_x_to + ui(64), -tol_max_w, 0);
|
||||||
|
if(mouse_wheel_down()) tool_x_to = clamp(tool_x_to - ui(64), -tol_max_w, 0);
|
||||||
|
}
|
||||||
|
} else { //color sampler
|
||||||
|
var cx = ui(10);
|
||||||
|
var cy = ui(10);
|
||||||
|
var cw = ui(32);
|
||||||
|
var ch = scHeight - ui(16);
|
||||||
|
|
||||||
|
if(sample_color != noone) {
|
||||||
|
draw_set_color(sample_color);
|
||||||
|
draw_rectangle(cx, cy, cx + cw, cy + ch, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_set_color(COLORS.panel_toolbar_outline);
|
||||||
|
draw_rectangle(cx, cy, cx + cw, cy + ch, true);
|
||||||
|
|
||||||
|
if(sample_color != noone) {
|
||||||
|
var tx = cx + cw + ui(16);
|
||||||
|
var hx = color_get_hex(sample_color);
|
||||||
|
draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text);
|
||||||
|
draw_text(tx, cy + ch / 2, hx);
|
||||||
|
|
||||||
|
tx += string_width(hx) + ui(8);
|
||||||
|
draw_set_color(COLORS._main_text_sub);
|
||||||
|
draw_text(tx, cy + ch / 2, "(" + string(color_get_alpha(sample_color)) + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sample_x != noone) {
|
||||||
|
draw_set_text(f_p0, fa_right, fa_center, COLORS._main_text_sub);
|
||||||
|
draw_text(w - ui(10), cy + ch / 2, "[" + string(sample_x) + ", " + string(sample_y) + "]");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_set_color(COLORS.panel_toolbar_fill);
|
draw_set_color(COLORS.panel_toolbar_fill);
|
||||||
|
@ -772,7 +820,7 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawContent(panel) {
|
function drawContent(panel) {
|
||||||
mouse_on_preview = pHOVER && point_in_rectangle(mx, my, 0, 0, w, h - toolbar_height);
|
mouse_on_preview = pHOVER && point_in_rectangle(mx, my, 0, toolbar_height, w, h - toolbar_height);
|
||||||
|
|
||||||
draw_clear(COLORS.panel_bg_clear);
|
draw_clear(COLORS.panel_bg_clear);
|
||||||
if(canvas_bg == -1) {
|
if(canvas_bg == -1) {
|
||||||
|
@ -790,7 +838,7 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
drawNodeTools(pFOCUS, PANEL_GRAPH.node_focus);
|
drawNodeTools(pFOCUS, PANEL_GRAPH.node_focus);
|
||||||
if(last_focus != PANEL_GRAPH.node_focus) {
|
if(last_focus != PANEL_GRAPH.node_focus) {
|
||||||
last_focus = PANEL_GRAPH.node_focus;
|
last_focus = PANEL_GRAPH.node_focus;
|
||||||
tool_index = -1;
|
tool_current = noone;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(do_fullView) {
|
if(do_fullView) {
|
||||||
|
@ -798,7 +846,7 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
fullView();
|
fullView();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(my < h - toolbar_height && mouse_press(mb_right, pFOCUS)) {
|
if(mouse_on_preview && mouse_press(mb_right, pFOCUS)) {
|
||||||
menuCall(,, [
|
menuCall(,, [
|
||||||
menuItem(get_text("panel_graph_preview_window", "Send to preview window"), function() { previewWindow(getNodePreview()); }, noone, ["Preview", "Preview window"]),
|
menuItem(get_text("panel_graph_preview_window", "Send to preview window"), function() { previewWindow(getNodePreview()); }, noone, ["Preview", "Preview window"]),
|
||||||
-1,
|
-1,
|
||||||
|
@ -811,7 +859,7 @@ function Panel_Preview() : PanelContent() constructor {
|
||||||
}
|
}
|
||||||
|
|
||||||
drawSplitView();
|
drawSplitView();
|
||||||
drawToolBar();
|
drawToolBar(PANEL_GRAPH.node_focus);
|
||||||
}
|
}
|
||||||
|
|
||||||
function saveCurrentFrame() {
|
function saveCurrentFrame() {
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
|
|
||||||
PREF_MAP[? "default_surface_side"] = 32;
|
PREF_MAP[? "default_surface_side"] = 32;
|
||||||
|
|
||||||
PREF_MAP[? "panel_layout"] = 1;
|
PREF_MAP[? "panel_layout_file"] = "Vertical";
|
||||||
PREF_MAP[? "panel_collection"] = true;
|
PREF_MAP[? "panel_collection"] = true;
|
||||||
|
|
||||||
PREF_MAP[? "inspector_line_break_width"] = 500;
|
PREF_MAP[? "inspector_line_break_width"] = 500;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
globalvar SAVING;
|
||||||
|
SAVING = false;
|
||||||
|
|
||||||
function NEW() {
|
function NEW() {
|
||||||
if(MODIFIED && !READONLY) {
|
if(MODIFIED && !READONLY) {
|
||||||
var dia = dialogCall(o_dialog_load);
|
var dia = dialogCall(o_dialog_load);
|
||||||
|
@ -28,9 +31,9 @@ function save_serialize() {
|
||||||
|
|
||||||
repeat(ds_map_size(NODE_MAP)) {
|
repeat(ds_map_size(NODE_MAP)) {
|
||||||
var _node = NODE_MAP[? _key];
|
var _node = NODE_MAP[? _key];
|
||||||
if(_node.active) {
|
|
||||||
|
if(_node.active)
|
||||||
ds_list_add_map(_node_list, _node.serialize());
|
ds_list_add_map(_node_list, _node.serialize());
|
||||||
}
|
|
||||||
|
|
||||||
_key = ds_map_find_next(NODE_MAP, _key);
|
_key = ds_map_find_next(NODE_MAP, _key);
|
||||||
}
|
}
|
||||||
|
@ -104,12 +107,15 @@ function SAVE_AS() {
|
||||||
function SAVE_AT(path, log = "save at ") {
|
function SAVE_AT(path, log = "save at ") {
|
||||||
if(DEMO) return false;
|
if(DEMO) return false;
|
||||||
|
|
||||||
|
SAVING = true;
|
||||||
|
|
||||||
if(file_exists(path))
|
if(file_exists(path))
|
||||||
file_delete(path);
|
file_delete(path);
|
||||||
var file = file_text_open_write(path);
|
var file = file_text_open_write(path);
|
||||||
file_text_write_string(file, save_serialize());
|
file_text_write_string(file, save_serialize());
|
||||||
file_text_close(file);
|
file_text_close(file);
|
||||||
|
|
||||||
|
SAVING = false;
|
||||||
READONLY = false;
|
READONLY = false;
|
||||||
MODIFIED = false;
|
MODIFIED = false;
|
||||||
|
|
||||||
|
@ -153,7 +159,7 @@ function SAVE_COLLECTIONS(_list, _path, save_surface = true, metadata = noone) {
|
||||||
file_text_close(file);
|
file_text_close(file);
|
||||||
|
|
||||||
ds_map_destroy(_map);
|
ds_map_destroy(_map);
|
||||||
var pane = findPanel(Panel_Collection, PANEL_MAIN, noone);
|
var pane = findPanel("Panel_Collection", PANEL_MAIN, noone);
|
||||||
if(pane) pane.refreshContext();
|
if(pane) pane.refreshContext();
|
||||||
|
|
||||||
log_message("COLLECTION", "save collection at " + _path, THEME.noti_icon_file_save);
|
log_message("COLLECTION", "save collection at " + _path, THEME.noti_icon_file_save);
|
||||||
|
@ -184,7 +190,7 @@ function SAVE_COLLECTION(_node, _path, save_surface = true, metadata = noone) {
|
||||||
file_text_close(file);
|
file_text_close(file);
|
||||||
|
|
||||||
ds_map_destroy(_map);
|
ds_map_destroy(_map);
|
||||||
var pane = findPanel(Panel_Collection, PANEL_MAIN, noone);
|
var pane = findPanel("Panel_Collection", PANEL_MAIN, noone);
|
||||||
if(pane) pane.refreshContext();
|
if(pane) pane.refreshContext();
|
||||||
|
|
||||||
log_message("COLLECTION", "save collection at " + _path, THEME.noti_icon_file_save);
|
log_message("COLLECTION", "save collection at " + _path, THEME.noti_icon_file_save);
|
||||||
|
|
|
@ -1,135 +1,23 @@
|
||||||
#region evaluator
|
#region evaluator
|
||||||
function functionTree(_val, _child) constructor {
|
|
||||||
val = _val;
|
|
||||||
child = _child;
|
|
||||||
|
|
||||||
function eval(_x, _n) {
|
|
||||||
switch(val) {
|
|
||||||
case "+" : if(array_length(child) >= 2) return child[0].eval(_x, _n) + child[1].eval(_x, _n);
|
|
||||||
case "-" : if(array_length(child) >= 2) return child[0].eval(_x, _n) - child[1].eval(_x, _n);
|
|
||||||
case "*" : if(array_length(child) >= 2) return child[0].eval(_x, _n) * child[1].eval(_x, _n);
|
|
||||||
case "/" : if(array_length(child) >= 2) return child[0].eval(_x, _n) / child[1].eval(_x, _n);
|
|
||||||
|
|
||||||
case "sin" : if(array_length(child) >= 1) return sin(child[0].eval(_x, _n));
|
|
||||||
case "cos" : if(array_length(child) >= 1) return cos(child[0].eval(_x, _n));
|
|
||||||
case "tan" : if(array_length(child) >= 1) return tan(child[0].eval(_x, _n));
|
|
||||||
|
|
||||||
case "pi" : return pi;
|
|
||||||
case "x" :
|
|
||||||
case "t" : return _x;
|
|
||||||
case "n" : return _n;
|
|
||||||
|
|
||||||
default : return toNumber(val);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildTree(_op, vl) {
|
|
||||||
var ch = [];
|
|
||||||
|
|
||||||
switch(_op) {
|
|
||||||
case "+":
|
|
||||||
case "-":
|
|
||||||
case "*":
|
|
||||||
case "/":
|
|
||||||
if(ds_stack_size(vl) >= 2) ch = [ds_stack_pop(vl), ds_stack_pop(vl)]; break;
|
|
||||||
|
|
||||||
case "sin":
|
|
||||||
case "cos":
|
|
||||||
case "tan":
|
|
||||||
if(ds_stack_size(vl) >= 1) ch = [ds_stack_pop(vl)]; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new functionTree(_op, ch);
|
|
||||||
}
|
|
||||||
|
|
||||||
function functionGraph(fx) {
|
|
||||||
static pres = ds_map_create();
|
|
||||||
pres[? "+"] = 1;
|
|
||||||
pres[? "-"] = 1;
|
|
||||||
pres[? "*"] = 2;
|
|
||||||
pres[? "/"] = 2;
|
|
||||||
pres[? "sin"] = 5;
|
|
||||||
pres[? "cos"] = 5;
|
|
||||||
pres[? "tan"] = 5;
|
|
||||||
|
|
||||||
var vl = ds_stack_create();
|
|
||||||
var op = ds_stack_create();
|
|
||||||
|
|
||||||
fx = string_replace_all(fx, " ", "");
|
|
||||||
var len = string_length(fx);
|
|
||||||
var l = 1;
|
|
||||||
var ch, cch;
|
|
||||||
|
|
||||||
while(l <= len) {
|
|
||||||
ch = string_char_at(fx, l);
|
|
||||||
|
|
||||||
if(ds_map_exists(pres, ch)) {
|
|
||||||
if(ds_stack_empty(op)) ds_stack_push(op, ch);
|
|
||||||
else {
|
|
||||||
if(pres[? ch] > pres[? ds_stack_top(op)] || ds_stack_top(op) == "(") ds_stack_push(op, ch);
|
|
||||||
else {
|
|
||||||
while(pres[? ch] <= pres[? ds_stack_top(op)] && !ds_stack_empty(op)) {
|
|
||||||
ds_stack_push(vl, buildTree(ds_stack_pop(op), vl));
|
|
||||||
}
|
|
||||||
ds_stack_push(op, ch);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
l++;
|
|
||||||
} else if (ch == "(") {
|
|
||||||
ds_stack_push(op, ch);
|
|
||||||
l++;
|
|
||||||
} else if (ch == ")") {
|
|
||||||
while(ds_stack_top(op) != "(" && !ds_stack_empty(op)) {
|
|
||||||
ds_stack_push(vl, buildTree(ds_stack_pop(op), vl));
|
|
||||||
}
|
|
||||||
ds_stack_pop(op);
|
|
||||||
l++;
|
|
||||||
} else {
|
|
||||||
var vsl = "";
|
|
||||||
|
|
||||||
while(l <= len) {
|
|
||||||
cch = string_char_at(fx, l);
|
|
||||||
if(ds_map_exists(pres, cch) || cch == ")" || cch == "(") break;
|
|
||||||
|
|
||||||
vsl += cch;
|
|
||||||
l++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ds_map_exists(pres, vsl)) {
|
|
||||||
ds_stack_push(op, vsl);
|
|
||||||
} else {
|
|
||||||
ds_stack_push(vl, new functionTree(vsl, []));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while(!ds_stack_empty(op)) {
|
|
||||||
ds_stack_push(vl, buildTree(ds_stack_pop(op), vl));
|
|
||||||
}
|
|
||||||
|
|
||||||
ds_stack_destroy(op);
|
|
||||||
|
|
||||||
return ds_stack_empty(vl)? new functionTree("", []) : ds_stack_pop(vl);
|
|
||||||
}
|
|
||||||
|
|
||||||
function evaluateFunction(fx, params = {}) {
|
function evaluateFunction(fx, params = {}) {
|
||||||
static pres = ds_map_create();
|
static pres = ds_map_create();
|
||||||
pres[? "+"] = 1;
|
pres[? "+"] = 1;
|
||||||
pres[? "-"] = 1;
|
pres[? "-"] = 1;
|
||||||
pres[? "*"] = 2;
|
pres[? "*"] = 2;
|
||||||
pres[? "/"] = 2;
|
pres[? "/"] = 2;
|
||||||
pres[? "^"] = 3;
|
pres[? "^"] = 3;
|
||||||
pres[? "sin"] = 5;
|
pres[? "sin"] = 5;
|
||||||
pres[? "cos"] = 5;
|
pres[? "cos"] = 5;
|
||||||
pres[? "tan"] = 5;
|
pres[? "tan"] = 5;
|
||||||
|
pres[? "abs"] = 5;
|
||||||
|
pres[? "round"] = 5;
|
||||||
|
pres[? "ceil"] = 5;
|
||||||
|
pres[? "floor"] = 5;
|
||||||
|
|
||||||
var vl = ds_stack_create();
|
var vl = ds_stack_create();
|
||||||
var op = ds_stack_create();
|
var op = ds_stack_create();
|
||||||
|
|
||||||
fx = string_replace_all(fx, " ", "");
|
fx = string_replace_all(fx, " ", "");
|
||||||
fx = string_replace_all(fx, "\n", "");
|
fx = string_replace_all(fx, "\n", "");
|
||||||
|
|
||||||
var len = string_length(fx);
|
var len = string_length(fx);
|
||||||
|
@ -203,28 +91,35 @@
|
||||||
function evalToken(operator, vl) {
|
function evalToken(operator, vl) {
|
||||||
if(ds_stack_empty(vl)) return 0;
|
if(ds_stack_empty(vl)) return 0;
|
||||||
switch(operator) {
|
switch(operator) {
|
||||||
case "+": if(ds_stack_size(vl) >= 2) return ds_stack_pop(vl) + ds_stack_pop(vl);
|
case "+":
|
||||||
|
if(ds_stack_size(vl) >= 2)
|
||||||
|
return ds_stack_pop(vl) + ds_stack_pop(vl);
|
||||||
case "-":
|
case "-":
|
||||||
if(ds_stack_size(vl) >= 2) return -ds_stack_pop(vl) + ds_stack_pop(vl);
|
if(ds_stack_size(vl) >= 2)
|
||||||
else return -ds_stack_pop(vl);
|
return -ds_stack_pop(vl) + ds_stack_pop(vl);
|
||||||
case "*": if(ds_stack_size(vl) >= 2) return ds_stack_pop(vl) * ds_stack_pop(vl);
|
else
|
||||||
|
return -ds_stack_pop(vl);
|
||||||
|
case "*":
|
||||||
|
if(ds_stack_size(vl) >= 2)
|
||||||
|
return ds_stack_pop(vl) * ds_stack_pop(vl);
|
||||||
case "^":
|
case "^":
|
||||||
if(ds_stack_size(vl) >= 2) {
|
if(ds_stack_size(vl) < 2) return 1;
|
||||||
var ex = ds_stack_pop(vl);
|
var ex = ds_stack_pop(vl);
|
||||||
var bs = ds_stack_pop(vl);
|
var bs = ds_stack_pop(vl);
|
||||||
return power(bs, ex);
|
return power(bs, ex);
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
case "/":
|
case "/":
|
||||||
if(ds_stack_size(vl) >= 2) {
|
if(ds_stack_size(vl) < 2) return 0;
|
||||||
var _d = ds_stack_pop(vl);
|
var _d = ds_stack_pop(vl);
|
||||||
if(_d == 0) return 0;
|
if(_d == 0) return 0;
|
||||||
return ds_stack_pop(vl) / _d;
|
return ds_stack_pop(vl) / _d;
|
||||||
}
|
|
||||||
|
|
||||||
case "sin": if(ds_stack_size(vl) >= 1) return sin(ds_stack_pop(vl));
|
case "sin" : if(ds_stack_size(vl) >= 1) return sin(ds_stack_pop(vl));
|
||||||
case "cos": if(ds_stack_size(vl) >= 1) return cos(ds_stack_pop(vl));
|
case "cos" : if(ds_stack_size(vl) >= 1) return cos(ds_stack_pop(vl));
|
||||||
case "tan": if(ds_stack_size(vl) >= 1) return tan(ds_stack_pop(vl));
|
case "tan" : if(ds_stack_size(vl) >= 1) return tan(ds_stack_pop(vl));
|
||||||
|
case "abs" : if(ds_stack_size(vl) >= 1) return abs(ds_stack_pop(vl));
|
||||||
|
case "round" : if(ds_stack_size(vl) >= 1) return round(ds_stack_pop(vl));
|
||||||
|
case "ceil" : if(ds_stack_size(vl) >= 1) return ceil(ds_stack_pop(vl));
|
||||||
|
case "floor" : if(ds_stack_size(vl) >= 1) return floor(ds_stack_pop(vl));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.5 KiB |
74
sprites/s_node_path_plot/s_node_path_plot.yy
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMSprite",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "s_node_path_plot",
|
||||||
|
"bbox_bottom": 63,
|
||||||
|
"bbox_left": 0,
|
||||||
|
"bbox_right": 63,
|
||||||
|
"bbox_top": 0,
|
||||||
|
"bboxMode": 0,
|
||||||
|
"collisionKind": 1,
|
||||||
|
"collisionTolerance": 0,
|
||||||
|
"DynamicTexturePage": false,
|
||||||
|
"edgeFiltering": false,
|
||||||
|
"For3D": false,
|
||||||
|
"frames": [
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"de0af11e-1d94-4bd9-9b0a-8833941278ec",},
|
||||||
|
],
|
||||||
|
"gridX": 0,
|
||||||
|
"gridY": 0,
|
||||||
|
"height": 64,
|
||||||
|
"HTile": false,
|
||||||
|
"layers": [
|
||||||
|
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"69c59eab-237b-41cf-98fc-4be54acb2022","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
|
||||||
|
],
|
||||||
|
"nineSlice": null,
|
||||||
|
"origin": 4,
|
||||||
|
"parent": {
|
||||||
|
"name": "path",
|
||||||
|
"path": "folders/nodes/icons/value/path.yy",
|
||||||
|
},
|
||||||
|
"preMultiplyAlpha": false,
|
||||||
|
"sequence": {
|
||||||
|
"resourceType": "GMSequence",
|
||||||
|
"resourceVersion": "1.4",
|
||||||
|
"name": "s_node_path_plot",
|
||||||
|
"autoRecord": true,
|
||||||
|
"backdropHeight": 768,
|
||||||
|
"backdropImageOpacity": 0.5,
|
||||||
|
"backdropImagePath": "",
|
||||||
|
"backdropWidth": 1366,
|
||||||
|
"backdropXOffset": 0.0,
|
||||||
|
"backdropYOffset": 0.0,
|
||||||
|
"events": {"resourceType":"KeyframeStore<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||||
|
"eventStubScript": null,
|
||||||
|
"eventToFunction": {},
|
||||||
|
"length": 1.0,
|
||||||
|
"lockOrigin": false,
|
||||||
|
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||||
|
"playback": 1,
|
||||||
|
"playbackSpeed": 30.0,
|
||||||
|
"playbackSpeedType": 0,
|
||||||
|
"showBackdrop": true,
|
||||||
|
"showBackdropImage": false,
|
||||||
|
"timeUnits": 1,
|
||||||
|
"tracks": [
|
||||||
|
{"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"de0af11e-1d94-4bd9-9b0a-8833941278ec","path":"sprites/s_node_path_plot/s_node_path_plot.yy",},},},"Disabled":false,"id":"fb0facfe-f4d5-4842-94c9-a5d52c64eaa3","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
|
||||||
|
],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
|
||||||
|
],
|
||||||
|
"visibleRange": null,
|
||||||
|
"volume": 1.0,
|
||||||
|
"xorigin": 32,
|
||||||
|
"yorigin": 32,
|
||||||
|
},
|
||||||
|
"swatchColours": null,
|
||||||
|
"swfPrecision": 2.525,
|
||||||
|
"textureGroupId": {
|
||||||
|
"name": "Default",
|
||||||
|
"path": "texturegroups/Default",
|
||||||
|
},
|
||||||
|
"type": 0,
|
||||||
|
"VTile": false,
|
||||||
|
"width": 64,
|
||||||
|
}
|
BIN
sprites/s_node_struct/92e3047d-c017-4c22-858a-35e9128230f6.png
Normal file
After Width: | Height: | Size: 664 B |
After Width: | Height: | Size: 664 B |
74
sprites/s_node_struct/s_node_struct.yy
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMSprite",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "s_node_struct",
|
||||||
|
"bbox_bottom": 54,
|
||||||
|
"bbox_left": 9,
|
||||||
|
"bbox_right": 54,
|
||||||
|
"bbox_top": 9,
|
||||||
|
"bboxMode": 0,
|
||||||
|
"collisionKind": 1,
|
||||||
|
"collisionTolerance": 0,
|
||||||
|
"DynamicTexturePage": false,
|
||||||
|
"edgeFiltering": false,
|
||||||
|
"For3D": false,
|
||||||
|
"frames": [
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"92e3047d-c017-4c22-858a-35e9128230f6",},
|
||||||
|
],
|
||||||
|
"gridX": 0,
|
||||||
|
"gridY": 0,
|
||||||
|
"height": 64,
|
||||||
|
"HTile": false,
|
||||||
|
"layers": [
|
||||||
|
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"fe357525-346e-4f34-b0ce-d4c2058c7edf","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
|
||||||
|
],
|
||||||
|
"nineSlice": null,
|
||||||
|
"origin": 4,
|
||||||
|
"parent": {
|
||||||
|
"name": "struct",
|
||||||
|
"path": "folders/nodes/icons/value/struct.yy",
|
||||||
|
},
|
||||||
|
"preMultiplyAlpha": false,
|
||||||
|
"sequence": {
|
||||||
|
"resourceType": "GMSequence",
|
||||||
|
"resourceVersion": "1.4",
|
||||||
|
"name": "s_node_struct",
|
||||||
|
"autoRecord": true,
|
||||||
|
"backdropHeight": 768,
|
||||||
|
"backdropImageOpacity": 0.5,
|
||||||
|
"backdropImagePath": "",
|
||||||
|
"backdropWidth": 1366,
|
||||||
|
"backdropXOffset": 0.0,
|
||||||
|
"backdropYOffset": 0.0,
|
||||||
|
"events": {"resourceType":"KeyframeStore<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||||
|
"eventStubScript": null,
|
||||||
|
"eventToFunction": {},
|
||||||
|
"length": 1.0,
|
||||||
|
"lockOrigin": false,
|
||||||
|
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||||
|
"playback": 1,
|
||||||
|
"playbackSpeed": 30.0,
|
||||||
|
"playbackSpeedType": 0,
|
||||||
|
"showBackdrop": true,
|
||||||
|
"showBackdropImage": false,
|
||||||
|
"timeUnits": 1,
|
||||||
|
"tracks": [
|
||||||
|
{"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"92e3047d-c017-4c22-858a-35e9128230f6","path":"sprites/s_node_struct/s_node_struct.yy",},},},"Disabled":false,"id":"58955283-59b2-4fbc-82ac-1d9b854e1e6f","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
|
||||||
|
],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
|
||||||
|
],
|
||||||
|
"visibleRange": null,
|
||||||
|
"volume": 1.0,
|
||||||
|
"xorigin": 32,
|
||||||
|
"yorigin": 32,
|
||||||
|
},
|
||||||
|
"swatchColours": null,
|
||||||
|
"swfPrecision": 2.525,
|
||||||
|
"textureGroupId": {
|
||||||
|
"name": "Default",
|
||||||
|
"path": "texturegroups/Default",
|
||||||
|
},
|
||||||
|
"type": 0,
|
||||||
|
"VTile": false,
|
||||||
|
"width": 64,
|
||||||
|
}
|
After Width: | Height: | Size: 776 B |
After Width: | Height: | Size: 776 B |
74
sprites/s_node_struct_get/s_node_struct_get.yy
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMSprite",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "s_node_struct_get",
|
||||||
|
"bbox_bottom": 58,
|
||||||
|
"bbox_left": 14,
|
||||||
|
"bbox_right": 49,
|
||||||
|
"bbox_top": 4,
|
||||||
|
"bboxMode": 0,
|
||||||
|
"collisionKind": 1,
|
||||||
|
"collisionTolerance": 0,
|
||||||
|
"DynamicTexturePage": false,
|
||||||
|
"edgeFiltering": false,
|
||||||
|
"For3D": false,
|
||||||
|
"frames": [
|
||||||
|
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"784c8eb7-83ea-4521-bbe5-159b7bb3f6a2",},
|
||||||
|
],
|
||||||
|
"gridX": 0,
|
||||||
|
"gridY": 0,
|
||||||
|
"height": 64,
|
||||||
|
"HTile": false,
|
||||||
|
"layers": [
|
||||||
|
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"2ea8fede-d145-4b30-89b0-fc4d3a68d58a","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
|
||||||
|
],
|
||||||
|
"nineSlice": null,
|
||||||
|
"origin": 4,
|
||||||
|
"parent": {
|
||||||
|
"name": "struct",
|
||||||
|
"path": "folders/nodes/icons/value/struct.yy",
|
||||||
|
},
|
||||||
|
"preMultiplyAlpha": false,
|
||||||
|
"sequence": {
|
||||||
|
"resourceType": "GMSequence",
|
||||||
|
"resourceVersion": "1.4",
|
||||||
|
"name": "s_node_struct_get",
|
||||||
|
"autoRecord": true,
|
||||||
|
"backdropHeight": 768,
|
||||||
|
"backdropImageOpacity": 0.5,
|
||||||
|
"backdropImagePath": "",
|
||||||
|
"backdropWidth": 1366,
|
||||||
|
"backdropXOffset": 0.0,
|
||||||
|
"backdropYOffset": 0.0,
|
||||||
|
"events": {"resourceType":"KeyframeStore<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||||
|
"eventStubScript": null,
|
||||||
|
"eventToFunction": {},
|
||||||
|
"length": 1.0,
|
||||||
|
"lockOrigin": false,
|
||||||
|
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
|
||||||
|
"playback": 1,
|
||||||
|
"playbackSpeed": 30.0,
|
||||||
|
"playbackSpeedType": 0,
|
||||||
|
"showBackdrop": true,
|
||||||
|
"showBackdropImage": false,
|
||||||
|
"timeUnits": 1,
|
||||||
|
"tracks": [
|
||||||
|
{"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
|
||||||
|
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"784c8eb7-83ea-4521-bbe5-159b7bb3f6a2","path":"sprites/s_node_struct_get/s_node_struct_get.yy",},},},"Disabled":false,"id":"20eb57ef-1462-4db3-9f8b-a20b8bdd679a","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
|
||||||
|
],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
|
||||||
|
],
|
||||||
|
"visibleRange": null,
|
||||||
|
"volume": 1.0,
|
||||||
|
"xorigin": 32,
|
||||||
|
"yorigin": 32,
|
||||||
|
},
|
||||||
|
"swatchColours": null,
|
||||||
|
"swfPrecision": 2.525,
|
||||||
|
"textureGroupId": {
|
||||||
|
"name": "Default",
|
||||||
|
"path": "texturegroups/Default",
|
||||||
|
},
|
||||||
|
"type": 0,
|
||||||
|
"VTile": false,
|
||||||
|
"width": 64,
|
||||||
|
}
|