From a4d8f1f8c4b46c064686aeafcab18ca41d2893f9 Mon Sep 17 00:00:00 2001 From: MakhamDev Date: Fri, 23 Sep 2022 18:28:42 +0700 Subject: [PATCH] 0.9.2r2 --- Pixels Composer.yyp | 33 +- objects/o_dialog_anim_time_scaler/Draw_64.gml | 19 +- .../o_dialog_anim_time_scaler.yy | 11 +- objects/o_dialog_menubox/Draw_64.gml | 12 +- objects/o_dialog_menubox/o_dialog_menubox.yy | 12 +- objects/o_dialog_preference/Create_0.gml | 29 + scripts/controlPointBox/controlPointBox.gml | 117 ++++ .../controlPointBox.yy} | 6 +- .../curve_bezier_function.gml | 10 + .../curve_bezier_function.yy | 7 +- .../curve_bounce_function.gml | 21 + .../curve_bounce_function.yy | 7 +- .../curve_damping_function.gml | 13 + .../curve_damping_function.yy | 7 +- scripts/ds_extra/ds_extra.gml | 4 + scripts/ds_extra/ds_extra.yy | 7 +- scripts/ds_map/ds_map.gml | 11 + scripts/ds_map/ds_map.yy | 7 +- .../inspector_custom_render.gml | 3 - scripts/level_histogram/level_histogram.gml | 77 +++ scripts/level_histogram/level_histogram.yy | 11 + scripts/node_composite/node_composite.gml | 154 ++++- scripts/node_data/node_data.gml | 27 +- scripts/node_group_input/node_group_input.gml | 14 +- scripts/node_group_input/node_group_input.yy | 7 +- scripts/node_image_sheet/node_image_sheet.gml | 4 +- scripts/node_image_sheet/node_image_sheet.yy | 7 +- .../node_iteration_input.gml | 14 +- .../node_iteration_input.yy | 7 +- scripts/node_keyframe/node_keyframe.gml | 133 +++- scripts/node_level/node_level.gml | 55 +- scripts/node_level/node_level.yy | 7 +- .../node_level_selector.gml | 52 ++ .../node_level_selector.yy | 7 +- scripts/node_outline/node_outline.gml | 4 +- scripts/node_transform/node_transform.gml | 9 +- scripts/node_transform/node_transform.yy | 7 +- scripts/node_value/node_value.gml | 155 +++-- scripts/node_wiggler/node_wiggler.gml | 54 +- scripts/node_wrap_mesh/node_wrap_mesh.gml | 242 +++++-- scripts/panel_animation/panel_animation.gml | 592 +++++++++++++----- scripts/panel_graph/panel_graph.gml | 2 +- scripts/panel_inspector/panel_inspector.gml | 89 +-- scripts/panel_inspector/panel_inspector.yy | 4 +- scripts/panel_preview/panel_preview.gml | 12 +- scripts/preferences/preferences.gml | 3 + .../6423615f-5917-453e-9374-1bcfd05b6a25.png | Bin 0 -> 168 bytes .../794700ff-a9f8-465d-80a1-4c6a34f7aac0.png | Bin 0 -> 168 bytes sprites/s_circle_12/s_circle_12.yy | 73 +++ .../ac00e22e-05e7-4497-8a94-6635a0274a05.png | Bin 0 -> 219 bytes .../9dba13e2-3c43-4d6d-85c9-38876c29da09.png | Bin 0 -> 219 bytes sprites/s_circle_16/s_circle_16.yy | 73 +++ .../5e3fb7ab-4e3e-4876-b3c9-078486766e1a.png | Bin 0 -> 323 bytes .../b390e3b7-b72a-469f-bebf-9fa706f64a16.png | Bin 0 -> 323 bytes sprites/s_control_pin/s_control_pin.yy | 73 +++ .../e2965e71-8c59-458a-8945-aef69af2f1a4.png | Bin 0 -> 299 bytes .../08994959-dcdd-4b21-b956-e70eef200465.png | Bin 0 -> 299 bytes sprites/s_control_unpin/s_control_unpin.yy | 73 +++ .../75110183-e53f-42ea-84e7-7f16f90c2d1a.png | Bin 0 -> 113 bytes .../b2bb01cb-dccd-4cd7-80d5-24a272de46e9.png | Bin 0 -> 113 bytes sprites/s_hamburger_16/s_hamburger_16.yy | 73 +++ sprites/s_timeline_clock/s_timeline_clock.yy | 4 +- .../24290950-35fc-4ecc-ba0d-649f84bd31cc.png | Bin 0 -> 349 bytes .../28ea8a9d-44bd-46ed-9942-6ba74ffd0726.png | Bin 0 -> 158 bytes .../66c132f9-ae6a-429c-8cf4-30a9d47ef7a3.png | Bin 0 -> 364 bytes .../6ca25682-cb07-4b3f-b98f-993a2f6be2f2.png | Bin 0 -> 359 bytes .../bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png | Bin 0 -> 349 bytes .../bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png | Bin 0 -> 158 bytes .../bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png | Bin 0 -> 364 bytes .../bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png | Bin 0 -> 359 bytes sprites/s_timeline_ease/s_timeline_ease.yy | 79 +++ .../5c54eeaa-d089-429e-a954-fbb5ccd7e7ab.png | Bin 0 -> 185 bytes .../e08dafd8-6479-4081-9f2c-f460ba81c9dd.png | Bin 0 -> 185 bytes .../s_timeline_elastic/s_timeline_elastic.yy | 97 +++ sprites/s_timeline_graph/s_timeline_graph.yy | 4 +- .../0d0e313c-fafe-42e5-b077-c93fc064bc25.png | Bin 0 -> 157 bytes .../391ccbea-dc4a-4f1a-a4da-ed7fb77dd32a.png | Bin 0 -> 121 bytes .../3d472492-94cf-4d0a-b0bb-43cad651aad9.png | Bin 0 -> 181 bytes .../7e409d3c-0555-4eb6-bb4e-bdcf0e885620.png | Bin 0 -> 171 bytes .../918bd556-996d-49f1-8ca1-61ec18a8f49c.png | Bin 186 -> 0 bytes .../95d975ac-a4aa-408d-adaf-5ae6140e38ff.png | Bin 131 -> 0 bytes .../975854b1-f396-41f1-850b-daa3f8ca6c80.png | Bin 119 -> 0 bytes .../c22ff608-5283-4d97-8909-2024b36933e6.png | Bin 124 -> 0 bytes .../b1392cea-a152-4f40-ac82-ded33d6288af.png | Bin 0 -> 157 bytes .../b1392cea-a152-4f40-ac82-ded33d6288af.png | Bin 0 -> 121 bytes .../b1392cea-a152-4f40-ac82-ded33d6288af.png | Bin 0 -> 181 bytes .../b1392cea-a152-4f40-ac82-ded33d6288af.png | Bin 0 -> 171 bytes .../f29345e4-38e2-4f17-9134-da1226d86fa3.png | Bin 177 -> 0 bytes .../f29345e4-38e2-4f17-9134-da1226d86fa3.png | Bin 128 -> 0 bytes .../f29345e4-38e2-4f17-9134-da1226d86fa3.png | Bin 120 -> 0 bytes .../f29345e4-38e2-4f17-9134-da1226d86fa3.png | Bin 122 -> 0 bytes .../s_timeline_keyframe.yy | 22 +- .../741ad96f-dd2d-4bc7-9ccf-80027d373dc5.png | Bin 0 -> 278 bytes .../8ed37eb2-3476-40db-aba9-295147fd14b5.png | Bin 0 -> 278 bytes .../s_timeline_keyframe_selecting.yy | 73 +++ .../05642409-4457-4bd4-b39b-04909166c96e.png | Bin 0 -> 244 bytes .../76ba7dd8-2350-4cf2-8e55-30a0ff94cd33.png | Bin 0 -> 187 bytes .../98c65aaa-7697-4845-8eb1-c1d4c4191cba.png | Bin 0 -> 190 bytes .../a4e7b7c2-58c3-44c3-9861-16a307950bab.png | Bin 0 -> 244 bytes .../a4e7b7c2-58c3-44c3-9861-16a307950bab.png | Bin 0 -> 187 bytes .../a4e7b7c2-58c3-44c3-9861-16a307950bab.png | Bin 0 -> 190 bytes .../s_timeline_obj_halign.yy | 77 +++ 102 files changed, 2280 insertions(+), 526 deletions(-) create mode 100644 scripts/controlPointBox/controlPointBox.gml rename scripts/{inspector_custom_render/inspector_custom_render.yy => controlPointBox/controlPointBox.yy} (54%) delete mode 100644 scripts/inspector_custom_render/inspector_custom_render.gml create mode 100644 scripts/level_histogram/level_histogram.gml create mode 100644 scripts/level_histogram/level_histogram.yy create mode 100644 sprites/s_circle_12/6423615f-5917-453e-9374-1bcfd05b6a25.png create mode 100644 sprites/s_circle_12/layers/6423615f-5917-453e-9374-1bcfd05b6a25/794700ff-a9f8-465d-80a1-4c6a34f7aac0.png create mode 100644 sprites/s_circle_12/s_circle_12.yy create mode 100644 sprites/s_circle_16/ac00e22e-05e7-4497-8a94-6635a0274a05.png create mode 100644 sprites/s_circle_16/layers/ac00e22e-05e7-4497-8a94-6635a0274a05/9dba13e2-3c43-4d6d-85c9-38876c29da09.png create mode 100644 sprites/s_circle_16/s_circle_16.yy create mode 100644 sprites/s_control_pin/5e3fb7ab-4e3e-4876-b3c9-078486766e1a.png create mode 100644 sprites/s_control_pin/layers/5e3fb7ab-4e3e-4876-b3c9-078486766e1a/b390e3b7-b72a-469f-bebf-9fa706f64a16.png create mode 100644 sprites/s_control_pin/s_control_pin.yy create mode 100644 sprites/s_control_unpin/e2965e71-8c59-458a-8945-aef69af2f1a4.png create mode 100644 sprites/s_control_unpin/layers/e2965e71-8c59-458a-8945-aef69af2f1a4/08994959-dcdd-4b21-b956-e70eef200465.png create mode 100644 sprites/s_control_unpin/s_control_unpin.yy create mode 100644 sprites/s_hamburger_16/75110183-e53f-42ea-84e7-7f16f90c2d1a.png create mode 100644 sprites/s_hamburger_16/layers/75110183-e53f-42ea-84e7-7f16f90c2d1a/b2bb01cb-dccd-4cd7-80d5-24a272de46e9.png create mode 100644 sprites/s_hamburger_16/s_hamburger_16.yy create mode 100644 sprites/s_timeline_ease/24290950-35fc-4ecc-ba0d-649f84bd31cc.png create mode 100644 sprites/s_timeline_ease/28ea8a9d-44bd-46ed-9942-6ba74ffd0726.png create mode 100644 sprites/s_timeline_ease/66c132f9-ae6a-429c-8cf4-30a9d47ef7a3.png create mode 100644 sprites/s_timeline_ease/6ca25682-cb07-4b3f-b98f-993a2f6be2f2.png create mode 100644 sprites/s_timeline_ease/layers/24290950-35fc-4ecc-ba0d-649f84bd31cc/bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png create mode 100644 sprites/s_timeline_ease/layers/28ea8a9d-44bd-46ed-9942-6ba74ffd0726/bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png create mode 100644 sprites/s_timeline_ease/layers/66c132f9-ae6a-429c-8cf4-30a9d47ef7a3/bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png create mode 100644 sprites/s_timeline_ease/layers/6ca25682-cb07-4b3f-b98f-993a2f6be2f2/bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png create mode 100644 sprites/s_timeline_ease/s_timeline_ease.yy create mode 100644 sprites/s_timeline_elastic/5c54eeaa-d089-429e-a954-fbb5ccd7e7ab.png create mode 100644 sprites/s_timeline_elastic/layers/5c54eeaa-d089-429e-a954-fbb5ccd7e7ab/e08dafd8-6479-4081-9f2c-f460ba81c9dd.png create mode 100644 sprites/s_timeline_elastic/s_timeline_elastic.yy create mode 100644 sprites/s_timeline_keyframe/0d0e313c-fafe-42e5-b077-c93fc064bc25.png create mode 100644 sprites/s_timeline_keyframe/391ccbea-dc4a-4f1a-a4da-ed7fb77dd32a.png create mode 100644 sprites/s_timeline_keyframe/3d472492-94cf-4d0a-b0bb-43cad651aad9.png create mode 100644 sprites/s_timeline_keyframe/7e409d3c-0555-4eb6-bb4e-bdcf0e885620.png delete mode 100644 sprites/s_timeline_keyframe/918bd556-996d-49f1-8ca1-61ec18a8f49c.png delete mode 100644 sprites/s_timeline_keyframe/95d975ac-a4aa-408d-adaf-5ae6140e38ff.png delete mode 100644 sprites/s_timeline_keyframe/975854b1-f396-41f1-850b-daa3f8ca6c80.png delete mode 100644 sprites/s_timeline_keyframe/c22ff608-5283-4d97-8909-2024b36933e6.png create mode 100644 sprites/s_timeline_keyframe/layers/0d0e313c-fafe-42e5-b077-c93fc064bc25/b1392cea-a152-4f40-ac82-ded33d6288af.png create mode 100644 sprites/s_timeline_keyframe/layers/391ccbea-dc4a-4f1a-a4da-ed7fb77dd32a/b1392cea-a152-4f40-ac82-ded33d6288af.png create mode 100644 sprites/s_timeline_keyframe/layers/3d472492-94cf-4d0a-b0bb-43cad651aad9/b1392cea-a152-4f40-ac82-ded33d6288af.png create mode 100644 sprites/s_timeline_keyframe/layers/7e409d3c-0555-4eb6-bb4e-bdcf0e885620/b1392cea-a152-4f40-ac82-ded33d6288af.png delete mode 100644 sprites/s_timeline_keyframe/layers/918bd556-996d-49f1-8ca1-61ec18a8f49c/f29345e4-38e2-4f17-9134-da1226d86fa3.png delete mode 100644 sprites/s_timeline_keyframe/layers/95d975ac-a4aa-408d-adaf-5ae6140e38ff/f29345e4-38e2-4f17-9134-da1226d86fa3.png delete mode 100644 sprites/s_timeline_keyframe/layers/975854b1-f396-41f1-850b-daa3f8ca6c80/f29345e4-38e2-4f17-9134-da1226d86fa3.png delete mode 100644 sprites/s_timeline_keyframe/layers/c22ff608-5283-4d97-8909-2024b36933e6/f29345e4-38e2-4f17-9134-da1226d86fa3.png create mode 100644 sprites/s_timeline_keyframe_selecting/741ad96f-dd2d-4bc7-9ccf-80027d373dc5.png create mode 100644 sprites/s_timeline_keyframe_selecting/layers/741ad96f-dd2d-4bc7-9ccf-80027d373dc5/8ed37eb2-3476-40db-aba9-295147fd14b5.png create mode 100644 sprites/s_timeline_keyframe_selecting/s_timeline_keyframe_selecting.yy create mode 100644 sprites/s_timeline_obj_halign/05642409-4457-4bd4-b39b-04909166c96e.png create mode 100644 sprites/s_timeline_obj_halign/76ba7dd8-2350-4cf2-8e55-30a0ff94cd33.png create mode 100644 sprites/s_timeline_obj_halign/98c65aaa-7697-4845-8eb1-c1d4c4191cba.png create mode 100644 sprites/s_timeline_obj_halign/layers/05642409-4457-4bd4-b39b-04909166c96e/a4e7b7c2-58c3-44c3-9861-16a307950bab.png create mode 100644 sprites/s_timeline_obj_halign/layers/76ba7dd8-2350-4cf2-8e55-30a0ff94cd33/a4e7b7c2-58c3-44c3-9861-16a307950bab.png create mode 100644 sprites/s_timeline_obj_halign/layers/98c65aaa-7697-4845-8eb1-c1d4c4191cba/a4e7b7c2-58c3-44c3-9861-16a307950bab.png create mode 100644 sprites/s_timeline_obj_halign/s_timeline_obj_halign.yy diff --git a/Pixels Composer.yyp b/Pixels Composer.yyp index e32a88f7c..66574e7ac 100644 --- a/Pixels Composer.yyp +++ b/Pixels Composer.yyp @@ -3,7 +3,7 @@ "resourceVersion": "1.6", "name": "Pixels Composer", "resources": [ - {"id":{"name":"panel_function","path":"scripts/panel_function/panel_function.yy",},"order":6,}, + {"id":{"name":"panel_function","path":"scripts/panel_function/panel_function.yy",},"order":5,}, {"id":{"name":"node_time_remap","path":"scripts/node_time_remap/node_time_remap.yy",},"order":33,}, {"id":{"name":"sh_perlin","path":"shaders/sh_perlin/sh_perlin.yy",},"order":1,}, {"id":{"name":"s_node_alpha_cut","path":"sprites/s_node_alpha_cut/s_node_alpha_cut.yy",},"order":7,}, @@ -34,7 +34,7 @@ {"id":{"name":"s_node_image_copy","path":"sprites/s_node_image_copy/s_node_image_copy.yy",},"order":53,}, {"id":{"name":"node_array","path":"scripts/node_array/node_array.yy",},"order":3,}, {"id":{"name":"sh_colorize","path":"shaders/sh_colorize/sh_colorize.yy",},"order":5,}, - {"id":{"name":"s_timeline_graph","path":"sprites/s_timeline_graph/s_timeline_graph.yy",},"order":28,}, + {"id":{"name":"s_timeline_graph","path":"sprites/s_timeline_graph/s_timeline_graph.yy",},"order":1,}, {"id":{"name":"perlin_noise","path":"scripts/perlin_noise/perlin_noise.yy",},"order":5,}, {"id":{"name":"node_functions","path":"scripts/node_functions/node_functions.yy",},"order":2,}, {"id":{"name":"s_inspector_area","path":"sprites/s_inspector_area/s_inspector_area.yy",},"order":7,}, @@ -43,7 +43,7 @@ {"id":{"name":"node_math","path":"scripts/node_math/node_math.yy",},"order":6,}, {"id":{"name":"array_functions","path":"scripts/array_functions/array_functions.yy",},"order":2,}, {"id":{"name":"sh_blur_final","path":"shaders/sh_blur_final/sh_blur_final.yy",},"order":3,}, - {"id":{"name":"panel_preview","path":"scripts/panel_preview/panel_preview.yy",},"order":4,}, + {"id":{"name":"panel_preview","path":"scripts/panel_preview/panel_preview.yy",},"order":3,}, {"id":{"name":"node_blend","path":"scripts/node_blend/node_blend.yy",},"order":13,}, {"id":{"name":"s_refresh_16","path":"sprites/s_refresh_16/s_refresh_16.yy",},"order":19,}, {"id":{"name":"s_node_bevel","path":"sprites/s_node_bevel/s_node_bevel.yy",},"order":13,}, @@ -54,6 +54,7 @@ {"id":{"name":"sh_cell_noise","path":"shaders/sh_cell_noise/sh_cell_noise.yy",},"order":0,}, {"id":{"name":"sh_blend_max","path":"shaders/sh_blend_max/sh_blend_max.yy",},"order":8,}, {"id":{"name":"_3D","path":"scripts/_3D/_3D.yy",},"order":6,}, + {"id":{"name":"s_timeline_keyframe_selecting","path":"sprites/s_timeline_keyframe_selecting/s_timeline_keyframe_selecting.yy",},"order":3,}, {"id":{"name":"s_button","path":"sprites/s_button/s_button.yy",},"order":0,}, {"id":{"name":"node_outline","path":"scripts/node_outline/node_outline.yy",},"order":0,}, {"id":{"name":"math_function","path":"scripts/math_function/math_function.yy",},"order":7,}, @@ -75,6 +76,7 @@ {"id":{"name":"s_node_trail","path":"sprites/s_node_trail/s_node_trail.yy",},"order":100,}, {"id":{"name":"s_node_grey_alpha","path":"sprites/s_node_grey_alpha/s_node_grey_alpha.yy",},"order":49,}, {"id":{"name":"s_node_corner","path":"sprites/s_node_corner/s_node_corner.yy",},"order":34,}, + {"id":{"name":"s_hamburger_16","path":"sprites/s_hamburger_16/s_hamburger_16.yy",},"order":12,}, {"id":{"name":"s_node_blur","path":"sprites/s_node_blur/s_node_blur.yy",},"order":15,}, {"id":{"name":"sh_texture_atlas","path":"shaders/sh_texture_atlas/sh_texture_atlas.yy",},"order":0,}, {"id":{"name":"s_node_blur_directional","path":"sprites/s_node_blur_directional/s_node_blur_directional.yy",},"order":17,}, @@ -105,7 +107,7 @@ {"id":{"name":"s_cache","path":"sprites/s_cache/s_cache.yy",},"order":5,}, {"id":{"name":"o_dialog_release_note","path":"objects/o_dialog_release_note/o_dialog_release_note.yy",},"order":16,}, {"id":{"name":"s_inspector_text_halign","path":"sprites/s_inspector_text_halign/s_inspector_text_halign.yy",},"order":0,}, - {"id":{"name":"panel_inspector","path":"scripts/panel_inspector/panel_inspector.yy",},"order":1,}, + {"id":{"name":"panel_inspector","path":"scripts/panel_inspector/panel_inspector.yy",},"order":0,}, {"id":{"name":"s_node_junctions_single","path":"sprites/s_node_junctions_single/s_node_junctions_single.yy",},"order":0,}, {"id":{"name":"node_padding","path":"scripts/node_padding/node_padding.yy",},"order":10,}, {"id":{"name":"node_noise_grid","path":"scripts/node_noise_grid/node_noise_grid.yy",},"order":12,}, @@ -184,6 +186,7 @@ {"id":{"name":"s_ui_panel_bg_dark","path":"sprites/s_ui_panel_bg_dark/s_ui_panel_bg_dark.yy",},"order":5,}, {"id":{"name":"s_node_color_adjust","path":"sprites/s_node_color_adjust/s_node_color_adjust.yy",},"order":24,}, {"id":{"name":"s_node_junctions_array_hover","path":"sprites/s_node_junctions_array_hover/s_node_junctions_array_hover.yy",},"order":2,}, + {"id":{"name":"s_control_unpin","path":"sprites/s_control_unpin/s_control_unpin.yy",},"order":8,}, {"id":{"name":"node_mirror","path":"scripts/node_mirror/node_mirror.yy",},"order":3,}, {"id":{"name":"node_corner","path":"scripts/node_corner/node_corner.yy",},"order":35,}, {"id":{"name":"vertex_function","path":"scripts/vertex_function/vertex_function.yy",},"order":0,}, @@ -270,7 +273,7 @@ {"id":{"name":"s_node_draw_area","path":"sprites/s_node_draw_area/s_node_draw_area.yy",},"order":0,}, {"id":{"name":"sh_blend_subtract","path":"shaders/sh_blend_subtract/sh_blend_subtract.yy",},"order":5,}, {"id":{"name":"o_dialog_file_name","path":"objects/o_dialog_file_name/o_dialog_file_name.yy",},"order":12,}, - {"id":{"name":"panel_animation","path":"scripts/panel_animation/panel_animation.yy",},"order":5,}, + {"id":{"name":"panel_animation","path":"scripts/panel_animation/panel_animation.yy",},"order":4,}, {"id":{"name":"sh_gradient","path":"shaders/sh_gradient/sh_gradient.yy",},"order":8,}, {"id":{"name":"sh_glow","path":"shaders/sh_glow/sh_glow.yy",},"order":21,}, {"id":{"name":"sh_posterize","path":"shaders/sh_posterize/sh_posterize.yy",},"order":23,}, @@ -297,6 +300,7 @@ {"id":{"name":"s_icon_grid","path":"sprites/s_icon_grid/s_icon_grid.yy",},"order":4,}, {"id":{"name":"node_particle","path":"scripts/node_particle/node_particle.yy",},"order":0,}, {"id":{"name":"s_icon_grid_setting","path":"sprites/s_icon_grid_setting/s_icon_grid_setting.yy",},"order":5,}, + {"id":{"name":"level_histogram","path":"scripts/level_histogram/level_histogram.yy",},"order":1,}, {"id":{"name":"o_dialog_inspector_grid","path":"objects/o_dialog_inspector_grid/o_dialog_inspector_grid.yy",},"order":25,}, {"id":{"name":"s_node_array_length","path":"sprites/s_node_array_length/s_node_array_length.yy",},"order":11,}, {"id":{"name":"append_function","path":"scripts/append_function/append_function.yy",},"order":1,}, @@ -306,7 +310,6 @@ {"id":{"name":"sh_invert","path":"shaders/sh_invert/sh_invert.yy",},"order":30,}, {"id":{"name":"save_function","path":"scripts/save_function/save_function.yy",},"order":0,}, {"id":{"name":"node_perlin_smear","path":"scripts/node_perlin_smear/node_perlin_smear.yy",},"order":10,}, - {"id":{"name":"inspector_custom_render","path":"scripts/inspector_custom_render/inspector_custom_render.yy",},"order":0,}, {"id":{"name":"s_node_area","path":"sprites/s_node_area/s_node_area.yy",},"order":9,}, {"id":{"name":"node_alpha_cutoff","path":"scripts/node_alpha_cutoff/node_alpha_cutoff.yy",},"order":37,}, {"id":{"name":"sh_channel_R","path":"shaders/sh_channel_R/sh_channel_R.yy",},"order":12,}, @@ -315,6 +318,7 @@ {"id":{"name":"point_rect_overlap","path":"scripts/point_rect_overlap/point_rect_overlap.yy",},"order":2,}, {"id":{"name":"s_node_twirl","path":"sprites/s_node_twirl/s_node_twirl.yy",},"order":102,}, {"id":{"name":"s_icon_accept_32","path":"sprites/s_icon_accept_32/s_icon_accept_32.yy",},"order":15,}, + {"id":{"name":"s_timeline_elastic","path":"sprites/s_timeline_elastic/s_timeline_elastic.yy",},"order":6,}, {"id":{"name":"sh_seperate_shape_counter","path":"shaders/sh_seperate_shape_counter/sh_seperate_shape_counter.yy",},"order":1,}, {"id":{"name":"node_timeline_preview","path":"scripts/node_timeline_preview/node_timeline_preview.yy",},"order":2,}, {"id":{"name":"sh_greyscale","path":"shaders/sh_greyscale/sh_greyscale.yy",},"order":6,}, @@ -373,6 +377,7 @@ {"id":{"name":"node_pixel_cloud","path":"scripts/node_pixel_cloud/node_pixel_cloud.yy",},"order":19,}, {"id":{"name":"sh_alpha_grey","path":"shaders/sh_alpha_grey/sh_alpha_grey.yy",},"order":9,}, {"id":{"name":"s_transparent","path":"sprites/s_transparent/s_transparent.yy",},"order":1,}, + {"id":{"name":"s_timeline_ease","path":"sprites/s_timeline_ease/s_timeline_ease.yy",},"order":5,}, {"id":{"name":"s_node_path","path":"sprites/s_node_path/s_node_path.yy",},"order":79,}, {"id":{"name":"o_dialog_animation","path":"objects/o_dialog_animation/o_dialog_animation.yy",},"order":9,}, {"id":{"name":"f_p0b","path":"fonts/f_p0b/f_p0b.yy",},"order":5,}, @@ -421,6 +426,7 @@ {"id":{"name":"s_anchor_scale_hori","path":"sprites/s_anchor_scale_hori/s_anchor_scale_hori.yy",},"order":9,}, {"id":{"name":"s_node_shape","path":"sprites/s_node_shape/s_node_shape.yy",},"order":91,}, {"id":{"name":"gif_reader","path":"scripts/gif_reader/gif_reader.yy",},"order":4,}, + {"id":{"name":"s_circle_16","path":"sprites/s_circle_16/s_circle_16.yy",},"order":43,}, {"id":{"name":"f_p3","path":"fonts/f_p3/f_p3.yy",},"order":7,}, {"id":{"name":"s_loading","path":"sprites/s_loading/s_loading.yy",},"order":37,}, {"id":{"name":"s_node_curve","path":"sprites/s_node_curve/s_node_curve.yy",},"order":37,}, @@ -433,6 +439,7 @@ {"id":{"name":"node_composite","path":"scripts/node_composite/node_composite.yy",},"order":4,}, {"id":{"name":"sh_dilate","path":"shaders/sh_dilate/sh_dilate.yy",},"order":22,}, {"id":{"name":"node_image_sequence","path":"scripts/node_image_sequence/node_image_sequence.yy",},"order":1,}, + {"id":{"name":"s_control_pin","path":"sprites/s_control_pin/s_control_pin.yy",},"order":7,}, {"id":{"name":"s_menu_transparent","path":"sprites/s_menu_transparent/s_menu_transparent.yy",},"order":0,}, {"id":{"name":"key_press","path":"scripts/key_press/key_press.yy",},"order":0,}, {"id":{"name":"sh_mirror","path":"shaders/sh_mirror/sh_mirror.yy",},"order":10,}, @@ -450,11 +457,12 @@ {"id":{"name":"s_node_grid_noise","path":"sprites/s_node_grid_noise/s_node_grid_noise.yy",},"order":52,}, {"id":{"name":"compat_path_array","path":"scripts/compat_path_array/compat_path_array.yy",},"order":0,}, {"id":{"name":"node_export","path":"scripts/node_export/node_export.yy",},"order":1,}, - {"id":{"name":"s_timeline_keyframe","path":"sprites/s_timeline_keyframe/s_timeline_keyframe.yy",},"order":24,}, + {"id":{"name":"s_timeline_keyframe","path":"sprites/s_timeline_keyframe/s_timeline_keyframe.yy",},"order":2,}, {"id":{"name":"s_toolbar_shadow","path":"sprites/s_toolbar_shadow/s_toolbar_shadow.yy",},"order":6,}, {"id":{"name":"s_node_sepearte_shape","path":"sprites/s_node_sepearte_shape/s_node_sepearte_shape.yy",},"order":89,}, {"id":{"name":"s_group_16","path":"sprites/s_group_16/s_group_16.yy",},"order":12,}, {"id":{"name":"s_ui_panel_bg","path":"sprites/s_ui_panel_bg/s_ui_panel_bg.yy",},"order":1,}, + {"id":{"name":"controlPointBox","path":"scripts/controlPointBox/controlPointBox.yy",},"order":21,}, {"id":{"name":"s_grad_blend","path":"sprites/s_grad_blend/s_grad_blend.yy",},"order":34,}, {"id":{"name":"sh_vertex_pt","path":"shaders/sh_vertex_pt/sh_vertex_pt.yy",},"order":2,}, {"id":{"name":"node_color_replacement","path":"scripts/node_color_replacement/node_color_replacement.yy",},"order":4,}, @@ -465,7 +473,7 @@ {"id":{"name":"gradients_function","path":"scripts/gradients_function/gradients_function.yy",},"order":0,}, {"id":{"name":"s_refresh_24","path":"sprites/s_refresh_24/s_refresh_24.yy",},"order":29,}, {"id":{"name":"node_scale_algo","path":"scripts/node_scale_algo/node_scale_algo.yy",},"order":43,}, - {"id":{"name":"s_timeline_clock","path":"sprites/s_timeline_clock/s_timeline_clock.yy",},"order":25,}, + {"id":{"name":"s_timeline_clock","path":"sprites/s_timeline_clock/s_timeline_clock.yy",},"order":0,}, {"id":{"name":"string_cut","path":"scripts/string_cut/string_cut.yy",},"order":4,}, {"id":{"name":"node_3d_prim_cylinder","path":"scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.yy",},"order":7,}, {"id":{"name":"node_grid","path":"scripts/node_grid/node_grid.yy",},"order":20,}, @@ -496,6 +504,7 @@ {"id":{"name":"s_noti_icon_file_save","path":"sprites/s_noti_icon_file_save/s_noti_icon_file_save.yy",},"order":4,}, {"id":{"name":"random_function","path":"scripts/random_function/random_function.yy",},"order":3,}, {"id":{"name":"s_node_sampler","path":"sprites/s_node_sampler/s_node_sampler.yy",},"order":85,}, + {"id":{"name":"s_circle_12","path":"sprites/s_circle_12/s_circle_12.yy",},"order":44,}, {"id":{"name":"s_workspace_1","path":"sprites/s_workspace_1/s_workspace_1.yy",},"order":1,}, {"id":{"name":"string_decimal","path":"scripts/string_decimal/string_decimal.yy",},"order":0,}, {"id":{"name":"f_h3","path":"fonts/f_h3/f_h3.yy",},"order":3,}, @@ -505,7 +514,7 @@ {"id":{"name":"sh_ani_noise","path":"shaders/sh_ani_noise/sh_ani_noise.yy",},"order":4,}, {"id":{"name":"rectangle_collision","path":"scripts/rectangle_collision/rectangle_collision.yy",},"order":0,}, {"id":{"name":"sh_level","path":"shaders/sh_level/sh_level.yy",},"order":7,}, - {"id":{"name":"panel_menu","path":"scripts/panel_menu/panel_menu.yy",},"order":3,}, + {"id":{"name":"panel_menu","path":"scripts/panel_menu/panel_menu.yy",},"order":2,}, {"id":{"name":"s_node_color_from_hsv","path":"sprites/s_node_color_from_hsv/s_node_color_from_hsv.yy",},"order":26,}, {"id":{"name":"draw_line_round","path":"scripts/draw_line_round/draw_line_round.yy",},"order":4,}, {"id":{"name":"s_node_image","path":"sprites/s_node_image/s_node_image.yy",},"order":54,}, @@ -513,6 +522,7 @@ {"id":{"name":"sh_blend_normal_dim","path":"shaders/sh_blend_normal_dim/sh_blend_normal_dim.yy",},"order":10,}, {"id":{"name":"s_anchor_rotate","path":"sprites/s_anchor_rotate/s_anchor_rotate.yy",},"order":1,}, {"id":{"name":"s_node_warp","path":"sprites/s_node_warp/s_node_warp.yy",},"order":108,}, + {"id":{"name":"s_timeline_obj_halign","path":"sprites/s_timeline_obj_halign/s_timeline_obj_halign.yy",},"order":4,}, {"id":{"name":"s_node_normal_light","path":"sprites/s_node_normal_light/s_node_normal_light.yy",},"order":72,}, {"id":{"name":"sh_remove_black","path":"shaders/sh_remove_black/sh_remove_black.yy",},"order":37,}, {"id":{"name":"path_parser","path":"scripts/path_parser/path_parser.yy",},"order":3,}, @@ -654,6 +664,7 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"scritps","folderPath":"folders/main/scritps.yy","order":6,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"nodes","folderPath":"folders/nodes.yy","order":4,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"data","folderPath":"folders/nodes/data.yy","order":10,}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"__base__","folderPath":"folders/nodes/data/__base__.yy","order":21,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"3D","folderPath":"folders/nodes/data/3D.yy","order":11,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"animation","folderPath":"folders/nodes/data/animation.yy","order":9,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"color","folderPath":"folders/nodes/data/color.yy","order":16,}, @@ -669,6 +680,7 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"icons","folderPath":"folders/nodes/icons.yy","order":6,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"panels","folderPath":"folders/panels.yy","order":3,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"data","folderPath":"folders/panels/data.yy","order":9,}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"inspectors","folderPath":"folders/panels/data/inspectors.yy","order":7,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"preview","folderPath":"folders/panels/preview.yy","order":7,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"shader","folderPath":"folders/shader.yy","order":9,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"3d","folderPath":"folders/shader/3d.yy","order":29,}, @@ -696,13 +708,12 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"preview","folderPath":"folders/sprites/preview.yy","order":9,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"path","folderPath":"folders/sprites/preview/path.yy","order":8,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"texture","folderPath":"folders/sprites/texture.yy","order":2,}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"timeline","folderPath":"folders/sprites/timeline.yy","order":11,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"tools","folderPath":"folders/sprites/tools.yy","order":10,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"canvas","folderPath":"folders/sprites/tools/canvas.yy","order":3,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widget","folderPath":"folders/sprites/widget.yy","order":7,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"workspace","folderPath":"folders/sprites/workspace.yy","order":3,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widgets","folderPath":"folders/widgets.yy","order":6,}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"__base__","folderPath":"folders/nodes/data/__base__.yy","order":21,}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"inspector","folderPath":"folders/panels/inspector.yy","order":10,}, ], "AudioGroups": [ {"resourceType":"GMAudioGroup","resourceVersion":"1.3","name":"audiogroup_default","targets":-1,}, diff --git a/objects/o_dialog_anim_time_scaler/Draw_64.gml b/objects/o_dialog_anim_time_scaler/Draw_64.gml index 1d3dd0a4f..45860cd58 100644 --- a/objects/o_dialog_anim_time_scaler/Draw_64.gml +++ b/objects/o_dialog_anim_time_scaler/Draw_64.gml @@ -31,18 +31,17 @@ if !ready exit; var key = ds_map_find_first(NODE_MAP); repeat(ds_map_size(NODE_MAP)) { var n = NODE_MAP[? key]; - if(n && n.active) { - for(var i = 0; i < ds_list_size(n.inputs); i++) { - var in = n.inputs[| i]; - if(in.value.is_anim) { - for(var j = 0; j < ds_list_size(in.value.values); j++) { - var t = in.value.values[| j]; - t.time = round(t.time * fac); - } - } + key = ds_map_find_next(NODE_MAP, key); + if(!n || !n.active) continue; + + for(var i = 0; i < ds_list_size(n.inputs); i++) { + var in = n.inputs[| i]; + if(!in.animator.is_anim) continue; + for(var j = 0; j < ds_list_size(in.animator.values); j++) { + var t = in.animator.values[| j]; + t.time = round(t.time * fac); } } - key = ds_map_find_next(NODE_MAP, key); } ANIMATOR.frames_total = scale_to; instance_destroy(); diff --git a/objects/o_dialog_anim_time_scaler/o_dialog_anim_time_scaler.yy b/objects/o_dialog_anim_time_scaler/o_dialog_anim_time_scaler.yy index 421c3a445..451d2bc46 100644 --- a/objects/o_dialog_anim_time_scaler/o_dialog_anim_time_scaler.yy +++ b/objects/o_dialog_anim_time_scaler/o_dialog_anim_time_scaler.yy @@ -1,4 +1,7 @@ { + "resourceType": "GMObject", + "resourceVersion": "1.0", + "name": "o_dialog_anim_time_scaler", "spriteId": null, "solid": false, "visible": true, @@ -22,8 +25,8 @@ "physicsKinematic": false, "physicsShapePoints": [], "eventList": [ - {"isDnD":false,"eventNum":64,"eventType":8,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, - {"isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":64,"eventType":8,"collisionObjectId":null,}, + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,}, ], "properties": [], "overriddenProperties": [], @@ -31,8 +34,4 @@ "name": "dialog", "path": "folders/dialog.yy", }, - "resourceVersion": "1.0", - "name": "o_dialog_anim_time_scaler", - "tags": [], - "resourceType": "GMObject", } \ No newline at end of file diff --git a/objects/o_dialog_menubox/Draw_64.gml b/objects/o_dialog_menubox/Draw_64.gml index 86d52e154..443a4e352 100644 --- a/objects/o_dialog_menubox/Draw_64.gml +++ b/objects/o_dialog_menubox/Draw_64.gml @@ -38,8 +38,16 @@ for(var j = 0; j < amo; j++) { var _bx = _sx + j * (hght + 4); var _by = yy + hght + hght / 2 - 4; + var _spr = noone, _ind = 0; + var _ss = menu[i][1][j][0]; - var _spr = menu[i][1][j][0]; + if(is_array(_ss)) { + _spr = _ss[0]; + _ind = _ss[1]; + } else { + _spr = _ss; + _ind = 0; + } if(HOVER == self && point_in_rectangle(mouse_mx, mouse_my, _bx - 14, _by - 14, _bx + 14, _by + 14)) { draw_sprite_stretched(s_textbox, 1, _bx - 14, _by - 14, 28, 28); @@ -50,7 +58,7 @@ } } - draw_sprite(_spr, 0, _bx, _by); + draw_sprite(_spr, _ind, _bx, _by); } } else { draw_set_text(f_p0, fa_left, fa_center, c_white); diff --git a/objects/o_dialog_menubox/o_dialog_menubox.yy b/objects/o_dialog_menubox/o_dialog_menubox.yy index 78f313799..4191ef868 100644 --- a/objects/o_dialog_menubox/o_dialog_menubox.yy +++ b/objects/o_dialog_menubox/o_dialog_menubox.yy @@ -1,7 +1,11 @@ { + "resourceType": "GMObject", + "resourceVersion": "1.0", + "name": "o_dialog_menubox", "spriteId": null, "solid": false, "visible": true, + "managed": true, "spriteMaskId": null, "persistent": false, "parentObjectId": { @@ -21,8 +25,8 @@ "physicsKinematic": false, "physicsShapePoints": [], "eventList": [ - {"isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, - {"isDnD":false,"eventNum":64,"eventType":8,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,}, + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":64,"eventType":8,"collisionObjectId":null,}, ], "properties": [], "overriddenProperties": [], @@ -30,8 +34,4 @@ "name": "dialog", "path": "folders/dialog.yy", }, - "resourceVersion": "1.0", - "name": "o_dialog_menubox", - "tags": [], - "resourceType": "GMObject", } \ No newline at end of file diff --git a/objects/o_dialog_preference/Create_0.gml b/objects/o_dialog_preference/Create_0.gml index 5da8ae3cf..220789d10 100644 --- a/objects/o_dialog_preference/Create_0.gml +++ b/objects/o_dialog_preference/Create_0.gml @@ -117,6 +117,35 @@ event_inherited(); }) ]); + ds_list_add(pref_node, "Levels"); + ds_list_add(pref_node, [ + "Histogram resolution", + "level_resolution", + new textBox(TEXTBOX_INPUT.number, function(str) { + PREF_MAP[? "level_resolution"] = real(str); + PREF_SAVE(); + }) + ]); + + ds_list_add(pref_node, [ + "Maximum sampling", + "level_max_sampling", + new textBox(TEXTBOX_INPUT.number, function(str) { + PREF_MAP[? "level_max_sampling"] = real(str); + PREF_SAVE(); + }) + ]); + + ds_list_add(pref_node, "Physic"); + ds_list_add(pref_node, [ + "Verlet iteration", + "verlet_iteration", + new textBox(TEXTBOX_INPUT.number, function(str) { + PREF_MAP[? "verlet_iteration"] = real(str); + PREF_SAVE(); + }) + ]); + current_list = pref_global; sp_pref = new scrollPane(dialog_w - 160 - 32, dialog_h - 64 - 28, function(_y, _m) { diff --git a/scripts/controlPointBox/controlPointBox.gml b/scripts/controlPointBox/controlPointBox.gml new file mode 100644 index 000000000..15844cc81 --- /dev/null +++ b/scripts/controlPointBox/controlPointBox.gml @@ -0,0 +1,117 @@ +enum PUPPET_CONTROL { + mode, + cx, + cy, + fx, + fy, + width, + height +} + +enum PUPPET_FORCE_MODE { + move, + pinch, + inflate, + wind, +} + +function controlPointBox(_onModify) constructor { + onModify = _onModify; + onSurfaceSize = -1; + + active = false; + hover = false; + + tbCx = new textBox(TEXTBOX_INPUT.number, function(val) { onModify(PUPPET_CONTROL.cx, toNumber(val)); }); + tbCy = new textBox(TEXTBOX_INPUT.number, function(val) { onModify(PUPPET_CONTROL.cy, toNumber(val)); }); + tbFx = new textBox(TEXTBOX_INPUT.number, function(val) { onModify(PUPPET_CONTROL.fx, toNumber(val)); }); + tbFy = new textBox(TEXTBOX_INPUT.number, function(val) { onModify(PUPPET_CONTROL.fy, toNumber(val)); }); + tbW = new textBox(TEXTBOX_INPUT.number, function(val) { onModify(PUPPET_CONTROL.width, max(0, toNumber(val))); }); + tbH = new textBox(TEXTBOX_INPUT.number, function(val) { onModify(PUPPET_CONTROL.height, max(0, toNumber(val))); }); + rot = new rotator(function(val) { onModify(PUPPET_CONTROL.fy, toNumber(val)); }); + tbFx.slidable = true; + tbFy.slidable = true; + tbW.slidable = true; + tbH.slidable = true; + + sW = new slider(0, 32, 0.1, function(val) { onModify(PUPPET_CONTROL.width, toNumber(val)); }); + + sMode = ["Move", "Pinch", "Inflate", "Wind"]; + scMode = new scrollBox( + sMode, + function(val) { onModify(PUPPET_CONTROL.mode, toNumber(val)); } + ); + + static draw = function(_x, _y, _w, _data, _m, _rx, _ry) { + tbCx.hover = hover; tbCx.active = active; + tbCy.hover = hover; tbCy.active = active; + tbFx.hover = hover; tbFx.active = active; + tbFy.hover = hover; tbFy.active = active; + tbW.hover = hover; tbW.active = active; + sW.hover = hover; sW.active = active; + tbH.hover = hover; tbH.active = active; + scMode.hover = hover; scMode.active = active; + rot.hover = hover; rot.active = active; + + var yy = _y; + + scMode.draw(_x, yy, _w, 34, sMode[_data[PUPPET_CONTROL.mode]], _m, _rx, _ry); + yy += 34 + 8; + + var lw = 80; + var w = _w / 2 - lw; + + draw_set_text(f_p0, fa_left, fa_center, c_white); + draw_text(_x, yy + 17, "cx"); + draw_text(_x + _w / 2 + 10, yy + 17, "cy"); + tbCx.draw(_x + lw, yy, w, 34, _data[PUPPET_CONTROL.cx], _m); + tbCy.draw(_x + _w / 2 + lw, yy, w, 34, _data[PUPPET_CONTROL.cy], _m); + yy += 34 + 8; + + switch(_data[PUPPET_CONTROL.mode]) { + case PUPPET_FORCE_MODE.move: + draw_set_text(f_p0, fa_left, fa_center, c_white); + draw_text(_x, yy + 17, "fx"); + draw_text(_x + _w / 2 + 10, yy + 17, "fy"); + tbFx.draw(_x + lw, yy, w, 34, _data[PUPPET_CONTROL.fx], _m); + tbFy.draw(_x + _w / 2 + lw, yy, w, 34, _data[PUPPET_CONTROL.fy], _m); + yy += 34 + 8; + + draw_set_text(f_p0, fa_left, fa_center, c_white); + draw_text(_x, yy + 17, "radius"); + sW.draw(_x + lw, yy, _w - lw, 34, _data[PUPPET_CONTROL.width], _m); + yy += 34 + 8; + break; + case PUPPET_FORCE_MODE.pinch: + case PUPPET_FORCE_MODE.inflate: + draw_set_text(f_p0, fa_left, fa_center, c_white); + draw_text(_x, yy + 17, "radius"); + sW.draw(_x + lw, yy, _w - lw, 34, _data[PUPPET_CONTROL.width], _m); + yy += 34 + 8; + + draw_text(_x, yy + 17, "strength"); + tbH.draw(_x + lw, yy, _w - lw, 34, _data[PUPPET_CONTROL.height], _m); + yy += 34 + 8; + break; + case PUPPET_FORCE_MODE.wind: + draw_set_text(f_p0, fa_left, fa_center, c_white); + draw_text(_x, yy + 17, "stength"); + tbFx.draw(_x + lw, yy, _w - lw, 34, _data[PUPPET_CONTROL.fx], _m); + yy += 34 + 8; + + draw_set_text(f_p0, fa_left, fa_center, c_white); + draw_text(_x, yy + 17, "width"); + tbW.draw(_x + lw, yy, _w - lw, 34, _data[PUPPET_CONTROL.width], _m); + yy += 34 + 8; + + rot.draw(_x + _w / 2, yy, _data[PUPPET_CONTROL.fy], _m); + yy += 94 + 8; + break; + } + + active = false; + hover = false; + + return yy - _y; + } +} \ No newline at end of file diff --git a/scripts/inspector_custom_render/inspector_custom_render.yy b/scripts/controlPointBox/controlPointBox.yy similarity index 54% rename from scripts/inspector_custom_render/inspector_custom_render.yy rename to scripts/controlPointBox/controlPointBox.yy index bf164d0c9..4c72f4358 100644 --- a/scripts/inspector_custom_render/inspector_custom_render.yy +++ b/scripts/controlPointBox/controlPointBox.yy @@ -1,11 +1,11 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "inspector_custom_render", + "name": "controlPointBox", "isDnD": false, "isCompatibility": false, "parent": { - "name": "inspector", - "path": "folders/panels/inspector.yy", + "name": "widgets", + "path": "folders/widgets.yy", }, } \ No newline at end of file diff --git a/scripts/curve_bezier_function/curve_bezier_function.gml b/scripts/curve_bezier_function/curve_bezier_function.gml index 5761f0b98..f271cd119 100644 --- a/scripts/curve_bezier_function/curve_bezier_function.gml +++ b/scripts/curve_bezier_function/curve_bezier_function.gml @@ -39,4 +39,14 @@ function bezier_interpol_x(a, b, t, iteration = 16) { } return 3 * (1 - _x) * _x * _x + _x * _x * _x; +} + +function ease_cubic_in(rat) { + return rat * rat * rat; +} +function ease_cubic_out(rat) { + return 1 - power(1 - rat, 3); +} +function ease_cubic_inout(rat) { + return rat < 0.5 ? 4 * power(rat, 3) : 1 - power(-2 * rat + 2, 3) / 2; } \ No newline at end of file diff --git a/scripts/curve_bezier_function/curve_bezier_function.yy b/scripts/curve_bezier_function/curve_bezier_function.yy index 007edb018..95b383d97 100644 --- a/scripts/curve_bezier_function/curve_bezier_function.yy +++ b/scripts/curve_bezier_function/curve_bezier_function.yy @@ -1,12 +1,11 @@ { + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "curve_bezier_function", "isDnD": false, "isCompatibility": false, "parent": { "name": "curve", "path": "folders/functions/curve.yy", }, - "resourceVersion": "1.0", - "name": "curve_bezier_function", - "tags": [], - "resourceType": "GMScript", } \ No newline at end of file diff --git a/scripts/curve_bounce_function/curve_bounce_function.gml b/scripts/curve_bounce_function/curve_bounce_function.gml index 8cf803bb2..5e5cc2a74 100644 --- a/scripts/curve_bounce_function/curve_bounce_function.gml +++ b/scripts/curve_bounce_function/curve_bounce_function.gml @@ -49,4 +49,25 @@ function eval_curve_bounce(curve, t) { function bounce_range(c0, c1, c2, c3) { return [ min(c0, c1, c2, c3), max(c0, c1, c2, c3) ]; +} + +function ease_bounce_in(rat) { + return 1 - ease_bounce_out(1 - rat); +} +function ease_bounce_out(rat) { + var n1 = 7.5625; + var d1 = 2.75; + + if (rat < 1 / d1) + return n1 * rat * rat; + else if (rat < 2 / d1) { + rat -= 1.5 / d1; + return n1 * rat * rat + 0.75; + } else if (rat < 2.5 / d1) { + rat -= 2.25 / d1; + return n1 * rat * rat + 0.9375; + } else { + rat -= 2.625 / d1; + return n1 * rat * rat + 0.984375; + } } \ No newline at end of file diff --git a/scripts/curve_bounce_function/curve_bounce_function.yy b/scripts/curve_bounce_function/curve_bounce_function.yy index d5d848749..f1b620096 100644 --- a/scripts/curve_bounce_function/curve_bounce_function.yy +++ b/scripts/curve_bounce_function/curve_bounce_function.yy @@ -1,12 +1,11 @@ { + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "curve_bounce_function", "isDnD": false, "isCompatibility": false, "parent": { "name": "curve", "path": "folders/functions/curve.yy", }, - "resourceVersion": "1.0", - "name": "curve_bounce_function", - "tags": [], - "resourceType": "GMScript", } \ No newline at end of file diff --git a/scripts/curve_damping_function/curve_damping_function.gml b/scripts/curve_damping_function/curve_damping_function.gml index 30146cecd..bc4da82b1 100644 --- a/scripts/curve_damping_function/curve_damping_function.gml +++ b/scripts/curve_damping_function/curve_damping_function.gml @@ -38,4 +38,17 @@ function damp_range(c0, c1, c2, c3) { } return [ minn, maxx ]; +} + +function ease_damp_in(rat, amount) { + var c1 = amount; + var c3 = c1 + 1; + + return c3 * rat * rat * rat - c1 * rat * rat; +} +function ease_damp_out(rat, amount) { + var c1 = amount; + var c3 = c1 + 1; + + return 1 + c3 * power(rat - 1, 3) + c1 * power(rat - 1, 2); } \ No newline at end of file diff --git a/scripts/curve_damping_function/curve_damping_function.yy b/scripts/curve_damping_function/curve_damping_function.yy index 57234c009..3d645f4aa 100644 --- a/scripts/curve_damping_function/curve_damping_function.yy +++ b/scripts/curve_damping_function/curve_damping_function.yy @@ -1,12 +1,11 @@ { + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "curve_damping_function", "isDnD": false, "isCompatibility": false, "parent": { "name": "curve", "path": "folders/functions/curve.yy", }, - "resourceVersion": "1.0", - "name": "curve_damping_function", - "tags": [], - "resourceType": "GMScript", } \ No newline at end of file diff --git a/scripts/ds_extra/ds_extra.gml b/scripts/ds_extra/ds_extra.gml index 68b2109b5..9782a4cde 100644 --- a/scripts/ds_extra/ds_extra.gml +++ b/scripts/ds_extra/ds_extra.gml @@ -41,4 +41,8 @@ function ds_list_append(list, _append) { for( var i = 0; i < ds_list_size(_append); i++ ) { ds_list_add(list, _append[| i]); } +} + +function ds_list_exist(list, item) { + return ds_list_find_index(list, item) != -1; } \ No newline at end of file diff --git a/scripts/ds_extra/ds_extra.yy b/scripts/ds_extra/ds_extra.yy index 7152d7d6f..72d6c122d 100644 --- a/scripts/ds_extra/ds_extra.yy +++ b/scripts/ds_extra/ds_extra.yy @@ -1,12 +1,11 @@ { + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "ds_extra", "isDnD": false, "isCompatibility": false, "parent": { "name": "ds", "path": "folders/functions/ds.yy", }, - "resourceVersion": "1.0", - "name": "ds_extra", - "tags": [], - "resourceType": "GMScript", } \ No newline at end of file diff --git a/scripts/ds_map/ds_map.gml b/scripts/ds_map/ds_map.gml index a598bfb1b..81f2df521 100644 --- a/scripts/ds_map/ds_map.gml +++ b/scripts/ds_map/ds_map.gml @@ -1,3 +1,14 @@ +function ds_map_clone(map) { + var m = ds_map_create(); + var k = ds_map_find_first(map); + + repeat(ds_map_size(map)) { + m[? k] = map[? k]; + k = ds_map_find_next(map, k); + } + return m; +} + function ds_map_try_get(map, key, def = 0) { if(ds_map_exists(map, key)) return map[? key]; return def; diff --git a/scripts/ds_map/ds_map.yy b/scripts/ds_map/ds_map.yy index 745d0d049..53b7d69e2 100644 --- a/scripts/ds_map/ds_map.yy +++ b/scripts/ds_map/ds_map.yy @@ -1,12 +1,11 @@ { + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "ds_map", "isDnD": false, "isCompatibility": false, "parent": { "name": "ds", "path": "folders/functions/ds.yy", }, - "resourceVersion": "1.0", - "name": "ds_map", - "tags": [], - "resourceType": "GMScript", } \ No newline at end of file diff --git a/scripts/inspector_custom_render/inspector_custom_render.gml b/scripts/inspector_custom_render/inspector_custom_render.gml deleted file mode 100644 index 8bca410f8..000000000 --- a/scripts/inspector_custom_render/inspector_custom_render.gml +++ /dev/null @@ -1,3 +0,0 @@ -function Script221(){ - -} \ No newline at end of file diff --git a/scripts/level_histogram/level_histogram.gml b/scripts/level_histogram/level_histogram.gml new file mode 100644 index 000000000..90ef32ceb --- /dev/null +++ b/scripts/level_histogram/level_histogram.gml @@ -0,0 +1,77 @@ +function histogramInit() { + his_colors = [ c_ui_red, c_ui_lime, c_ui_cyan, c_white ]; + for( var i = 0; i < 4; i++ ) { + hist[i] = array_create(PREF_MAP[? "level_resolution"] + 1); + histShow[i] = true; + } + histMax = 0; +} + +function histogramDraw(_x, _y, _w, _h) { + var _levels = array_length(hist[0]) - 1; + var lw = _w / _levels; + var ox, oy = array_create(4); + + draw_set_alpha(0.5); + BLEND_ADD + + for( var i = 0; i < _levels; i++ ) { + var _lx = _x + i * lw, _lh = []; + + for( var j = 0; j < 4; j++ ) { + _lh[@ j] = _y - hist[j][i] / histMax * _h; + } + + if(i) { + for( var j = 0; j < 4; j++ ) { + if(!histShow[j]) continue; + + draw_set_color(his_colors[j]); + draw_line(ox, oy[j], _lx, _lh[j]); + } + } + + for( var j = 0; j < 4; j++ ) { + oy[@ j] = _lh[j]; + } + + ox = _lx; + } + + draw_set_alpha(1); + BLEND_NORMAL +} + +function histogramUpdate(surface) { + if(array_length(hist[0]) != PREF_MAP[? "level_resolution"] + 1) + histogramInit(); + + if(!is_surface(surface)) return; + + histMax = 0; + var sw = surface_get_width(surface); + var sh = surface_get_height(surface); + var stw = max(1, sw / PREF_MAP[? "level_max_sampling"]); + var sth = max(1, sh / PREF_MAP[? "level_max_sampling"]); + + for( var j = 0; j < 4; j++ ) + for( var i = 0; i < array_length(hist[0]); i++ ) { + hist[j][i] = 0; + } + + for( var i = 1; i <= sw; i += stw ) + for( var j = 1; j <= sh; j += sth ) { + var col = surface_getpixel(surface, i, j); + var colA = []; + colA[0] = round(color_get_red(col) / 256 * PREF_MAP[? "level_resolution"]); + colA[1] = round(color_get_green(col) / 256 * PREF_MAP[? "level_resolution"]); + colA[2] = round(color_get_blue(col) / 256 * PREF_MAP[? "level_resolution"]); + colA[3] = round((colA[0] + colA[1] + colA[2]) / 3); + + for( var k = 0; k < 4; k++ ) { + if(!colA[k]) continue + hist[k][colA[k]]++; + histMax = max(histMax, hist[k][colA[k]]); + } + } +} \ No newline at end of file diff --git a/scripts/level_histogram/level_histogram.yy b/scripts/level_histogram/level_histogram.yy new file mode 100644 index 000000000..c83886fa9 --- /dev/null +++ b/scripts/level_histogram/level_histogram.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "level_histogram", + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "inspectors", + "path": "folders/panels/data/inspectors.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_composite/node_composite.gml b/scripts/node_composite/node_composite.gml index cf9d17429..638fb4569 100644 --- a/scripts/node_composite/node_composite.gml +++ b/scripts/node_composite/node_composite.gml @@ -25,14 +25,132 @@ function Node_Composite(_x, _y) : Node_Processor(_x, _y) constructor { inputs[| 1] = nodeValue(1, "Output dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, COMPOSE_OUTPUT_SCALING.first) .setDisplay(VALUE_DISPLAY.enum_scroll, [ "First surface", "Largest surface", "Constant" ]); - inputs[| 2] = nodeValue(2, "Output dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2, VALUE_TAG.dimension_2d) - .setDisplay(VALUE_DISPLAY.vector); + inputs[| 2] = nodeValue(2, "Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2, VALUE_TAG.dimension_2d) + .setDisplay(VALUE_DISPLAY.vector) + .setVisible(false); input_fix_len = ds_list_size(inputs); data_length = 4; + attributes[? "layer_visible"] = ds_list_create(); + + hold_visibility = true; + layer_dragging = noone; + layer_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { + var amo = (ds_list_size(inputs) - input_fix_len) / data_length - 1; + var lh = 32; + var _h = 8 + max(1, amo) * (lh + 4) + 8; + layer_renderer.h = _h; + draw_sprite_stretched_ext(s_ui_panel_bg_dark, 0, _x, _y, _w, _h, c_ui_blue_white, 1); + + var _vis = attributes[? "layer_visible"]; + var ly = _y + 8; + var ssh = lh - 6; + var hoverIndex = noone; + draw_set_color(c_ui_blue_black); + draw_line(_x + 16, ly, _x + _w - 16, ly); + + for(var i = 0; i < amo; i++) { + var ind = amo - i - 1; + var index = input_fix_len + ind * data_length; + var _surf = current_data[index + 0]; + var _pos = current_data[index + 1]; + if(!_surf || is_surface(_surf)) continue; + + var aa = (ind != layer_dragging || layer_dragging == noone)? 1 : 0.5; + var vis = _vis[| ind]; + var _cy = ly + i * (lh + 4); + var hover = point_in_rectangle(_m[0], _m[1], _x, _cy, _x + _w, _cy + lh); + + draw_set_color(c_ui_blue_black); + draw_line(_x + 16, _cy + lh + 2, _x + _w - 16, _cy + lh + 2); + + if(point_in_circle(_m[0], _m[1], _x + 24, _cy + lh / 2, 12)) { + draw_sprite_ext(s_junc_visible, vis, _x + 24, _cy + lh / 2, 1, 1, 0, c_white, 1); + + if(_focus) { + if(mouse_check_button_pressed(mb_left)) + hold_visibility = !_vis[| ind]; + + if(mouse_check_button(mb_left) && _vis[| ind] != hold_visibility) { + _vis[| ind] = hold_visibility; + update(); + } + } + } else + draw_sprite_ext(s_junc_visible, vis, _x + 24, _cy + lh / 2, 1, 1, 0, c_ui_blue_grey, 1); + + draw_set_color(c_ui_blue_dkgrey); + var _sx0 = 56; + var _sx1 = _sx0 + ssh; + var _sy0 = _cy + 3; + var _sy1 = _sy0 + ssh; + draw_rectangle(_sx0, _sy0, _sx1, _sy1, true); + + var _ssw = surface_get_width(_surf); + var _ssh = surface_get_height(_surf); + var _sss = min(ssh / _ssw, ssh / _ssh); + draw_surface_ext(_surf, _sx0, _sy0, _sss, _sss, 0, c_white, 1); + + draw_set_text(f_p1, fa_left, fa_center, hover? c_white : c_ui_blue_ltgrey); + draw_set_alpha(aa); + draw_text(_sx1 + 12, _cy + lh / 2, inputs[| index].name); + draw_set_alpha(1); + + if(_hover && point_in_rectangle(_m[0], _m[1], _x, _cy, _x + _w, _cy + lh)) { + hoverIndex = ind; + if(layer_dragging != noone) { + draw_set_color(c_ui_orange); + if(layer_dragging > ind) + draw_line_width(_x + 16, _cy + lh + 2, _x + _w - 16, _cy + lh + 2, 2); + else if(layer_dragging < ind) + draw_line_width(_x + 16, _cy - 2, _x + _w - 16, _cy - 2, 2); + } + } + + if(layer_dragging == noone || layer_dragging == ind) { + var _bx = _x + _w - 24; + if(point_in_circle(_m[0], _m[1], _bx, _cy + lh / 2, 16)) { + draw_sprite_ext(s_hamburger_16, 3, _bx, _cy + lh / 2, 1, 1, 0, c_white, 1); + + if(_focus && mouse_check_button_pressed(mb_left)) + layer_dragging = ind; + } else + draw_sprite_ext(s_hamburger_16, 3, _bx, _cy + lh / 2, 1, 1, 0, c_ui_blue_grey, 1); + } + } + + if(layer_dragging != noone && mouse_check_button_released(mb_left)) { + if(layer_dragging != hoverIndex && hoverIndex != noone) { + var index = input_fix_len + layer_dragging * data_length; + var targt = input_fix_len + hoverIndex * data_length; + var _vis = attributes[? "layer_visible"]; + + var ext = []; + var vis = _vis[| layer_dragging]; + ds_list_delete(_vis, layer_dragging); + ds_list_insert(_vis, hoverIndex, vis); + + for( var i = 0; i < data_length; i++ ) { + ext[i] = inputs[| index]; + ds_list_delete(inputs, index); + //show_debug_message("remove: " + ext[i].name); + } + for( var i = 0; i < data_length; i++ ) { + ds_list_insert(inputs, targt + i, ext[i]); + //show_debug_message("place: " + ext[i].name + " at " + string(targt + i)); + } + + update(); + } + layer_dragging = noone; + } + }); + input_display_list = [ - ["Output", true], 0, 1, 2 + ["Output", true], 0, 1, 2, + ["Layers", false], layer_renderer, + ["Surface", true], ]; function createNewSurface() { @@ -50,7 +168,14 @@ function Node_Composite(_x, _y) : Node_Processor(_x, _y) constructor { inputs[| index + 3] = nodeValue( index + 3, "Scale " + string(_s), self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ] ) .setDisplay(VALUE_DISPLAY.vector); - array_push(input_display_list, ["Surface " + string(_s), true], index + 0, index + 1, index + 2, index + 3); + array_push(input_display_list, index + 0); + array_push(input_display_list, index + 1); + array_push(input_display_list, index + 2); + array_push(input_display_list, index + 3); + + while(_s >= ds_list_size(attributes[? "layer_visible"])) { + ds_list_add(attributes[? "layer_visible"], true); + } } createNewSurface(); @@ -144,12 +269,16 @@ function Node_Composite(_x, _y) : Node_Processor(_x, _y) constructor { var hovering = -1; var hovering_type = 0; + var _vis = attributes[? "layer_visible"]; var amo = (ds_list_size(inputs) - input_fix_len) / data_length; if(array_length(current_data) < input_fix_len + amo * data_length) return; for(var i = 0; i < amo; i++) { + var vis = _vis[| i]; + if(!vis) continue; + var index = input_fix_len + i * data_length; var _surf = current_data[index + 0]; var _pos = current_data[index + 1]; @@ -291,9 +420,13 @@ function Node_Composite(_x, _y) : Node_Processor(_x, _y) constructor { var res_index = 0, bg = 0; var imageAmo = (ds_list_size(inputs) - input_fix_len) / data_length; + var _vis = attributes[? "layer_visible"]; BLEND_OVERRIDE for(var i = 0; i < imageAmo; i++) { + var vis = _vis[| i]; + if(!vis) continue; + var startDataIndex = input_fix_len + i * data_length; var _s = _data[startDataIndex + 0]; var _pos = _data[startDataIndex + 1]; @@ -338,4 +471,15 @@ function Node_Composite(_x, _y) : Node_Processor(_x, _y) constructor { inputs[| i + 3].deserialize(_inputs[| i + 3]); } } -} \ No newline at end of file + + static attributeSerialize = function() { + var att = ds_map_create(); + ds_map_add_list(att, "layer_visible", attributes[? "layer_visible"]); + return att; + } + + static attributeDeserialize = function(attr) { + attributes[? "layer_visible"] = ds_list_clone(attr[? "layer_visible"]); + } +} + diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index 262805b12..8319b5a75 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -24,6 +24,7 @@ function Node(_x, _y) constructor { junction_shift_y = 32; input_display_list = -1; + inspector_display_list = -1; is_dynamic_output = false; inputs = ds_list_create(); outputs = ds_list_create(); @@ -170,6 +171,8 @@ function Node(_x, _y) constructor { doUpdateForward(); } + static onInspect = function() {} + static doUpdateForward = function() {} static setRenderStatus = function(result) { @@ -189,14 +192,16 @@ function Node(_x, _y) constructor { var _in = yy + junction_shift_y * _s; var jun; - var amo = input_display_list == -1? ds_list_size(inputs) : max(ds_list_size(inputs), array_length(input_display_list)); + var amo = input_display_list == -1? ds_list_size(inputs) : array_length(input_display_list); for(var i = 0; i < amo; i++) { if(input_display_list == -1) jun = inputs[| i]; else { - var jun_list_arr = input_display_list[i]; - if(is_array(jun_list_arr)) continue; + var jun_disp = input_display_list[i]; + if(is_array(jun_disp)) continue; + if(is_struct(jun_disp)) continue; + jun = inputs[| input_display_list[i]]; } @@ -239,7 +244,7 @@ function Node(_x, _y) constructor { static drawJunctions = function(_x, _y, _mx, _my, _s) { var hover = noone; - var amo = input_display_list == -1? ds_list_size(inputs) : max(ds_list_size(inputs), array_length(input_display_list)); + var amo = input_display_list == -1? ds_list_size(inputs) : array_length(input_display_list); var jun; var _show_in = show_input_name; var _show_ot = show_output_name; @@ -567,9 +572,7 @@ function Node(_x, _y) constructor { _map[? "type"] = instanceof(self); _map[? "group"] = group == -1? -1 : group.node_id; - var att = ds_map_create(); - ds_map_override(att, attributes); - ds_map_add_map(_map, "attri", att); + ds_map_add_map(_map, "attri", attributeSerialize()); var _inputs = ds_list_create(); for(var i = 0; i < ds_list_size(inputs); i++) { @@ -582,6 +585,11 @@ function Node(_x, _y) constructor { return _map; } + static attributeSerialize = function() { + var att = ds_map_create(); + ds_map_override(att, attributes); + return att; + } static doSerialize = function(_map) {} keyframe_scale = false; @@ -604,7 +612,7 @@ function Node(_x, _y) constructor { y = load_map[? "y"]; if(ds_map_exists(load_map, "attri")) - ds_map_override(attributes, load_map[? "attri"]); + attributeDeserialize(load_map[? "attri"]); var _inputs = load_map[? "inputs"]; @@ -616,6 +624,9 @@ function Node(_x, _y) constructor { } } + static attributeDeserialize = function(attr) { + ds_map_override(attributes, attr); + } static postDeserialize = function() {} static loadGroup = function() { diff --git a/scripts/node_group_input/node_group_input.gml b/scripts/node_group_input/node_group_input.gml index 030910869..d5b601913 100644 --- a/scripts/node_group_input/node_group_input.gml +++ b/scripts/node_group_input/node_group_input.gml @@ -78,7 +78,7 @@ function Node_Group_Input(_x, _y, _group) : Node(_x, _y) constructor { inParent.setDisplay(_dtype, [_range[0], _range[1], 0.01]); case VALUE_DISPLAY.rotation_range : if(!is_array(_val) || array_length(_val) != 2) - inParent.value = new animValue([0, 0], inParent); + inParent.animator = new valueAnimator([0, 0], inParent); inParent.setDisplay(_dtype); break; @@ -89,13 +89,13 @@ function Node_Group_Input(_x, _y, _group) : Node(_x, _y) constructor { case VALUE_DISPLAY.padding : if(!is_array(_val) || array_length(_val) != 4) - inParent.value = new animValue([0, 0, 0, 0], inParent); + inParent.animator = new valueAnimator([0, 0, 0, 0], inParent); inParent.setDisplay(_dtype); break; case VALUE_DISPLAY.area : if(!is_array(_val) || array_length(_val) != 5) - inParent.value = new animValue([0, 0, 0, 0, 5], inParent); + inParent.animator = new valueAnimator([0, 0, 0, 0, 5], inParent); inParent.setDisplay(_dtype); break; @@ -104,15 +104,15 @@ function Node_Group_Input(_x, _y, _group) : Node(_x, _y) constructor { switch(_vec_size) { case 0 : if(!is_array(_val) || array_length(_val) != 2) - inParent.value = new animValue([0, 0], inParent); + inParent.animator = new valueAnimator([0, 0], inParent); break; case 1 : if(!is_array(_val) || array_length(_val) != 3) - inParent.value = new animValue([0, 0, 0], inParent); + inParent.animator = new valueAnimator([0, 0, 0], inParent); break; case 2 : if(!is_array(_val) || array_length(_val) != 4) - inParent.value = new animValue([0, 0, 0, 0], inParent); + inParent.animator = new valueAnimator([0, 0, 0, 0], inParent); break; } @@ -121,7 +121,7 @@ function Node_Group_Input(_x, _y, _group) : Node(_x, _y) constructor { case VALUE_DISPLAY.palette : if(!is_array(_val)) - inParent.value = new animValue([c_black], inParent); + inParent.animator = new valueAnimator([c_black], inParent); inParent.setDisplay(_dtype); break; diff --git a/scripts/node_group_input/node_group_input.yy b/scripts/node_group_input/node_group_input.yy index b48fa62c4..c70b52797 100644 --- a/scripts/node_group_input/node_group_input.yy +++ b/scripts/node_group_input/node_group_input.yy @@ -1,12 +1,11 @@ { + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_group_input", "isDnD": false, "isCompatibility": false, "parent": { "name": "group", "path": "folders/nodes/data/group.yy", }, - "resourceVersion": "1.0", - "name": "node_group_input", - "tags": [], - "resourceType": "GMScript", } \ No newline at end of file diff --git a/scripts/node_image_sheet/node_image_sheet.gml b/scripts/node_image_sheet/node_image_sheet.gml index 876574669..f374ec8f6 100644 --- a/scripts/node_image_sheet/node_image_sheet.gml +++ b/scripts/node_image_sheet/node_image_sheet.gml @@ -147,8 +147,8 @@ function Node_Image_Sheet(_x, _y) : Node(_x, _y) constructor { draw_set_color(c_ui_orange); draw_rectangle(_fx0, _fy0, _fx1, _fy1, true); - draw_set_text(f_p1, fa_left, fa_top); - draw_text(_fx0 + 2, _fy0 + 2, string(i)); + //draw_set_text(f_p1, fa_left, fa_top); + //draw_text(_fx0 + 2, _fy0 + 2, string(i)); } var _tool = PANEL_PREVIEW.tool_index; diff --git a/scripts/node_image_sheet/node_image_sheet.yy b/scripts/node_image_sheet/node_image_sheet.yy index cef47b8d5..f10df0097 100644 --- a/scripts/node_image_sheet/node_image_sheet.yy +++ b/scripts/node_image_sheet/node_image_sheet.yy @@ -1,12 +1,11 @@ { + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_image_sheet", "isDnD": false, "isCompatibility": false, "parent": { "name": "input", "path": "folders/nodes/data/input.yy", }, - "resourceVersion": "1.0", - "name": "node_image_sheet", - "tags": [], - "resourceType": "GMScript", } \ No newline at end of file diff --git a/scripts/node_iteration_input/node_iteration_input.gml b/scripts/node_iteration_input/node_iteration_input.gml index 0baadd427..b65c0ac0c 100644 --- a/scripts/node_iteration_input/node_iteration_input.gml +++ b/scripts/node_iteration_input/node_iteration_input.gml @@ -102,7 +102,7 @@ function Node_Iterator_Input(_x, _y, _group) : Node(_x, _y) constructor { inParent.setDisplay(_dtype, [_range[0], _range[1], 0.01]); case VALUE_DISPLAY.rotation_range : if(!is_array(_val) || array_length(_val) != 2) - inParent.value = new animValue([0, 0], inParent); + inParent.animator = new valueAnimator([0, 0], inParent); inParent.setDisplay(_dtype); break; @@ -113,13 +113,13 @@ function Node_Iterator_Input(_x, _y, _group) : Node(_x, _y) constructor { case VALUE_DISPLAY.padding : if(!is_array(_val) || array_length(_val) != 4) - inParent.value = new animValue([0, 0, 0, 0], inParent); + inParent.animator = new valueAnimator([0, 0, 0, 0], inParent); inParent.setDisplay(_dtype); break; case VALUE_DISPLAY.area : if(!is_array(_val) || array_length(_val) != 5) - inParent.value = new animValue([0, 0, 0, 0, 5], inParent); + inParent.animator = new valueAnimator([0, 0, 0, 0, 5], inParent); inParent.setDisplay(_dtype); break; @@ -128,15 +128,15 @@ function Node_Iterator_Input(_x, _y, _group) : Node(_x, _y) constructor { switch(_vec_size) { case 0 : if(!is_array(_val) || array_length(_val) != 2) - inParent.value = new animValue([0, 0], inParent); + inParent.animator = new valueAnimator([0, 0], inParent); break; case 1 : if(!is_array(_val) || array_length(_val) != 3) - inParent.value = new animValue([0, 0, 0], inParent); + inParent.animator = new valueAnimator([0, 0, 0], inParent); break; case 2 : if(!is_array(_val) || array_length(_val) != 4) - inParent.value = new animValue([0, 0, 0, 0], inParent); + inParent.animator = new valueAnimator([0, 0, 0, 0], inParent); break; } @@ -145,7 +145,7 @@ function Node_Iterator_Input(_x, _y, _group) : Node(_x, _y) constructor { case VALUE_DISPLAY.palette : if(!is_array(_val)) - inParent.value = new animValue([c_black], inParent); + inParent.animator = new valueAnimator([c_black], inParent); inParent.setDisplay(_dtype); break; diff --git a/scripts/node_iteration_input/node_iteration_input.yy b/scripts/node_iteration_input/node_iteration_input.yy index 9280fbe9a..996e94ebd 100644 --- a/scripts/node_iteration_input/node_iteration_input.yy +++ b/scripts/node_iteration_input/node_iteration_input.yy @@ -1,12 +1,11 @@ { + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_iteration_input", "isDnD": false, "isCompatibility": false, "parent": { "name": "iterate", "path": "folders/nodes/data/iterate.yy", }, - "resourceVersion": "1.0", - "name": "node_iteration_input", - "tags": [], - "resourceType": "GMScript", } \ No newline at end of file diff --git a/scripts/node_keyframe/node_keyframe.gml b/scripts/node_keyframe/node_keyframe.gml index 6d9523c7f..7ceb2ce4f 100644 --- a/scripts/node_keyframe/node_keyframe.gml +++ b/scripts/node_keyframe/node_keyframe.gml @@ -7,39 +7,70 @@ enum CURVE_TYPE { globalvar ON_END_NAME; ON_END_NAME = [ "Hold", "Loop", "Ping pong" ]; -function valueKey(_time, _value, _in = 0, _out = 0) constructor { - time = _time; - value = _value; +function valueKey(_time, _value, _anim = noone, _in = 0, _out = 0) constructor { + time = _time; + value = _value; + anim = _anim; - ease_in = _in; + ease_in = _in; ease_out = _out; + + ease_in_type = CURVE_TYPE.bezier; + ease_out_type = CURVE_TYPE.bezier; } -function animValue(_val, _node) constructor { +function valueAnimator(_val, _prop) constructor { values = ds_list_create(); show_graph = false; - ds_list_add(values, new valueKey(0, _val)); + ds_list_add(values, new valueKey(0, _val, self)); is_anim = false; - node = _node; + prop = _prop; static interpolate = function(from, to, rat) { - var _lerp; if(from.ease_out == 0 && to.ease_in == 0) - _lerp = rat; + return rat; + + var eo = rat; + var ei = rat; + + if(from.ease_out == 0) + eo = rat; else { - var a = from.ease_out; - var b = 1 - to.ease_in; - - _lerp = bezier_interpol_x(a, b, rat); + switch(from.ease_out_type) { + case CURVE_TYPE.bezier : + eo = ease_cubic_in(rat); + eo = lerp(rat, eo, from.ease_out); + break; + case CURVE_TYPE.damping : + eo = ease_damp_in(rat, 1 + from.ease_out * 10); + break; + } } - return _lerp; + if(to.ease_in == 0) + ei = rat; + else { + switch(to.ease_in_type) { + case CURVE_TYPE.bezier : + ei = ease_cubic_out(rat); + ei = lerp(rat, ei, to.ease_in); + break; + case CURVE_TYPE.damping : + ei = ease_damp_out(rat, 1 + to.ease_in * 10); + break; + } + } + + if(from.ease_out_type == CURVE_TYPE.damping && to.ease_in_type == CURVE_TYPE.damping) + return lerp(eo, ei, rat < 0.5 ? 4 * power(rat, 3) : 1 - power(-2 * rat + 2, 3) / 2); + else + return lerp(eo, ei, rat); } static getValue = function() { - if(node.display_type == VALUE_DISPLAY.gradient) return processType(values); - if(node.type == VALUE_TYPE.path) return processType(values[| 0].value); + if(prop.display_type == VALUE_DISPLAY.gradient) return processType(values); + if(prop.type == VALUE_TYPE.path) return processType(values[| 0].value); if(!is_anim) return processType(values[| 0].value); if(ds_list_size(values) == 0) return processType(0); @@ -53,7 +84,7 @@ function animValue(_val, _node) constructor { var _time_dura = _time_last - _time_first; if(_time > _time_last) { - switch(node.on_end) { + switch(prop.on_end) { case KEYFRAME_END.loop : _time = _time_first + safe_mod(_time - _time_last, _time_dura + 1); break; @@ -79,14 +110,14 @@ function animValue(_val, _node) constructor { var to = values[| i]; var _lerp = interpolate(from, to, rat); - if(node.type == VALUE_TYPE.color) { + if(prop.type == VALUE_TYPE.color) { return processType(merge_color(from.value, to.value, _lerp)); - } else if(typeArray(node.display_type)) { + } else if(typeArray(prop.display_type)) { var _vec = array_create(array_length(from.value)); for(var i = 0; i < array_length(_vec); i++) _vec[i] = processType(lerp(from.value[i], to.value[i], _lerp)); return _vec; - } else if(node.type == VALUE_TYPE.text) { + } else if(prop.type == VALUE_TYPE.text) { return processType(from.value); } else { return processType(lerp(from.value, to.value, _lerp)); @@ -98,7 +129,7 @@ function animValue(_val, _node) constructor { } static processType = function(_val) { - if(typeArray(node.display_type)) { + if(typeArray(prop.display_type)) { for(var i = 0; i < array_length(_val); i++) _val[i] = processValue(_val[i]); return _val; @@ -108,7 +139,7 @@ function animValue(_val, _node) constructor { static processValue = function(_val) { if(is_array(_val)) return _val; - switch(node.type) { + switch(prop.type) { case VALUE_TYPE.integer : return round(toNumber(_val)); case VALUE_TYPE.float : return toNumber(_val); case VALUE_TYPE.text : return string(_val); @@ -118,6 +149,32 @@ function animValue(_val, _node) constructor { return _val; } + static setKeyTime = function(_key, _time, _replace = true) { + if(!ds_list_exist(values, _key)) return 0; + + _key.time = _time; + ds_list_remove(values, _key); + + if(_replace) { + for( var i = 0; i < ds_list_size(values); i++ ) { + if(values[| i].time == _time) { + values[| i] = _key; + return 2; + } + } + } + + for( var i = 0; i < ds_list_size(values); i++ ) { + if(values[| i].time > _time) { + ds_list_insert(values, i, _key); + return 1; + } + } + + ds_list_add(values, _key); + return 1; + } + static setValue = function(_val = 0, _record = true, _time = -999, ease_in = 0, ease_out = 0) { if(_time == -999) _time = ANIMATOR.current_frame; @@ -131,7 +188,7 @@ function animValue(_val, _node) constructor { } if(ds_list_size(values) == 0) { - var k = new valueKey(_time, _val, ease_in, ease_out); + var k = new valueKey(_time, _val, self, ease_in, ease_out); ds_list_add(values, k); if(_record) recordAction(ACTION_TYPE.list_insert, values, [ k, ds_list_size(values) - 1 ]); @@ -148,7 +205,7 @@ function animValue(_val, _node) constructor { } return false; } else if(_key.time > _time) { - var k = new valueKey(_time, _val, ease_in, ease_out); + var k = new valueKey(_time, _val, self, ease_in, ease_out); ds_list_insert(values, i, k); if(_record) recordAction(ACTION_TYPE.list_insert, values, [k, i]); @@ -156,24 +213,31 @@ function animValue(_val, _node) constructor { } } - var k = new valueKey(_time, _val, ease_in, ease_out); + var k = new valueKey(_time, _val, self, ease_in, ease_out); ds_list_add(values, k); if(_record) recordAction(ACTION_TYPE.list_insert, values, [ k, ds_list_size(values) - 1 ]); return true; } + static removeKey = function(key) { + if(ds_list_size(values) > 1) + ds_list_remove(values, key); + else + is_anim = false; + } + static serialize = function(scale = false) { var _list = ds_list_create(); for(var i = 0; i < ds_list_size(values); i++) { var _value_list = ds_list_create(); - if(scale && node.display_type != VALUE_DISPLAY.gradient) + if(scale && prop.display_type != VALUE_DISPLAY.gradient) _value_list[| 0] = values[| i].time / ANIMATOR.frames_total; else _value_list[| 0] = values[| i].time; - if(typeArray(node.display_type)) { + if(typeArray(prop.display_type)) { var __v = ds_list_create(); for(var j = 0; j < array_length(values[| i].value); j++) ds_list_add(__v, values[| i].value[j]); @@ -185,6 +249,8 @@ function animValue(_val, _node) constructor { _value_list[| 2] = values[| i].ease_in; _value_list[| 3] = values[| i].ease_out; + _value_list[| 4] = values[| i].ease_in_type; + _value_list[| 5] = values[| i].ease_out_type; ds_list_add(_list, _value_list); ds_list_mark_as_list(_list, i); @@ -199,15 +265,17 @@ function animValue(_val, _node) constructor { for(var i = 0; i < ds_list_size(_list); i++) { var _key = _list[| i]; var _time = _key[| 0]; - if(node.display_type == VALUE_DISPLAY.gradient) + if(prop.display_type == VALUE_DISPLAY.gradient) _time = _key[| 0]; else if(scale && _key[| 0] <= 1) _time = round(_key[| 0] * ANIMATOR.frames_total); - var ease_in = ds_list_get(_key, 2); + var ease_in = ds_list_get(_key, 2); var ease_out = ds_list_get(_key, 3); + var ease_in_type = ds_list_get(_key, 4, CURVE_TYPE.bezier); + var ease_out_type = ds_list_get(_key, 5, CURVE_TYPE.bezier); var _val = 0; - var t = typeArray(node.display_type); + var t = typeArray(prop.display_type); if(t) { if(is_string(_key[| 1])) { @@ -224,7 +292,10 @@ function animValue(_val, _node) constructor { } else _val = _key[| 1]; - ds_list_add(values, new valueKey(_time, _val, ease_in, ease_out)); + var vk = new valueKey(_time, _val, self, ease_in, ease_out); + vk.ease_in_type = ease_in_type; + vk.ease_out_type = ease_out_type; + ds_list_add(values, vk); } } diff --git a/scripts/node_level/node_level.gml b/scripts/node_level/node_level.gml index 60cc6c823..73a0ee18f 100644 --- a/scripts/node_level/node_level.gml +++ b/scripts/node_level/node_level.gml @@ -20,9 +20,58 @@ function Node_Level(_x, _y) : Node_Processor(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); + level_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { + var _h = 128; + var x0 = _x; + var x1 = _x + _w; + var y0 = _y; + var y1 = _y + _h; + level_renderer.h = 128; + + draw_set_color(c_ui_blue_black); + var _min = inputs[| 1].getValue(); + var _max = inputs[| 2].getValue(); + draw_rectangle(x0, y0, x0 + max(0, _min) * _w, y1, false); + draw_rectangle(x0 + min(1, _max) * _w, y0, x1, y1, false); + + for( var i = 0; i < 4; i++ ) { + var _bx = x1 - 20 - i * 24; + var _by = y0 - 24; + + if(buttonInstant(s_button_hide, _bx, _by, 20, 20, _m, _focus, _hover) == 2) + histShow[i] = !histShow[i]; + draw_sprite_ext(s_circle_12, 0, _bx + 10, _by + 10, 1, 1, 0, his_colors[i], 0.5 + histShow[i] * 0.5); + } + + if(histMax > 0) + histogramDraw(x0, y1, _w, _h); + + draw_set_color(c_ui_blue_dkgrey); + draw_rectangle(x0, y0, x1, y1, true); + }); + + input_display_list = [ + level_renderer, + ["Level", false], 0, 1, 2, + ]; + histogramInit(); + + static onInspect = function() { + if(array_length(current_data) > 0) + histogramUpdate(current_data[0]); + } + + static onValueUpdate = function(index) { + if(index == 0) { + update(); + if(array_length(current_data) > 0) + histogramUpdate(current_data[0]); + } + } + static process_data = function(_outSurf, _data, _output_index) { - var _black = _data[1]; - var _white = _data[2]; + var _black = min(_data[1], _data[2]); + var _white = max(_data[1], _data[2]); surface_set_target(_outSurf); draw_clear_alpha(0, 0); @@ -40,4 +89,4 @@ function Node_Level(_x, _y) : Node_Processor(_x, _y) constructor { return _outSurf; } -} \ No newline at end of file +} diff --git a/scripts/node_level/node_level.yy b/scripts/node_level/node_level.yy index bc9698ad1..04cec5eaf 100644 --- a/scripts/node_level/node_level.yy +++ b/scripts/node_level/node_level.yy @@ -1,12 +1,11 @@ { + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_level", "isDnD": false, "isCompatibility": false, "parent": { "name": "filter", "path": "folders/nodes/data/filter.yy", }, - "resourceVersion": "1.0", - "name": "node_level", - "tags": [], - "resourceType": "GMScript", } \ No newline at end of file diff --git a/scripts/node_level_selector/node_level_selector.gml b/scripts/node_level_selector/node_level_selector.gml index 0b2ddf02f..c4ec062c4 100644 --- a/scripts/node_level_selector/node_level_selector.gml +++ b/scripts/node_level_selector/node_level_selector.gml @@ -20,6 +20,58 @@ function Node_Level_Selector(_x, _y) : Node_Processor(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); + level_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { + var _h = 128; + var x0 = _x; + var x1 = _x + _w; + var y0 = _y; + var y1 = _y + _h; + level_renderer.h = 128; + + var _middle = inputs[| 1].getValue(); + var _span = inputs[| 2].getValue(); + var _min = _middle - _span; + var _max = _middle + _span; + + draw_set_color(c_ui_blue_black); + draw_rectangle(x0, y0, x0 + max(0, _min) * _w, y1, false); + draw_rectangle(x0 + min(1, _max) * _w, y0, x1, y1, false); + + for( var i = 0; i < 4; i++ ) { + var _bx = x1 - 20 - i * 24; + var _by = y0 - 24; + + if(buttonInstant(s_button_hide, _bx, _by, 20, 20, _m, _focus, _hover) == 2) + histShow[i] = !histShow[i]; + draw_sprite_ext(s_circle_12, 0, _bx + 10, _by + 10, 1, 1, 0, his_colors[i], 0.5 + histShow[i] * 0.5); + } + + if(histMax > 0) + histogramDraw(x0, y1, _w, _h); + + draw_set_color(c_ui_blue_dkgrey); + draw_rectangle(x0, y0, x1, y1, true); + }); + + input_display_list = [ + level_renderer, + ["Level", false], 0, 1, 2, + ]; + histogramInit(); + + static onInspect = function() { + if(array_length(current_data) > 0) + histogramUpdate(current_data[0]); + } + + static onValueUpdate = function(index) { + if(index == 0) { + update(); + if(array_length(current_data) > 0) + histogramUpdate(current_data[0]); + } + } + static process_data = function(_outSurf, _data, _output_index) { var _middle = _data[1]; var _range = _data[2]; diff --git a/scripts/node_level_selector/node_level_selector.yy b/scripts/node_level_selector/node_level_selector.yy index 7e53df021..986352ef0 100644 --- a/scripts/node_level_selector/node_level_selector.yy +++ b/scripts/node_level_selector/node_level_selector.yy @@ -1,12 +1,11 @@ { + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_level_selector", "isDnD": false, "isCompatibility": false, "parent": { "name": "filter", "path": "folders/nodes/data/filter.yy", }, - "resourceVersion": "1.0", - "name": "node_level_selector", - "tags": [], - "resourceType": "GMScript", } \ No newline at end of file diff --git a/scripts/node_outline/node_outline.gml b/scripts/node_outline/node_outline.gml index 217bec108..0d9219811 100644 --- a/scripts/node_outline/node_outline.gml +++ b/scripts/node_outline/node_outline.gml @@ -20,7 +20,7 @@ function Node_Outline(_x, _y) : Node_Processor(_x, _y) constructor { uniform_out_only = shader_get_uniform(sh_outline, "outline_only"); inputs[| 0] = nodeValue(0, "Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); - inputs[| 1] = nodeValue(1, "Width", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1); + inputs[| 1] = nodeValue(1, "Width", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0); inputs[| 2] = nodeValue(2, "Color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white); inputs[| 3] = nodeValue(3, "Blend", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, 0); @@ -28,7 +28,7 @@ function Node_Outline(_x, _y) : Node_Processor(_x, _y) constructor { inputs[| 4] = nodeValue(4, "Blend alpha", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) .setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]); - inputs[| 5] = nodeValue(5, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) + inputs[| 5] = nodeValue(5, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1) .setDisplay(VALUE_DISPLAY.enum_button, ["Inside", "Outside"]); inputs[| 6] = nodeValue(6, "Anti alising", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, 0); diff --git a/scripts/node_transform/node_transform.gml b/scripts/node_transform/node_transform.gml index 1493a5b55..599f1cc73 100644 --- a/scripts/node_transform/node_transform.gml +++ b/scripts/node_transform/node_transform.gml @@ -13,7 +13,7 @@ enum OUTPUT_SCALING { function Node_Transform(_x, _y) : Node_Processor(_x, _y) constructor { name = "Transform"; - inputs[| 0] = nodeValue(0, "Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); + inputs[| 0] = nodeValue(0, "Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); inputs[| 1] = nodeValue(1, "Output dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [1, 1], VALUE_TAG.dimension_2d) .setDisplay(VALUE_DISPLAY.vector) @@ -48,7 +48,7 @@ function Node_Transform(_x, _y) : Node_Processor(_x, _y) constructor { inputs[| 9] = nodeValue(9, "Output dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, OUTPUT_SCALING.same_as_input) .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Same as input", "Constant", "Relative to input" ]); - inputs[| 10] = nodeValue(10, "Exact", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true); + inputs[| 10] = nodeValue(10, "Exact", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); inputs[| 11] = nodeValue(11, "Relative to surface", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); @@ -64,6 +64,11 @@ function Node_Transform(_x, _y) : Node_Processor(_x, _y) constructor { vel = 0; prev_pos = [0, 0]; + static onValueUpdate = function(index, prev) { + if(index == 0 && !is_surface(prev)) + centerAnchor(); + } + static centerAnchor = function() { var _surf = inputs[| 0].getValue(); diff --git a/scripts/node_transform/node_transform.yy b/scripts/node_transform/node_transform.yy index c765c4d8c..5e171e285 100644 --- a/scripts/node_transform/node_transform.yy +++ b/scripts/node_transform/node_transform.yy @@ -1,12 +1,11 @@ { + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_transform", "isDnD": false, "isCompatibility": false, "parent": { "name": "transform", "path": "folders/nodes/data/transform.yy", }, - "resourceVersion": "1.0", - "name": "node_transform", - "tags": [], - "resourceType": "GMScript", } \ No newline at end of file diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index 13e492822..b7509a5ea 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -165,10 +165,10 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T modifier = VALUE_MODIFIER.none; accept_array = true; - def_val = _value; - value = new animValue(_value, self); - on_end = KEYFRAME_END.hold; - extra_data = ds_list_create(); + def_val = _value; + animator = new valueAnimator(_value, self); + on_end = KEYFRAME_END.hold; + extra_data = ds_list_create(); visible = _connect == JUNCTION_CONNECT.output || _type == VALUE_TYPE.surface || _type == VALUE_TYPE.path || ( _tag & VALUE_TAG.dimension_2d ); show_in_inspector = true; @@ -223,16 +223,16 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T break; case VALUE_DISPLAY.range : editWidget = new rangeBox(_txt, function(index, val) { - var _val = value.getValue(); + var _val = animator.getValue(); _val[index] = val; setValue(_val); } ); if(display_data != -1) editWidget.extras = display_data; break; case VALUE_DISPLAY.vector : - if(array_length(value.getValue()) <= 4) { - editWidget = new vectorBox(array_length(value.getValue()), _txt, function(index, val) { - var _val = value.getValue(); + if(array_length(animator.getValue()) <= 4) { + editWidget = new vectorBox(array_length(animator.getValue()), _txt, function(index, val) { + var _val = animator.getValue(); if(modifier & VALUE_MODIFIER.linked) { for(var i = 0; i < array_length(_val); i++) _val[i] = val; @@ -245,8 +245,8 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T } break; case VALUE_DISPLAY.vector_range : - editWidget = new vectorRangeBox(array_length(value.getValue()), _txt, function(index, val) { - var _val = value.getValue(); + editWidget = new vectorRangeBox(array_length(animator.getValue()), _txt, function(index, val) { + var _val = animator.getValue(); _val[index] = val; setValue(_val); } ); @@ -259,7 +259,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T break; case VALUE_DISPLAY.rotation_range : editWidget = new rotatorRange(function(index, val) { - var _val = value.getValue(); + var _val = animator.getValue(); _val[index] = round(val); setValue(_val); } ); @@ -271,14 +271,14 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T break; case VALUE_DISPLAY.slider_range : editWidget = new sliderRange(display_data[0], display_data[1], display_data[2], function(index, val) { - var _val = value.getValue(); + var _val = animator.getValue(); _val[index] = val; setValue(_val); } ); break; case VALUE_DISPLAY.area : editWidget = new areaBox(function(index, val) { - var _val = value.getValue(); + var _val = animator.getValue(); _val[index] = val; setValue(_val); }); @@ -286,7 +286,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T break; case VALUE_DISPLAY.padding : editWidget = new paddingBox(function(index, val) { - var _val = value.getValue(); + var _val = animator.getValue(); if(modifier & VALUE_MODIFIER.linked) { for(var i = 0; i < array_length(_val); i++) _val[i] = val; @@ -302,14 +302,11 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T }); break; case VALUE_DISPLAY.puppet_control : - editWidget = new textBox(_txt, function(str) { - if(str != "") { - var _val = value.getValue(); - _val[4] = toNumber(str); - setValue(_val); - } - } ); - editWidget.slidable = true; + editWidget = new controlPointBox(function(index, val) { + var _val = animator.getValue(); + _val[index] = val; + setValue(_val); + }); break; case VALUE_DISPLAY.enum_scroll : editWidget = new scrollBox(display_data, function(val) { @@ -326,7 +323,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T break; case VALUE_TYPE.boolean : editWidget = new checkBox(function() { - setValue(!value.getValue()); + setValue(!animator.getValue()); } ); break; case VALUE_TYPE.color : @@ -391,12 +388,12 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T case VALUE_TYPE.path: switch(display_type) { case VALUE_DISPLAY.path_load: - var path = value.getValue(); + var path = animator.getValue(); if(!file_exists(path)) value_validation = VALIDATION.error; break; case VALUE_DISPLAY.path_array: - var paths = value.getValue(); + var paths = animator.getValue(); if(is_array(paths)) { for( var i = 0; i < array_length(paths); i++ ) { if(!file_exists(paths[i])) @@ -418,7 +415,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T var val = _val[0]; var typ = _val[1]; - var _base = value.getValue(); + var _base = animator.getValue(); if((tag & VALUE_TAG.dimension_2d) && typ == VALUE_TYPE.surface) { if(is_array(val)) { @@ -450,7 +447,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T var val = [ -1, VALUE_TYPE.any ]; if(value_from == noone) - val = [value.getValue(), type]; + val = [animator.getValue(), type]; else if(value_from != self) { val = value_from.getValueRecursive(); } @@ -468,7 +465,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T } static __anim = function() { - return value.is_anim || node.update_on_frame; + return animator.is_anim || node.update_on_frame; } static isAnim = function() { if(value_from == noone) return __anim(); @@ -498,9 +495,9 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T } static setValue = function(val = 0, record = true, time = -999) { - var _o = value.getValue(); - value.setValue(val, record, time); - var _n = value.getValue(); + var _o = animator.getValue(); + animator.setValue(val, record, time); + var _n = animator.getValue(); var updated = false; if(is_array(_o)) { @@ -518,20 +515,13 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T if(node.auto_update && connect_type == JUNCTION_CONNECT.input) node.updateForward(); - node.onValueUpdate(index); + node.onValueUpdate(index, _o); } onValidate(); return updated; } - static removeKeyframe = function(index) { - if(ds_list_size(value.values) > 1) - ds_list_delete(value.values, index); - else - value.is_anim = false; - } - static setFrom = function(_valueFrom, _update = true, checkRecur = true) { if(_valueFrom == -1 || _valueFrom == undefined) { show_debug_message("LOAD : Value from error " + string(_valueFrom)) @@ -577,11 +567,13 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T return false; } + var _o = animator.getValue(); recordAction(ACTION_TYPE.junction_connect, self, value_from); value_from = _valueFrom; ds_list_add(_valueFrom.value_to, self); //show_debug_message("connected " + name + " to " + _valueFrom.name) + node.onValueUpdate(index, _o); if(_update) node.updateValueFrom(index); if(_update && node.auto_update) _valueFrom.node.updateForward(); @@ -603,7 +595,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T } static setString = function(str) { - var _o = value.getValue(); + var _o = animator.getValue(); if(string_pos(",", str) > 0) { string_replace(str, "[", ""); @@ -895,10 +887,10 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T break; #endregion case VALUE_DISPLAY.puppet_control : #region - var __ax = _val[0]; - var __ay = _val[1]; - var __ax1 = _val[2]; - var __ay1 = _val[3]; + var __ax = _val[PUPPET_CONTROL.cx]; + var __ay = _val[PUPPET_CONTROL.cy]; + var __ax1 = _val[PUPPET_CONTROL.fx]; + var __ay1 = _val[PUPPET_CONTROL.fy]; var _ax = __ax * _s + _x; var _ay = __ay * _s + _y; @@ -907,11 +899,43 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T var _ay1 = (__ay + __ay1) * _s + _y; draw_set_color(c_ui_orange); + switch(_val[PUPPET_CONTROL.mode]) { + case PUPPET_FORCE_MODE.move : + draw_line_width2(_ax, _ay, _ax1, _ay1, 6, 1); - draw_line_width2(_ax, _ay, _ax1, _ay1, 6, 1); - - draw_sprite(s_anchor_selector, 0, _ax, _ay); - draw_sprite(s_anchor_selector, 2, _ax1, _ay1); + draw_sprite(s_anchor_selector, 0, _ax, _ay); + draw_sprite(s_anchor_selector, 2, _ax1, _ay1); + draw_circle(_ax, _ay, _val[PUPPET_CONTROL.width] * _s, true); + break; + case PUPPET_FORCE_MODE.pinch : + case PUPPET_FORCE_MODE.inflate : + draw_sprite(s_anchor_selector, 0, _ax, _ay); + draw_circle(_ax, _ay, _val[PUPPET_CONTROL.width] * _s, true); + break; + case PUPPET_FORCE_MODE.wind : + var dir = _val[PUPPET_CONTROL.fy]; + var rad = _val[PUPPET_CONTROL.width] * _s; + + var _l0x = _ax + lengthdir_x(rad, dir + 90); + var _l0y = _ay + lengthdir_y(rad, dir + 90); + var _l1x = _ax + lengthdir_x(rad, dir - 90); + var _l1y = _ay + lengthdir_y(rad, dir - 90); + + var _l0x0 = _l0x + lengthdir_x(1000, dir); + var _l0y0 = _l0y + lengthdir_y(1000, dir); + var _l0x1 = _l0x + lengthdir_x(1000, dir + 180); + var _l0y1 = _l0y + lengthdir_y(1000, dir + 180); + + var _l1x0 = _l1x + lengthdir_x(1000, dir); + var _l1y0 = _l1y + lengthdir_y(1000, dir); + var _l1x1 = _l1x + lengthdir_x(1000, dir + 180); + var _l1y1 = _l1y + lengthdir_y(1000, dir + 180); + + draw_line(_l0x0, _l0y0, _l0x1, _l0y1); + draw_line(_l1x0, _l1y0, _l1x1, _l1y1); + draw_sprite(s_anchor_selector, 0, _ax, _ay); + break; + } if(drag_type == 1) { draw_sprite(s_anchor_selector, 1, _ax, _ay); @@ -919,11 +943,11 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T var _ny = drag_sy + (_my - drag_my) / _s; if(keyboard_check(vk_control)) { - _val[0] = round(_nx); - _val[1] = round(_ny); + _val[PUPPET_CONTROL.cx] = round(_nx); + _val[PUPPET_CONTROL.cy] = round(_ny); } else { - _val[0] = _nx; - _val[1] = _ny; + _val[PUPPET_CONTROL.cx] = _nx; + _val[PUPPET_CONTROL.cy] = _ny; } if(setValue( _val )) @@ -939,11 +963,11 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T var _ny = drag_sy + (_my - drag_my) / _s; if(keyboard_check(vk_control)) { - _val[2] = round(_nx); - _val[3] = round(_ny); + _val[PUPPET_CONTROL.fx] = round(_nx); + _val[PUPPET_CONTROL.fy] = round(_ny); } else { - _val[2] = _nx; - _val[3] = _ny; + _val[PUPPET_CONTROL.fx] = _nx; + _val[PUPPET_CONTROL.fy] = _ny; } if(setValue( _val )) @@ -956,9 +980,6 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T } if(point_in_circle(_mx, _my, _ax, _ay, 8)) { - draw_set_color(c_ui_orange); - draw_circle(_ax, _ay, _val[4] * _s, true); - hover = 1; draw_sprite(s_anchor_selector, 1, _ax, _ay); if(_active && mouse_check_button_pressed(mb_left)) { @@ -968,7 +989,9 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T drag_sx = __ax; drag_sy = __ay; } - } else if(point_in_circle(_mx, _my, _ax1, _ay1, 8)) { + } + + if(_val[PUPPET_CONTROL.mode] == PUPPET_FORCE_MODE.move && point_in_circle(_mx, _my, _ax1, _ay1, 8)) { hover = 2; draw_sprite(s_anchor_selector, 0, _ax1, _ay1); if(_active && mouse_check_button_pressed(mb_left)) { @@ -1025,11 +1048,11 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T static serialize = function(scale = false) { var _map = ds_map_create(); - ds_map_add_list(_map, "raw value", value.serialize(scale)); + ds_map_add_list(_map, "raw value", animator.serialize(scale)); _map[? "on end"] = on_end; _map[? "visible"] = visible; - _map[? "anim"] = value.is_anim; + _map[? "anim"] = animator.is_anim; _map[? "from node"] = value_from? value_from.node.node_id : -1; _map[? "from index"] = value_from? value_from.index : -1; @@ -1043,8 +1066,8 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T static deserialize = function(_map, scale = false) { on_end = ds_map_try_get(_map, "on end", on_end); visible = ds_map_try_get(_map, "visible", visible); - value.deserialize(_map[? "raw value"], scale); - value.is_anim = _map[? "anim"]; + animator.deserialize(_map[? "raw value"], scale); + animator.is_anim = _map[? "anim"]; con_node = _map[? "from node"]; con_index = _map[? "from index"]; @@ -1089,7 +1112,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T static cleanUp = function() { ds_list_destroy(value_to); ds_list_destroy(extra_data); - value.cleanUp(); - delete value; + animator.cleanUp(); + delete animator; } } \ No newline at end of file diff --git a/scripts/node_wiggler/node_wiggler.gml b/scripts/node_wiggler/node_wiggler.gml index 6e82a8c49..446d8cbd9 100644 --- a/scripts/node_wiggler/node_wiggler.gml +++ b/scripts/node_wiggler/node_wiggler.gml @@ -12,41 +12,37 @@ function Node_Wiggler(_x, _y) : Node_Value_Processor(_x, _y) constructor { w = 96; min_h = 0; - inputs[| 0] = nodeValue(0, "Value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0); + inputs[| 0] = nodeValue(0, "Range", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 1]) + .setDisplay(VALUE_DISPLAY.vector); - inputs[| 1] = nodeValue(1, "Range", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1 ); - - inputs[| 2] = nodeValue(2, "Frequency", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 3, 5 ] ) + inputs[| 1] = nodeValue(1, "Frequency", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 3, 5 ] ) .setDisplay(VALUE_DISPLAY.slider_range, [1, 32, 1]); - inputs[| 3] = nodeValue(3, "Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, irandom(9999999) ); + inputs[| 2] = nodeValue(2, "Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, irandom(9999999) ); - inputs[| 4] = nodeValue(4, "Display", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1 ) + inputs[| 3] = nodeValue(3, "Display", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 1 ) .setDisplay(VALUE_DISPLAY.enum_scroll, ["Number", "Graph"]) outputs[| 0] = nodeValue(0, "Output", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0); input_display_list = [ - ["Display", true], 4, - ["Wiggle", false], 3, 0, 1, 2, + ["Display", true], 3, + ["Wiggle", false], 2, 0, 1, ]; graph_value = array_create(64, 0); static onValueUpdate = function(index) { - var val = inputs[| 0].getValue(); - var ran = inputs[| 1].getValue(); - var fre = inputs[| 2].getValue(); - var sed = inputs[| 3].getValue(); + var ran = inputs[| 0].getValue(); + var fre = inputs[| 1].getValue(); + var sed = inputs[| 2].getValue(); - var _min = val - ran; - var _max = val + ran; var _fmin = ANIMATOR.frames_total / max(1, min(fre[0], fre[1])); var _fmax = ANIMATOR.frames_total / max(1, max(fre[0], fre[1])); var _val; for( var i = 0; i < 64; i++ ) { - _val = getWiggle(_min, _max, _fmin, _fmax, i, sed); + _val = getWiggle(ran[0], ran[1], _fmin, _fmax, i, sed); graph_value[i] = _val; } } @@ -56,19 +52,18 @@ function Node_Wiggler(_x, _y) : Node_Value_Processor(_x, _y) constructor { array_resize(graph_value, ANIMATOR.frames_total); var time = ANIMATOR.current_frame; - var _min = _data[0] - _data[1]; - var _max = _data[0] + _data[1]; - var _fmin = ANIMATOR.frames_total / max(1, min(_data[2][0], _data[2][1])); - var _fmax = ANIMATOR.frames_total / max(1, max(_data[2][0], _data[2][1])); + var _ran = _data[0]; + var _fmin = ANIMATOR.frames_total / max(1, min(_data[1][0], _data[1][1])); + var _fmax = ANIMATOR.frames_total / max(1, max(_data[1][0], _data[1][1])); - var _val = getWiggle(_min, _max, _fmin, _fmax, time, _data[3]); + var _val = getWiggle(_ran[0], _ran[1], _fmin, _fmax, time, _data[3]); return _val; } doUpdate(); static onDrawNode = function(xx, yy, _mx, _my, _s) { - var disp = inputs[| 4].getValue(); + var disp = inputs[| 3].getValue(); var time = ANIMATOR.current_frame; var total_time = ANIMATOR.frames_total; @@ -84,13 +79,14 @@ function Node_Wiggler(_x, _y) : Node_Value_Processor(_x, _y) constructor { w = 128; min_h = 96; - var val = inputs[| 0].getValue(); - var ran = inputs[| 1].getValue(); - var fre = inputs[| 2].getValue(); - var sed = inputs[| 3].getValue(); - - var _min = val - ran; - var _max = val + ran; + var ran = inputs[| 0].getValue(); + var fre = inputs[| 1].getValue(); + var sed = inputs[| 2].getValue(); + + var _min = ran[0]; + var _max = ran[1]; + var val = (_min + _max) / 2; + var _ran = _max - _min; var _fmin = max(1, fre[0]); var _fmax = max(1, fre[1]); @@ -112,7 +108,7 @@ function Node_Wiggler(_x, _y) : Node_Value_Processor(_x, _y) constructor { var ox, oy; for( var i = 0; i < array_length(graph_value); i++ ) { var _x = x0 + i * lw; - var _y = yc - (graph_value[i] - val) / (ran * 2) * hh; + var _y = yc - (graph_value[i] - val) / (_ran * 2) * hh; if(i) draw_line(ox, oy, _x, _y); diff --git a/scripts/node_wrap_mesh/node_wrap_mesh.gml b/scripts/node_wrap_mesh/node_wrap_mesh.gml index 856415f41..c69aedada 100644 --- a/scripts/node_wrap_mesh/node_wrap_mesh.gml +++ b/scripts/node_wrap_mesh/node_wrap_mesh.gml @@ -23,24 +23,36 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { inputs[| 3] = nodeValue(3, "Mesh", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) .setDisplay(VALUE_DISPLAY.button, [ function() { setTriangle(); doUpdate(); }, "Generate"] ); + inputs[| 4] = nodeValue(4, "Diagonal link", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); + control_index = ds_list_size(inputs); function createControl() { var index = ds_list_size(inputs); - inputs[| index] = nodeValue(index, "Control point range", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 16, 16, 8, 0, 32]) + inputs[| index] = nodeValue(index, "Control point", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ PUPPET_FORCE_MODE.move, 16, 16, 8, 0, 8, 8]) .setDisplay(VALUE_DISPLAY.puppet_control) - + array_push(input_display_list, index); return inputs[| index]; } outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); outputs[| 1] = nodeValue(1, "Mesh data", self, JUNCTION_CONNECT.output, VALUE_TYPE.object, data); - tools = [ - [ "Add / Remove control point", s_control_edit ] + input_display_list = [ + ["Mesh", false], 0, 1, 2, 4, 3, + ["Control points", false], ]; + input_display_index = array_length(input_display_list); + + tools = [ + [ "Add / Remove control point", s_control_edit ], + [ "Pin, unpin mesh", [s_control_pin, s_control_unpin] ] + ]; + + attributes[? "pin"] = ds_map_create(); + static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { for(var i = 0; i < ds_list_size(data.tris); i++) { data.tris[| i].drawPoints(_x, _y, _s); @@ -55,11 +67,15 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { hover = i; } - if(_active && PANEL_PREVIEW.tool_index == 0) { + var _tool = PANEL_PREVIEW.tool_index; + var _sub_tool = PANEL_PREVIEW.tool_sub_index; + + if(!_active) return; + if(_tool == 0) { if(mouse_check_button_pressed(mb_left)) { if(hover == -1) { var i = createControl(); - i.setValue( [(_mx - _x) / _s, (_my - _y) / _s, 0, 0, 8] ); + i.setValue( [PUPPET_FORCE_MODE.move, (_mx - _x) / _s, (_my - _y) / _s, 0, 0, 8, 8] ); i.drag_type = 2; i.drag_sx = 0; i.drag_sy = 0; @@ -67,22 +83,48 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { i.drag_my = _my; } else { ds_list_delete(inputs, hover); + array_delete(input_display_list, input_display_index + hover - control_index, 1); } reset(); - control(); + control(input_display_list); + } + } else if(_tool == 1) { + draw_set_color(c_ui_orange); + var rad = 16; + draw_circle(_mx, _my, rad, true); + var _xx = (_mx - _x) / _s; + var _yy = (_my - _y) / _s; + + if(mouse_check_button(mb_left)) { + for(var j = 0; j < ds_list_size(data.tris); j++) { + var t = data.tris[| j]; + + if(point_in_circle(t.p0.x, t.p0.y, _xx, _yy, rad / _s)) + t.p0.setPin(!_sub_tool); + if(point_in_circle(t.p1.x, t.p1.y, _xx, _yy, rad / _s)) + t.p1.setPin(!_sub_tool); + if(point_in_circle(t.p2.x, t.p2.y, _xx, _yy, rad / _s)) + t.p2.setPin(!_sub_tool); + } } } } - function point(_x, _y) constructor { + function point(node, index, _x, _y) constructor { + self.index = index; + self.node = node; x = _x; y = _y; xp = x; yp = y; + ndx = 0; + ndy = 0; + sx = x; sy = y; + pin = ds_map_exists(node.attributes[? "pin"], index); static reset = function() { x = sx; @@ -91,9 +133,14 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { yp = y; } - static draw = function() { - draw_set_color(c_white); - draw_circle(x, y, 4, false); + static draw = function(_x, _y, _s) { + if(pin) { + draw_set_color(c_ui_orange); + draw_circle(_x + x * _s, _y + y * _s, 3, false); + } else { + draw_set_color(c_ui_blue_grey); + draw_circle(_x + x * _s, _y + y * _s, 2, false); + } } u = 0; @@ -102,6 +149,42 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { u = x / ww; v = y / hh; } + + static move = function(dx, dy) { + if(pin) return; + + x += dx; + y += dy; + } + + static planMove = function(dx, dy) { + if(pin) return; + + ndx += dx; + ndy += dy; + } + + static stepMove = function(rat) { + if(pin) return; + + move(ndx * rat, ndy * rat); + } + + static clearMove = function(rat) { + if(pin) return; + + ndx = 0; + ndy = 0; + } + + static setPin = function(pin) { + if(!pin && ds_map_exists(node.attributes[? "pin"], index)) + ds_map_delete(node.attributes[? "pin"], index); + if(pin && !ds_map_exists(node.attributes[? "pin"], index)) + ds_map_add(node.attributes[? "pin"], index, 1); + + self.pin = pin; + } } function link(_p0, _p1) constructor { @@ -118,12 +201,9 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { var f = k * (_len - len); var dx = lengthdir_x(f, _dir); var dy = lengthdir_y(f, _dir); - - p0.x += dx / 2; - p0.y += dy / 2; - - p1.x -= dx / 2; - p1.y -= dy / 2; + + p0.move( dx / 2, dy / 2); + p1.move(-dx / 2, -dy / 2); } static draw = function(_x, _y, _s) { @@ -161,15 +241,14 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { } static drawPoints = function(_x, _y, _s) { - draw_set_color(c_ui_blue_dkgrey); - draw_line(_x + p0.x * _s, _y + p0.y * _s, _x + p1.x * _s, _y + p1.y * _s); - draw_line(_x + p0.x * _s, _y + p0.y * _s, _x + p2.x * _s, _y + p2.y * _s); - draw_line(_x + p1.x * _s, _y + p1.y * _s, _x + p2.x * _s, _y + p2.y * _s); + //draw_set_color(c_ui_blue_dkgrey); + //draw_line(_x + p0.x * _s, _y + p0.y * _s, _x + p1.x * _s, _y + p1.y * _s); + //draw_line(_x + p0.x * _s, _y + p0.y * _s, _x + p2.x * _s, _y + p2.y * _s); + //draw_line(_x + p1.x * _s, _y + p1.y * _s, _x + p2.x * _s, _y + p2.y * _s); - draw_set_color(c_ui_blue_grey); - draw_circle(_x + p0.x * _s, _y + p0.y * _s, 2, false); - draw_circle(_x + p1.x * _s, _y + p1.y * _s, 2, false); - draw_circle(_x + p2.x * _s, _y + p2.y * _s, 2, false); + p0.draw(_x, _y, _s); + p1.draw(_x, _y, _s); + p2.draw(_x, _y, _s); } static contain = function(p) { @@ -180,6 +259,7 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { static regularTri = function(surf) { var sample = inputs[| 1].getValue(); var spring = inputs[| 2].getValue(); + var diagon = inputs[| 4].getValue(); if(!inputs[| 0].value_from) return; var ww = surface_get_width(surf); @@ -204,6 +284,7 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { ds_list_clear(data.tris); ds_list_clear(data.links); + var ind = 0; for(var i = 0; i < gh; i++) for(var j = 0; j < gw; j++) { var c0 = surface_getpixel(cont, j * sample, i * sample); @@ -212,7 +293,7 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { var c3 = surface_getpixel(cont, j * sample - 1, i * sample - 1); if(c0 + c1 + c2 + c3 > 0) { - data.points[i][j] = new point(min(j * sample, ww), min(i * sample, hh)); + data.points[i][j] = new point(self, ind++, min(j * sample, ww), min(i * sample, hh)); if(i) { if(j && data.points[i - 1][j] != 0 && data.points[i][j - 1] != 0) ds_list_add(data.tris, new triangle(data.points[i - 1][j], data.points[i][j - 1], data.points[i][j])); @@ -233,15 +314,18 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { if(j && data.points[i][j - 1] != 0) { ds_list_add(data.links, new link(data.points[i][j], data.points[i][j - 1])); } - if(i && j && data.points[i - 1][j - 1] != 0) { - var l = new link(data.points[i][j], data.points[i - 1][j - 1]); - l.k = spring; - ds_list_add(data.links, l); - } - if(i && j < gw - 1 && data.points[i - 1][j + 1] != 0) { - var l = new link(data.points[i][j], data.points[i - 1][j + 1]); - l.k = spring; - ds_list_add(data.links, l); + + if(diagon) { + if(i && j && data.points[i - 1][j - 1] != 0) { + var l = new link(data.points[i][j], data.points[i - 1][j - 1]); + l.k = spring; + ds_list_add(data.links, l); + } + if(i && j < gw - 1 && data.points[i - 1][j + 1] != 0) { + var l = new link(data.points[i][j], data.points[i - 1][j + 1]); + l.k = spring; + ds_list_add(data.links, l); + } } } @@ -264,15 +348,49 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { } static affectPoint = function(c, p) { - var dis = point_distance(c[0], c[1], p.x, p.y); - var range = c[4]; - var inf = clamp(1 - dis / range, 0, 1); + var mode = c[PUPPET_CONTROL.mode]; + var cx = c[PUPPET_CONTROL.cx]; + var cy = c[PUPPET_CONTROL.cy]; + var fx = c[PUPPET_CONTROL.fx]; + var fy = c[PUPPET_CONTROL.fy]; + var cw = c[PUPPET_CONTROL.width]; + var ch = c[PUPPET_CONTROL.height]; - var dx = c[2] * inf / 2; - var dy = c[3] * inf / 2; - - p.x += dx; - p.y += dy; + switch(mode) { + case PUPPET_FORCE_MODE.move: + var dis = point_distance(cx, cy, p.x, p.y); + var inf = clamp(1 - dis / cw, 0, 1); + inf = ease_cubic_inout(inf); + + p.planMove(fx * inf, fy * inf); + break; + case PUPPET_FORCE_MODE.pinch: + var dis = point_distance(cx, cy, p.x, p.y); + var inf = power(clamp(1 - dis / cw, 0, 1), 2) / 2; + var dir = point_direction(p.x, p.y, cx, cy); + + p.planMove(lengthdir_x(inf, dir) * ch, lengthdir_y(inf, dir) * ch); + break; + case PUPPET_FORCE_MODE.inflate: + var dis = point_distance(cx, cy, p.x, p.y); + var inf = power(clamp(1 - dis / cw, 0, 1), 2) / 2; + var dir = point_direction(cx, cy, p.x, p.y); + + p.planMove(lengthdir_x(inf, dir) * ch, lengthdir_y(inf, dir) * ch); + break; + case PUPPET_FORCE_MODE.wind: + var lx0 = cx + lengthdir_x(1000, fy); + var ly0 = cy + lengthdir_y(1000, fy); + var lx1 = cx - lengthdir_x(1000, fy); + var ly1 = cy - lengthdir_y(1000, fy); + + var dist = distance_to_line(p.x, p.y, lx0, ly0, lx1, ly1); + var inf = clamp(1 - dist / cw, 0, 1); + inf = ease_cubic_inout(inf); + + p.planMove(lengthdir_x(fx * inf, fy), lengthdir_y(fx * inf, fy)); + break; + } } static control = function() { @@ -286,9 +404,30 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { } } - repeat(4) - for(var i = 0; i < ds_list_size(data.links); i++) - data.links[| i].resolve(); + var it = PREF_MAP[? "verlet_iteration"]; + var resit = it; + var _rat = power(1 / it, 2); + + repeat(it) { + for(var j = 0; j < ds_list_size(data.tris); j++) { + var t = data.tris[| j]; + t.p0.stepMove(_rat); + t.p1.stepMove(_rat); + t.p2.stepMove(_rat); + } + + repeat(resit) { + for(var i = 0; i < ds_list_size(data.links); i++) + data.links[| i].resolve(); + } + } + + for(var j = 0; j < ds_list_size(data.tris); j++) { + var t = data.tris[| j]; + t.p0.clearMove(); + t.p1.clearMove(); + t.p2.clearMove(); + } } static update = function() { @@ -321,4 +460,15 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { inputs[| i].deserialize(_inputs[| i]); } } + + static attributeSerialize = function() { + var att = ds_map_create(); + ds_map_add_map(att, "pin", attributes[? "pin"]); + return att; + } + + static attributeDeserialize = function(attr) { + if(ds_map_exists(attr, "pin")) + attributes[? "pin"] = ds_map_clone(attr[? "pin"]); + } } \ No newline at end of file diff --git a/scripts/panel_animation/panel_animation.gml b/scripts/panel_animation/panel_animation.gml index f5895613b..742dfeab9 100644 --- a/scripts/panel_animation/panel_animation.gml +++ b/scripts/panel_animation/panel_animation.gml @@ -33,6 +33,7 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { _scrub_frame = -1; timeline_shift = 0; + timeline_shift_to = 0; timeline_dragging = false; timeline_drag_sx = 0; timeline_drag_sy = 0; @@ -44,7 +45,13 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { keyframe_dragging = noone; keyframe_drag_type = -1; - prop_selecting = noone; + keyframe_selecting = ds_list_create(); + keyframe_boxing = false; + keyframe_box_sx = -1; + keyframe_box_sy = -1; + + stagger_mode = 0; + stagger_index = 0; anim_properties = ds_list_create(); @@ -60,10 +67,129 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { addHotkey("", "Last frame", vk_end, MOD_KEY.none, function() { ANIMATOR.real_frame = ANIMATOR.frames_total; }); addHotkey("", "Next frame", vk_right, MOD_KEY.none, function() { ANIMATOR.real_frame = min(ANIMATOR.real_frame + 1, ANIMATOR.frames_total); - ANIMATOR.frame_progress = true; }); + ANIMATOR.frame_progress = true; + }); addHotkey("", "Previous frame", vk_left, MOD_KEY.none, function() { ANIMATOR.real_frame = max(ANIMATOR.real_frame - 1, 0); - ANIMATOR.frame_progress = true; }); + ANIMATOR.frame_progress = true; + }); + addHotkey("Animation", "Delete keys", vk_delete, MOD_KEY.none, function() { deleteKeys(); }); + + function deleteKeys() { + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.anim.removeKey(k); + } + ds_list_clear(keyframe_selecting); + } + + function alignKeys(halign = fa_left) { + if(ds_list_empty(keyframe_selecting)) return; + + var tt = 0; + + switch(halign) { + case fa_left : + tt = 9999; + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) + tt = min(tt, keyframe_selecting[| i].time); + break; + case fa_center : + tt = 0; + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) + tt += keyframe_selecting[| i].time; + tt = round(tt / ds_list_size(keyframe_selecting)); + break; + case fa_right : + tt = -9999; + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) + tt = max(tt, keyframe_selecting[| i].time); + break; + } + + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.anim.setKeyTime(k, tt); + } + } + + function arrangeKeys() { + var l = ds_list_create(); + for( var i = 0; i < ds_list_size(anim_properties); i++ ) { + var prop = anim_properties[| i]; + for(var k = 0; k < ds_list_size(prop.animator.values); k++) { + var keyframe = prop.animator.values[| k]; + + if(ds_list_exist(keyframe_selecting, keyframe)) + ds_list_add(l, keyframe); + } + } + + ds_list_copy(keyframe_selecting, l); + ds_list_destroy(l); + } + + function staggerKeys(_index, _stag) { + var t = keyframe_selecting[| _index].time; + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + var _t = t + abs(i - _index) * _stag; + + k.anim.setKeyTime(k, _t); + } + } + + keyframe_menu = [ + [ "Ease in", [ + [ [s_timeline_ease, 0], function() { + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_in = 0; + } + } ], + [ [s_timeline_ease, 1], function() { + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_in_type = CURVE_TYPE.bezier; + } + } ], + [ [s_timeline_ease, 3], function() { + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_in_type = CURVE_TYPE.damping; + } + } ], + ]], + [ "Ease out", [ + [ [s_timeline_ease, 0], function() { + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_out = 0; + } + } ], + [ [s_timeline_ease, 1], function() { + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_out_type = CURVE_TYPE.bezier; + } + } ], + [ [s_timeline_ease, 3], function() { + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_out_type = CURVE_TYPE.damping; + } + } ], + ]], + -1, + [ "Align", [ + [ [s_timeline_obj_halign, 0], function() { alignKeys(fa_left); } ], + [ [s_timeline_obj_halign, 1], function() { alignKeys(fa_center); } ], + [ [s_timeline_obj_halign, 2], function() { alignKeys(fa_right); } ], + ]], + [ "Stagger", function() { stagger_mode = 1; }], + -1, + [ "Delete", function() { deleteKeys(); }, [ "Animation", "Delete keys" ] ], + ]; function onResize(dw, dh) { if(w - tool_width > 1) { @@ -137,7 +263,7 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { for(var j = 0; j < ds_list_size(_node.inputs); j++) { var jun = _node.inputs[| j]; - if(jun.value.is_anim) + if(jun.animator.is_anim) ds_list_add(anim_properties, jun); } } @@ -149,7 +275,6 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { var bar_w = w - tool_width; var bar_h = timeline_h; var bar_total_w = ANIMATOR.frames_total * timeline_scale; - var key_holding = noone; resetTimelineMask(); if(!is_surface(timeline_surface) || !surface_exists(timeline_surface)) @@ -212,6 +337,9 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { draw_sprite_stretched(s_ui_panel_bg, 1, 0, 0, bar_w, dope_sheet_h); draw_sprite_stretched_ext(s_ui_panel_bg, 1, 0, 0, bar_total_w, dope_sheet_h, c_ltgray, 1); + draw_set_color(merge_color(c_ui_blue_dkblack, c_black, 0.4)); + draw_rectangle(0, 0, bar_total_w, 16, false); + dope_sheet_y_max = 0; var key_y = 24 + dope_sheet_y, key_y_node, _node = noone; for( var i = 0; i < ds_list_size(anim_properties); i++ ) { @@ -233,7 +361,7 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { key_y += 18; dope_sheet_y_max += 18; - if(prop.value.show_graph) { + if(prop.animator.show_graph) { draw_sprite_stretched_ext(s_ui_panel_bg, 0, 0, key_y - 4, bar_total_w, graph_h, c_ui_blue_ltgrey, 1); key_y += graph_h + 8; dope_sheet_y_max += graph_h + 8; @@ -246,7 +374,7 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { for(var i = 0; i < ANIMATOR.frames_total; i += 10) { var bar_line_x = i * timeline_scale + timeline_shift; draw_set_color(c_ui_blue_black); - draw_line(bar_line_x, 12, bar_line_x, dope_sheet_h); + draw_line(bar_line_x, 16, bar_line_x, dope_sheet_h); draw_set_text(f_p2, fa_center, fa_bottom, c_ui_blue_grey); draw_text(bar_line_x, 16, string(i)); @@ -255,7 +383,7 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { var bar_line_x = ANIMATOR.current_frame * timeline_scale + timeline_shift; var cc = ANIMATOR.is_playing? c_ui_lime : c_ui_orange; draw_set_color(cc); - draw_line(bar_line_x, 12, bar_line_x, dope_sheet_h); + draw_line(bar_line_x, 16, bar_line_x, dope_sheet_h); draw_set_text(f_p2, fa_center, fa_bottom, cc); draw_text(bar_line_x, 16, string(ANIMATOR.current_frame)); @@ -265,6 +393,7 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { var key_sy = 24 + dope_sheet_y; var key_y, key_y_node, _node = noone; draw_set_text(f_p2, fa_left, fa_top, c_ui_blue_white); + var key_hover = noone; key_y = key_sy; for( var i = 0; i < ds_list_size(anim_properties); i++ ) { @@ -276,7 +405,7 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { } if(prop.node.anim_show && prop.on_end != KEYFRAME_END.hold) { - var key_list = prop.value.values; + var key_list = prop.animator.values; if(ds_list_size(key_list) > 1) { var keyframe_s = key_list[| 0].time; var keyframe_e = key_list[| ds_list_size(key_list) - 1].time; @@ -290,7 +419,7 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { } if(!prop.node.anim_show) { - key_y += 18; + //key_y += 18; continue; } @@ -300,10 +429,10 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { var _gy_top = key_y + 16; var _gy_bottom = _gy_top + graph_h - 8; - var amo = ds_list_size(prop.value.values); + var amo = ds_list_size(prop.animator.values); for(var k = 0; k < amo; k++) { - var key_val = prop.value.values[| k].value; + var key_val = prop.animator.values[| k].value; if(is_array(key_val)) { for( var ki = 0; ki < array_length(key_val); ki++ ) { _gy_val_min = min(_gy_val_min, key_val[ki]); @@ -316,20 +445,23 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { } for(var k = 0; k < amo; k++) { - var key = prop.value.values[| k]; + var key = prop.animator.values[| k]; var t = key.time * timeline_scale + timeline_shift; #region easing line if(key.ease_in > 0) { draw_set_color(c_ui_blue_dkgrey); var _tx = t - key.ease_in * timeline_scale * 2; - draw_line_width(_tx, key_y - 1, t, key_y - 1, 2); - - if(FOCUS == panel && point_in_circle(msx, msy, _tx, key_y, 6)) { + if(key.ease_in_type == CURVE_TYPE.bezier) + draw_line_width(_tx, key_y - 1, t, key_y - 1, 2); + else if(key.ease_in_type == CURVE_TYPE.damping) + draw_sprite_stretched_ext(s_timeline_elastic, 0, _tx, key_y - 4, t - _tx, 8, c_ui_blue_dkgrey, 1); + + if(HOVER == panel && point_in_circle(msx, msy, _tx, key_y, 6)) { + key_hover = key; draw_sprite_ext(s_timeline_keyframe, 2, _tx, key_y, 1, 1, 0, c_ui_blue_white, 2); - if(mouse_check_button_pressed(mb_left)) { - keyframe_dragging = prop.value.values[| k]; - prop_selecting = prop; + if(FOCUS == panel && mouse_check_button_pressed(mb_left)) { + keyframe_dragging = prop.animator.values[| k]; keyframe_drag_type = KEYFRAME_DRAG_TYPE.ease_in; } } else @@ -337,13 +469,16 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { } if(key.ease_out > 0) { draw_set_color(c_ui_blue_dkgrey); var _tx = t + key.ease_out * timeline_scale * 2; - draw_line_width(t, key_y - 1, _tx, key_y - 1, 2); + if(key.ease_out_type == CURVE_TYPE.bezier) + draw_line_width(t, key_y - 1, _tx, key_y - 1, 2); + else if(key.ease_out_type == CURVE_TYPE.damping) + draw_sprite_stretched_ext(s_timeline_elastic, 0, t, key_y - 4, _tx - t, 8, c_ui_blue_dkgrey, 1); - if(FOCUS == panel && point_in_circle(msx, msy, _tx, key_y, 6)) { + if(HOVER == panel && point_in_circle(msx, msy, _tx, key_y, 6)) { + key_hover = key; draw_sprite_ext(s_timeline_keyframe, 3, _tx, key_y, 1, 1, 0, c_ui_blue_white, 2); - if(mouse_check_button_pressed(mb_left)) { - keyframe_dragging = prop.value.values[| k]; - prop_selecting = prop; + if(FOCUS == panel && mouse_check_button_pressed(mb_left)) { + keyframe_dragging = prop.animator.values[| k]; keyframe_drag_type = KEYFRAME_DRAG_TYPE.ease_out; } } else @@ -351,9 +486,9 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { } #endregion - if(prop.value.show_graph && k < amo - 1) { + if(prop.animator.show_graph && k < amo - 1) { #region graph - var key_next = prop.value.values[| k + 1]; + var key_next = prop.animator.values[| k + 1]; var a = key.ease_out; var b = key_next.ease_in; var dx = key_next.time - key.time; @@ -382,8 +517,8 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { var _step = 1 / 20; for( var _r = 0; _r <= 1; _r += _step ) { nx = t + _r * dx * timeline_scale; - nly = bezier_interpol_x(a, b, _r); - + var nly = prop.animator.interpolate(key, key_next, _r); + if(is_array(key.value)) { for( var ki = 0; ki < array_length(key.value); ki++ ) { ny = value_map(lerp(key.value[ki], key_next.value[ki], nly), _gy_val_min, _gy_val_max, _gy_bottom, _gy_top); @@ -410,13 +545,13 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { #endregion } } - - if(prop.value.show_graph) { - if(ds_list_size(prop.value.values) > 0) { - var key_first = prop.value.values[| 0]; + + #region graph pre-post line + if(prop.animator.show_graph && ds_list_size(prop.animator.values) > 0) { + var key_first = prop.animator.values[| 0]; var t_first = key_first.time * timeline_scale + timeline_shift; - var key_last = prop.value.values[| ds_list_size(prop.value.values) - 1]; + var key_last = prop.animator.values[| ds_list_size(prop.animator.values) - 1]; var t_last = key_last.time * timeline_scale + timeline_shift; var oy = 0; @@ -441,114 +576,206 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { key_y += graph_h + 8; } - } + #endregion } key_y += 18; } - key_y = key_sy; - _node = noone; - for( var i = 0; i < ds_list_size(anim_properties); i++ ) { - var prop = anim_properties[| i]; + #region keyframes + key_y = key_sy; + _node = noone; - if(_node != prop.node) { - _node = prop.node; - - key_y += 6; - key_y_node = key_y; - key_y += 22; + if(keyframe_boxing) { + draw_set_color(c_ui_orange); + draw_rectangle(keyframe_box_sx, keyframe_box_sy, msx, msy, true); + draw_set_alpha(0.05); + draw_rectangle(keyframe_box_sx, keyframe_box_sy, msx, msy, false); + draw_set_alpha(1); + + if(mouse_check_button_released(mb_left)) + keyframe_boxing = false; } + + for( var i = 0; i < ds_list_size(anim_properties); i++ ) { + var prop = anim_properties[| i]; - var key_remove = -1; - for(var k = 0; k < ds_list_size(prop.value.values); k++) { - var t = prop.value.values[| k].time * timeline_scale + timeline_shift; + if(_node != prop.node) { + _node = prop.node; + + key_y += 6; + key_y_node = key_y; + key_y += 22; + } + + for(var k = 0; k < ds_list_size(prop.animator.values); k++) { + var t = prop.animator.values[| k].time * timeline_scale + timeline_shift; + var keyframe = prop.animator.values[| k]; + + if(!prop.node.anim_show) { + draw_sprite_ext(s_timeline_keyframe, 0, t, key_y_node, 1, 1, 0, c_ui_blue_grey, 1); + continue; + } + + var cc = c_ui_blue_grey; + if(HOVER == panel && point_in_circle(msx, msy, t, key_y, 8)) { + cc = c_ui_blue_white; + key_hover = keyframe; + + if(FOCUS == panel) { + if(DOUBLE_CLICK) { + keyframe_dragging = keyframe; + keyframe_drag_type = KEYFRAME_DRAG_TYPE.ease_both; + } else if(mouse_check_button_pressed(mb_left)) { + keyframe_dragging = keyframe; + keyframe_drag_type = KEYFRAME_DRAG_TYPE.move; + } + } + } + + if(stagger_mode == 1 && ds_list_exist(keyframe_selecting, keyframe)) + cc = c_ui_orange; + + draw_sprite_ext(s_timeline_keyframe, 1, t, key_y, 1, 1, 0, cc, 1); + if(ds_list_exist(keyframe_selecting, keyframe)) + draw_sprite_ext(s_timeline_keyframe_selecting, 0, t, key_y, 1, 1, 0, c_ui_orange, 1); + + if(keyframe_boxing) { + var box_x0 = min(keyframe_box_sx, msx); + var box_x1 = max(keyframe_box_sx, msx); + var box_y0 = min(keyframe_box_sy, msy); + var box_y1 = max(keyframe_box_sy, msy); + + if(!point_in_rectangle(t, key_y, box_x0, box_y0, box_x1, box_y1) && ds_list_exist(keyframe_selecting, keyframe)) + ds_list_remove(keyframe_selecting, keyframe); + if(point_in_rectangle(t, key_y, box_x0, box_y0, box_x1, box_y1) && !ds_list_exist(keyframe_selecting, keyframe)) + ds_list_add(keyframe_selecting, keyframe); + } + } if(prop.node.anim_show) { - if(FOCUS == panel && point_in_circle(msx, msy, t, key_y, 6)) { - draw_sprite_ext(s_timeline_keyframe, 1, t, key_y, 1, 1, 0, c_ui_blue_white, 1); - key_holding = prop.value.values[| k]; - - if(DOUBLE_CLICK) { - keyframe_dragging = prop.value.values[| k]; - prop_selecting = prop; - keyframe_drag_type = KEYFRAME_DRAG_TYPE.ease_both; - } else if(mouse_check_button_pressed(mb_left)) { - keyframe_dragging = prop.value.values[| k]; - prop_selecting = prop; - keyframe_drag_type = KEYFRAME_DRAG_TYPE.move; - } else if(mouse_check_button_pressed(mb_right)) { - key_remove = k; + if(prop.animator.show_graph) + key_y += graph_h + 8; + + key_y += 18; + } + } + + if(FOCUS == panel && point_in_rectangle(msx, msy, 0, 16, dope_sheet_w, dope_sheet_h)) { + if(mouse_check_button_pressed(mb_left) || mouse_check_button_pressed(mb_right)) { + if(key_hover == noone) { + ds_list_clear(keyframe_selecting); + } else { + if(keyboard_check(vk_shift)) { + if(ds_list_exist(keyframe_selecting, key_hover)) + ds_list_remove(keyframe_selecting, key_hover); + else + ds_list_add(keyframe_selecting, key_hover) + } else { + if(!ds_list_exist(keyframe_selecting, key_hover)) { + ds_list_clear(keyframe_selecting); + ds_list_add(keyframe_selecting, key_hover); + } } - } else - draw_sprite_ext(s_timeline_keyframe, 1, t, key_y, 1, 1, 0, c_ui_blue_grey, 1); + } } - draw_sprite_ext(s_timeline_keyframe, 0, t, key_y_node, 1, 1, 0, c_ui_blue_grey, 1); + if(mouse_check_button_pressed(mb_left)) { + if(stagger_mode == 1) { + if(key_hover == noone || !ds_list_exist(keyframe_selecting, key_hover)) + stagger_mode = 0; + else { + arrangeKeys(); + stagger_index = ds_list_find_index(keyframe_selecting, key_hover); + stagger_mode = 2; + } + } else if(stagger_mode == 2) { + stagger_mode = 0; + } else if(key_hover == noone) { + keyframe_boxing = true; + keyframe_box_sx = msx; + keyframe_box_sy = msy; + } + } } - if(key_remove != -1) - prop.removeKeyframe(key_remove); - if(prop.node.anim_show) { - if(prop.value.show_graph) - key_y += graph_h + 8; - - key_y += 18; + if(FOCUS == panel && mouse_check_button_pressed(mb_right)) { + if(!ds_list_empty(keyframe_selecting)) { + dialogCall(o_dialog_menubox, mouse_mx + 8, mouse_my + 8) + .setMenu(keyframe_menu); + } } - } - #endregion - - #region keyframes - if(keyframe_dragging && prop_selecting) { - key_holding = keyframe_dragging; - if(keyframe_drag_type == KEYFRAME_DRAG_TYPE.move) { - var tt = clamp(round((mx - bar_x) / timeline_scale) + timeline_shift, 0, ANIMATOR.frames_total); - keyframe_dragging.time = floor(tt); - timeline_show_time = floor(tt); - - var _e_in = keyframe_dragging.ease_in; - var _e_ou = keyframe_dragging.ease_out; - - if(mouse_check_button_released(mb_left)) { - var _index = ds_list_find_index(prop_selecting.value.values, keyframe_dragging); - ds_list_delete(prop_selecting.value.values, _index); - recordAction(ACTION_TYPE.list_delete, prop_selecting.value.values, [keyframe_dragging, _index]); - - prop_selecting.value.setValue(keyframe_dragging.value, false, keyframe_dragging.time, _e_in, _e_ou); - - keyframe_dragging = noone; - prop_selecting = noone; - } - } else { - var dx = (keyframe_dragging.time - (mx - bar_x) / timeline_scale) * timeline_scale / 64; - dx = clamp(abs(dx), 0, 0.9); - if(dx < 0.1) dx = 0; - - var _in = keyframe_dragging.ease_in; - var _ot = keyframe_dragging.ease_out; - switch(keyframe_drag_type) { - case KEYFRAME_DRAG_TYPE.ease_in : - keyframe_dragging.ease_in = dx; - break; - case KEYFRAME_DRAG_TYPE.ease_out : - keyframe_dragging.ease_out = dx; - break; - case KEYFRAME_DRAG_TYPE.ease_both : - keyframe_dragging.ease_in = dx; - keyframe_dragging.ease_out = dx; - break; - } - - if(mouse_check_button_released(mb_left)) { - recordAction(ACTION_TYPE.var_modify, keyframe_dragging, [_in, "ease_in"]); - recordAction(ACTION_TYPE.var_modify, keyframe_dragging, [_ot, "ease_out"]); + if(keyframe_dragging) { + if(keyframe_drag_type == KEYFRAME_DRAG_TYPE.move) { + var tt = clamp(round((mx - bar_x) / timeline_scale) + timeline_shift, 0, ANIMATOR.frames_total); + var sh = tt - keyframe_dragging.time; - keyframe_dragging = noone; - prop_selecting = noone; + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + var kt = k.time + sh; + + k.anim.setKeyTime(k, kt, false); + } + + timeline_show_time = floor(tt); + + if(mouse_check_button_released(mb_left)) { + keyframe_dragging = noone; + + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.anim.setKeyTime(k, k.time); + } + } + } else { + var dx = (keyframe_dragging.time - (mx - bar_x) / timeline_scale) / 2; + dx = clamp(abs(dx), 0, 0.9); + if(dx < 0.1) dx = 0; + + var _in = keyframe_dragging.ease_in; + var _ot = keyframe_dragging.ease_out; + switch(keyframe_drag_type) { + case KEYFRAME_DRAG_TYPE.ease_in : + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_in = dx; + } + break; + case KEYFRAME_DRAG_TYPE.ease_out : + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_out = dx; + } + break; + case KEYFRAME_DRAG_TYPE.ease_both : + for( var i = 0; i < ds_list_size(keyframe_selecting); i++ ) { + var k = keyframe_selecting[| i]; + k.ease_in = dx; + k.ease_out = dx; + } + break; + } + + if(mouse_check_button_released(mb_left)) { + recordAction(ACTION_TYPE.var_modify, keyframe_dragging, [_in, "ease_in"]); + recordAction(ACTION_TYPE.var_modify, keyframe_dragging, [_ot, "ease_out"]); + + keyframe_dragging = noone; + } } } - } + #endregion + + #region stagger + if(stagger_mode == 2) { + var ts = keyframe_selecting[| stagger_index].time; + var tm = clamp(round((mx - bar_x) / timeline_scale) + timeline_shift, 0, ANIMATOR.frames_total); + + var stg = tm - ts; + staggerKeys(stagger_index, stg); + } + #endregion #endregion gpu_set_blendmode(bm_subtract); @@ -611,8 +838,8 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { if(FOCUS == panel && mouse_check_button_pressed(mb_left)) { var _t = -1; - for(var j = 0; j < ds_list_size(prop.value.values); j++) { - var _key = prop.value.values[| j]; + for(var j = 0; j < ds_list_size(prop.animator.values); j++) { + var _key = prop.animator.values[| j]; if(_key.time < ANIMATOR.current_frame) { _t = _key.time; } @@ -628,8 +855,8 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { draw_sprite_ext(s_prop_keyframe, 2, tx, ty, 1, 1, 0, c_ui_blue_white, 1); if(FOCUS == panel && mouse_check_button_pressed(mb_left)) { - for(var j = 0; j < ds_list_size(prop.value.values); j++) { - var _key = prop.value.values[| j]; + for(var j = 0; j < ds_list_size(prop.animator.values); j++) { + var _key = prop.animator.values[| j]; if(_key.time > ANIMATOR.current_frame) { ANIMATOR.real_frame = _key.time; ANIMATOR.is_scrubing = true; @@ -646,20 +873,20 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { if(FOCUS == panel && mouse_check_button_pressed(mb_left)) { var _add = false; - for(var j = 0; j < ds_list_size(prop.value.values); j++) { - var _key = prop.value.values[| j]; + for(var j = 0; j < ds_list_size(prop.animator.values); j++) { + var _key = prop.animator.values[| j]; if(_key.time == ANIMATOR.current_frame) { - if(ds_list_size(prop.value.values) > 1) - ds_list_delete(prop.value.values, j); + if(ds_list_size(prop.animator.values) > 1) + ds_list_delete(prop.animator.values, j); _add = true; break; } else if(_key.time > ANIMATOR.current_frame) { - ds_list_insert(prop.value.values, j, new valueKey(ANIMATOR.current_frame, prop.getValue())); + ds_list_insert(prop.animator.values, j, new valueKey(ANIMATOR.current_frame, prop.getValue(), prop.animator)); _add = true; break; } } - if(!_add) ds_list_add(prop.value.values, new valueKey(ANIMATOR.current_frame, prop.getValue())); + if(!_add) ds_list_add(prop.animator.values, new valueKey(ANIMATOR.current_frame, prop.getValue(), prop.animator)); } } else draw_sprite_ext(s_prop_keyframe, 1, tx, ty, 1, 1, 0, c_ui_orange, 1); @@ -667,14 +894,14 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { if(isGraphable(prop.type)) { var tx = tool_width - 68 - 16 * 0; if(HOVER == panel && point_in_circle(msx, msy, tx, ty, 8)) { - draw_sprite_ext(s_timeline_graph, 1, tx, ty, 1, 1, 0, prop.value.show_graph? c_ui_orange_light : c_ui_blue_white, 1); + draw_sprite_ext(s_timeline_graph, 1, tx, ty, 1, 1, 0, prop.animator.show_graph? c_ui_orange_light : c_ui_blue_white, 1); TOOLTIP = "Show graph"; if(FOCUS == panel && mouse_check_button_pressed(mb_left)) { - prop.value.show_graph = !prop.value.show_graph; + prop.animator.show_graph = !prop.animator.show_graph; } } else - draw_sprite_ext(s_timeline_graph, 1, tx, ty, 1, 1, 0, prop.value.show_graph? c_ui_orange : c_ui_blue_grey, 1); + draw_sprite_ext(s_timeline_graph, 1, tx, ty, 1, 1, 0, prop.animator.show_graph? c_ui_orange : c_ui_blue_grey, 1); } var tx = tool_width - 72 - 16 * 4.5; @@ -692,7 +919,7 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { draw_sprite_ext(s_timeline_clock, 1, 22, key_y - 1, 1, 1, 0, c_ui_blue_white, 1); if(FOCUS == panel && mouse_check_button_pressed(mb_left)) { - prop.value.is_anim = !prop.value.is_anim; + prop.animator.is_anim = !prop.animator.is_anim; updatePropertyList(); } } else @@ -701,7 +928,7 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { draw_set_color(c_ui_blue_white); draw_text(32, key_y, prop.name); - if(prop.value.show_graph) + if(prop.animator.show_graph) key_y += graph_h + 8; key_y += 18; @@ -760,25 +987,23 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { var inspecting = PANEL_INSPECTOR.inspecting; if(inspecting && inspecting.use_cache) { - #region cache - for(var i = 0; i < ANIMATOR.frames_total; i++) { - if(i >= array_length(inspecting.cached_output)) { + for(var i = 0; i < ANIMATOR.frames_total; i++) { + if(i >= array_length(inspecting.cached_output)) { + //?? + } else { + var x0 = i * timeline_scale + timeline_shift; + var x1 = (i + 1) * timeline_scale + timeline_shift; - } else { - var x0 = i * timeline_scale + timeline_shift; - var x1 = (i + 1) * timeline_scale + timeline_shift; - - var sh = inspecting.cached_output[i]; - if(is_surface(sh)) - draw_set_color(c_lime); - else - draw_set_color(c_red); - draw_set_alpha(0.5); - draw_rectangle(x0, bar_h - 4, x1, bar_h, false); - draw_set_alpha(1); - } + var sh = inspecting.cached_output[i]; + if(is_surface(sh)) + draw_set_color(c_lime); + else + draw_set_color(c_red); + draw_set_alpha(0.5); + draw_rectangle(x0, bar_h - 4, x1, bar_h, false); + draw_set_alpha(1); } - #endregion + } } #endregion @@ -788,14 +1013,16 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { for( var i = 0; i < ds_list_size(anim_properties); i++ ) { var prop = anim_properties[| i]; - for(var k = 0; k < ds_list_size(prop.value.values); k++) { - var t = prop.value.values[| k].time * timeline_scale + timeline_shift; + for(var k = 0; k < ds_list_size(prop.animator.values); k++) { + var t = prop.animator.values[| k].time * timeline_scale + timeline_shift; draw_sprite_ext(s_timeline_keyframe, 1, t, key_y, 1, 1, 0, c_ui_blue_grey, 1); } } #endregion #region pan zoom + timeline_shift = lerp_float(timeline_shift, timeline_shift_to, 5); + if(timeline_scubbing) { ANIMATOR.real_frame = clamp((mx - bar_x) / timeline_scale + timeline_shift, 0, ANIMATOR.frames_total); timeline_show_time = ANIMATOR.current_frame; @@ -809,34 +1036,51 @@ function Panel_Animation(_panel) : PanelContent(_panel) constructor { timeline_scubbing = false; } if(timeline_dragging) { - timeline_shift = clamp(timeline_drag_sx + mx - timeline_drag_mx, -max(bar_total_w - bar_w, 0), 0); + timeline_shift_to = clamp(timeline_drag_sx + mx - timeline_drag_mx, -max(bar_total_w - bar_w, 0), 0); + timeline_shift = timeline_shift_to; dope_sheet_y_to = clamp(timeline_drag_sy + my - timeline_drag_my, -dope_sheet_y_max, 0); if(mouse_check_button_released(mb_middle)) timeline_dragging = false; } - - if(HOVER == panel && point_in_rectangle(mx, my, bar_x, 8, bar_x + bar_w, h - 8)) { - if(mouse_wheel_down()) { - timeline_scale = max(timeline_scale - 1, 1); - timeline_shift = 0; - } - if(mouse_wheel_up()) { - timeline_scale = min(timeline_scale + 1, 24); - timeline_shift = 0; + + if(HOVER == panel) { + if(point_in_rectangle(mx, my, bar_x, 16, bar_x + bar_w, bar_y - 8)) { + if(mouse_wheel_down()) { + timeline_scale = max(timeline_scale - 1, 1); + timeline_shift_to = 0; + } + + if(mouse_wheel_up()) { + timeline_scale = min(timeline_scale + 1, 24); + timeline_shift_to = 0; + } + + if(mouse_check_button_pressed(mb_middle)) { + timeline_dragging = true; + + timeline_drag_sx = timeline_shift; + timeline_drag_sy = dope_sheet_y_to; + timeline_drag_mx = mx; + timeline_drag_my = my; + } } - if(mouse_check_button_pressed(mb_middle)) { - timeline_dragging = true; - - timeline_drag_sx = timeline_shift; - timeline_drag_sy = dope_sheet_y_to; - timeline_drag_mx = mx; - timeline_drag_my = my; + if(point_in_rectangle(mx, my, bar_x, bar_y, bar_x + bar_w, bar_y + bar_h)) { + if(mouse_wheel_down()) + timeline_shift_to = clamp(timeline_shift_to - 64, -max(bar_total_w - bar_w, 0), 0); + if(mouse_wheel_up()) + timeline_shift_to = clamp(timeline_shift_to + 64, -max(bar_total_w - bar_w, 0), 0); + + if(FOCUS == panel && mouse_check_button_pressed(mb_left)) { + timeline_scubbing = true; + timeline_scub_st = ANIMATOR.current_frame; + _scrub_frame = timeline_scub_st; + } } - if(FOCUS == panel && mouse_check_button_pressed(mb_left)) { - if(key_holding == noone) { + if(point_in_rectangle(mx, my, bar_x, 8, bar_x + bar_w, 8 + 16)) { + if(FOCUS == panel && mouse_check_button_pressed(mb_left)) { timeline_scubbing = true; timeline_scub_st = ANIMATOR.current_frame; _scrub_frame = timeline_scub_st; diff --git a/scripts/panel_graph/panel_graph.gml b/scripts/panel_graph/panel_graph.gml index 43d5a546a..32dfc0bcc 100644 --- a/scripts/panel_graph/panel_graph.gml +++ b/scripts/panel_graph/panel_graph.gml @@ -627,7 +627,7 @@ function Panel_Graph(_panel) : PanelContent(_panel) constructor { function doCompose() { if(ds_list_empty(nodes_select_list)) return; - var cx = 0; + var cx = -99999; var cy = 0; for(var i = 0; i < ds_list_size(nodes_select_list); i++) { diff --git a/scripts/panel_inspector/panel_inspector.gml b/scripts/panel_inspector/panel_inspector.gml index aa7bfdab2..3b21fe4d5 100644 --- a/scripts/panel_inspector/panel_inspector.gml +++ b/scripts/panel_inspector/panel_inspector.gml @@ -1,3 +1,8 @@ +function Inspector_Custom_Renderer(draw) constructor { + h = 64; + self.draw = draw; +} + function Panel_Inspector(_panel) : PanelContent(_panel) constructor { context_str = "Inspector"; @@ -20,8 +25,8 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { if(inspecting) inspecting.name = txt; }) - addHotkey("Inspector", "Copy property", "C", MOD_KEY.ctrl, function() {propSelectCopy(); }); - addHotkey("Inspector", "Paste property", "V", MOD_KEY.ctrl, function() {propSelectPaste(); }); + addHotkey("Inspector", "Copy property", "C", MOD_KEY.ctrl, function() { propSelectCopy(); }); + addHotkey("Inspector", "Paste property", "V", MOD_KEY.ctrl, function() { propSelectPaste(); }); contentPane = new scrollPane(content_w, content_h, function(_y, _m) { var con_w = contentPane.surface_w; @@ -38,7 +43,7 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { inspecting.inspecting = true; prop_hover = noone; var jun; - var amo = inspecting.input_display_list == -1? ds_list_size(inspecting.inputs) : max(ds_list_size(inspecting.inputs), array_length(inspecting.input_display_list)); + var amo = inspecting.input_display_list == -1? ds_list_size(inspecting.inputs) : array_length(inspecting.input_display_list); var hh = 16; for(var i = 0; i < amo; i++) { @@ -48,16 +53,16 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { if(inspecting.input_display_list == -1) { jun = inspecting.inputs[| i]; } else { - var jun_list_arr = inspecting.input_display_list[i]; - if(is_array(jun_list_arr)) { - var txt = jun_list_arr[0]; - var coll = jun_list_arr[1]; + var jun_disp = inspecting.input_display_list[i]; + if(is_array(jun_disp)) { + var txt = jun_disp[0]; + var coll = jun_disp[1]; if(HOVER == panel && point_in_rectangle(_m[0], _m[1], 0, yy, con_w, yy + 32)) { draw_sprite_stretched_ext(s_node_name, 0, 0, yy, con_w, 32, c_ui_blue_white, 1); if(FOCUS == panel && mouse_check_button_pressed(mb_left)) { - jun_list_arr[@ 1] = !coll; + jun_disp[@ 1] = !coll; } } else draw_sprite_stretched_ext(s_node_name, 0, 0, yy, con_w, 32, c_ui_blue_ltgrey, 1); @@ -66,7 +71,7 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { draw_set_text(f_p0, fa_left, fa_center, c_ui_blue_white); draw_text(32, yy + 32 / 2, txt); - hh += 32 + 8 + 24 * !coll; + hh += 32 + 8 + 16 * !coll; if(coll) { var j = i + 1; @@ -81,34 +86,39 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { continue; } else continue; - } else if(is_struct(jun_list_arr)) { - + } else if(is_struct(jun_disp) && instanceof(jun_disp) == "Inspector_Custom_Renderer") { + var hov = HOVER == panel; + var foc = FOCUS == panel; + jun_disp.draw(6, yy, con_w - 12, _m, hov, foc); + hh += jun_disp.h + 20; continue; } jun = inspecting.inputs[| inspecting.input_display_list[i]]; } if(!jun.show_in_inspector || jun.type == VALUE_TYPE.surface || jun.type == VALUE_TYPE.object) continue; - - var index = jun.value_from == noone? jun.value.is_anim : 2; - draw_sprite_ext(s_animate_clock, index, 16, yy, 1, 1, 0, c_white, 0.8); - if(HOVER == panel && point_in_circle(_m[0], _m[1], 16, yy, 12)) { - draw_sprite_ext(s_animate_clock, index, 16, yy, 1, 1, 0, c_white, 1); + + var butx = 16; + var index = jun.value_from == noone? jun.animator.is_anim : 2; + draw_sprite_ext(s_animate_clock, index, butx, yy, 1, 1, 0, c_white, 0.8); + if(HOVER == panel && point_in_circle(_m[0], _m[1], butx, yy, 10)) { + draw_sprite_ext(s_animate_clock, index, butx, yy, 1, 1, 0, c_white, 1); TOOLTIP = "Toggle animation"; if(mouse_check_button_pressed(mb_left)) { if(jun.value_from != noone) jun.removeFrom(); else - jun.value.is_anim = !jun.value.is_anim; + jun.animator.is_anim = !jun.animator.is_anim; PANEL_ANIMATION.updatePropertyList(); } } - + + butx += 20; index = jun.visible; - draw_sprite_ext(s_junc_visible, index, 36, yy, 1, 1, 0, c_white, 0.8); - if(HOVER == panel && point_in_circle(_m[0], _m[1], 36, yy, 12)) { - draw_sprite_ext(s_junc_visible, index, 36, yy, 1, 1, 0, c_white, 1); + draw_sprite_ext(s_junc_visible, index, butx, yy, 1, 1, 0, c_white, 0.8); + if(HOVER == panel && point_in_circle(_m[0], _m[1], butx, yy, 10)) { + draw_sprite_ext(s_junc_visible, index, butx, yy, 1, 1, 0, c_white, 1); TOOLTIP = "Visibility"; if(mouse_check_button_pressed(mb_left)) { @@ -121,12 +131,12 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { var labelStringWidth = string_width(jun.name) + 32; #region anim - if(lineBreak && jun.value.is_anim) { + if(lineBreak && jun.animator.is_anim) { var bx = w - 72; var by = yy - 12; if(buttonInstant(s_button_hide, bx, by, 24, 24, _m, FOCUS == panel, HOVER == panel, "", s_prop_keyframe, 2) == 2) { - for(var j = 0; j < ds_list_size(jun.value.values); j++) { - var _key = jun.value.values[| j]; + for(var j = 0; j < ds_list_size(jun.animator.values); j++) { + var _key = jun.animator.values[| j]; if(_key.time > ANIMATOR.current_frame) { ANIMATOR.real_frame = _key.time; ANIMATOR.is_scrubing = true; @@ -137,8 +147,8 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { bx -= 26; var cc = c_ui_blue_grey; - for(var j = 0; j < ds_list_size(jun.value.values); j++) { - if(jun.value.values[| j].time == ANIMATOR.current_frame) { + for(var j = 0; j < ds_list_size(jun.animator.values); j++) { + if(jun.animator.values[| j].time == ANIMATOR.current_frame) { cc = c_ui_orange; break; } @@ -146,27 +156,27 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { if(buttonInstant(s_button_hide, bx, by, 24, 24, _m, FOCUS == panel, HOVER == panel, cc == c_ui_blue_grey? "Add keyframe" : "Remove keyframe", s_prop_keyframe, 1, cc) == 2) { var _add = false; - for(var j = 0; j < ds_list_size(jun.value.values); j++) { - var _key = jun.value.values[| j]; + for(var j = 0; j < ds_list_size(jun.animator.values); j++) { + var _key = jun.animator.values[| j]; if(_key.time == ANIMATOR.current_frame) { - if(ds_list_size(jun.value.values) > 1) - ds_list_delete(jun.value.values, j); + if(ds_list_size(jun.animator.values) > 1) + ds_list_delete(jun.animator.values, j); _add = true; break; } else if(_key.time > ANIMATOR.current_frame) { - ds_list_insert(jun.value.values, j, new valueKey(ANIMATOR.current_frame, jun.getValue())); + ds_list_insert(jun.animator.values, j, new valueKey(ANIMATOR.current_frame, jun.getValue(), jun.animator)); _add = true; break; } } - if(!_add) ds_list_add(jun.value.values, new valueKey(ANIMATOR.current_frame, jun.getValue())); + if(!_add) ds_list_add(jun.animator.values, new valueKey(ANIMATOR.current_frame, jun.getValue(), jun.animator)); } bx -= 26; if(buttonInstant(s_button_hide, bx, by, 24, 24, _m, FOCUS == panel, HOVER == panel, "", s_prop_keyframe, 0) == 2) { var _t = -1; - for(var j = 0; j < ds_list_size(jun.value.values); j++) { - var _key = jun.value.values[| j]; + for(var j = 0; j < ds_list_size(jun.animator.values); j++) { + var _key = jun.animator.values[| j]; if(_key.time < ANIMATOR.current_frame) { _t = _key.time; } @@ -250,7 +260,8 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { widH = 200; break; case VALUE_DISPLAY.puppet_control : - jun.editWidget.draw(editBoxX, editBoxY, editBoxW, editBoxH, jun.showValue()[4], _m); + widH = jun.editWidget.draw(editBoxX, editBoxY, editBoxW, jun.showValue(), _m, 16 + x, top_bar_h + y); + padd = 48; break; } @@ -338,8 +349,8 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { [ "Reset value", function() { __dialog_junction.setValue(__dialog_junction.def_val); }], - [ __dialog_junction.value.is_anim? "Remove animation" : "Add animation", function() { - __dialog_junction.value.is_anim = !__dialog_junction.value.is_anim; + [ __dialog_junction.animator.is_anim? "Remove animation" : "Add animation", function() { + __dialog_junction.animator.is_anim = !__dialog_junction.animator.is_anim; PANEL_ANIMATION.updatePropertyList(); }], -1, @@ -386,7 +397,7 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { var bx = w - 44; var by = 12; - if(buttonInstant(s_button_hide, bx, by, 32, 32, [mx, my], FOCUS == panel, HOVER == panel, "Update node", s_refresh_24) == 2) + if(buttonInstant(s_button_hide, bx, by, 32, 32, [mx, my], FOCUS == panel, HOVER == panel, "Run node", s_sequence_control, 1) == 2) inspecting.doUpdate(); } @@ -413,6 +424,8 @@ function Panel_Inspector(_panel) : PanelContent(_panel) constructor { if(PANEL_GRAPH.node_focus && inspecting != PANEL_GRAPH.node_focus) { inspecting = PANEL_GRAPH.node_focus; + if(inspecting != noone) + inspecting.onInspect(); contentPane.scroll_y = 0; contentPane.scroll_y_to = 0; } diff --git a/scripts/panel_inspector/panel_inspector.yy b/scripts/panel_inspector/panel_inspector.yy index 2bafcd3b9..5788c778a 100644 --- a/scripts/panel_inspector/panel_inspector.yy +++ b/scripts/panel_inspector/panel_inspector.yy @@ -5,7 +5,7 @@ "isDnD": false, "isCompatibility": false, "parent": { - "name": "inspector", - "path": "folders/panels/inspector.yy", + "name": "inspectors", + "path": "folders/panels/data/inspectors.yy", }, } \ No newline at end of file diff --git a/scripts/panel_preview/panel_preview.gml b/scripts/panel_preview/panel_preview.gml index 4788ec57d..4fcf28689 100644 --- a/scripts/panel_preview/panel_preview.gml +++ b/scripts/panel_preview/panel_preview.gml @@ -400,6 +400,7 @@ function Panel_Preview(_panel) : PanelContent(_panel) constructor { if(FOCUS == panel && point_in_rectangle(mx, my, xx, yy, xx + prev_w * ss, yy + prev_h * ss)) { if(mouse_check_button_pressed(mb_left)) { _node.preview_index = i; + _node.onValueUpdate(0); do_fullView = true; } draw_surface_ext_safe(prev, xx, yy, ss, ss, 0, c_white, 1); @@ -477,9 +478,14 @@ function Panel_Preview(_panel) : PanelContent(_panel) constructor { if(toggle) { if(is_array(_node.tools[i][1])) { - if(tool_index == i) - tool_sub_index = (tool_sub_index + 1) % array_length(_node.tools[i][1]); - tool_index = i; + 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; } diff --git a/scripts/preferences/preferences.gml b/scripts/preferences/preferences.gml index c621b39a8..cb5073185 100644 --- a/scripts/preferences/preferences.gml +++ b/scripts/preferences/preferences.gml @@ -29,6 +29,9 @@ PREF_MAP[? "node_show_time"] = true; PREF_MAP[? "shape_separation_max"] = 32; + PREF_MAP[? "level_resolution"] = 64; + PREF_MAP[? "level_max_sampling"] = 32; + PREF_MAP[? "verlet_iteration"] = 4; PREF_MAP[? "collection_preview_speed"] = 60; #endregion diff --git a/sprites/s_circle_12/6423615f-5917-453e-9374-1bcfd05b6a25.png b/sprites/s_circle_12/6423615f-5917-453e-9374-1bcfd05b6a25.png new file mode 100644 index 0000000000000000000000000000000000000000..4306dda57c740121acbe61916fd2a6c82a6620d5 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a)4d`}n0kcv6UKmY%?XVz?JRk<2r z!ou*8MPXX|CwZnqMuGeT%NUnb*v?{9=vCP0FhebcS7CBtBj*j119KXAPb3!$1vapD z@_tgdqhi7^>F@;xF5VJ<<F@;xF5VJ<<",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"2ad68a56-8352-49fc-8539-ea6d6a8ef953","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"6423615f-5917-453e-9374-1bcfd05b6a25","path":"sprites/s_circle_12/s_circle_12.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, + ], + "visibleRange": {"x":0.0,"y":0.0,}, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 6, + "yorigin": 6, + "eventToFunction": {}, + "eventStubScript": null, + }, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"794700ff-a9f8-465d-80a1-4c6a34f7aac0","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + ], + "nineSlice": null, + "parent": { + "name": "icon", + "path": "folders/sprites/icon.yy", + }, +} \ No newline at end of file diff --git a/sprites/s_circle_16/ac00e22e-05e7-4497-8a94-6635a0274a05.png b/sprites/s_circle_16/ac00e22e-05e7-4497-8a94-6635a0274a05.png new file mode 100644 index 0000000000000000000000000000000000000000..46fc98d5931ee735544d6ce74db09d31ba311072 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`i#%N%Ln`JhofOF1V8G+@^TvN2 zA10v*4a^gaJSR7>sGK<@(j%vNGKfoL#}lE5s(ju#tGAZbKdD=)&(J7yQu*fRNJVwK z^W_cm_Lv-Wu9z=jH6ff=K<|*ymJhCxOply*v?i2IYq%(2ch<^r+o|jZ|DvsGK<@(j%vNGKfoL#}lE5s(ju#tGAZbKdD=)&(J7yQu*fRNJVwK z^W_cm_Lv-Wu9z=jH6ff=K<|*ymJhCxOply*v?i2IYq%(2ch<^r+o|jZ|Dv",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"f266384d-8f82-423d-8e8b-ffa7fd515244","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"ac00e22e-05e7-4497-8a94-6635a0274a05","path":"sprites/s_circle_16/s_circle_16.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, + ], + "visibleRange": {"x":0.0,"y":0.0,}, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 8, + "yorigin": 8, + "eventToFunction": {}, + "eventStubScript": null, + }, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"9dba13e2-3c43-4d6d-85c9-38876c29da09","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + ], + "nineSlice": null, + "parent": { + "name": "icon", + "path": "folders/sprites/icon.yy", + }, +} \ No newline at end of file diff --git a/sprites/s_control_pin/5e3fb7ab-4e3e-4876-b3c9-078486766e1a.png b/sprites/s_control_pin/5e3fb7ab-4e3e-4876-b3c9-078486766e1a.png new file mode 100644 index 0000000000000000000000000000000000000000..9298cf591e4caa6ae2b0fae5bb8f352d22d7a913 GIT binary patch literal 323 zcmV-J0lfZ+P);ZS(H0y4VtXJy2&M6XMrhoC0kIZ*fYO8v$4IIyBm~O= zAl4_va8iBX0K}JoSe97BNwEL~0!THS)F7G;ZS(H0y4VtXJy2&M6XMrhoC0kIZ*fYO8v$4IIyBm~O= zAl4_va8iBX0K}JoSe97BNwEL~0!THS)F7G",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"c503bb0b-3f9b-4825-a0bd-1e1c93c4ecab","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"5e3fb7ab-4e3e-4876-b3c9-078486766e1a","path":"sprites/s_control_pin/s_control_pin.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, + ], + "visibleRange": {"x":0.0,"y":0.0,}, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 12, + "yorigin": 12, + "eventToFunction": {}, + "eventStubScript": null, + }, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"b390e3b7-b72a-469f-bebf-9fa706f64a16","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + ], + "nineSlice": null, + "parent": { + "name": "tools", + "path": "folders/sprites/tools.yy", + }, +} \ No newline at end of file diff --git a/sprites/s_control_unpin/e2965e71-8c59-458a-8945-aef69af2f1a4.png b/sprites/s_control_unpin/e2965e71-8c59-458a-8945-aef69af2f1a4.png new file mode 100644 index 0000000000000000000000000000000000000000..2244dfac4f43de199050d29d4864638423f0e872 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjpFCY0Ln`JZ|NQ^oo>`ZXyY-i7 zg9T%UKEp@0sK@~RRCT70Oj*$%7&`2k4DAKZw|D6-SjNg1a5$0Su#lIIhl9}s#_6g$ zA!ag%g~X&J`f@lgipek}RV&zWEdAK%mT{+naidsG!=)CU;~uMYR9H?kDqK@PS`bwG zpy9aCnzqSFjCS4yQhZEHmM!9s&=EYaym3y-FUGS%tD+lnIvKav9OBf_)UtD^J?Jon zHUCg8(}Iad`E?bUUBdDdGZ-$4DM<1${kg#9(lAR*L40?D-Gy*2hj^O>(^xljF`rw0 vrJ#gc=)&WMpu>SW47;XjCH7rrieh94PqLX*uu^aX(Dw|Uu6{1-oD!M<30Y`ZXyY-i7 zg9T%UKEp@0sK@~RRCT70Oj*$%7&`2k4DAKZw|D6-SjNg1a5$0Su#lIIhl9}s#_6g$ zA!ag%g~X&J`f@lgipek}RV&zWEdAK%mT{+naidsG!=)CU;~uMYR9H?kDqK@PS`bwG zpy9aCnzqSFjCS4yQhZEHmM!9s&=EYaym3y-FUGS%tD+lnIvKav9OBf_)UtD^J?Jon zHUCg8(}Iad`E?bUUBdDdGZ-$4DM<1${kg#9(lAR*L40?D-Gy*2hj^O>(^xljF`rw0 vrJ#gc=)&WMpu>SW47;XjCH7rrieh94PqLX*uu^aX(Dw|Uu6{1-oD!M<30Y",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"4fe17b7e-6e06-404e-b7a4-7854c414b3d9","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"e2965e71-8c59-458a-8945-aef69af2f1a4","path":"sprites/s_control_unpin/s_control_unpin.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, + ], + "visibleRange": {"x":0.0,"y":0.0,}, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 12, + "yorigin": 12, + "eventToFunction": {}, + "eventStubScript": null, + }, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"08994959-dcdd-4b21-b956-e70eef200465","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + ], + "nineSlice": null, + "parent": { + "name": "tools", + "path": "folders/sprites/tools.yy", + }, +} \ No newline at end of file diff --git a/sprites/s_hamburger_16/75110183-e53f-42ea-84e7-7f16f90c2d1a.png b/sprites/s_hamburger_16/75110183-e53f-42ea-84e7-7f16f90c2d1a.png new file mode 100644 index 0000000000000000000000000000000000000000..aa72a82786a78feeeec2d12febb003303e4bfe77 GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`7M?DSAr*6yfBye(&#crTJgHcQ$Sewgjqw9_>bP0l+XkK)CM9b literal 0 HcmV?d00001 diff --git a/sprites/s_hamburger_16/layers/75110183-e53f-42ea-84e7-7f16f90c2d1a/b2bb01cb-dccd-4cd7-80d5-24a272de46e9.png b/sprites/s_hamburger_16/layers/75110183-e53f-42ea-84e7-7f16f90c2d1a/b2bb01cb-dccd-4cd7-80d5-24a272de46e9.png new file mode 100644 index 0000000000000000000000000000000000000000..aa72a82786a78feeeec2d12febb003303e4bfe77 GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`7M?DSAr*6yfBye(&#crTJgHcQ$Sewgjqw9_>bP0l+XkK)CM9b literal 0 HcmV?d00001 diff --git a/sprites/s_hamburger_16/s_hamburger_16.yy b/sprites/s_hamburger_16/s_hamburger_16.yy new file mode 100644 index 000000000..0af7c94ef --- /dev/null +++ b/sprites/s_hamburger_16/s_hamburger_16.yy @@ -0,0 +1,73 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_hamburger_16", + "bboxMode": 0, + "collisionKind": 1, + "type": 0, + "origin": 4, + "preMultiplyAlpha": false, + "edgeFiltering": false, + "collisionTolerance": 0, + "swfPrecision": 2.525, + "bbox_left": 2, + "bbox_right": 13, + "bbox_top": 3, + "bbox_bottom": 12, + "HTile": false, + "VTile": false, + "For3D": false, + "width": 16, + "height": 16, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "swatchColours": null, + "gridX": 0, + "gridY": 0, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"75110183-e53f-42ea-84e7-7f16f90c2d1a",}, + ], + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_hamburger_16", + "timeUnits": 1, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "autoRecord": true, + "volume": 1.0, + "length": 1.0, + "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"a7134dc0-a9d3-451f-8f00-5f84e4ae199a","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"75110183-e53f-42ea-84e7-7f16f90c2d1a","path":"sprites/s_hamburger_16/s_hamburger_16.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, + ], + "visibleRange": {"x":0.0,"y":0.0,}, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 8, + "yorigin": 8, + "eventToFunction": {}, + "eventStubScript": null, + }, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"b2bb01cb-dccd-4cd7-80d5-24a272de46e9","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + ], + "nineSlice": null, + "parent": { + "name": "inspector", + "path": "folders/sprites/inspector.yy", + }, +} \ No newline at end of file diff --git a/sprites/s_timeline_clock/s_timeline_clock.yy b/sprites/s_timeline_clock/s_timeline_clock.yy index 5953ad578..7e3640714 100644 --- a/sprites/s_timeline_clock/s_timeline_clock.yy +++ b/sprites/s_timeline_clock/s_timeline_clock.yy @@ -67,7 +67,7 @@ ], "nineSlice": null, "parent": { - "name": "icon", - "path": "folders/sprites/icon.yy", + "name": "timeline", + "path": "folders/sprites/timeline.yy", }, } \ No newline at end of file diff --git a/sprites/s_timeline_ease/24290950-35fc-4ecc-ba0d-649f84bd31cc.png b/sprites/s_timeline_ease/24290950-35fc-4ecc-ba0d-649f84bd31cc.png new file mode 100644 index 0000000000000000000000000000000000000000..56318a6d0964302b169e6e7c700d608adcfcf8be GIT binary patch literal 349 zcmV-j0iyniP)kWcH5QP1~f9(J}kPf5+?LcinslX5`AlHCcfm(r-fE`$ZR)8~cNbo@-aA)EslU?q@ ze)rt-ilXSbG|y@Fp97Z5O$s-I&d>o$j9Fi;0V+0wrvvVS|4f0WR{P?gx+UL~Tdat;_}>fKD%c z1Wf>50Ft%^T;==nJI#WYs0t@6F@Rhe1I*(jm7ix7#?n|IgR%lwz^xygxTbASSQo$! v8esHqx0!921^b_@5x_hz%UAvX|LETVTB>vRZ|^z(00000NkvXXu0mjfr!tSy literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_ease/28ea8a9d-44bd-46ed-9942-6ba74ffd0726.png b/sprites/s_timeline_ease/28ea8a9d-44bd-46ed-9942-6ba74ffd0726.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc1736fe87a0addc5023c60c2c46445bd0e0703 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjsh%#5Ar*6yfBye(&#cSH?d!XI zH*003FLy(T4Wq5Ny6-Auh0{z*jdq${fjSJkbQnDv4ZO{f*xHWCYkCBhU%b@93*U1T8qRd(u;^ zIC@`vXZuEN+ur4jQC9bV2dq}Ffk%NVXn`I9&W1ud0L+${mJDk&MGn0r z0|>GMV#Zqo7;wlcE*2TXfU*7gL^TOX0SZgi2Dw~-Ai$K>jQghPSAZE}{K0TOBu&>2 zTAdqEDNXafY5Eg@VT18rXJRH`I)I`UpvVO%(GyzO0gO%4Reh9v)(=>OmJzW|~od!95yk){9u002ovPDHLk FV1lx%nScNQ literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_ease/layers/24290950-35fc-4ecc-ba0d-649f84bd31cc/bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png b/sprites/s_timeline_ease/layers/24290950-35fc-4ecc-ba0d-649f84bd31cc/bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png new file mode 100644 index 0000000000000000000000000000000000000000..56318a6d0964302b169e6e7c700d608adcfcf8be GIT binary patch literal 349 zcmV-j0iyniP)kWcH5QP1~f9(J}kPf5+?LcinslX5`AlHCcfm(r-fE`$ZR)8~cNbo@-aA)EslU?q@ ze)rt-ilXSbG|y@Fp97Z5O$s-I&d>o$j9Fi;0V+0wrvvVS|4f0WR{P?gx+UL~Tdat;_}>fKD%c z1Wf>50Ft%^T;==nJI#WYs0t@6F@Rhe1I*(jm7ix7#?n|IgR%lwz^xygxTbASSQo$! v8esHqx0!921^b_@5x_hz%UAvX|LETVTB>vRZ|^z(00000NkvXXu0mjfr!tSy literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_ease/layers/28ea8a9d-44bd-46ed-9942-6ba74ffd0726/bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png b/sprites/s_timeline_ease/layers/28ea8a9d-44bd-46ed-9942-6ba74ffd0726/bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc1736fe87a0addc5023c60c2c46445bd0e0703 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjsh%#5Ar*6yfBye(&#cSH?d!XI zH*003FLy(T4Wq5Ny6-Auh0{z*jdq${fjSJkbQnDv4ZO{f*xHWCYkCBhU%b@93*U1T8qRd(u;^ zIC@`vXZuEN+ur4jQC9bV2dq}Ffk%NVXn`I9&W1ud0L+${mJDk&MGn0r z0|>GMV#Zqo7;wlcE*2TXfU*7gL^TOX0SZgi2Dw~-Ai$K>jQghPSAZE}{K0TOBu&>2 zTAdqEDNXafY5Eg@VT18rXJRH`I)I`UpvVO%(GyzO0gO%4Reh9v)(=>OmJzW|~od!95yk){9u002ovPDHLk FV1lx%nScNQ literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_ease/s_timeline_ease.yy b/sprites/s_timeline_ease/s_timeline_ease.yy new file mode 100644 index 000000000..7c26c504d --- /dev/null +++ b/sprites/s_timeline_ease/s_timeline_ease.yy @@ -0,0 +1,79 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_timeline_ease", + "bboxMode": 0, + "collisionKind": 1, + "type": 0, + "origin": 4, + "preMultiplyAlpha": false, + "edgeFiltering": false, + "collisionTolerance": 0, + "swfPrecision": 2.525, + "bbox_left": 3, + "bbox_right": 20, + "bbox_top": 3, + "bbox_bottom": 22, + "HTile": false, + "VTile": false, + "For3D": false, + "width": 24, + "height": 24, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "swatchColours": null, + "gridX": 0, + "gridY": 0, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"28ea8a9d-44bd-46ed-9942-6ba74ffd0726",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"6ca25682-cb07-4b3f-b98f-993a2f6be2f2",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"24290950-35fc-4ecc-ba0d-649f84bd31cc",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"66c132f9-ae6a-429c-8cf4-30a9d47ef7a3",}, + ], + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_timeline_ease", + "timeUnits": 1, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "autoRecord": true, + "volume": 1.0, + "length": 4.0, + "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"ee0f9ed2-76e7-4da0-90a8-8f54d08ffa87","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"28ea8a9d-44bd-46ed-9942-6ba74ffd0726","path":"sprites/s_timeline_ease/s_timeline_ease.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + {"id":"00a4ab7c-dc24-46aa-92e1-cf5c34649d70","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"6ca25682-cb07-4b3f-b98f-993a2f6be2f2","path":"sprites/s_timeline_ease/s_timeline_ease.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + {"id":"9e9a2d7f-167c-45ad-9f42-ac50d2b4adc4","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"24290950-35fc-4ecc-ba0d-649f84bd31cc","path":"sprites/s_timeline_ease/s_timeline_ease.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + {"id":"bd5eaa76-9373-45a7-9b15-268475d1a531","Key":3.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"66c132f9-ae6a-429c-8cf4-30a9d47ef7a3","path":"sprites/s_timeline_ease/s_timeline_ease.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, + ], + "visibleRange": null, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 12, + "yorigin": 12, + "eventToFunction": {}, + "eventStubScript": null, + }, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"bb50a3b3-cd69-4d09-b7d9-e02fa14ec76b","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + ], + "nineSlice": null, + "parent": { + "name": "timeline", + "path": "folders/sprites/timeline.yy", + }, +} \ No newline at end of file diff --git a/sprites/s_timeline_elastic/5c54eeaa-d089-429e-a954-fbb5ccd7e7ab.png b/sprites/s_timeline_elastic/5c54eeaa-d089-429e-a954-fbb5ccd7e7ab.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3170114a1bc5e9557e814919c39d18af4fd050 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQVpIijv*Cul7IgHZ_ljSz}g|* zP{Al*?=U%-;Sr05^l}^S2`ktiF)5TWJmL=UWLB_aIPxdJ&aYBT;iKTH0_Kp33{%eX zPfb3ce!eMXmdzwyg_G?WQX5V+^Dz9>WjK3MVYXwELH*+??2-&j3X>i64vJ=2JWXV4 iVDMlNQQpB2R>>gYrWx^|#wif!76wmOKbLh*2~7Zx+&Pl~ literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_elastic/layers/5c54eeaa-d089-429e-a954-fbb5ccd7e7ab/e08dafd8-6479-4081-9f2c-f460ba81c9dd.png b/sprites/s_timeline_elastic/layers/5c54eeaa-d089-429e-a954-fbb5ccd7e7ab/e08dafd8-6479-4081-9f2c-f460ba81c9dd.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3170114a1bc5e9557e814919c39d18af4fd050 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQVpIijv*Cul7IgHZ_ljSz}g|* zP{Al*?=U%-;Sr05^l}^S2`ktiF)5TWJmL=UWLB_aIPxdJ&aYBT;iKTH0_Kp33{%eX zPfb3ce!eMXmdzwyg_G?WQX5V+^Dz9>WjK3MVYXwELH*+??2-&j3X>i64vJ=2JWXV4 iVDMlNQQpB2R>>gYrWx^|#wif!76wmOKbLh*2~7Zx+&Pl~ literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_elastic/s_timeline_elastic.yy b/sprites/s_timeline_elastic/s_timeline_elastic.yy new file mode 100644 index 000000000..32d57c358 --- /dev/null +++ b/sprites/s_timeline_elastic/s_timeline_elastic.yy @@ -0,0 +1,97 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_timeline_elastic", + "bboxMode": 0, + "collisionKind": 1, + "type": 0, + "origin": 5, + "preMultiplyAlpha": false, + "edgeFiltering": false, + "collisionTolerance": 0, + "swfPrecision": 2.525, + "bbox_left": 0, + "bbox_right": 15, + "bbox_top": 1, + "bbox_bottom": 6, + "HTile": false, + "VTile": false, + "For3D": false, + "width": 16, + "height": 8, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "swatchColours": null, + "gridX": 0, + "gridY": 0, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"5c54eeaa-d089-429e-a954-fbb5ccd7e7ab",}, + ], + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_timeline_elastic", + "timeUnits": 1, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "autoRecord": true, + "volume": 1.0, + "length": 1.0, + "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"a3732077-7d60-482b-a834-c1991ac97890","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"5c54eeaa-d089-429e-a954-fbb5ccd7e7ab","path":"sprites/s_timeline_elastic/s_timeline_elastic.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, + ], + "visibleRange": null, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 16, + "yorigin": 4, + "eventToFunction": {}, + "eventStubScript": null, + }, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"e08dafd8-6479-4081-9f2c-f460ba81c9dd","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + ], + "nineSlice": { + "left": 0, + "top": 0, + "right": 0, + "bottom": 0, + "guideColour": [ + 4294902015, + 4294902015, + 4294902015, + 4294902015, + ], + "highlightColour": 1728023040, + "highlightStyle": 0, + "enabled": true, + "tileMode": [ + 0, + 0, + 0, + 0, + 1, + ], + "resourceVersion": "1.0", + "loadedVersion": null, + "resourceType": "GMNineSliceData", + }, + "parent": { + "name": "timeline", + "path": "folders/sprites/timeline.yy", + }, +} \ No newline at end of file diff --git a/sprites/s_timeline_graph/s_timeline_graph.yy b/sprites/s_timeline_graph/s_timeline_graph.yy index bcb78ed60..0322fbda7 100644 --- a/sprites/s_timeline_graph/s_timeline_graph.yy +++ b/sprites/s_timeline_graph/s_timeline_graph.yy @@ -67,7 +67,7 @@ ], "nineSlice": null, "parent": { - "name": "icon", - "path": "folders/sprites/icon.yy", + "name": "timeline", + "path": "folders/sprites/timeline.yy", }, } \ No newline at end of file diff --git a/sprites/s_timeline_keyframe/0d0e313c-fafe-42e5-b077-c93fc064bc25.png b/sprites/s_timeline_keyframe/0d0e313c-fafe-42e5-b077-c93fc064bc25.png new file mode 100644 index 0000000000000000000000000000000000000000..a71fa7eff9c189b4fa33f7efebc5a0fcd855c7ef GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`DV{ElAr*6yfBye(&#c4u2Rr)CIB`%ovIoUD;0XSD4r> zxzfP7MB;;>uA17UtOjO*;3*Rvq&8$JU1M0pa1?0Sifq9-YBWsHFhts0?+Z!<9T?B=xn Tf9=K@pjix_u6{1-oD!M<=$j_K literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_keyframe/3d472492-94cf-4d0a-b0bb-43cad651aad9.png b/sprites/s_timeline_keyframe/3d472492-94cf-4d0a-b0bb-43cad651aad9.png new file mode 100644 index 0000000000000000000000000000000000000000..978f9db4edecd38a725097e3e0d29ce65627beb2 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`HJ&bxAr*6$PP)i@K!L;McOi4B z%G@=5N8GNdO%l-RsN$UH@?Mi8Ywh*Uf+u_o@Ah5dQ`lNjH7|OKsDscm|2fk+6f`$; zJ6_0fS|IgorfSQMjT{m&j!&-awyk!ZcAsnO$*qwS?w2POoM_@nXFTRBwaLbV=V8=# fx0|MJjKO=kp2%E3vr(}Q=ne)?S3j3^P6B>Ar*6yfBye(&#cZ(C(*~6TO|EYg zHPj^mdKI;Vst0N$TOsQ>@~ diff --git a/sprites/s_timeline_keyframe/95d975ac-a4aa-408d-adaf-5ae6140e38ff.png b/sprites/s_timeline_keyframe/95d975ac-a4aa-408d-adaf-5ae6140e38ff.png deleted file mode 100644 index edae6da1e1d923678407d8030acced20c34c036b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`UY;(FAr*6y6Bh_<=#gr;+wlMY ze{P1Aybd}1kBpfZSL!untDR;&l65Sd;UdFyM)uB9Ry}4Wi4Gq2HEaybf0-u~EjYsJ d(wvyUz`$)89416w=cp2KPlocnlS2``~W@M-j W<7}OGc3lL}I0jEwKbLh*2~7Y1R3w%F diff --git a/sprites/s_timeline_keyframe/layers/0d0e313c-fafe-42e5-b077-c93fc064bc25/b1392cea-a152-4f40-ac82-ded33d6288af.png b/sprites/s_timeline_keyframe/layers/0d0e313c-fafe-42e5-b077-c93fc064bc25/b1392cea-a152-4f40-ac82-ded33d6288af.png new file mode 100644 index 0000000000000000000000000000000000000000..a71fa7eff9c189b4fa33f7efebc5a0fcd855c7ef GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`DV{ElAr*6yfBye(&#c4u2Rr)CIB`%ovIoUD;0XSD4r> zxzfP7MB;;>uA17UtOjO*;3*Rvq&8$JU1M0pa1?0Sifq9-YBWsHFhts0?+Z!<9T?B=xn Tf9=K@pjix_u6{1-oD!M<=$j_K literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_keyframe/layers/3d472492-94cf-4d0a-b0bb-43cad651aad9/b1392cea-a152-4f40-ac82-ded33d6288af.png b/sprites/s_timeline_keyframe/layers/3d472492-94cf-4d0a-b0bb-43cad651aad9/b1392cea-a152-4f40-ac82-ded33d6288af.png new file mode 100644 index 0000000000000000000000000000000000000000..978f9db4edecd38a725097e3e0d29ce65627beb2 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`HJ&bxAr*6$PP)i@K!L;McOi4B z%G@=5N8GNdO%l-RsN$UH@?Mi8Ywh*Uf+u_o@Ah5dQ`lNjH7|OKsDscm|2fk+6f`$; zJ6_0fS|IgorfSQMjT{m&j!&-awyk!ZcAsnO$*qwS?w2POoM_@nXFTRBwaLbV=V8=# fx0|MJjKO=kp2%E3vr(}Q=ne)?S3j3^P6B>Ar*6yfBye(&#cZ(C(*~6TO|EYg zHP5b_LYin*SasZ;aSIY b`70CG6PfFuTgTe~DWM4f4G2O5 diff --git a/sprites/s_timeline_keyframe/layers/95d975ac-a4aa-408d-adaf-5ae6140e38ff/f29345e4-38e2-4f17-9134-da1226d86fa3.png b/sprites/s_timeline_keyframe/layers/95d975ac-a4aa-408d-adaf-5ae6140e38ff/f29345e4-38e2-4f17-9134-da1226d86fa3.png deleted file mode 100644 index c6c758c3fb24b016404bd41a6bc92f6ac4e3e02d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?w&4=Ar*6yfBye(&#c_RdmPJ!U3}4j%Rxwi<>ccCQ!*6A3n; Zc}&kZZoi(kcsI~U22WQ%mvv4FO#p%#BuoGR diff --git a/sprites/s_timeline_keyframe/layers/975854b1-f396-41f1-850b-daa3f8ca6c80/f29345e4-38e2-4f17-9134-da1226d86fa3.png b/sprites/s_timeline_keyframe/layers/975854b1-f396-41f1-850b-daa3f8ca6c80/f29345e4-38e2-4f17-9134-da1226d86fa3.png deleted file mode 100644 index 65741466a47c7c91e4a91130f29aeb398db00387..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`_MR?|Ar*6yfBye(&#c&t;ucLK6VT1|%>5 diff --git a/sprites/s_timeline_keyframe/layers/c22ff608-5283-4d97-8909-2024b36933e6/f29345e4-38e2-4f17-9134-da1226d86fa3.png b/sprites/s_timeline_keyframe/layers/c22ff608-5283-4d97-8909-2024b36933e6/f29345e4-38e2-4f17-9134-da1226d86fa3.png deleted file mode 100644 index ac610496d21ed3717d4ff131459ff60de3c38961..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`j-D=#Ar*6yfBye(&#cFVdQ&MBb@0J",}, "tracks": [ {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ - {"id":"69451446-354d-4403-806e-727a2a2fa4eb","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"975854b1-f396-41f1-850b-daa3f8ca6c80","path":"sprites/s_timeline_keyframe/s_timeline_keyframe.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, - {"id":"9d87d17c-89e2-4c11-9486-4a56afcc6b5f","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"918bd556-996d-49f1-8ca1-61ec18a8f49c","path":"sprites/s_timeline_keyframe/s_timeline_keyframe.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, - {"id":"5198804e-6382-47da-aa46-3244405bdbe6","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"95d975ac-a4aa-408d-adaf-5ae6140e38ff","path":"sprites/s_timeline_keyframe/s_timeline_keyframe.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, - {"id":"829b6f4c-5120-47e9-b360-45294463a498","Key":3.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"c22ff608-5283-4d97-8909-2024b36933e6","path":"sprites/s_timeline_keyframe/s_timeline_keyframe.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + {"id":"81d08e3d-5eb5-408a-892d-81e62481d374","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"391ccbea-dc4a-4f1a-a4da-ed7fb77dd32a","path":"sprites/s_timeline_keyframe/s_timeline_keyframe.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + {"id":"85cbd1c8-f6cf-4853-a959-e6782f57a855","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"3d472492-94cf-4d0a-b0bb-43cad651aad9","path":"sprites/s_timeline_keyframe/s_timeline_keyframe.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + {"id":"2a8845c6-a16c-40f1-a1d9-7340998a7f3e","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"7e409d3c-0555-4eb6-bb4e-bdcf0e885620","path":"sprites/s_timeline_keyframe/s_timeline_keyframe.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + {"id":"5f94b9fa-6783-4bc2-889b-9a5769f8fcd7","Key":3.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"0d0e313c-fafe-42e5-b077-c93fc064bc25","path":"sprites/s_timeline_keyframe/s_timeline_keyframe.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, ], "visibleRange": null, @@ -69,11 +69,11 @@ "eventStubScript": null, }, "layers": [ - {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"f29345e4-38e2-4f17-9134-da1226d86fa3","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"b1392cea-a152-4f40-ac82-ded33d6288af","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, ], "nineSlice": null, "parent": { - "name": "icon", - "path": "folders/sprites/icon.yy", + "name": "timeline", + "path": "folders/sprites/timeline.yy", }, } \ No newline at end of file diff --git a/sprites/s_timeline_keyframe_selecting/741ad96f-dd2d-4bc7-9ccf-80027d373dc5.png b/sprites/s_timeline_keyframe_selecting/741ad96f-dd2d-4bc7-9ccf-80027d373dc5.png new file mode 100644 index 0000000000000000000000000000000000000000..7d69d99de4de33b8a846af0f21e0ac35955ff0d4 GIT binary patch literal 278 zcmV+x0qOpUP)xc{?I2{-^L%)uNib5IAH6mWoqT9|_FE_qox(yuGKQ0NsXgkT!N zV(V)cQsw->={QFmubel|tp^-97tRak18sM-O*xbruq)>)dgNybB?Tt2?`Kg`U`;3~ zu_{U(SP>;OIwh7uouGuG9Z?z@EJiI#%I+ilTM%k%#T|UdC};E)!wYDzoEE$bqd;f$ zdBgb5@`hQ`pfNVV_^Cq;n#7J^E1JbpU=1x|IZ)z=N}Wl_Y-X_%7^AWR1d=%QfsN69 cgwxc{?I2{-^L%)uNib5IAH6mWoqT9|_FE_qox(yuGKQ0NsXgkT!N zV(V)cQsw->={QFmubel|tp^-97tRak18sM-O*xbruq)>)dgNybB?Tt2?`Kg`U`;3~ zu_{U(SP>;OIwh7uouGuG9Z?z@EJiI#%I+ilTM%k%#T|UdC};E)!wYDzoEE$bqd;f$ zdBgb5@`hQ`pfNVV_^Cq;n#7J^E1JbpU=1x|IZ)z=N}Wl_Y-X_%7^AWR1d=%QfsN69 cgw",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"78310ebe-afdf-4192-9ec6-f98596db075d","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"741ad96f-dd2d-4bc7-9ccf-80027d373dc5","path":"sprites/s_timeline_keyframe_selecting/s_timeline_keyframe_selecting.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, + ], + "visibleRange": null, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 10, + "yorigin": 10, + "eventToFunction": {}, + "eventStubScript": null, + }, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"8ed37eb2-3476-40db-aba9-295147fd14b5","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + ], + "nineSlice": null, + "parent": { + "name": "timeline", + "path": "folders/sprites/timeline.yy", + }, +} \ No newline at end of file diff --git a/sprites/s_timeline_obj_halign/05642409-4457-4bd4-b39b-04909166c96e.png b/sprites/s_timeline_obj_halign/05642409-4457-4bd4-b39b-04909166c96e.png new file mode 100644 index 0000000000000000000000000000000000000000..27ff84de97a1b894ac42edea78b16b095846b838 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjyFFbTLn`JZ|NQ^oo>`ZX+t*k9 zYSW%QYK#K5nL&5iqkbkZPT^ZHm6b_lm3oe2T%7QUs~mo7MV^5{tVjR%lux^rfZky6boFyt=akR{0I-!*rT_o{ literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_obj_halign/76ba7dd8-2350-4cf2-8e55-30a0ff94cd33.png b/sprites/s_timeline_obj_halign/76ba7dd8-2350-4cf2-8e55-30a0ff94cd33.png new file mode 100644 index 0000000000000000000000000000000000000000..674b86ecbc3e36391dacd26c7f63e87ce89d3009 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjO`a}}Ar*6yfBye(&#cSH?d!X| zm9?_cms6qY(vn@QTRu55O<6XRRimNR<-I;b&_|0U;!Mq|jY`}fB={yTzQHu<;EBx% ziu*j4-DvWh5Yi+#v01<4(}(5dY*|m3gLvCtN}gq3!YpQV$(s4-&xSc)>{7b8k{C4j k4>DfWWnk0K)pcNJu=1C0VpCz01GB_nRv!wCF_L{rxKS*IgF-^+>$>Vmh5S~$|S_wzEb@pNSWYF{(_bAj6V|? keRXHJJl!R6m??^pq0~UWsb-;(7tlcrp00i_>zopr0Fy^M{Qv*} literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_obj_halign/layers/05642409-4457-4bd4-b39b-04909166c96e/a4e7b7c2-58c3-44c3-9861-16a307950bab.png b/sprites/s_timeline_obj_halign/layers/05642409-4457-4bd4-b39b-04909166c96e/a4e7b7c2-58c3-44c3-9861-16a307950bab.png new file mode 100644 index 0000000000000000000000000000000000000000..27ff84de97a1b894ac42edea78b16b095846b838 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjyFFbTLn`JZ|NQ^oo>`ZX+t*k9 zYSW%QYK#K5nL&5iqkbkZPT^ZHm6b_lm3oe2T%7QUs~mo7MV^5{tVjR%lux^rfZky6boFyt=akR{0I-!*rT_o{ literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_obj_halign/layers/76ba7dd8-2350-4cf2-8e55-30a0ff94cd33/a4e7b7c2-58c3-44c3-9861-16a307950bab.png b/sprites/s_timeline_obj_halign/layers/76ba7dd8-2350-4cf2-8e55-30a0ff94cd33/a4e7b7c2-58c3-44c3-9861-16a307950bab.png new file mode 100644 index 0000000000000000000000000000000000000000..674b86ecbc3e36391dacd26c7f63e87ce89d3009 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjO`a}}Ar*6yfBye(&#cSH?d!X| zm9?_cms6qY(vn@QTRu55O<6XRRimNR<-I;b&_|0U;!Mq|jY`}fB={yTzQHu<;EBx% ziu*j4-DvWh5Yi+#v01<4(}(5dY*|m3gLvCtN}gq3!YpQV$(s4-&xSc)>{7b8k{C4j k4>DfWWnk0K)pcNJu=1C0VpCz01GB_nRv!wCF_L{rxKS*IgF-^+>$>Vmh5S~$|S_wzEb@pNSWYF{(_bAj6V|? keRXHJJl!R6m??^pq0~UWsb-;(7tlcrp00i_>zopr0Fy^M{Qv*} literal 0 HcmV?d00001 diff --git a/sprites/s_timeline_obj_halign/s_timeline_obj_halign.yy b/sprites/s_timeline_obj_halign/s_timeline_obj_halign.yy new file mode 100644 index 000000000..9592c50b2 --- /dev/null +++ b/sprites/s_timeline_obj_halign/s_timeline_obj_halign.yy @@ -0,0 +1,77 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_timeline_obj_halign", + "bboxMode": 0, + "collisionKind": 1, + "type": 0, + "origin": 4, + "preMultiplyAlpha": false, + "edgeFiltering": false, + "collisionTolerance": 0, + "swfPrecision": 2.525, + "bbox_left": 2, + "bbox_right": 21, + "bbox_top": 2, + "bbox_bottom": 22, + "HTile": false, + "VTile": false, + "For3D": false, + "width": 24, + "height": 24, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "swatchColours": null, + "gridX": 0, + "gridY": 0, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"98c65aaa-7697-4845-8eb1-c1d4c4191cba",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"05642409-4457-4bd4-b39b-04909166c96e",}, + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"76ba7dd8-2350-4cf2-8e55-30a0ff94cd33",}, + ], + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_timeline_obj_halign", + "timeUnits": 1, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "autoRecord": true, + "volume": 1.0, + "length": 3.0, + "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"1b8b15c9-75b5-4e28-bd3c-8b56c260049e","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"98c65aaa-7697-4845-8eb1-c1d4c4191cba","path":"sprites/s_timeline_obj_halign/s_timeline_obj_halign.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + {"id":"a6393c16-0f13-46f0-8379-9a1a70b82bea","Key":1.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"05642409-4457-4bd4-b39b-04909166c96e","path":"sprites/s_timeline_obj_halign/s_timeline_obj_halign.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + {"id":"59cf6d31-0727-45a3-ad63-414338dc8f9e","Key":2.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"76ba7dd8-2350-4cf2-8e55-30a0ff94cd33","path":"sprites/s_timeline_obj_halign/s_timeline_obj_halign.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, + ], + "visibleRange": null, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 12, + "yorigin": 12, + "eventToFunction": {}, + "eventStubScript": null, + }, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"a4e7b7c2-58c3-44c3-9861-16a307950bab","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + ], + "nineSlice": null, + "parent": { + "name": "timeline", + "path": "folders/sprites/timeline.yy", + }, +} \ No newline at end of file