diff --git a/scripts/node_anim_priority/node_anim_priority.gml b/scripts/node_anim_priority/node_anim_priority.gml index 29c401431..a0296e8a6 100644 --- a/scripts/node_anim_priority/node_anim_priority.gml +++ b/scripts/node_anim_priority/node_anim_priority.gml @@ -1,25 +1,26 @@ function rearrange_priority(node, newpri) { - if(node.anim_priority == newpri) return; - - var prev = node.anim_priority; - var down = prev > newpri; + if(node.anim_priority == floor(newpri)) return; node.anim_priority = newpri; var amo = ds_map_size(PROJECT.nodeMap); - var k = ds_map_find_first(PROJECT.nodeMap); + var k = ds_map_find_first(PROJECT.nodeMap); + var pr = ds_priority_create(); repeat(amo) { var _node = PROJECT.nodeMap[? k]; k = ds_map_find_next(PROJECT.nodeMap, k); if(!_node.active) continue; - if(_node == node) continue; - - if(down && _node.anim_priority >= newpri && _node.anim_priority <= prev) - _node.anim_priority++; - if(!down && _node.anim_priority <= newpri && _node.anim_priority >= prev) - _node.anim_priority--; + ds_priority_add(pr, _node, _node.anim_priority); } + var _prRun = 0; + while(!ds_priority_empty(pr)) { + var _node = ds_priority_delete_min(pr); + _node.anim_priority = _prRun++; + } + + ds_priority_destroy(pr); + PANEL_ANIMATION.updatePropertyList(); } \ No newline at end of file diff --git a/scripts/panel_animation/panel_animation.gml b/scripts/panel_animation/panel_animation.gml index 2fbaed258..7d735d8f7 100644 --- a/scripts/panel_animation/panel_animation.gml +++ b/scripts/panel_animation/panel_animation.gml @@ -846,7 +846,7 @@ function Panel_Animation() : PanelContent() constructor { if(pHOVER && point_in_circle(msx, msy, _tx, prop_dope_y, ui(6))) { 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); - if(mouse_press(mb_left, pFOCUS)) { + if(mouse_press(mb_left, pFOCUS) && !key_mod_press(SHIFT)) { keyframe_dragging = animator.values[| k]; keyframe_drag_type = KEYFRAME_DRAG_TYPE.ease_in; } @@ -862,7 +862,7 @@ function Panel_Animation() : PanelContent() constructor { if(pHOVER && point_in_circle(msx, msy, _tx, prop_dope_y, ui(6))) { 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); - if(mouse_press(mb_left, pFOCUS)) { + if(mouse_press(mb_left, pFOCUS) && !key_mod_press(SHIFT)) { keyframe_dragging = animator.values[| k]; keyframe_drag_type = KEYFRAME_DRAG_TYPE.ease_out; } @@ -900,7 +900,7 @@ function Panel_Animation() : PanelContent() constructor { cc = COLORS.panel_animation_keyframe_selected; key_hover = keyframe; - if(pFOCUS) { + if(pFOCUS && !key_mod_press(SHIFT)) { if(DOUBLE_CLICK) { keyframe_dragging = keyframe; keyframe_drag_type = KEYFRAME_DRAG_TYPE.ease_both; @@ -1057,8 +1057,8 @@ function Panel_Animation() : PanelContent() constructor { var _node_y = 0; draw_set_text(f_p2, fa_left, fa_center); - var hovering = noone; - var hoverIndex = 0; + var hovering_priority = -999999; + var hoverIndex = 0; value_hovering = noone; if(mouse_click(mb_left, pFOCUS)) @@ -1099,7 +1099,7 @@ function Panel_Animation() : PanelContent() constructor { draw_sprite_ui_uniform(THEME.arrow, _node.anim_show? 3 : 0, ui(10), _node_y, 1, COLORS._main_icon, 0.75); draw_set_font(f_p3); - var nodeName = $"[{_node.name}] "; + var nodeName = $"[{_node.anim_priority}] [{_node.name}] "; var tw = string_width(nodeName); draw_set_color(node_ordering == _node? COLORS._main_text_accent : COLORS._main_text); @@ -1120,8 +1120,8 @@ function Panel_Animation() : PanelContent() constructor { draw_set_alpha(1); if(!_node.anim_show) { - if(pHOVER && point_in_rectangle(msx, msy, 0, _node_y_start, lable_w, _node_y + ui(22))) - hovering = _node; + if(pHOVER && msy > _node_y_start) + hovering_priority = _node.anim_priority + 0.5; continue; } @@ -1142,17 +1142,13 @@ function Panel_Animation() : PanelContent() constructor { } } //end prop loop - if(pHOVER && point_in_rectangle(msx, msy, 0, _node_y_start, lable_w, ty)) - hovering = _node; + if(pHOVER && msy > _node_y_start) + hovering_priority = _node.anim_priority + 0.5; } //end node loop - if(hovering == noone && _node != noone) - hovering = _node; - - if(hovering != noone && node_ordering != noone) { - hoverIndex = hovering.anim_priority; - rearrange_priority(node_ordering, hoverIndex); + if(node_ordering != noone) { + rearrange_priority(node_ordering, hovering_priority); if(mouse_release(mb_left)) node_ordering = noone; @@ -1573,19 +1569,20 @@ function Panel_Animation() : PanelContent() constructor { #endregion if(pHOVER && point_in_rectangle(msx, msy, 0, ui(18), dope_sheet_w, dope_sheet_h)) { - if(mouse_press(mb_left, pFOCUS) || mouse_press(mb_right, pFOCUS)) { + if(mouse_press(mb_right, pFOCUS) && key_hover == noone) + keyframe_selecting = []; + + if(mouse_press(mb_left, pFOCUS)) { if(key_hover == noone) { keyframe_selecting = []; + } else if(key_mod_press(SHIFT)) { + if(array_exists(keyframe_selecting, key_hover)) + array_remove(keyframe_selecting, key_hover); + else + array_push(keyframe_selecting, key_hover) } else { - if(key_mod_press(SHIFT)) { - if(array_exists(keyframe_selecting, key_hover)) - array_remove(keyframe_selecting, key_hover); - else - array_push(keyframe_selecting, key_hover) - } else { - if(!array_exists(keyframe_selecting, key_hover)) - keyframe_selecting = [ key_hover ]; - } + if(!array_exists(keyframe_selecting, key_hover)) + keyframe_selecting = [ key_hover ]; } }