spout, keyframe driver

This commit is contained in:
Tanasart 2023-12-18 10:40:21 +07:00
parent bf13b435dd
commit 4960e55cc4
56 changed files with 1204 additions and 323 deletions

View file

@ -127,6 +127,8 @@
{"name":"lua","order":12,"path":"folders/nodes/data/lua.yy",}, {"name":"lua","order":12,"path":"folders/nodes/data/lua.yy",},
{"name":"misc","order":10,"path":"folders/nodes/data/misc.yy",}, {"name":"misc","order":10,"path":"folders/nodes/data/misc.yy",},
{"name":"MK effects","order":24,"path":"folders/nodes/data/MK effects.yy",}, {"name":"MK effects","order":24,"path":"folders/nodes/data/MK effects.yy",},
{"name":"mk sparkle","order":8,"path":"folders/nodes/data/MK effects/mk sparkle.yy",},
{"name":"src","order":1,"path":"folders/nodes/data/MK effects/mk sparkle/src.yy",},
{"name":"PCX","order":15,"path":"folders/nodes/data/PCX.yy",}, {"name":"PCX","order":15,"path":"folders/nodes/data/PCX.yy",},
{"name":"array","order":6,"path":"folders/nodes/data/PCX/array.yy",}, {"name":"array","order":6,"path":"folders/nodes/data/PCX/array.yy",},
{"name":"flow control","order":7,"path":"folders/nodes/data/PCX/flow control.yy",}, {"name":"flow control","order":7,"path":"folders/nodes/data/PCX/flow control.yy",},
@ -346,6 +348,7 @@
{"name":"s_biterator_knob","order":5,"path":"sprites/s_biterator_knob/s_biterator_knob.yy",}, {"name":"s_biterator_knob","order":5,"path":"sprites/s_biterator_knob/s_biterator_knob.yy",},
{"name":"array_functions","order":2,"path":"scripts/array_functions/array_functions.yy",}, {"name":"array_functions","order":2,"path":"scripts/array_functions/array_functions.yy",},
{"name":"sh_blur_final","order":2,"path":"shaders/sh_blur_final/sh_blur_final.yy",}, {"name":"sh_blur_final","order":2,"path":"shaders/sh_blur_final/sh_blur_final.yy",},
{"name":"s_node_spout","order":23,"path":"sprites/s_node_spout/s_node_spout.yy",},
{"name":"sh_fd_visualize_velocity_glsl","order":19,"path":"shaders/sh_fd_visualize_velocity_glsl/sh_fd_visualize_velocity_glsl.yy",}, {"name":"sh_fd_visualize_velocity_glsl","order":19,"path":"shaders/sh_fd_visualize_velocity_glsl/sh_fd_visualize_velocity_glsl.yy",},
{"name":"node_3d_mesh_terrain","order":9,"path":"scripts/node_3d_mesh_terrain/node_3d_mesh_terrain.yy",}, {"name":"node_3d_mesh_terrain","order":9,"path":"scripts/node_3d_mesh_terrain/node_3d_mesh_terrain.yy",},
{"name":"fd_rectangle_set_material_time_step","order":8,"path":"scripts/fd_rectangle_set_material_time_step/fd_rectangle_set_material_time_step.yy",}, {"name":"fd_rectangle_set_material_time_step","order":8,"path":"scripts/fd_rectangle_set_material_time_step/fd_rectangle_set_material_time_step.yy",},
@ -624,6 +627,7 @@
{"name":"Obj_FirebaseFirestore_Document_Delete","order":3,"path":"objects/Obj_FirebaseFirestore_Document_Delete/Obj_FirebaseFirestore_Document_Delete.yy",}, {"name":"Obj_FirebaseFirestore_Document_Delete","order":3,"path":"objects/Obj_FirebaseFirestore_Document_Delete/Obj_FirebaseFirestore_Document_Delete.yy",},
{"name":"node_module_test","order":19,"path":"scripts/node_module_test/node_module_test.yy",}, {"name":"node_module_test","order":19,"path":"scripts/node_module_test/node_module_test.yy",},
{"name":"s_node_shadow","order":36,"path":"sprites/s_node_shadow/s_node_shadow.yy",}, {"name":"s_node_shadow","order":36,"path":"sprites/s_node_shadow/s_node_shadow.yy",},
{"name":"Spout","order":14,"path":"extensions/Spout/Spout.yy",},
{"name":"s_node_grid_hex_noise","order":21,"path":"sprites/s_node_grid_hex_noise/s_node_grid_hex_noise.yy",}, {"name":"s_node_grid_hex_noise","order":21,"path":"sprites/s_node_grid_hex_noise/s_node_grid_hex_noise.yy",},
{"name":"s_node_logic_opr","order":2,"path":"sprites/s_node_logic_opr/s_node_logic_opr.yy",}, {"name":"s_node_logic_opr","order":2,"path":"sprites/s_node_logic_opr/s_node_logic_opr.yy",},
{"name":"sh_zigzag","order":11,"path":"shaders/sh_zigzag/sh_zigzag.yy",}, {"name":"sh_zigzag","order":11,"path":"shaders/sh_zigzag/sh_zigzag.yy",},
@ -760,7 +764,6 @@
{"name":"node_tile","order":4,"path":"scripts/node_tile/node_tile.yy",}, {"name":"node_tile","order":4,"path":"scripts/node_tile/node_tile.yy",},
{"name":"sh_rsh_rotate","order":1,"path":"shaders/sh_rsh_rotate/sh_rsh_rotate.yy",}, {"name":"sh_rsh_rotate","order":1,"path":"shaders/sh_rsh_rotate/sh_rsh_rotate.yy",},
{"name":"FirebaseFirestoreMainFunctions","order":1,"path":"scripts/FirebaseFirestoreMainFunctions/FirebaseFirestoreMainFunctions.yy",}, {"name":"FirebaseFirestoreMainFunctions","order":1,"path":"scripts/FirebaseFirestoreMainFunctions/FirebaseFirestoreMainFunctions.yy",},
{"name":"node_mk_sparkle","order":7,"path":"scripts/node_mk_sparkle/node_mk_sparkle.yy",},
{"name":"node_VFX_effect_destroy","order":3,"path":"scripts/node_VFX_effect_destroy/node_VFX_effect_destroy.yy",}, {"name":"node_VFX_effect_destroy","order":3,"path":"scripts/node_VFX_effect_destroy/node_VFX_effect_destroy.yy",},
{"name":"node_cache","order":9,"path":"scripts/node_cache/node_cache.yy",}, {"name":"node_cache","order":9,"path":"scripts/node_cache/node_cache.yy",},
{"name":"sh_bw","order":3,"path":"shaders/sh_bw/sh_bw.yy",}, {"name":"sh_bw","order":3,"path":"shaders/sh_bw/sh_bw.yy",},
@ -1042,6 +1045,7 @@
{"name":"s_node_print","order":30,"path":"sprites/s_node_print/s_node_print.yy",}, {"name":"s_node_print","order":30,"path":"sprites/s_node_print/s_node_print.yy",},
{"name":"sh_seperate_shape_counter","order":1,"path":"shaders/sh_seperate_shape_counter/sh_seperate_shape_counter.yy",}, {"name":"sh_seperate_shape_counter","order":1,"path":"shaders/sh_seperate_shape_counter/sh_seperate_shape_counter.yy",},
{"name":"s_node_stack","order":37,"path":"sprites/s_node_stack/s_node_stack.yy",}, {"name":"s_node_stack","order":37,"path":"sprites/s_node_stack/s_node_stack.yy",},
{"name":"s_mk_sparkle_select","order":1,"path":"sprites/s_mk_sparkle_select/s_mk_sparkle_select.yy",},
{"name":"hlsl_server","order":2,"path":"scripts/hlsl_server/hlsl_server.yy",}, {"name":"hlsl_server","order":2,"path":"scripts/hlsl_server/hlsl_server.yy",},
{"name":"s_fade_up","order":3,"path":"sprites/s_fade_up/s_fade_up.yy",}, {"name":"s_fade_up","order":3,"path":"sprites/s_fade_up/s_fade_up.yy",},
{"name":"panel_globalvar","order":2,"path":"scripts/panel_globalvar/panel_globalvar.yy",}, {"name":"panel_globalvar","order":2,"path":"scripts/panel_globalvar/panel_globalvar.yy",},
@ -1388,6 +1392,7 @@
{"name":"file_dropper","order":1,"path":"extensions/file_dropper/file_dropper.yy",}, {"name":"file_dropper","order":1,"path":"extensions/file_dropper/file_dropper.yy",},
{"name":"s_biterator_b_shape_idle","order":3,"path":"sprites/s_biterator_b_shape_idle/s_biterator_b_shape_idle.yy",}, {"name":"s_biterator_b_shape_idle","order":3,"path":"sprites/s_biterator_b_shape_idle/s_biterator_b_shape_idle.yy",},
{"name":"sh_mirror_mask","order":8,"path":"shaders/sh_mirror_mask/sh_mirror_mask.yy",}, {"name":"sh_mirror_mask","order":8,"path":"shaders/sh_mirror_mask/sh_mirror_mask.yy",},
{"name":"panel_keyframe_driver","order":2,"path":"scripts/panel_keyframe_driver/panel_keyframe_driver.yy",},
{"name":"node_export","order":9,"path":"scripts/node_export/node_export.yy",}, {"name":"node_export","order":9,"path":"scripts/node_export/node_export.yy",},
{"name":"controlPointBox","order":4,"path":"scripts/controlPointBox/controlPointBox.yy",}, {"name":"controlPointBox","order":4,"path":"scripts/controlPointBox/controlPointBox.yy",},
{"name":"sh_vertex_pt","order":5,"path":"shaders/sh_vertex_pt/sh_vertex_pt.yy",}, {"name":"sh_vertex_pt","order":5,"path":"shaders/sh_vertex_pt/sh_vertex_pt.yy",},
@ -1584,6 +1589,7 @@
{"name":"panel_history","order":7,"path":"scripts/panel_history/panel_history.yy",}, {"name":"panel_history","order":7,"path":"scripts/panel_history/panel_history.yy",},
{"name":"sh_channel_H","order":3,"path":"shaders/sh_channel_H/sh_channel_H.yy",}, {"name":"sh_channel_H","order":3,"path":"shaders/sh_channel_H/sh_channel_H.yy",},
{"name":"rotatorRandom","order":1,"path":"scripts/rotatorRandom/rotatorRandom.yy",}, {"name":"rotatorRandom","order":1,"path":"scripts/rotatorRandom/rotatorRandom.yy",},
{"name":"node_spout_send","order":19,"path":"scripts/node_spout_send/node_spout_send.yy",},
{"name":"s_node_RGB","order":34,"path":"sprites/s_node_RGB/s_node_RGB.yy",}, {"name":"s_node_RGB","order":34,"path":"sprites/s_node_RGB/s_node_RGB.yy",},
{"name":"fd_rectangle_draw","order":9,"path":"scripts/fd_rectangle_draw/fd_rectangle_draw.yy",}, {"name":"fd_rectangle_draw","order":9,"path":"scripts/fd_rectangle_draw/fd_rectangle_draw.yy",},
{"name":"FirebaseREST_Firestore_jsonEncode","order":13,"path":"scripts/FirebaseREST_Firestore_jsonEncode/FirebaseREST_Firestore_jsonEncode.yy",}, {"name":"FirebaseREST_Firestore_jsonEncode","order":13,"path":"scripts/FirebaseREST_Firestore_jsonEncode/FirebaseREST_Firestore_jsonEncode.yy",},

View file

@ -154,6 +154,8 @@
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"lua","folderPath":"folders/nodes/data/lua.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"lua","folderPath":"folders/nodes/data/lua.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"misc","folderPath":"folders/nodes/data/misc.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"misc","folderPath":"folders/nodes/data/misc.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"MK effects","folderPath":"folders/nodes/data/MK effects.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"MK effects","folderPath":"folders/nodes/data/MK effects.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"mk sparkle","folderPath":"folders/nodes/data/MK effects/mk sparkle.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"src","folderPath":"folders/nodes/data/MK effects/mk sparkle/src.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"PCX","folderPath":"folders/nodes/data/PCX.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"PCX","folderPath":"folders/nodes/data/PCX.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"array","folderPath":"folders/nodes/data/PCX/array.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"array","folderPath":"folders/nodes/data/PCX/array.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"flow control","folderPath":"folders/nodes/data/PCX/flow control.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"flow control","folderPath":"folders/nodes/data/PCX/flow control.yy",},
@ -418,6 +420,7 @@
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Dice.pxc","CopyToMask":-1,"filePath":"datafiles/Sample Projects",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Dice.pxc","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Shiny gem.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Shiny gem.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Shiny gem.pxc","CopyToMask":-1,"filePath":"datafiles/Sample Projects",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Shiny gem.pxc","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"spark.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"tile_0044.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"tile_0044.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"tile_0067.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"tile_0067.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"tile_0126.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"tile_0126.png","CopyToMask":-1,"filePath":"datafiles/Sample Projects",},
@ -547,6 +550,7 @@
{"id":{"name":"s_biterator_knob","path":"sprites/s_biterator_knob/s_biterator_knob.yy",},}, {"id":{"name":"s_biterator_knob","path":"sprites/s_biterator_knob/s_biterator_knob.yy",},},
{"id":{"name":"array_functions","path":"scripts/array_functions/array_functions.yy",},}, {"id":{"name":"array_functions","path":"scripts/array_functions/array_functions.yy",},},
{"id":{"name":"sh_blur_final","path":"shaders/sh_blur_final/sh_blur_final.yy",},}, {"id":{"name":"sh_blur_final","path":"shaders/sh_blur_final/sh_blur_final.yy",},},
{"id":{"name":"s_node_spout","path":"sprites/s_node_spout/s_node_spout.yy",},},
{"id":{"name":"sh_fd_visualize_velocity_glsl","path":"shaders/sh_fd_visualize_velocity_glsl/sh_fd_visualize_velocity_glsl.yy",},}, {"id":{"name":"sh_fd_visualize_velocity_glsl","path":"shaders/sh_fd_visualize_velocity_glsl/sh_fd_visualize_velocity_glsl.yy",},},
{"id":{"name":"FirebaseFirestore_operationFromSymbol","path":"scripts/FirebaseFirestore_operationFromSymbol/FirebaseFirestore_operationFromSymbol.yy",},}, {"id":{"name":"FirebaseFirestore_operationFromSymbol","path":"scripts/FirebaseFirestore_operationFromSymbol/FirebaseFirestore_operationFromSymbol.yy",},},
{"id":{"name":"node_3d_mesh_terrain","path":"scripts/node_3d_mesh_terrain/node_3d_mesh_terrain.yy",},}, {"id":{"name":"node_3d_mesh_terrain","path":"scripts/node_3d_mesh_terrain/node_3d_mesh_terrain.yy",},},
@ -863,6 +867,7 @@
{"id":{"name":"Obj_FirebaseFirestore_Document_Delete","path":"objects/Obj_FirebaseFirestore_Document_Delete/Obj_FirebaseFirestore_Document_Delete.yy",},}, {"id":{"name":"Obj_FirebaseFirestore_Document_Delete","path":"objects/Obj_FirebaseFirestore_Document_Delete/Obj_FirebaseFirestore_Document_Delete.yy",},},
{"id":{"name":"node_module_test","path":"scripts/node_module_test/node_module_test.yy",},}, {"id":{"name":"node_module_test","path":"scripts/node_module_test/node_module_test.yy",},},
{"id":{"name":"s_node_shadow","path":"sprites/s_node_shadow/s_node_shadow.yy",},}, {"id":{"name":"s_node_shadow","path":"sprites/s_node_shadow/s_node_shadow.yy",},},
{"id":{"name":"Spout","path":"extensions/Spout/Spout.yy",},},
{"id":{"name":"s_node_grid_hex_noise","path":"sprites/s_node_grid_hex_noise/s_node_grid_hex_noise.yy",},}, {"id":{"name":"s_node_grid_hex_noise","path":"sprites/s_node_grid_hex_noise/s_node_grid_hex_noise.yy",},},
{"id":{"name":"sh_rsh_corner","path":"shaders/sh_rsh_corner/sh_rsh_corner.yy",},}, {"id":{"name":"sh_rsh_corner","path":"shaders/sh_rsh_corner/sh_rsh_corner.yy",},},
{"id":{"name":"s_node_logic_opr","path":"sprites/s_node_logic_opr/s_node_logic_opr.yy",},}, {"id":{"name":"s_node_logic_opr","path":"sprites/s_node_logic_opr/s_node_logic_opr.yy",},},
@ -1343,6 +1348,7 @@
{"id":{"name":"s_node_print","path":"sprites/s_node_print/s_node_print.yy",},}, {"id":{"name":"s_node_print","path":"sprites/s_node_print/s_node_print.yy",},},
{"id":{"name":"sh_seperate_shape_counter","path":"shaders/sh_seperate_shape_counter/sh_seperate_shape_counter.yy",},}, {"id":{"name":"sh_seperate_shape_counter","path":"shaders/sh_seperate_shape_counter/sh_seperate_shape_counter.yy",},},
{"id":{"name":"s_node_stack","path":"sprites/s_node_stack/s_node_stack.yy",},}, {"id":{"name":"s_node_stack","path":"sprites/s_node_stack/s_node_stack.yy",},},
{"id":{"name":"s_mk_sparkle_select","path":"sprites/s_mk_sparkle_select/s_mk_sparkle_select.yy",},},
{"id":{"name":"hlsl_server","path":"scripts/hlsl_server/hlsl_server.yy",},}, {"id":{"name":"hlsl_server","path":"scripts/hlsl_server/hlsl_server.yy",},},
{"id":{"name":"s_fade_up","path":"sprites/s_fade_up/s_fade_up.yy",},}, {"id":{"name":"s_fade_up","path":"sprites/s_fade_up/s_fade_up.yy",},},
{"id":{"name":"panel_globalvar","path":"scripts/panel_globalvar/panel_globalvar.yy",},}, {"id":{"name":"panel_globalvar","path":"scripts/panel_globalvar/panel_globalvar.yy",},},
@ -1696,6 +1702,7 @@
{"id":{"name":"sh_palette_replace","path":"shaders/sh_palette_replace/sh_palette_replace.yy",},}, {"id":{"name":"sh_palette_replace","path":"shaders/sh_palette_replace/sh_palette_replace.yy",},},
{"id":{"name":"buffer_functions","path":"scripts/buffer_functions/buffer_functions.yy",},}, {"id":{"name":"buffer_functions","path":"scripts/buffer_functions/buffer_functions.yy",},},
{"id":{"name":"key_press","path":"scripts/key_press/key_press.yy",},}, {"id":{"name":"key_press","path":"scripts/key_press/key_press.yy",},},
{"id":{"name":"s_mk_sparkle_bg","path":"sprites/s_mk_sparkle_bg/s_mk_sparkle_bg.yy",},},
{"id":{"name":"sh_mirror","path":"shaders/sh_mirror/sh_mirror.yy",},}, {"id":{"name":"sh_mirror","path":"shaders/sh_mirror/sh_mirror.yy",},},
{"id":{"name":"sh_cell_noise_random","path":"shaders/sh_cell_noise_random/sh_cell_noise_random.yy",},}, {"id":{"name":"sh_cell_noise_random","path":"shaders/sh_cell_noise_random/sh_cell_noise_random.yy",},},
{"id":{"name":"node_iterator_input","path":"scripts/node_iterator_input/node_iterator_input.yy",},}, {"id":{"name":"node_iterator_input","path":"scripts/node_iterator_input/node_iterator_input.yy",},},
@ -1738,6 +1745,7 @@
{"id":{"name":"s_biterator_b_shape_idle","path":"sprites/s_biterator_b_shape_idle/s_biterator_b_shape_idle.yy",},}, {"id":{"name":"s_biterator_b_shape_idle","path":"sprites/s_biterator_b_shape_idle/s_biterator_b_shape_idle.yy",},},
{"id":{"name":"compat_path_array","path":"scripts/compat_path_array/compat_path_array.yy",},}, {"id":{"name":"compat_path_array","path":"scripts/compat_path_array/compat_path_array.yy",},},
{"id":{"name":"sh_mirror_mask","path":"shaders/sh_mirror_mask/sh_mirror_mask.yy",},}, {"id":{"name":"sh_mirror_mask","path":"shaders/sh_mirror_mask/sh_mirror_mask.yy",},},
{"id":{"name":"panel_keyframe_driver","path":"scripts/panel_keyframe_driver/panel_keyframe_driver.yy",},},
{"id":{"name":"node_export","path":"scripts/node_export/node_export.yy",},}, {"id":{"name":"node_export","path":"scripts/node_export/node_export.yy",},},
{"id":{"name":"controlPointBox","path":"scripts/controlPointBox/controlPointBox.yy",},}, {"id":{"name":"controlPointBox","path":"scripts/controlPointBox/controlPointBox.yy",},},
{"id":{"name":"sh_vertex_pt","path":"shaders/sh_vertex_pt/sh_vertex_pt.yy",},}, {"id":{"name":"sh_vertex_pt","path":"shaders/sh_vertex_pt/sh_vertex_pt.yy",},},
@ -1964,6 +1972,7 @@
{"id":{"name":"panel_history","path":"scripts/panel_history/panel_history.yy",},}, {"id":{"name":"panel_history","path":"scripts/panel_history/panel_history.yy",},},
{"id":{"name":"sh_channel_H","path":"shaders/sh_channel_H/sh_channel_H.yy",},}, {"id":{"name":"sh_channel_H","path":"shaders/sh_channel_H/sh_channel_H.yy",},},
{"id":{"name":"rotatorRandom","path":"scripts/rotatorRandom/rotatorRandom.yy",},}, {"id":{"name":"rotatorRandom","path":"scripts/rotatorRandom/rotatorRandom.yy",},},
{"id":{"name":"node_spout_send","path":"scripts/node_spout_send/node_spout_send.yy",},},
{"id":{"name":"s_node_RGB","path":"sprites/s_node_RGB/s_node_RGB.yy",},}, {"id":{"name":"s_node_RGB","path":"sprites/s_node_RGB/s_node_RGB.yy",},},
{"id":{"name":"fd_rectangle_draw","path":"scripts/fd_rectangle_draw/fd_rectangle_draw.yy",},}, {"id":{"name":"fd_rectangle_draw","path":"scripts/fd_rectangle_draw/fd_rectangle_draw.yy",},},
{"id":{"name":"s_node_export","path":"sprites/s_node_export/s_node_export.yy",},}, {"id":{"name":"s_node_export","path":"sprites/s_node_export/s_node_export.yy",},},

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View file

@ -25,11 +25,17 @@ event_inherited();
dialog_h_min = content.min_h; dialog_h_min = content.min_h;
dialog_resizable = content.resizable; dialog_resizable = content.resizable;
content.panel = self;
content.in_dialog = true; content.in_dialog = true;
if(content.auto_pin) destroy_on_click_out = false; if(content.auto_pin) destroy_on_click_out = false;
} #endregion } #endregion
function contentResize() { #region
dialog_w = content.w + content.showHeader * padding * 2;
dialog_h = content.h + content.showHeader * (padding * 2 + title_height);
} #endregion
function resetMask() { #region function resetMask() { #region
if(!content) return; if(!content) return;
mask_surface = surface_verify(mask_surface, dialog_w - content.showHeader * padding * 2, mask_surface = surface_verify(mask_surface, dialog_w - content.showHeader * padding * 2,

View file

@ -14,8 +14,7 @@
window_set_min_width(960); window_set_min_width(960);
window_set_min_height(600); window_set_min_height(600);
//if(OS == os_windows) gameframe_init_native(); winManInit();
if(OS == os_macosx) mac_window_init();
depth = 0; depth = 0;
win_wp = WIN_W; win_wp = WIN_W;

View file

@ -1,11 +1,7 @@
/// @description init /// @description init
if(winMan_isMinimized()) exit;
draw_clear(COLORS.bg); draw_clear(COLORS.bg);
#region windows init
if(OS == os_windows && winMan_isMinimized())
exit;
#endregion
#region widget scroll #region widget scroll
if(!WIDGET_TAB_BLOCK) { if(!WIDGET_TAB_BLOCK) {
if(keyboard_check_pressed(vk_tab) && key_mod_press(SHIFT)) if(keyboard_check_pressed(vk_tab) && key_mod_press(SHIFT))

View file

@ -1,5 +1,5 @@
/// @description tooltip filedrop /// @description tooltip filedrop
if(OS == os_windows && winMan_isMinimized()) exit; if(winMan_isMinimized()) exit;
#region tooltip #region tooltip
if(is_struct(TOOLTIP)) { if(is_struct(TOOLTIP)) {

View file

@ -1,5 +1,5 @@
/// @description init /// @description init
if(OS == os_windows && winMan_isMinimized()) exit; if(winMan_isMinimized()) exit;
winManStep() winManStep()
//print("===== Step start ====="); //print("===== Step start =====");

View file

@ -7,17 +7,17 @@ HOVERING_ELEMENT = _HOVERING_ELEMENT;
_HOVERING_ELEMENT = noone; _HOVERING_ELEMENT = noone;
#region minimize #region minimize
if(OS == os_windows) { if(winMan_isMinimized()) {
if(winMan_isMinimized()) { if(!minimized) game_set_speed(1, gamespeed_fps);
if(!minimized) minimized = true;
game_set_speed(1, gamespeed_fps); exit;
minimized = true; } else if(!minimized)
exit; window_preminimize_rect = [ window_get_x(), window_get_y(), window_get_width(), window_get_height() ];
}
}
if(minimized) { if(minimized) {
game_set_speed(PREFERENCES.ui_framerate, gamespeed_fps); game_set_speed(PREFERENCES.ui_framerate, gamespeed_fps);
window_set_rectangle(window_preminimize_rect[0], window_preminimize_rect[1], window_preminimize_rect[2], window_preminimize_rect[3]);
minimized = false; minimized = false;
} }
#endregion #endregion

View file

@ -34,10 +34,11 @@ enum DS_TYPE {
list, list,
} }
function Action(_type, _object, _data) constructor { function Action(_type, _object, _data, _trigger = 0) constructor {
type = _type; type = _type;
obj = _object; obj = _object;
data = _data; data = _data;
trigger = _trigger;
extra_data = 0; extra_data = 0;
clear_action = noone; clear_action = noone;
@ -107,9 +108,11 @@ function Action(_type, _object, _data) constructor {
data = _data; data = _data;
break; break;
case ACTION_TYPE.custom : case ACTION_TYPE.custom :
data = obj(data); obj(data);
break; break;
} }
if(trigger) trigger();
} #endregion } #endregion
static redo = function() { #region static redo = function() { #region
@ -176,9 +179,11 @@ function Action(_type, _object, _data) constructor {
data = _data; data = _data;
break; break;
case ACTION_TYPE.custom : case ACTION_TYPE.custom :
data = obj(data); obj(data);
break; break;
} }
if(trigger) trigger();
} #endregion } #endregion
static toString = function() { #region static toString = function() { #region
@ -245,12 +250,12 @@ function Action(_type, _object, _data) constructor {
} #endregion } #endregion
} }
function recordAction(_type, _object, _data = -1) { #region function recordAction(_type, _object, _data = -1, _trigger = 0) { #region
if(IS_UNDOING) return noone; if(IS_UNDOING) return noone;
if(LOADING) return noone; if(LOADING) return noone;
if(UNDO_HOLDING) return noone; if(UNDO_HOLDING) return noone;
var act = new Action(_type, _object, _data); var act = new Action(_type, _object, _data, _trigger);
array_push(o_main.action_last_frame, act); array_push(o_main.action_last_frame, act);
while(!ds_stack_empty(REDO_STACK)) { while(!ds_stack_empty(REDO_STACK)) {

View file

@ -25,10 +25,10 @@
globalvar VERSION, SAVE_VERSION, VERSION_STRING, BUILD_NUMBER, LATEST_VERSION; globalvar VERSION, SAVE_VERSION, VERSION_STRING, BUILD_NUMBER, LATEST_VERSION;
LATEST_VERSION = 11500; LATEST_VERSION = 11500;
VERSION = 11604; VERSION = 11610;
SAVE_VERSION = 11600.1; SAVE_VERSION = 11610;
VERSION_STRING = "1.16.0.4"; VERSION_STRING = "1.16.1.0";
BUILD_NUMBER = 11604; BUILD_NUMBER = 11610;
globalvar APPEND_MAP; globalvar APPEND_MAP;
APPEND_MAP = ds_map_create(); APPEND_MAP = ds_map_create();

View file

@ -3,7 +3,7 @@ function __init_mask_modifier(_mask_index) { #region
inputs[| _ind + 0] = nodeValue("Invert mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); inputs[| _ind + 0] = nodeValue("Invert mask", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false);
inputs[| _ind + 1] = nodeValue("Mask feather", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 16) inputs[| _ind + 1] = nodeValue("Mask feather", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
.setDisplay(VALUE_DISPLAY.slider, { range: [0, 32, 1] }); .setDisplay(VALUE_DISPLAY.slider, { range: [0, 32, 1] });
__mask_index = _mask_index; __mask_index = _mask_index;

View file

@ -289,7 +289,8 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
surface_store_buffer(data.index); surface_store_buffer(data.index);
surface_free(data.surface); surface_free(data.surface);
return { surface: _canvas, tooltip: data.tooltip, index: preview_index } data.surface = _canvas;
data.index = preview_index;
}, { surface: surface_clone(getCanvasSurface()), tooltip: "Modify canvas", index: preview_index }); }, { surface: surface_clone(getCanvasSurface()), tooltip: "Modify canvas", index: preview_index });
action.clear_action = function(data) { surface_free_safe(data.surface); }; action.clear_action = function(data) { surface_free_safe(data.surface); };

View file

@ -1,18 +1,6 @@
function Node_Color_replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { function Node_Color_replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "Replace Palette"; name = "Replace Palette";
shader = sh_palette_replace;
uniform_from = shader_get_uniform(shader, "colorFrom");
uniform_from_count = shader_get_uniform(shader, "colorFrom_amo");
uniform_to = shader_get_uniform(shader, "colorTo");
uniform_to_count = shader_get_uniform(shader, "colorTo_amo");
uniform_ter = shader_get_uniform(shader, "treshold");
uniform_alp = shader_get_uniform(shader, "alphacmp");
uniform_inv = shader_get_uniform(shader, "inverted");
uniform_hrd = shader_get_uniform(shader, "hardReplace");
inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); inputs[| 0] = nodeValue("Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0);
inputs[| 1] = nodeValue("Palette from", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, DEF_PALETTE, "Color to be replaced.") inputs[| 1] = nodeValue("Palette from", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, DEF_PALETTE, "Color to be replaced.")
.setDisplay(VALUE_DISPLAY.palette); .setDisplay(VALUE_DISPLAY.palette);
@ -82,29 +70,22 @@ function Node_Color_replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
_colorTo[i * 4 + 3] = 1; _colorTo[i * 4 + 3] = 1;
} }
surface_set_target(_outSurf); surface_set_shader(_outSurf, sh_palette_replace);
DRAW_CLEAR shader_set_f("colorFrom", _colorFrom);
BLEND_OVERRIDE; shader_set_i("colorFrom_amo", array_length(fr));
shader_set_f("colorTo", _colorTo);
shader_set(shader); shader_set_i("colorTo_amo", array_length(to));
shader_set_uniform_f_array_safe(uniform_from, _colorFrom);
shader_set_uniform_i(uniform_from_count, array_length(fr));
shader_set_uniform_i(uniform_alp, alp);
shader_set_uniform_i(uniform_hrd, hrd);
shader_set_uniform_f_array_safe(uniform_to, _colorTo); shader_set_i("alphacmp", alp);
shader_set_uniform_i(uniform_to_count, array_length(to)); shader_set_i("hardReplace", hrd);
shader_set_uniform_f(uniform_ter, tr); shader_set_f("treshold", tr);
shader_set_uniform_i(uniform_inv, in); shader_set_i("inverted", in);
shader_set_i("useMask", is_surface(msk)); shader_set_i("useMask", is_surface(msk));
shader_set_surface("mask", msk); shader_set_surface("mask", msk);
draw_surface_safe(_data[0], 0, 0); draw_surface_safe(_data[0], 0, 0);
shader_reset(); surface_reset_shader();
BLEND_NORMAL
surface_reset_target();
__process_mask_modifier(_data); __process_mask_modifier(_data);
if(!in) _outSurf = mask_apply(_data[0], _outSurf, _data[7], _data[8]); if(!in) _outSurf = mask_apply(_data[0], _outSurf, _data[7], _data[8]);

View file

@ -130,7 +130,7 @@ function Node_Colors_Replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _g
attribute_surface_depth(); attribute_surface_depth();
static refreshPalette = function() { #region static refreshPalette = function() { #region
var _surf = array_safe_get(current_data, 0); var _surf = inputs[| 0].getValue();
inputs[| 1].setValue([]); inputs[| 1].setValue([]);
inputs[| 2].setValue([]); inputs[| 2].setValue([]);
@ -141,12 +141,15 @@ function Node_Colors_Replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _g
var _pall = ds_map_create(); var _pall = ds_map_create();
for( var i = 0, n = array_length(_surf); i < n; i++ ) { for( var i = 0, n = array_length(_surf); i < n; i++ ) {
var ww = surface_get_width_safe(_surf[i]); var _s = _surf[i];
var hh = surface_get_height_safe(_surf[i]); if(!is_surface(_s)) continue;
var ww = surface_get_width_safe(_s);
var hh = surface_get_height_safe(_s);
var c_buffer = buffer_create(ww * hh * 4, buffer_fixed, 2); var c_buffer = buffer_create(ww * hh * 4, buffer_fixed, 2);
buffer_get_surface(c_buffer, _surf[i], 0); buffer_get_surface(c_buffer, _s, 0);
buffer_seek(c_buffer, buffer_seek_start, 0); buffer_seek(c_buffer, buffer_seek_start, 0);
for( var i = 0; i < ww * hh; i++ ) { for( var i = 0; i < ww * hh; i++ ) {
@ -168,6 +171,12 @@ function Node_Colors_Replace(_x, _y, _group = noone) : Node_Processor(_x, _y, _g
inputs[| 2].setValue(palette); inputs[| 2].setValue(palette);
} #endregion } #endregion
static onValueFromUpdate = function(index) { #region
if(LOADING || APPENDING || CLONING) return;
if(index == 0) refreshPalette();
} #endregion
static step = function() { #region static step = function() { #region
__step_mask_modifier(); __step_mask_modifier();
} #endregion } #endregion

View file

@ -1,8 +1,6 @@
enum CURVE_TYPE { enum KEY_TYPE { normal, adder }
linear, enum CURVE_TYPE { linear, bezier, cut }
bezier, enum DRIVER_TYPE { none, linear, wiggle, sine }
cut,
}
function valueKey(_time, _value, _anim = noone, _in = 0, _ot = 0) constructor { function valueKey(_time, _value, _anim = noone, _in = 0, _ot = 0) constructor {
#region ---- main ---- #region ---- main ----
@ -18,8 +16,19 @@ function valueKey(_time, _value, _anim = noone, _in = 0, _ot = 0) constructor {
var _int = anim? anim.prop.key_inter : CURVE_TYPE.linear; var _int = anim? anim.prop.key_inter : CURVE_TYPE.linear;
ease_in_type = _int; ease_in_type = _int;
ease_out_type = _int; ease_out_type = _int;
dopesheet_x = 0; dopesheet_x = 0;
drivers = {
seed : irandom_range(100000, 999999),
type : DRIVER_TYPE.none,
speed : 1,
octave : 2,
frequency : 4,
amplitude : 1,
axis_sync : false,
phase : 0,
};
#endregion #endregion
static setTime = function(time) { #region static setTime = function(time) { #region
@ -63,6 +72,19 @@ function valueKey(_time, _value, _anim = noone, _in = 0, _ot = 0) constructor {
return key; return key;
} #endregion } #endregion
static getDrawIndex = function() { #region
if(anim.prop.type == VALUE_TYPE.trigger)
return 1;
if(drivers.type)
return 2;
if(ease_in_type == CURVE_TYPE.cut)
return 1;
return 0;
} #endregion
static toString = function() { return $"[Keyframe] {time}: {value}"; } static toString = function() { return $"[Keyframe] {time}: {value}"; }
} }
@ -253,7 +275,14 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
} }
if(ds_list_size(values) == 0) return processTypeDefault(); if(ds_list_size(values) == 0) return processTypeDefault();
if(ds_list_size(values) == 1) return processType(values[| 0].value); if(ds_list_size(values) == 1) {
var _key = values[| 0];
if(_key.drivers.type && _time >= _key.time)
return processType(processDriver(_time, _key));
return processType(_key.value);
}
if(prop.type == VALUE_TYPE.path) return processType(values[| 0].value); if(prop.type == VALUE_TYPE.path) return processType(values[| 0].value);
if(!prop.is_anim) return processType(values[| 0].value); if(!prop.is_anim) return processType(values[| 0].value);
@ -282,7 +311,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
var _keyIndex; var _keyIndex;
if(_time >= _len) _keyIndex = 999_999; if(_time >= _len) _keyIndex = 999_999;
else if(_time <= 0) _keyIndex = -1; else if(_time <= 0) _keyIndex = -1;
else _keyIndex = key_map[_time]; else _keyIndex = array_safe_get(key_map, _time);
if(_keyIndex == -1) { #region Before first key if(_keyIndex == -1) { #region Before first key
if(prop.on_end == KEYFRAME_END.wrap) { if(prop.on_end == KEYFRAME_END.wrap) {
@ -305,8 +334,13 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
} #endregion } #endregion
if(_keyIndex == 999_999) { #region After last key if(_keyIndex == 999_999) { #region After last key
var _lstKey = values[| ds_list_size(values) - 1];
if(_lstKey.drivers.type)
return processType(processDriver(_time, _lstKey));
if(prop.on_end == KEYFRAME_END.wrap) { if(prop.on_end == KEYFRAME_END.wrap) {
var from = values[| ds_list_size(values) - 1]; var from = _lstKey;
var to = values[| 0]; var to = values[| 0];
var prog = _time - from.time; var prog = _time - from.time;
var totl = TOTAL_FRAMES - from.time + to.time; var totl = TOTAL_FRAMES - from.time + to.time;
@ -317,15 +351,19 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
return lerpValue(from, to, _lrp); return lerpValue(from, to, _lrp);
} }
return processType(values[| ds_list_size(values) - 1].value); //Last frame return processType(_lstKey.value); //Last frame
} #endregion } #endregion
#region In between #region In between
var from = values[| _keyIndex]; var from = values[| _keyIndex];
var to = values[| _keyIndex + 1]; var to = values[| _keyIndex + 1];
var rat = (_time - from.time) / (to.time - from.time); var rat = (_time - from.time) / (to.time - from.time);
var _lrp = interpolate(from, to, rat); var _lrp = interpolate(from, to, rat);
if(from.drivers.type)
return processDriver(_time, from, lerpValue(from, to, _lrp), rat);
return lerpValue(from, to, _lrp); return lerpValue(from, to, _lrp);
#endregion #endregion
} #endregion } #endregion
@ -335,6 +373,41 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
return 0; return 0;
} #endregion } #endregion
static processDriver = function(_time, _key, _val = undefined, _intp = 0) { #region
static _processDriver = function(val, drivers, _t, _index = 0, _intp = 0) {
switch(drivers.type) {
case DRIVER_TYPE.linear :
return val + _t * drivers.speed;
case DRIVER_TYPE.wiggle :
var w = perlin1D(_t, drivers.seed + _index, drivers.frequency / 10, drivers.octave, -1, 1) * drivers.amplitude;
return val + w;
case DRIVER_TYPE.sine :
var w = sin((drivers.phase * (_index + 1) + _t * drivers.frequency / TOTAL_FRAMES) * pi * 2) * drivers.amplitude;
return val + w;
}
return 0;
}
var _dt = _time - _key.time;
_val = _val == undefined? _key.value : _val;
var _res = _val;
if(prop.type == VALUE_TYPE.integer || prop.type == VALUE_TYPE.float) {
if(is_array(_val)) {
_res = array_create(array_length(_val));
for( var i = 0, n = array_length(_val); i < n; i++ )
_res[i] = is_numeric(_val[i])? _processDriver(_val[i], _key.drivers, _dt, _key.drivers.axis_sync? 0 : i, _intp) : _val[i];
} else
_res = _processDriver(_val, _key.drivers, _dt, 0, _intp);
}
return _res;
} #endregion
static processType = function(_val) { #region static processType = function(_val) { #region
var _res = _val; var _res = _val;
if(!sep_axis && typeArray(prop.display_type) && is_array(_val)) { if(!sep_axis && typeArray(prop.display_type) && is_array(_val)) {
@ -387,7 +460,9 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
if(record) { if(record) {
var act = new Action(ACTION_TYPE.custom, function(data) { var act = new Action(ACTION_TYPE.custom, function(data) {
if(data.undo) insertKey(data.overKey, data.index); if(data.undo) insertKey(data.overKey, data.index);
return { overKey : data.overKey, index : data.index, undo : !data.undo }; updateKeyMap();
data.undo = !data.undo;
}, { overKey : values[| i], index : i, undo : true }); }, { overKey : values[| i], index : i, undo : true });
mergeAction(act); mergeAction(act);
} }
@ -397,13 +472,14 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
return 2; return 2;
} }
for( var i = 0; i < ds_list_size(values); i++ ) { for( var i = 0; i < ds_list_size(values); i++ ) { //insert key before the last key
if(values[| i].time < _time) continue; if(values[| i].time < _time) continue;
if(record) recordAction(ACTION_TYPE.custom, function(data) { if(record) recordAction(ACTION_TYPE.custom, function(data) {
var _prevTime = data.key.time; var _prevTime = data.key.time;
setKeyTime(data.key, data.time, false); setKeyTime(data.key, data.time, false);
return { key : data.key, time : _prevTime }
data.time = _prevTime;
}, { key : _key, time : _prevTime }); }, { key : _key, time : _prevTime });
ds_list_insert(values, i, _key); ds_list_insert(values, i, _key);
@ -411,10 +487,11 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
return 1; return 1;
} }
if(record) recordAction(ACTION_TYPE.custom, function(data) { if(record) recordAction(ACTION_TYPE.custom, function(data) { // insert key after the last key
var _prevTime = data.key.time; var _prevTime = data.key.time;
setKeyTime(data.key, data.time, false); setKeyTime(data.key, data.time, false);
return { key : data.key, time : _prevTime }
data.time = _prevTime;
}, { key : _key, time : _prevTime }); }, { key : _key, time : _prevTime });
ds_list_add(values, _key); ds_list_add(values, _key);
@ -462,7 +539,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
if(ds_list_size(values) == 0) { // Should not be called normally if(ds_list_size(values) == 0) { // Should not be called normally
var k = new valueKey(_time, _val, self, ease_in, ease_out); var k = new valueKey(_time, _val, self, ease_in, ease_out);
ds_list_add(values, k); ds_list_add(values, k);
if(_record) recordAction(ACTION_TYPE.list_insert, values, [ k, ds_list_size(values) - 1, $"add {prop.name} keyframe" ]); if(_record) recordAction(ACTION_TYPE.list_insert, values, [ k, ds_list_size(values) - 1, $"add {prop.name} keyframe" ], function() { updateKeyMap(); });
return true; return true;
} }
@ -480,14 +557,14 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
} else if(_key.time > _time) { } else if(_key.time > _time) {
var k = new valueKey(_time, _val, self, ease_in, ease_out); var k = new valueKey(_time, _val, self, ease_in, ease_out);
ds_list_insert(values, i, k); ds_list_insert(values, i, k);
if(_record) recordAction(ACTION_TYPE.list_insert, values, [k, i, $"add {prop.name} keyframe" ]); if(_record) recordAction(ACTION_TYPE.list_insert, values, [k, i, $"add {prop.name} keyframe" ], function() { updateKeyMap(); });
updateKeyMap(); updateKeyMap();
return true; return true;
} }
} }
var k = new valueKey(_time, _val, self, ease_in, ease_out); var k = new valueKey(_time, _val, self, ease_in, ease_out);
if(_record) recordAction(ACTION_TYPE.list_insert, values, [ k, ds_list_size(values), $"add {prop.name} keyframe" ]); if(_record) recordAction(ACTION_TYPE.list_insert, values, [ k, ds_list_size(values), $"add {prop.name} keyframe" ], function() { updateKeyMap(); });
ds_list_add(values, k); ds_list_add(values, k);
updateKeyMap(); updateKeyMap();
return true; return true;
@ -534,6 +611,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
_value_list[4] = values[| i].ease_in_type; _value_list[4] = values[| i].ease_in_type;
_value_list[5] = values[| i].ease_out_type; _value_list[5] = values[| i].ease_out_type;
_value_list[6] = values[| i].ease_y_lock; _value_list[6] = values[| i].ease_y_lock;
_value_list[7] = values[| i].drivers;
array_push(_data, _value_list); array_push(_data, _value_list);
} }
@ -580,6 +658,7 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
var ease_in_type = array_safe_get(_keyframe, 4); var ease_in_type = array_safe_get(_keyframe, 4);
var ease_out_type = array_safe_get(_keyframe, 5); var ease_out_type = array_safe_get(_keyframe, 5);
var ease_y_lock = array_safe_get(_keyframe, 6, true); var ease_y_lock = array_safe_get(_keyframe, 6, true);
var driver = array_safe_get(_keyframe, 7, {});
var _val = value; var _val = value;
@ -608,6 +687,8 @@ function valueAnimator(_val, _prop, _sep_axis = false) constructor {
vk.ease_in_type = ease_in_type; vk.ease_in_type = ease_in_type;
vk.ease_out_type = ease_out_type; vk.ease_out_type = ease_out_type;
vk.ease_y_lock = ease_y_lock; vk.ease_y_lock = ease_y_lock;
struct_override(vk.drivers, driver);
ds_list_add(values, vk); ds_list_add(values, vk);
} }

View file

@ -1,33 +1,217 @@
enum MKSPARK_DRAW { enum MKSPARK_DIRR { main, diag }
dot, enum MKSPARK { dir, y, x, speed, length, lendel, time }
trail
}
function Node_MK_Sparkle(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { function Node_MK_Sparkle(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
name = "MK Sparkle"; name = "MK Sparkle";
dimension_index = -1; dimension_index = -1;
update_on_frame = true; update_on_frame = true;
inputs[| 0] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 4); inputs[| 0] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 5);
inputs[| 1] = nodeValue("Sparkle", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ inputs[| 1] = nodeValue("Sparkle", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [
[ 0, 0, 2, MKSPARK_DRAW.trail, BLEND.add, 0 ], [ MKSPARK_DIRR.main, 0, 0, 2, 1, 0, 0 ],
[ 0, -1, 1, MKSPARK_DRAW.trail, BLEND.subtract, 0 ], [ MKSPARK_DIRR.main, 0, -1, 1, 1, 0, 0 ],
[ 1, 0, 2, MKSPARK_DRAW.trail, BLEND.add, -2 ],
[ 1, -1, 2, MKSPARK_DRAW.trail, BLEND.subtract, -2 ],
]) ])
.setArrayDepth(2); .setArrayDepth(2)
.setArrayDynamic();
inputs[| 2] = nodeValue("Start frame", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0); inputs[| 2] = nodeValue("Start frame", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0);
inputs[| 3] = nodeValue("Speed", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1);
inputs[| 4] = nodeValue("Loop", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [])
.setArrayDepth(1)
.setArrayDynamic();
editor_rect = [ 0, 0 ];
editor_rect_to = [ 0, 0 ];
editor_rect_hover = 0;
editor_hold_ind = -1;
editor_hold_sx = -1;
editor_timer = -1;
editor_timer_mx = 0;
editor_timer_sx = 0;
sparkleEditor = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region sparkleEditor = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region
var _size = inputs[| 0].getValue();
var _sprk = inputs[| 1].getValue(); var _sprk = inputs[| 1].getValue();
var h = array_length(_sprk) * 32 + 16;
return h; var _c = ceil(_size / 2);
var rows = array_create(_c);
for( var i = 0; i < _c; i++ ) rows[i] = [];
for( var i = 0, n = array_length(_sprk); i < n; i++ ) {
var _sp = _sprk[i];
var _rw = _sp[MKSPARK.y];
array_push(rows[_rw], i);
}
_y += ui(8);
var cell_s = ui(32);
var cell_w = (4 + _c) * cell_s;
var cx0 = _x + _w / 2 - cell_w / 2;
var cx1 = cx0 + cell_s;
var cx2 = cx1 + cell_s * 3;
var cx3 = cx2 + cell_s * _c;
var cy = _y + ui(24);
var _amo = 0;
for( var i = 0, n = array_length(rows); i < n; i++ )
_amo += 1 + array_length(rows[i]);
var _h = ui(8) + _amo * cell_s + ui(48);
//draw_sprite_stretched(s_mk_sparkle_bg, 0, _x, _y, _w, _h);
draw_set_circle_precision(32);
var _rect_hover = 0;
var _cont_hover = -1;
var _arr_ind = 0;
var _arr_ins = -1;
var _arr_del = -1;
var _arr_insrw = -1;
var _arr_insx = -1;
for( var i = 0, n = array_length(rows); i < n; i++ ) {
var row = rows[i];
for( var j = 0, m = array_length(row); j <= m; j++ ) {
var _cy = cy + cell_s / 2;
var _chov = 0;
var _tx = cx0 + cell_s / 2 - 4;
var _ty = _cy;
if(j < m) {
draw_set_color(#272736);
draw_circle(_tx, _ty, cell_s / 2 - 4, false);
}
if(_hover && point_in_rectangle(_m[0], _m[1], _tx - cell_s / 2, _ty - cell_s / 2, _tx + cell_s / 2, _ty + cell_s / 2)) {
editor_rect_to = [ _tx + ui(1), _ty ];
_rect_hover = 1;
_chov = 2;
}
var _cx = cx1;
var _chox = 0;
for( var k = -3; k < _c; k++ ) {
var cc = abs(i + (k >= 0? k : k - 1)) % 2? #272736 : #313143;
draw_set_color(k >= 0? cc : merge_color(cc, #171723, 0.5));
draw_rectangle(_cx, cy, _cx + cell_s, cy + cell_s, false);
if(_hover && point_in_rectangle(_m[0], _m[1], _cx, cy, _cx + cell_s - 1, cy + cell_s - 1)) {
editor_rect_to = [_cx + cell_s / 2, cy + cell_s / 2];
_rect_hover = 1;
_cont_hover = _arr_ind;
_chov = 1;
_chox = k;
_arr_insx = k;
}
_cx += cell_s;
}
if(mouse_press(mb_left, _chov == 1 && _focus)) {
editor_hold_sx = _chox;
editor_hold_ind = _cont_hover;
}
if(j == m) {
if(mouse_press(mb_left, _chov == 1 && _focus)) {
_arr_ins = _cont_hover;
_arr_insrw = i;
}
cy += cell_s;
break;
}
var _dx = cx3 + cell_s / 2 + 4;
draw_set_color(merge_color(#1e1e2c, c_red, 0.2));
draw_circle(_dx, _ty, ui(6), false);
if(_hover && point_in_circle(_m[0], _m[1], _dx, _ty, ui(12))) {
draw_set_color(merge_color(#1e1e2c, c_red, 0.5));
draw_circle(_dx, _ty, ui(6), false);
if(mouse_press(mb_left, _focus))
_arr_del = _arr_ind;
}
_arr_ind++;
var _id = row[j];
var _sp = _sprk[_id];
var _dr = _sp[MKSPARK.dir];
var _xs = _sp[MKSPARK.x];
var _spd = _sp[MKSPARK.speed];
var _dr = _sp[MKSPARK.length];
var _bl = _sp[MKSPARK.lendel];
var _tm = _sp[MKSPARK.time];
if(mouse_press(mb_left, _focus)) {
if(_chov == 2) {
editor_timer = _id;
editor_timer_mx = _m[0];
editor_timer_sx = _tm;
}
}
var _lx0 = cx1 + cell_s * (3 + _xs) + ui(6);
var _lx1 = _lx0 + _spd * cell_s;
draw_set_color(c_white);
draw_line_width(_lx0, _cy, _lx1, _cy, 4);
if(_tm < 0) draw_set_color(COLORS._main_value_negative);
else if(_tm > 0) draw_set_color(COLORS._main_value_positive);
else draw_set_color(c_white);
draw_line_width(_tx, _ty, _tx + lengthdir_x(cell_s / 2 - 6, 90 - _tm * 90),
_ty + lengthdir_y(cell_s / 2 - 6, 90 - _tm * 90), 4);
cy += cell_s;
}
}
if(_arr_ins > -1)
array_insert(_sprk, _arr_ins, [ MKSPARK_DIRR.main, _arr_insrw, _arr_insx, 1, 1, 0, 0 ]);
if(_arr_del > -1)
array_delete(_sprk, _arr_del, 1);
if(editor_hold_ind > -1) {
_sprk[editor_hold_ind][2] = editor_hold_sx;
_sprk[editor_hold_ind][3] = _arr_insx - editor_hold_sx + 1;
if(mouse_release(mb_left))
editor_hold_ind = -1;
}
if(editor_timer > -1) {
var _tim = editor_timer_sx + (_m[0] - editor_timer_mx) / 32;
_sprk[editor_timer][6] = clamp(round(_tim), -3, 3);
if(mouse_release(mb_left))
editor_timer = -1;
}
editor_rect_hover = lerp_float(editor_rect_hover, _rect_hover, 4);
if(editor_rect_hover > 0) {
editor_rect[0] = lerp_float(editor_rect[0], editor_rect_to[0], 5);
editor_rect[1] = lerp_float(editor_rect[1], editor_rect_to[1], 5);
var _sels = editor_rect_hover * (cell_s / 2 - 4);
draw_sprite_stretched_ext(s_mk_sparkle_select, 0, editor_rect[0] - _sels, editor_rect[1] - _sels, _sels * 2, _sels * 2, #6d6d84, 1);
}
return _h;
}); #endregion }); #endregion
input_display_list = [ new Inspector_Sprite(s_MKFX), 0, 2, input_display_list = [ new Inspector_Sprite(s_MKFX),
["Sparkle", false], 0, 2, 3,
sparkleEditor sparkleEditor
]; ];
@ -39,18 +223,25 @@ function Node_MK_Sparkle(_x, _y, _group = noone) : Node_Processor(_x, _y, _group
var _size = _data[0]; var _size = _data[0];
var _sprk = _data[1]; var _sprk = _data[1];
var _frme = _data[2]; var _frme = _data[2];
var _spd = _data[3];
var _loop = _data[4];
if(array_empty(_sprk)) return _outSurf; if(array_empty(_sprk)) return _outSurf;
var _s = _size * 2 + 1; var _c = floor(_size / 2);
_outSurf = surface_verify(_outSurf, _s, _s); _outSurf = surface_verify(_outSurf, _size, _size);
temp_surface[0] = surface_verify(temp_surface[0], _s, _s); temp_surface[0] = surface_verify(temp_surface[0], _size, _size);
temp_surface[1] = surface_verify(temp_surface[1], _s, _s); temp_surface[1] = surface_verify(temp_surface[1], _size, _size);
var _s0 = temp_surface[0]; var _s0 = temp_surface[0];
var _s1 = temp_surface[1]; var _s1 = temp_surface[1];
var _fr = CURRENT_FRAME - _frme + 1; var _fr = round((CURRENT_FRAME - _frme + 1) * _spd);
if(!array_empty(_loop)) {
var _ind = CURRENT_FRAME % array_length(_loop);
_fr = _loop[_ind];
}
surface_set_target(_s0); surface_set_target(_s0);
DRAW_CLEAR DRAW_CLEAR
@ -59,21 +250,27 @@ function Node_MK_Sparkle(_x, _y, _group = noone) : Node_Processor(_x, _y, _group
for( var i = 0, n = array_length(_sprk); i < n; i++ ) { for( var i = 0, n = array_length(_sprk); i < n; i++ ) {
var _sk = _sprk[i]; var _sk = _sprk[i];
var sy = _size + _sk[0]; var dr = _sk[MKSPARK.dir];
var sx = _size + _sk[1]; var sy = _sk[MKSPARK.y];
var sp = _sk[2]; var sx = _sk[MKSPARK.x];
var ff = _fr + _sk[5]; var sp = _sk[MKSPARK.speed];
var ff = _sk[MKSPARK.time] + _fr;
var lng = _sk[MKSPARK.length] + _sk[MKSPARK.lendel] - ff;
if(ff < 0) continue; if(ff < 0 || lng < 0) continue;
switch(_sk[4]) { if(dr == MKSPARK_DIRR.main) {
case BLEND.add : BLEND_ADD; break; var _lx = _c + sx - 1 + sp * ff;
case BLEND.subtract : BLEND_SUBTRACT; break; var _ly = _c + sy;
}
if(lng == 0) draw_point(_lx, _ly);
switch(_sk[3]) { else draw_line(_lx, _ly, _lx + lng, _ly);
case MKSPARK_DRAW.dot : draw_point(sx + ff * sp, sy); break; } else if(dr == MKSPARK_DIRR.diag) {
case MKSPARK_DRAW.trail : draw_line(sx - 1, sy, sx - 1 + ff * sp, sy); break; var _l0 = _c - 1 + sp * ff;
var _l1 = _l0 + lng;
if(lng == 0) draw_point(_l0, _l0);
else draw_line(_l0, _l0, _l1, _l1);
} }
} }
@ -84,16 +281,16 @@ function Node_MK_Sparkle(_x, _y, _group = noone) : Node_Processor(_x, _y, _group
DRAW_CLEAR DRAW_CLEAR
draw_surface_ext(_s0, 0, 0, 1, 1, 0, c_white, 1); draw_surface_ext(_s0, 0, 0, 1, 1, 0, c_white, 1);
draw_surface_ext(_s0, 0, _s, 1, -1, 0, c_white, 1); draw_surface_ext(_s0, 0, _size, 1, -1, 0, c_white, 1);
surface_reset_target(); surface_reset_target();
surface_set_target(_outSurf); surface_set_target(_outSurf);
DRAW_CLEAR DRAW_CLEAR
draw_surface_ext(_s1, 0, 0, 1, 1, 0, c_white, 1); draw_surface_ext(_s1, 0, 0, 1, 1, 0, c_white, 1);
draw_surface_ext(_s1, 0, _s, 1, 1, 90, c_white, 1); draw_surface_ext(_s1, 0, _size, 1, 1, 90, c_white, 1);
draw_surface_ext(_s1, _s, _s, 1, 1, 180, c_white, 1); draw_surface_ext(_s1, _size, _size, 1, 1, 180, c_white, 1);
draw_surface_ext(_s1, _s, 0, 1, 1, 270, c_white, 1); draw_surface_ext(_s1, _size, 0, 1, 1, 270, c_white, 1);
surface_reset_target(); surface_reset_target();
return _outSurf; return _outSurf;

View file

@ -5,7 +5,7 @@
"isCompatibility": false, "isCompatibility": false,
"isDnD": false, "isDnD": false,
"parent": { "parent": {
"name": "MK effects", "name": "mk sparkle",
"path": "folders/nodes/data/MK effects.yy", "path": "folders/nodes/data/MK effects/mk sparkle.yy",
}, },
} }

View file

@ -67,18 +67,18 @@ function Node_Perlin(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) co
_outSurf = surface_verify(_outSurf, _dim[0], _dim[1], attrDepth()); _outSurf = surface_verify(_outSurf, _dim[0], _dim[1], attrDepth());
surface_set_shader(_outSurf, sh_perlin_tiled); surface_set_shader(_outSurf, sh_perlin_tiled);
shader_set_f("u_resolution", _dim); shader_set_f("u_resolution", _dim);
shader_set_f("position", _pos); shader_set_f("position", _pos);
shader_set_f("scale", _sca); shader_set_f("scale", _sca);
shader_set_f("seed", _sed); shader_set_f("seed", _sed);
shader_set_i("tile", _til); shader_set_i("tile", _til);
shader_set_i("iteration", _ite); shader_set_i("iteration", _ite);
shader_set_i("colored", _col);
shader_set_f("colorRanR", _clr);
shader_set_f("colorRanG", _clg);
shader_set_f("colorRanB", _clb);
shader_set_i("colored", _col);
shader_set_f("colorRanR", _clr);
shader_set_f("colorRanG", _clg);
shader_set_f("colorRanB", _clb);
draw_sprite_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], 0, c_white, 1); draw_sprite_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], 0, c_white, 1);
surface_reset_shader(); surface_reset_shader();

View file

@ -412,9 +412,10 @@ function __initNodes() {
addNodeObject(input, "WAV File In", s_node_wav_file_read, "Node_WAV_File_Read", [0, Node_create_WAV_File_Read],, "Load wav audio file.").setVersion(1144); addNodeObject(input, "WAV File In", s_node_wav_file_read, "Node_WAV_File_Read", [0, Node_create_WAV_File_Read],, "Load wav audio file.").setVersion(1144);
addNodeObject(input, "WAV File Out", s_node_wav_file_write, "Node_WAV_File_Write", [1, Node_WAV_File_Write],, "Save wav audio file.").setVersion(1145); addNodeObject(input, "WAV File Out", s_node_wav_file_write, "Node_WAV_File_Write", [1, Node_WAV_File_Write],, "Save wav audio file.").setVersion(1145);
ds_list_add(input, "Network"); ds_list_add(input, "External");
addNodeObject(input, "Websocket Receiver", s_node_websocket_receive, "Node_Websocket_Receiver", [1, Node_Websocket_Receiver],, "Create websocket server to receive data from the network.").setVersion(1145); addNodeObject(input, "Websocket Receiver", s_node_websocket_receive, "Node_Websocket_Receiver", [1, Node_Websocket_Receiver],, "Create websocket server to receive data from the network.").setVersion(1145);
addNodeObject(input, "Websocket Sender", s_node_websocket_send, "Node_Websocket_Sender", [1, Node_Websocket_Sender],, "Create websocket server to send data to the network.").setVersion(1145); addNodeObject(input, "Websocket Sender", s_node_websocket_send, "Node_Websocket_Sender", [1, Node_Websocket_Sender],, "Create websocket server to send data to the network.").setVersion(1145);
addNodeObject(input, "Spout Sender", s_node_spout, "Node_Spout_Send", [1, Node_Spout_Send],, "Send surface through Spout.").setVersion(11600);
#endregion #endregion
var transform = ds_list_create(); #region var transform = ds_list_create(); #region
@ -623,7 +624,7 @@ function __initNodes() {
addNodeObject(generator, "MK Saber", s_node_mk_saber, "Node_MK_Saber", [1, Node_MK_Saber]).setVersion(11600); addNodeObject(generator, "MK Saber", s_node_mk_saber, "Node_MK_Saber", [1, Node_MK_Saber]).setVersion(11600);
addNodeObject(generator, "MK Tile", s_node_mk_tile, "Node_MK_Tile", [1, Node_MK_Tile]).setVersion(11600); addNodeObject(generator, "MK Tile", s_node_mk_tile, "Node_MK_Tile", [1, Node_MK_Tile]).setVersion(11600);
addNodeObject(generator, "MK Flag", s_node_mk_flag, "Node_MK_Flag", [1, Node_MK_Flag]).setVersion(11600); addNodeObject(generator, "MK Flag", s_node_mk_flag, "Node_MK_Flag", [1, Node_MK_Flag]).setVersion(11600);
if(TESTING) addNodeObject(generator, "MK Sparkle", s_node_mk_sparkle, "Node_MK_Sparkle", [1, Node_MK_Sparkle]).setVersion(11600); //addNodeObject(generator, "MK Sparkle", s_node_mk_sparkle, "Node_MK_Sparkle", [1, Node_MK_Sparkle]).patreonExtra();
#endregion #endregion
var compose = ds_list_create(); #region var compose = ds_list_create(); #region

View file

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

View file

@ -0,0 +1,35 @@
function Node_Spout_Send(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
name = "Spout Send";
inputs[| 0] = nodeValue("Sender name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "PixelComposer");
inputs[| 1] = nodeValue("Surface", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
outputs[| 0] = nodeValue("Surface", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone)
.setVisible(false);
spoutIndex = spoutSenderInit();
if(spoutIndex == noone) noti_warning("Spout initialize error");
surf_buff = buffer_create(1, buffer_grow, 1);
static update = function() { #region
if(spoutIndex == noone) return;
var _name = inputs[| 0].getValue();
var _surf = inputs[| 1].getValue();
if(!is_surface(_surf)) return;
var _sw = surface_get_width_safe(_surf);
var _sh = surface_get_height_safe(_surf);
buffer_resize(surf_buff, _sw * _sh * 4);
buffer_get_surface(surf_buff, _surf, 0);
spoutSetSenderName(spoutIndex, _name);
spoutSendPixels(spoutIndex, buffer_get_address(surf_buff), _sw, _sh);
outputs[| 0].setValue(_surf);
} #endregion
}

View file

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

View file

@ -31,7 +31,7 @@ function Node_Strand_Force_Apply(_x, _y, _group = noone) : _Node_Strand_Affector
inputs[| 4].setVisible(true); inputs[| 4].setVisible(true);
var _strTur = _tur == 0? _stn : perlin1D(_sed + CURRENT_FRAME, _tfr, _toc, _stn - _tur, _stn + _tur); var _strTur = _tur == 0? _stn : perlin1D(CURRENT_FRAME, _sed, _tfr, _toc, _stn - _tur, _stn + _tur);
var gx = lengthdir_x(_strTur, _dir); var gx = lengthdir_x(_strTur, _dir);
var gy = lengthdir_y(_strTur, _dir); var gy = lengthdir_y(_strTur, _dir);

View file

@ -1668,8 +1668,14 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
return val; return val;
} #endregion } #endregion
static setAnim = function(anim) { #region static setAnim = function(anim, record = false) { #region
if(is_anim == anim) return; if(is_anim == anim) return;
if(record) {
recordAction(ACTION_TYPE.custom, function(data) {
setAnim(data.is_anim);
data.is_anim = !data.is_anim;
}, { anim: is_anim });
}
is_anim = anim; is_anim = anim;
if(is_anim) { if(is_anim) {

View file

@ -267,6 +267,7 @@ function Panel_Animation() : PanelContent() constructor {
[ [THEME.object_halign, 2], function() { alignKeys(fa_right); } ], [ [THEME.object_halign, 2], function() { alignKeys(fa_right); } ],
]), ]),
menuItem(__txtx("panel_animation_stagger", "Stagger"), function() { stagger_mode = 1; }), menuItem(__txtx("panel_animation_stagger", "Stagger"), function() { stagger_mode = 1; }),
menuItem(__txtx("panel_driver", "Driver..."), function() { dialogPanelCall(new Panel_Keyframe_Driver(keyframe_selecting[0]), mouse_mx + ui(8), mouse_my + ui(8)); }),
-1, -1,
menuItem(__txt("Delete"), function() { deleteKeys(); }, noone, [ "Animation", "Delete keys" ]), menuItem(__txt("Delete"), function() { deleteKeys(); }, noone, [ "Animation", "Delete keys" ]),
menuItem(__txt("Duplicate"), function() { doDuplicate(); }, THEME.duplicate, [ "Animation", "Duplicate" ]), menuItem(__txt("Duplicate"), function() { doDuplicate(); }, THEME.duplicate, [ "Animation", "Duplicate" ]),
@ -573,11 +574,12 @@ function Panel_Animation() : PanelContent() constructor {
var _anim = _anims[j]; var _anim = _anims[j];
for(var k = 0; k < ds_list_size(_anim.values); k++) { for(var k = 0; k < ds_list_size(_anim.values); k++) {
var t = (_anim.values[| k].time + 1) * ui(timeline_scale) + timeline_shift; var _keyframe = _anim.values[| k];
_anim.values[| k].dopesheet_x = t;
var t = (_keyframe.time + 1) * ui(timeline_scale) + timeline_shift;
var ind = _anim.values[| k].ease_in_type == CURVE_TYPE.cut? 4 : 1; _keyframe.dopesheet_x = t;
draw_sprite_ui_uniform(THEME.timeline_keyframe, ind, t, key_y, 1, COLORS.panel_animation_keyframe_hide);
draw_sprite_ui_uniform(THEME.timeline_keyframe, _keyframe.getDrawIndex(), t, key_y, 1, COLORS.panel_animation_keyframe_hide);
} }
} }
} }
@ -670,146 +672,214 @@ function Panel_Animation() : PanelContent() constructor {
draw_surface_safe(timeline_surface, bar_x, bar_y); draw_surface_safe(timeline_surface, bar_x, bar_y);
} #endregion } #endregion
function drawDopesheetLine(animator, key_y, msx, msy, _gy_val_min = 999999, _gy_val_max = -999999) { #region function drawDopesheetGraphLine(animator, key_y, msx, msy, _gy_val_min = 999999, _gy_val_max = -999999) { #region
var bar_total_w = TOTAL_FRAMES * ui(timeline_scale); var bar_total_w = TOTAL_FRAMES * ui(timeline_scale);
var bar_show_w = timeline_shift + bar_total_w; var bar_show_w = timeline_shift + bar_total_w;
var hovering = noone; var hovering = noone;
var _gy_top = key_y + ui(16); var _gy_top = key_y + ui(16);
var _gy_bottom = _gy_top + animator.prop.graph_h - ui(8); var _gy_bottom = _gy_top + animator.prop.graph_h - ui(8);
var amo = ds_list_size(animator.values); var amo = ds_list_size(animator.values);
for(var k = 0; k < amo; k++) { #region get range
var key_val = animator.values[| k].value; var _prevDelt = [ 0, 0 ];
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]);
_gy_val_max = max(_gy_val_max, key_val[ki]);
}
} else {
_gy_val_min = min(_gy_val_min, key_val);
_gy_val_max = max(_gy_val_max, key_val);
}
}
var valArray = is_array(animator.values[| 0].value);
var ox = 0, oy = valArray? [] : noone, nx = 0, ny = noone, oly = 0, nly = 0;
for(var k = 0; k < amo - 1; k++) {
var key = animator.values[| k];
var t = key.dopesheet_x;
var key_next = animator.values[| k + 1];
var dx = key_next.time - key.time;
if(key.ease_out_type == CURVE_TYPE.linear && key_next.ease_in_type == CURVE_TYPE.linear) { //linear draw for(var k = 0; k < amo; k++) {
nx = (key_next.time + 1) * ui(timeline_scale) + timeline_shift; var key = animator.values[| k];
if(valArray) { var key_val = key.value;
for( var ki = 0; ki < array_length(key.value); ki++ ) {
draw_set_color(COLORS.axis[ki]); var _minn = _gy_val_min;
ny[ki] = value_map(key.value[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top); var _maxx = _gy_val_max;
if(array_length(oy) > ki) if(is_array(key_val)) {
draw_line(t, oy[ki], t, ny[ki]); for( var ki = 0; ki < array_length(key_val); ki++ ) {
oy[ki] = ny[ki]; _minn = min(_minn, key_val[ki]);
_maxx = max(_maxx, key_val[ki]);
ny[ki] = value_map(key_next.value[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
draw_line(t, oy[ki], nx, ny[ki]);
oy[ki] = ny[ki];
} }
} else { } else {
draw_set_color(animator.prop.sep_axis? COLORS.axis[animator.index] : COLORS.panel_animation_graph_line); _minn = min(_minn, key_val);
ny = value_map(key.value, _gy_val_min, _gy_val_max, _gy_bottom, _gy_top); _maxx = max(_maxx, key_val);
if(oy != noone) draw_line(t, oy, t, ny); }
oy = ny;
_minn += _prevDelt[0];
_maxx += _prevDelt[1];
_prevDelt = [ 0, 0 ];
switch(key.drivers.type) {
case DRIVER_TYPE.linear :
var nk = k + 1 < amo? animator.values[| k + 1].time : TOTAL_FRAMES;
ny = value_map(key_next.value, _gy_val_min, _gy_val_max, _gy_bottom, _gy_top); var spd = key.drivers.speed * (nk - key.time);
draw_line(t, oy, nx, ny); _minn += min(spd, 0);
oy = ny; _maxx += max(spd, 0);
_prevDelt = [ min(spd, 0), max(spd, 0) ];
break;
case DRIVER_TYPE.wiggle :
case DRIVER_TYPE.sine :
_minn -= abs(key.drivers.amplitude);
_maxx += abs(key.drivers.amplitude);
_prevDelt = [ -key.drivers.amplitude, key.drivers.amplitude ];
break;
}
_gy_val_min = min(_minn, _gy_val_min);
_gy_val_max = max(_maxx, _gy_val_max);
}
#endregion
var valArray = is_array(animator.values[| 0].value);
var ox = 0;
var nx = 0;
var ny = noone;
var oly = 0;
var nly = 0;
var _kv, _kn;
var sy;
var _oy = animator.values[| 0].value;
if(!valArray) _oy = [ _oy ];
var oy = array_create(array_length(_oy));
for( var ki = 0; ki < array_length(oy); ki++ )
oy[ki] = value_map(oy[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
for(var k = 0; k < amo - 1; k++) { #region draw line in between
var key = animator.values[| k];
var t = key.dopesheet_x;
var key_next = animator.values[| k + 1];
var dx = key_next.time - key.time;
if(key.drivers.type) { // driver
nx = (key.time + 1) * ui(timeline_scale) + timeline_shift;
for( var _time = key.time; _time <= key_next.time; _time++ ) {
var rat = (_time - key.time) / (key_next.time - key.time);
var _lrp = animator.interpolate(key, key_next, rat);
_kv = animator.processDriver(_time, key, animator.lerpValue(key, key_next, _lrp), rat);
if(!valArray) _kv = [ _kv ];
for( var ki = 0; ki < array_length(_kv); ki++ ) {
draw_set_color(valArray? COLORS.axis[ki] : (animator.prop.sep_axis? COLORS.axis[animator.index] : COLORS.panel_animation_graph_line));
ny[ki] = value_map(_kv[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
if(_time == key.time) draw_line(nx, oy[ki], nx, ny[ki]);
else draw_line(ox, oy[ki], nx, ny[ki]);
oy[ki] = ny[ki];
}
ox = nx;
nx += ui(timeline_scale);
}
} else if(key.ease_out_type == CURVE_TYPE.linear && key_next.ease_in_type == CURVE_TYPE.linear) { //linear draw
nx = (key_next.time + 1) * ui(timeline_scale) + timeline_shift;
_kv = key.value;
_kn = key_next.value;
if(!valArray) {
_kv = [ _kv ];
_kn = [ _kn ];
}
for( var ki = 0; ki < array_length(_kv); ki++ ) {
draw_set_color(valArray? COLORS.axis[ki] : (animator.prop.sep_axis? COLORS.axis[animator.index] : COLORS.panel_animation_graph_line));
ny[ki] = value_map(_kv[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
if(array_length(oy) > ki) draw_line(t, oy[ki], t, ny[ki]);
oy[ki] = ny[ki];
ny[ki] = value_map(_kn[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
draw_line(t, oy[ki], nx, ny[ki]);
oy[ki] = ny[ki];
} }
ox = nx; ox = nx;
} else { //bezier easing } else { //bezier easing
var _step = 1 / dx; var _step = 1 / dx;
for( var _r = 0; _r <= 1; _r += _step ) { for( var _r = 0; _r <= 1; _r += _step ) {
nx = t + _r * dx * ui(timeline_scale); nx = t + _r * dx * ui(timeline_scale);
nly = animator.interpolate(key, key_next, _r); nly = animator.interpolate(key, key_next, _r);
if(valArray) { _kv = key.value;
for( var ki = 0; ki < array_length(key.value); ki++ ) { _kn = key_next.value;
draw_set_color(COLORS.axis[ki]);
ny[ki] = value_map(lerp(key.value[ki], key_next.value[ki], nly), _gy_val_min, _gy_val_max, _gy_bottom, _gy_top); if(!valArray) {
_kv = [ _kv ];
_kn = [ _kn ];
}
for( var ki = 0; ki < array_length(_kv); ki++ ) {
draw_set_color(valArray? COLORS.axis[ki] : (animator.prop.sep_axis? COLORS.axis[animator.index] : COLORS.panel_animation_graph_line));
ny[ki] = value_map(lerp(_kv[ki], _kn[ki], nly), _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
if(array_length(oy) > ki) draw_line(ox, oy[ki], nx, ny[ki]);
if(array_length(oy) > ki) oy[ki] = ny[ki];
draw_line(ox, oy[ki], nx, ny[ki]);
oy[ki] = ny[ki];
}
} else {
draw_set_color(animator.prop.sep_axis? COLORS.axis[animator.index] : COLORS.panel_animation_graph_line);
ny = value_map(lerp(key.value, key_next.value, nly), _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
if(oy != noone)
draw_line(ox, oy, nx, ny);
oy = ny;
} }
ox = nx; ox = nx;
oly = nly; oly = nly;
} }
} }
} } #endregion
if(animator.prop.show_graph && ds_list_size(animator.values) > 0) { if(animator.prop.show_graph && ds_list_size(animator.values) > 0) { #region draw line outside keyframe range
if(ds_list_size(animator.values) == 1) { //draw graph before and after var key_first = animator.values[| 0];
var key_first = animator.values[| 0]; var t_first = (key_first.time + 1) * ui(timeline_scale) + timeline_shift;
if(valArray) {
for( var ki = 0; ki < array_length(key_first.value); ki++ ) {
draw_set_color(COLORS.axis[ki]);
sy = value_map(key_first.value[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
draw_line(0, sy, bar_show_w, sy);
}
} else {
draw_set_color(animator.prop.sep_axis? COLORS.axis[animator.index] : COLORS.panel_animation_graph_line);
sy = value_map(key_first.value, _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
draw_line(0, sy, bar_show_w, sy);
}
} else { //draw graph before and after
var key_first = animator.values[| 0];
var t_first = (key_first.time + 1) * ui(timeline_scale) + timeline_shift;
var sy;
if(valArray) { _kv = key_first.value;
for( var ki = 0; ki < array_length(key_first.value); ki++ ) { if(!valArray) _kv = [ _kv ];
draw_set_color(COLORS.axis[ki]);
sy = value_map(key_first.value[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
draw_line(0, sy, t_first, sy);
}
} else {
draw_set_color(animator.prop.sep_axis? COLORS.axis[animator.index] : COLORS.panel_animation_graph_line);
sy = value_map(key_first.value, _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
draw_line(0, sy, t_first, sy);
}
var key_last = animator.values[| ds_list_size(animator.values) - 1];
var t_last = (key_last.time + 1) * ui(timeline_scale) + timeline_shift;
if(key_last.time < TOTAL_FRAMES) { for( var ki = 0; ki < array_length(_kv); ki++ ) {
if(valArray) { draw_set_color(valArray? COLORS.axis[ki] : (animator.prop.sep_axis? COLORS.axis[animator.index] : COLORS.panel_animation_graph_line));
for( var ki = 0; ki < array_length(key_last.value); ki++ ) { sy = value_map(_kv[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
draw_set_color(COLORS.axis[ki]); draw_line(0, sy, t_first, sy);
ny[ki] = value_map(key_last.value[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
draw_line(t_last, oy[ki], t_last, ny[ki]); if(ds_list_size(animator.values) == 1) oy[ki] = sy;
draw_line(t_last, oy[ki], bar_show_w, oy[ki]); }
var key_last = animator.values[| ds_list_size(animator.values) - 1];
var t_last = (key_last.time + 1) * ui(timeline_scale) + timeline_shift;
if(key_last.time < TOTAL_FRAMES) {
if(key_last.drivers.type) {
nx = t_last;
for( var _time = key_last.time; _time < TOTAL_FRAMES; _time++ ) {
_kv = animator.processDriver(_time, key_last);
if(!valArray) _kv = [ _kv ];
for( var ki = 0; ki < array_length(_kv); ki++ ) {
draw_set_color(valArray? COLORS.axis[ki] : (animator.prop.sep_axis? COLORS.axis[animator.index] : COLORS.panel_animation_graph_line));
ny[ki] = value_map(_kv[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
if(_time == key_last.time)
draw_line(t_last, oy[ki], t_last, ny[ki]);
else
draw_line(ox, oy[ki], nx, ny[ki]);
oy[ki] = ny[ki];
} }
} else {
draw_set_color(animator.prop.sep_axis? COLORS.axis[animator.index] : COLORS.panel_animation_graph_line); ox = nx;
ny = value_map(key_last.value, _gy_val_min, _gy_val_max, _gy_bottom, _gy_top); nx += ui(timeline_scale);
draw_line(t_last, oy, t_last, ny); }
draw_line(t_last, ny, bar_show_w, ny); } else {
_kv = key_last.value;
if(!valArray) _kv = [ _kv ];
for( var ki = 0; ki < array_length(_kv); ki++ ) {
draw_set_color(valArray? COLORS.axis[ki] : (animator.prop.sep_axis? COLORS.axis[animator.index] : COLORS.panel_animation_graph_line));
ny[ki] = value_map(_kv[ki], _gy_val_min, _gy_val_max, _gy_bottom, _gy_top);
draw_line(t_last, oy[ki], t_last, ny[ki]);
draw_line(t_last, ny[ki], bar_show_w, ny[ki]);
} }
} }
} }
} } #endregion
} #endregion } #endregion
function drawDopesheetGraph(prop, key_y, msx, msy) { #region function drawDopesheetGraph(prop, key_y, msx, msy) { #region
@ -818,7 +888,7 @@ function Panel_Animation() : PanelContent() constructor {
var _gy_top = key_y + ui(16); var _gy_top = key_y + ui(16);
var _gy_bottom = _gy_top + prop.graph_h - ui(8); var _gy_bottom = _gy_top + prop.graph_h - ui(8);
if(prop.type == VALUE_TYPE.color) { if(prop.type == VALUE_TYPE.color) { #region draw color
var amo = ds_list_size(prop.animator.values); var amo = ds_list_size(prop.animator.values);
var _prevKey = prop.animator.values[| 0]; var _prevKey = prop.animator.values[| 0];
@ -838,8 +908,7 @@ function Panel_Animation() : PanelContent() constructor {
var lrp = prop.animator.interpolate(key, key_next, _r); var lrp = prop.animator.interpolate(key, key_next, _r);
nc = merge_color(key.value, key_next.value, lrp); nc = merge_color(key.value, key_next.value, lrp);
if(_r > 0) if(_r > 0) draw_rectangle_color(ox, _gy_top, nx, _gy_bottom, oc, nc, nc, oc, 0);
draw_rectangle_color(ox, _gy_top, nx, _gy_bottom, oc, nc, nc, oc, 0);
ox = nx; ox = nx;
oc = nc; oc = nc;
@ -852,9 +921,9 @@ function Panel_Animation() : PanelContent() constructor {
draw_rectangle(key_next.dopesheet_x, _gy_top, bar_show_w, _gy_bottom, 0); draw_rectangle(key_next.dopesheet_x, _gy_top, bar_show_w, _gy_bottom, 0);
} }
return; return;
} } #endregion
if(prop.sep_axis) { if(prop.sep_axis) { #region draw number graphs
var _min = 999999; var _min = 999999;
var _max = -999999; var _max = -999999;
@ -875,9 +944,10 @@ function Panel_Animation() : PanelContent() constructor {
} }
for( var i = 0, n = array_length(prop.animators); i < n; i++ ) for( var i = 0, n = array_length(prop.animators); i < n; i++ )
drawDopesheetLine(prop.animators[i], key_y, msx, msy, _min, _max); drawDopesheetGraphLine(prop.animators[i], key_y, msx, msy, _min, _max);
} else } else
drawDopesheetLine(prop.animator, key_y, msx, msy); drawDopesheetGraphLine(prop.animator, key_y, msx, msy);
#endregion
} #endregion } #endregion
function drawDopesheetAnimatorKeysBG(animator, msx, msy) { #region function drawDopesheetAnimatorKeysBG(animator, msx, msy) { #region
@ -909,13 +979,13 @@ function Panel_Animation() : PanelContent() constructor {
if(pHOVER && point_in_circle(msx, msy, _tx, prop_dope_y, ui(6))) { if(pHOVER && point_in_circle(msx, msy, _tx, prop_dope_y, ui(6))) {
key_hover = key; key_hover = key;
draw_sprite_ui_uniform(THEME.timeline_keyframe, key.ease_y_lock? 2 : 5, _tx, prop_dope_y, 1, COLORS.panel_animation_keyframe_selected); draw_sprite_ui_uniform(THEME.timeline_key_ease, 0, _tx, prop_dope_y, 1, COLORS.panel_animation_keyframe_selected);
if(mouse_press(mb_left, pFOCUS) && !key_mod_press(SHIFT)) { if(mouse_press(mb_left, pFOCUS) && !key_mod_press(SHIFT)) {
keyframe_dragging = animator.values[| k]; keyframe_dragging = animator.values[| k];
keyframe_drag_type = KEYFRAME_DRAG_TYPE.ease_in; keyframe_drag_type = KEYFRAME_DRAG_TYPE.ease_in;
} }
} else } else
draw_sprite_ui_uniform(THEME.timeline_keyframe, key.ease_y_lock? 2 : 5, _tx, prop_dope_y, 1, COLORS.panel_animation_keyframe_unselected); draw_sprite_ui_uniform(THEME.timeline_key_ease, 0, _tx, prop_dope_y, 1, COLORS.panel_animation_keyframe_unselected);
} }
if(key.ease_out_type == CURVE_TYPE.bezier) { if(key.ease_out_type == CURVE_TYPE.bezier) {
@ -925,13 +995,13 @@ function Panel_Animation() : PanelContent() constructor {
if(pHOVER && point_in_circle(msx, msy, _tx, prop_dope_y, ui(6))) { if(pHOVER && point_in_circle(msx, msy, _tx, prop_dope_y, ui(6))) {
key_hover = key; key_hover = key;
draw_sprite_ui_uniform(THEME.timeline_keyframe, key.ease_y_lock? 3 : 5, _tx, prop_dope_y, 1, COLORS.panel_animation_keyframe_selected); draw_sprite_ui_uniform(THEME.timeline_key_ease, 1, _tx, prop_dope_y, 1, COLORS.panel_animation_keyframe_selected);
if(mouse_press(mb_left, pFOCUS) && !key_mod_press(SHIFT)) { if(mouse_press(mb_left, pFOCUS) && !key_mod_press(SHIFT)) {
keyframe_dragging = animator.values[| k]; keyframe_dragging = animator.values[| k];
keyframe_drag_type = KEYFRAME_DRAG_TYPE.ease_out; keyframe_drag_type = KEYFRAME_DRAG_TYPE.ease_out;
} }
} else } else
draw_sprite_ui_uniform(THEME.timeline_keyframe, key.ease_y_lock? 3 : 5, _tx, prop_dope_y, 1, COLORS.panel_animation_keyframe_unselected); draw_sprite_ui_uniform(THEME.timeline_key_ease, 1, _tx, prop_dope_y, 1, COLORS.panel_animation_keyframe_unselected);
} }
} }
@ -952,11 +1022,11 @@ function Panel_Animation() : PanelContent() constructor {
for( var j = 0, n = array_length(_cont.contexts); j < n; j++ ) { for( var j = 0, n = array_length(_cont.contexts); j < n; j++ ) {
var _cxt = _cont.contexts[j]; var _cxt = _cont.contexts[j];
if(!_cxt.show) continue; if(!_cxt.show) continue;
draw_sprite_ui_uniform(THEME.timeline_keyframe, 0, t, _cxt.y + ui(10), 1, COLORS._main_icon); draw_sprite_ui_uniform(THEME.timeline_key_empty, 0, t, _cxt.y + ui(10), 1, COLORS._main_icon);
} }
if(!_cont.show) continue; if(!_cont.show) continue;
draw_sprite_ui_uniform(THEME.timeline_keyframe, 0, t, node_y + ui(10), 1, COLORS._main_icon); draw_sprite_ui_uniform(THEME.timeline_key_empty, 0, t, node_y + ui(10), 1, COLORS._main_icon);
if(!_cont.item.show) continue; if(!_cont.item.show) continue;
@ -993,15 +1063,11 @@ function Panel_Animation() : PanelContent() constructor {
if(stagger_mode == 1 && array_exists(keyframe_selecting, keyframe)) if(stagger_mode == 1 && array_exists(keyframe_selecting, keyframe))
cc = key_hover == keyframe? COLORS.panel_animation_keyframe_selected : COLORS._main_accent; cc = key_hover == keyframe? COLORS.panel_animation_keyframe_selected : COLORS._main_accent;
var ind = 1; var ind = keyframe.getDrawIndex();
if(keyframe.ease_in_type == CURVE_TYPE.cut)
ind = 4;
if(keyframe.anim.prop.type == VALUE_TYPE.trigger)
ind = 4;
draw_sprite_ui_uniform(THEME.timeline_keyframe, ind, t, prop_y, 1, cc); draw_sprite_ui_uniform(THEME.timeline_keyframe, ind, t, prop_y, 1, cc);
if(array_exists(keyframe_selecting, keyframe)) if(array_exists(keyframe_selecting, keyframe))
draw_sprite_ui_uniform(THEME.timeline_keyframe_selecting, ind != 1, t, prop_y, 1, COLORS._main_accent); draw_sprite_ui_uniform(THEME.timeline_keyframe_selecting, ind, t, prop_y, 1, COLORS._main_accent);
if(keyframe_boxing) { if(keyframe_boxing) {
var box_x0 = min(keyframe_box_sx, msx); var box_x0 = min(keyframe_box_sx, msx);

View file

@ -3,9 +3,6 @@ function Panel_History() : PanelContent() constructor {
w = ui(400); w = ui(400);
h = ui(480); h = ui(480);
title_height = 64;
padding = 24;
anchor = ANCHOR.left | ANCHOR.top; anchor = ANCHOR.left | ANCHOR.top;
hold = false; hold = false;
@ -13,10 +10,9 @@ function Panel_History() : PanelContent() constructor {
h_min = 320; h_min = 320;
hovering = -1; hovering = -1;
redo_list = ds_list_create(); redo_list = ds_list_create();
undo_list = ds_list_create(); undo_list = ds_list_create();
click_hold = noone; click_hold = noone;
showHeader = false;
function refreshList() { function refreshList() {
ds_list_clear(redo_list); ds_list_clear(redo_list);
@ -158,13 +154,10 @@ function Panel_History() : PanelContent() constructor {
draw_clear_alpha(COLORS.panel_bg_clear, 0); draw_clear_alpha(COLORS.panel_bg_clear, 0);
PANEL_PADDING PANEL_PADDING
draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text);
draw_text_add(in_dialog? ui(56) : ui(24), title_height / 2, title);
var px = ui(padding); var px = ui(padding);
var py = ui(title_height); var py = ui(padding);
var pw = w - ui(padding + padding); var pw = w - ui(padding + padding);
var ph = h - ui(title_height + padding); var ph = h - ui(padding + padding);
draw_sprite_stretched(THEME.ui_panel_bg, 1, px - ui(8), py - ui(8), pw + ui(16), ph + ui(16)); draw_sprite_stretched(THEME.ui_panel_bg, 1, px - ui(8), py - ui(8), pw + ui(16), ph + ui(16));
sc_history.setFocusHover(pFOCUS, pHOVER); sc_history.setFocusHover(pFOCUS, pHOVER);

View file

@ -0,0 +1,73 @@
function Panel_Console() : PanelContent() constructor {
title = "Console";
w = ui(640);
h = ui(320);
command = "";
history = [];
cmd_history = [];
cmd_index = 0;
keyboard_string = "";
static submit_command = function() {
if(command == "") return;
array_push(history, { txt: command, color: COLORS._main_text_sub });
array_push(cmd_history, command);
var cmd = string_splice(command, " ");
switch(cmd[0]) {
case "flag":
if(array_length(cmd) < 2) break;
var flg = array_safe_get(cmd, 1, "");
global.FLAG[$ flg] = !global.FLAG[$ flg];
array_push(history, { txt: $"Toggled debug flag: {flg} = {global.FLAG[$ flg]? "True" : "False"}", color: COLORS._main_value_positive });
break;
}
keyboard_string = "";
command = "";
}
function drawContent(panel) {
HOTKEY_BLOCK = true;
command = keyboard_string;
draw_clear_alpha(CDEF.main_dkblack, 1);
draw_set_color(c_black);
draw_set_alpha(0.75);
draw_rectangle(0, h - ui(28), w, h, false);
draw_set_alpha(1);
draw_set_text(f_code, fa_left, fa_bottom, COLORS._main_text);
draw_text(ui(8), h - ui(4), command);
draw_set_color(COLORS._main_text_sub);
draw_text(ui(8) + string_width(command), h - ui(4), "_");
var hy = h - ui(32);
for( var i = 0; i < array_length(history); i++ ) {
var his = history[array_length(history) - i - 1];
var txt = his.txt;
draw_set_color(his.color);
draw_text_ext(ui(8), hy, txt, -1, w - ui(16));
hy -= string_height_ext(txt, -1, w - ui(16));
if(hy <= 0) break;
}
if(keyboard_check_pressed(vk_enter))
submit_command();
if(keyboard_check_pressed(vk_up)) {
cmd_index = max(0, cmd_index - 1);
keyboard_string = array_safe_get(cmd_history, cmd_index, "");
command = keyboard_string;
} else if(keyboard_check_pressed(vk_anykey))
cmd_index = array_length(cmd_history);
}
}

View file

@ -0,0 +1,92 @@
function Panel_Keyframe_Driver(key) : Panel_Linear_Setting() constructor {
title = __txtx("driver_settings", "Driver Settings");
self.key = key;
w = ui(380);
#region data
prop_default = [
new __Panel_Linear_Setting_Item(
__txtx("driver_type", "Type"),
new scrollBox( [ "None", "Linear", "Wiggle", "Sine" ], function(val) { key.drivers.type = val; setProp(); }),
function() { return key.drivers.type; }
),
];
prop_linear = [
new __Panel_Linear_Setting_Item(
__txt("Speed"),
new textBox( TEXTBOX_INPUT.number, function(val) { key.drivers.speed = val; }).setSlidable(),
function() { return key.drivers.speed; }
),
];
prop_wiggle = [
new __Panel_Linear_Setting_Item(
__txt("Seed"),
new textBox( TEXTBOX_INPUT.number, function(val) { key.drivers.seed = val; }).setSlidable(),
function() { return key.drivers.seed; }
),
new __Panel_Linear_Setting_Item(
__txt("Sync axis"),
new checkBox( function() { key.drivers.axis_sync = !key.drivers.axis_sync; }),
function() { return key.drivers.axis_sync }
),
new __Panel_Linear_Setting_Item(
__txt("Frequency"),
new textBox( TEXTBOX_INPUT.number, function(val) { key.drivers.frequency = val; }).setSlidable(),
function() { return key.drivers.frequency; }
),
new __Panel_Linear_Setting_Item(
__txt("Amplitude"),
new textBox( TEXTBOX_INPUT.number, function(val) { key.drivers.amplitude = val; }).setSlidable(),
function() { return key.drivers.amplitude; }
),
new __Panel_Linear_Setting_Item(
__txt("Octave"),
new textBox( TEXTBOX_INPUT.number, function(val) { key.drivers.octave = val; }).setSlidable(),
function() { return key.drivers.octave; }
),
];
prop_sine = [
new __Panel_Linear_Setting_Item(
__txt("Sync axis"),
new checkBox( function() { key.drivers.axis_sync = !key.drivers.axis_sync; }),
function() { return key.drivers.axis_sync }
),
new __Panel_Linear_Setting_Item(
__txt("Frequency"),
new textBox( TEXTBOX_INPUT.number, function(val) { key.drivers.frequency = val; }).setSlidable(),
function() { return key.drivers.frequency; }
),
new __Panel_Linear_Setting_Item(
__txt("Amplitude"),
new textBox( TEXTBOX_INPUT.number, function(val) { key.drivers.amplitude = val; }).setSlidable(),
function() { return key.drivers.amplitude; }
),
new __Panel_Linear_Setting_Item(
__txt("Phase"),
new textBox( TEXTBOX_INPUT.number, function(val) { key.drivers.phase = val; }).setSlidable(),
function() { return key.drivers.phase ; }
),
];
#endregion
static setProp = function() {
properties = [];
array_append(properties, prop_default);
switch(key.drivers.type) {
case DRIVER_TYPE.linear : array_append(properties, prop_linear); break;
case DRIVER_TYPE.wiggle : array_append(properties, prop_wiggle); break;
case DRIVER_TYPE.sine : array_append(properties, prop_sine); break;
}
setHeight();
panel.contentResize();
}
run_in(1, function() { setProp(); });
}

View file

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

View file

@ -377,17 +377,17 @@ function Panel_Preview() : PanelContent() constructor {
canvas_zooming = false; canvas_zooming = false;
} }
if(pFOCUS && pHOVER && canvas_hover) { if(pHOVER && canvas_hover) {
var _doDragging = false; var _doDragging = false;
var _doZooming = false; var _doZooming = false;
if(mouse_press(PREFERENCES.pan_mouse_key)) { if(mouse_press(PREFERENCES.pan_mouse_key, pFOCUS)) {
_doDragging = true; _doDragging = true;
canvas_drag_key = PREFERENCES.pan_mouse_key; canvas_drag_key = PREFERENCES.pan_mouse_key;
} else if(mouse_press(mb_left) && canvas_dragging_key) { } else if(mouse_press(mb_left, pFOCUS) && canvas_dragging_key) {
_doDragging = true; _doDragging = true;
canvas_drag_key = mb_left; canvas_drag_key = mb_left;
} else if(mouse_press(mb_left) && canvas_zooming_key) { } else if(mouse_press(mb_left, pFOCUS) && canvas_zooming_key) {
_doZooming = true; _doZooming = true;
canvas_drag_key = mb_left; canvas_drag_key = mb_left;
} }
@ -461,17 +461,17 @@ function Panel_Preview() : PanelContent() constructor {
canvas_zooming = false; canvas_zooming = false;
} }
if(pFOCUS && pHOVER && canvas_hover) { if(pHOVER && canvas_hover) {
var _doDragging = false; var _doDragging = false;
var _doZooming = false; var _doZooming = false;
if(mouse_press(PREFERENCES.pan_mouse_key)) { if(mouse_press(PREFERENCES.pan_mouse_key, pFOCUS)) {
_doDragging = true; _doDragging = true;
canvas_drag_key = PREFERENCES.pan_mouse_key; canvas_drag_key = PREFERENCES.pan_mouse_key;
} else if(mouse_press(mb_left) && canvas_dragging_key) { } else if(mouse_press(mb_left, pFOCUS) && canvas_dragging_key) {
_doDragging = true; _doDragging = true;
canvas_drag_key = mb_left; canvas_drag_key = mb_left;
} else if(mouse_press(mb_left) && canvas_zooming_key) { } else if(mouse_press(mb_left, pFOCUS) && canvas_zooming_key) {
_doZooming = true; _doZooming = true;
canvas_drag_key = mb_left; canvas_drag_key = mb_left;
} }

View file

@ -92,6 +92,8 @@
PREFERENCES.collection_preview_speed = 60; PREFERENCES.collection_preview_speed = 60;
PREFERENCES.collection_scale = 1; PREFERENCES.collection_scale = 1;
PREFERENCES.caret_blink = 0.75;
PREFERENCES_DEF = variable_clone(PREFERENCES); PREFERENCES_DEF = variable_clone(PREFERENCES);
#endregion #endregion

View file

@ -64,32 +64,34 @@ function random1D(seed, startRange = 0, endRange = 1) { #region
return lerp(f1, f2, _f); return lerp(f1, f2, _f);
} #endregion } #endregion
function perlin1D(seed, scale = 1, octave = 1, startRange = 0, endRange = 1) { #region function __noise(_x) { #region
var i = floor(_x);
var f = frac(_x);
var a = random1D(i);
var b = random1D(i + 1);
var u = f * f * (3.0 - 2.0 * f);
return lerp(a, b, u);
} #endregion
function perlin1D(pos, seed, scale = 1, octave = 1, startRange = 0, endRange = 1) { #region
var amp = power(2., octave - 1.) / (power(2., octave) - 1.); var amp = power(2., octave - 1.) / (power(2., octave) - 1.);
var val = 0; var n = 0.;
repeat(octave) { repeat(octave) {
val = random1D(seed * scale) * amp; n += __noise(seed + pos * scale) * amp;
scale *= 2;
amp /= 2; amp *= .5;
pos *= 2.;
} }
return lerp(startRange, endRange, val); return lerp(startRange, endRange, n);
} #endregion } #endregion
function wiggle(_min = 0, _max = 1, _freq = 1, _time = 0, _seed = 0, _octave = 1) { #region function wiggle(_min = 0, _max = 1, _freq = 1, _time = 0, _seed = 0, _octave = 1) { #region
_freq = max(1, _freq); return perlin1D(_time, _seed, _freq, _octave, _min, _max);
var sdMin = floor(_time / _freq) * _freq;
var sdMax = sdMin + _freq;
var _x0 = perlin1D(PROJECT.seed + _seed + sdMin, 1, _octave);
var _x1 = perlin1D(PROJECT.seed + _seed + sdMax, 1, _octave);
var t = (_time - sdMin) / (sdMax - sdMin);
t = -(cos(pi * t) - 1) / 2;
var _lrp = lerp(_x0, _x1, t);
return lerp(_min, _max, _lrp);
} #endregion } #endregion
function getWiggle(_min = 0, _max = 1, _freq = 1, _time = 0, _seed = 0, startTime = noone, endTime = noone) { #region function getWiggle(_min = 0, _max = 1, _freq = 1, _time = 0, _seed = 0, startTime = noone, endTime = noone) { #region

View file

@ -545,6 +545,8 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
if(auto_update && (keyboard_check_pressed(vk_anykey) || modified)) if(auto_update && (keyboard_check_pressed(vk_anykey) || modified))
apply(); apply();
if(modified) typing = 100;
if(keyboard_check_pressed(vk_left)) onKey(vk_left); if(keyboard_check_pressed(vk_left)) onKey(vk_left);
if(keyboard_check_pressed(vk_right)) onKey(vk_right); if(keyboard_check_pressed(vk_right)) onKey(vk_right);
if(keyboard_check_pressed(vk_up)) onKey(vk_up); if(keyboard_check_pressed(vk_up)) onKey(vk_up);
@ -603,6 +605,7 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
draw_set_text(font, fa_left, fa_top, color); draw_set_text(font, fa_left, fa_top, color);
draw_set_alpha(0.5 + 0.5 * interactable); draw_set_alpha(0.5 + 0.5 * interactable);
_y += ui(1);
var ch_x = _x; var ch_x = _x;
var ch_y = _y; var ch_y = _y;
@ -860,13 +863,17 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
if(cursor_pos_y != 0 && cursor_pos_x != 0) { if(cursor_pos_y != 0 && cursor_pos_x != 0) {
draw_set_color(COLORS._main_text_accent); draw_set_color(COLORS._main_text_accent);
draw_set_alpha(typing || current_time % (PREFERENCES.caret_blink * 2000) > PREFERENCES.caret_blink * 1000);
draw_line_width(cursor_pos_x, cursor_pos_y, cursor_pos_x, cursor_pos_y + c_h, 2); draw_line_width(cursor_pos_x, cursor_pos_y, cursor_pos_x, cursor_pos_y + c_h, 2);
draw_set_alpha(1);
} }
if(o_dialog_textbox_autocomplete.textbox == self) { if(o_dialog_textbox_autocomplete.textbox == self) {
o_dialog_textbox_autocomplete.dialog_x = rx + cursor_pos_x + 1; o_dialog_textbox_autocomplete.dialog_x = rx + cursor_pos_x + 1;
o_dialog_textbox_autocomplete.dialog_y = ry + cursor_pos_y + line_get_height() + 1; o_dialog_textbox_autocomplete.dialog_y = ry + cursor_pos_y + line_get_height() + 1;
} }
if(typing) typing--;
#endregion #endregion
if(autocomplete_modi && PREFERENCES.widget_autocomplete_delay >= 0 && autocomplete_delay >= PREFERENCES.widget_autocomplete_delay) { if(autocomplete_modi && PREFERENCES.widget_autocomplete_delay >= 0 && autocomplete_delay >= PREFERENCES.widget_autocomplete_delay) {

View file

@ -43,6 +43,8 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
range_min = 0; range_min = 0;
range_max = 0; range_max = 0;
disp_text_fx = [];
sprite_index = -1; sprite_index = -1;
text_surface = surface_create(1, 1); text_surface = surface_create(1, 1);
@ -246,7 +248,7 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
} }
} }
KEYBOARD_STRING = ""; KEYBOARD_STRING = "";
keyboard_lastkey = -1; keyboard_lastkey = -1;
#endregion #endregion
@ -262,6 +264,8 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
if(KEYBOARD_PRESSED == vk_down || keyboard_check_pressed(vk_down)) { _input_text = string(toNumber(_input_text) - _inc); apply(); } if(KEYBOARD_PRESSED == vk_down || keyboard_check_pressed(vk_down)) { _input_text = string(toNumber(_input_text) - _inc); apply(); }
} }
if(edited) typing = 100;
if(keyboard_check_pressed(vk_home)) { if(keyboard_check_pressed(vk_home)) {
if(key_mod_press(SHIFT)) { if(key_mod_press(SHIFT)) {
if(cursor_select == -1) if(cursor_select == -1)
@ -287,18 +291,10 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
static display_text = function(_x, _y, _text, _w, _m = -1) { #region static display_text = function(_x, _y, _text, _w, _m = -1) { #region
draw_set_alpha(0.5 + 0.5 * interactable); draw_set_alpha(0.5 + 0.5 * interactable);
_y += ui(1);
switch(format) { draw_set_text(font == noone? f_p0 : font, fa_left, fa_top, color);
case TEXT_AREA_FORMAT._default : draw_text_add(_x + disp_x, _y, _text);
draw_set_text(font == noone? f_p0 : font, fa_left, fa_top, color);
draw_text_add(_x + disp_x, _y, _text);
break;
case TEXT_AREA_FORMAT.node_title :
draw_set_text(font == noone? f_p0 : font, fa_left, fa_top, color);
draw_text_add(_x + disp_x, _y, _text);
break;
}
draw_set_alpha(1); draw_set_alpha(1);
var _xx = _x + disp_x; var _xx = _x + disp_x;
@ -479,7 +475,11 @@ function textBox(_input, _onModify) : textInput(_input, _onModify) constructor {
BLEND_NORMAL BLEND_NORMAL
draw_set_color(COLORS._main_text_accent); draw_set_color(COLORS._main_text_accent);
draw_set_alpha(typing || current_time % (PREFERENCES.caret_blink * 2000) > PREFERENCES.caret_blink * 1000);
draw_line_width(cursor_pos, c_y0, cursor_pos, c_y1, 2); draw_line_width(cursor_pos, c_y0, cursor_pos, c_y1, 2);
draw_set_alpha(1);
if(typing) typing--;
#endregion #endregion
disp_x_to = clamp(disp_x_to, disp_x_min, disp_x_max); disp_x_to = clamp(disp_x_to, disp_x_min, disp_x_max);

View file

@ -4,6 +4,8 @@ function textInput(_input, _onModify) : widget() constructor {
side_button = noone; side_button = noone;
selecting = false; selecting = false;
typing = false;
static _resetFocus = function() { resetFocus(); } static _resetFocus = function() { resetFocus(); }
static onKey = function(key) {} static onKey = function(key) {}

View file

@ -15,9 +15,17 @@
globalvar window_min_w; window_min_w = 960; globalvar window_min_w; window_min_w = 960;
globalvar window_min_h; window_min_h = 600; globalvar window_min_h; window_min_h = 600;
globalvar window_preminimize_rect; window_preminimize_rect = [ 0, 0, 1, 1 ];
#macro DISPLAY_REFRESH CURRENT_PANEL = panelSerialize(); display_refresh(); #macro DISPLAY_REFRESH CURRENT_PANEL = panelSerialize(); display_refresh();
#endregion #endregion
function winManInit() { #region
if(OS == os_macosx) mac_window_init();
window_preminimize_rect = [ 0, 0, 1, 1 ];
} #endregion
function winMan_getData(curr = true) { #region function winMan_getData(curr = true) { #region
INLINE INLINE
var _monitors = display_measure_all(); var _monitors = display_measure_all();
@ -55,6 +63,7 @@ function winMan_setRect(_x, _y, _w, _h) { #region
function winMan_isMinimized() { #region function winMan_isMinimized() { #region
INLINE INLINE
if(OS == os_macosx) return false;
return gameframe_is_natively_minimized(); return gameframe_is_natively_minimized();
} #endregion } #endregion

View file

@ -22,7 +22,8 @@ vec3 hsv2rgb(vec3 c) { #region
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
} #endregion } #endregion
float random (in vec2 st, float seed) { return fract(sin(dot(st.xy + vec2(21.4564, 46.8564), vec2(12.9898, 78.233))) * (43758.5453123 + seed)); } float random (in vec2 st, float seed) { return fract(sin(dot(st.xy + vec2(21.456, 46.856), vec2(12.989, 78.233))) * (43758.545 + seed)); }
float randomFloat (in vec2 st, float seed) { #region float randomFloat (in vec2 st, float seed) { #region
float sedSt = floor(seed); float sedSt = floor(seed);
float sedFr = fract(seed); float sedFr = fract(seed);
@ -30,7 +31,7 @@ float randomFloat (in vec2 st, float seed) { #region
return mix(random(st, sedSt), random(st, sedSt + 1.), sedFr); return mix(random(st, sedSt), random(st, sedSt + 1.), sedFr);
} #endregion } #endregion
vec2 random2 (in vec2 st, float seed) { return vec2(random(st, seed), random(st, seed + 1.864354564)); } vec2 random2 (in vec2 st, float seed) { return vec2(random(st, seed), random(st, seed + 1.864)); }
float noise (in vec2 st, in vec2 scale) { #region float noise (in vec2 st, in vec2 scale) { #region
vec2 cellMin = floor(st); vec2 cellMin = floor(st);

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

View file

@ -0,0 +1,97 @@
{
"resourceType": "GMSprite",
"resourceVersion": "1.0",
"name": "s_mk_sparkle_bg",
"bbox_bottom": 15,
"bbox_left": 0,
"bbox_right": 15,
"bbox_top": 0,
"bboxMode": 0,
"collisionKind": 1,
"collisionTolerance": 0,
"DynamicTexturePage": false,
"edgeFiltering": false,
"For3D": false,
"frames": [
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"98733043-f051-40f2-8689-df0bdcdfde2c",},
],
"gridX": 0,
"gridY": 0,
"height": 16,
"HTile": false,
"layers": [
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"ed23f74d-9aa2-4686-8fba-e7707265ee05","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
],
"nineSlice": {
"resourceType": "GMNineSliceData",
"resourceVersion": "1.0",
"bottom": 2,
"enabled": true,
"guideColour": [
4294902015,
4294902015,
4294902015,
4294902015,
],
"highlightColour": 1728023040,
"highlightStyle": 0,
"left": 2,
"right": 2,
"tileMode": [
0,
0,
0,
0,
0,
],
"top": 2,
},
"origin": 4,
"parent": {
"name": "src",
"path": "folders/nodes/data/MK effects/mk sparkle/src.yy",
},
"preMultiplyAlpha": false,
"sequence": {
"resourceType": "GMSequence",
"resourceVersion": "1.4",
"name": "s_mk_sparkle_bg",
"autoRecord": true,
"backdropHeight": 768,
"backdropImageOpacity": 0.5,
"backdropImagePath": "",
"backdropWidth": 1366,
"backdropXOffset": 0.0,
"backdropYOffset": 0.0,
"events": {"resourceType":"KeyframeStore<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"eventStubScript": null,
"eventToFunction": {},
"length": 1.0,
"lockOrigin": false,
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"playback": 1,
"playbackSpeed": 30.0,
"playbackSpeedType": 0,
"showBackdrop": true,
"showBackdropImage": false,
"timeUnits": 1,
"tracks": [
{"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"98733043-f051-40f2-8689-df0bdcdfde2c","path":"sprites/s_mk_sparkle_bg/s_mk_sparkle_bg.yy",},},},"Disabled":false,"id":"c885660b-2ef9-4a21-898b-00a58fa0a02b","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
],
"visibleRange": null,
"volume": 1.0,
"xorigin": 8,
"yorigin": 8,
},
"swatchColours": null,
"swfPrecision": 2.525,
"textureGroupId": {
"name": "Default",
"path": "texturegroups/Default",
},
"type": 0,
"VTile": false,
"width": 16,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

View file

@ -0,0 +1,97 @@
{
"resourceType": "GMSprite",
"resourceVersion": "1.0",
"name": "s_mk_sparkle_select",
"bbox_bottom": 15,
"bbox_left": 0,
"bbox_right": 15,
"bbox_top": 0,
"bboxMode": 0,
"collisionKind": 1,
"collisionTolerance": 0,
"DynamicTexturePage": false,
"edgeFiltering": false,
"For3D": false,
"frames": [
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"cacdc029-4de5-4c88-aa92-e2321237da8a",},
],
"gridX": 0,
"gridY": 0,
"height": 16,
"HTile": false,
"layers": [
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"0400363c-8794-4415-9f8b-f26332acc5e3","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
],
"nineSlice": {
"resourceType": "GMNineSliceData",
"resourceVersion": "1.0",
"bottom": 4,
"enabled": true,
"guideColour": [
4294902015,
4294902015,
4294902015,
4294902015,
],
"highlightColour": 1728023040,
"highlightStyle": 0,
"left": 4,
"right": 4,
"tileMode": [
0,
0,
0,
0,
0,
],
"top": 4,
},
"origin": 4,
"parent": {
"name": "src",
"path": "folders/nodes/data/MK effects/mk sparkle/src.yy",
},
"preMultiplyAlpha": false,
"sequence": {
"resourceType": "GMSequence",
"resourceVersion": "1.4",
"name": "s_mk_sparkle_select",
"autoRecord": true,
"backdropHeight": 768,
"backdropImageOpacity": 0.5,
"backdropImagePath": "",
"backdropWidth": 1366,
"backdropXOffset": 0.0,
"backdropYOffset": 0.0,
"events": {"resourceType":"KeyframeStore<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"eventStubScript": null,
"eventToFunction": {},
"length": 1.0,
"lockOrigin": false,
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"playback": 1,
"playbackSpeed": 30.0,
"playbackSpeedType": 0,
"showBackdrop": true,
"showBackdropImage": false,
"timeUnits": 1,
"tracks": [
{"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"cacdc029-4de5-4c88-aa92-e2321237da8a","path":"sprites/s_mk_sparkle_select/s_mk_sparkle_select.yy",},},},"Disabled":false,"id":"0ad5bc0c-0f1d-4297-a1ab-5d38fa507c30","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
],
"visibleRange": null,
"volume": 1.0,
"xorigin": 8,
"yorigin": 8,
},
"swatchColours": null,
"swfPrecision": 2.525,
"textureGroupId": {
"name": "Default",
"path": "texturegroups/Default",
},
"type": 0,
"VTile": false,
"width": 16,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,74 @@
{
"resourceType": "GMSprite",
"resourceVersion": "1.0",
"name": "s_node_spout",
"bbox_bottom": 59,
"bbox_left": 5,
"bbox_right": 60,
"bbox_top": 4,
"bboxMode": 0,
"collisionKind": 1,
"collisionTolerance": 0,
"DynamicTexturePage": false,
"edgeFiltering": false,
"For3D": false,
"frames": [
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"01274803-f988-488b-ae38-4ba029f38033",},
],
"gridX": 0,
"gridY": 0,
"height": 64,
"HTile": false,
"layers": [
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"1cced84d-f046-475d-b8f6-7af2b8ff62df","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
],
"nineSlice": null,
"origin": 4,
"parent": {
"name": "IO",
"path": "folders/nodes/icons/IO.yy",
},
"preMultiplyAlpha": false,
"sequence": {
"resourceType": "GMSequence",
"resourceVersion": "1.4",
"name": "s_node_spout",
"autoRecord": true,
"backdropHeight": 768,
"backdropImageOpacity": 0.5,
"backdropImagePath": "",
"backdropWidth": 1366,
"backdropXOffset": 0.0,
"backdropYOffset": 0.0,
"events": {"resourceType":"KeyframeStore<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"eventStubScript": null,
"eventToFunction": {},
"length": 1.0,
"lockOrigin": false,
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"playback": 1,
"playbackSpeed": 30.0,
"playbackSpeedType": 0,
"showBackdrop": true,
"showBackdropImage": false,
"timeUnits": 1,
"tracks": [
{"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"01274803-f988-488b-ae38-4ba029f38033","path":"sprites/s_node_spout/s_node_spout.yy",},},},"Disabled":false,"id":"a15d36a8-8986-4e69-a4e2-a7599974b5fb","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
],
"visibleRange": null,
"volume": 1.0,
"xorigin": 32,
"yorigin": 32,
},
"swatchColours": null,
"swfPrecision": 2.525,
"textureGroupId": {
"name": "Default",
"path": "texturegroups/Default",
},
"type": 0,
"VTile": false,
"width": 64,
}