diff --git a/source/funkin/editors/character/CharacterAnimsWindow.hx b/source/funkin/editors/character/CharacterAnimsWindow.hx index 3599c5b0..92a68ecd 100644 --- a/source/funkin/editors/character/CharacterAnimsWindow.hx +++ b/source/funkin/editors/character/CharacterAnimsWindow.hx @@ -40,16 +40,28 @@ class CharacterAnimsWindow extends UIButtonList { alpha = 0.7; for (anim in character.getAnimOrder()) - addAnimation(character.animDatas.get(anim)); + addAnimation(character.animDatas.get(anim), -1, false); addButton.callback = generateAnimation; setAnimAutoComplete(CoolUtil.getAnimsListFromSprite(character)); + + // dragCallback = (button:CharacterAnimButton, oldID:Int, newID:Int) -> {} } public var ghosts:Array = []; + var __movingAnimOldOrder:Int = -1; public override function update(elapsed:Float) { + var __oldMoving:CharacterAnimButton = curMoving; super.update(elapsed); + if (curMoving != null && __oldMoving == null) + __movingAnimOldOrder = curMoving.ID; + + if (curMoving == null && __oldMoving != null) + if (__movingAnimOldOrder != __oldMoving.ID) + CharacterEditor.undos.addToUndo(CAnimEditOrder(__movingAnimOldOrder, __oldMoving.ID)); + + animsList = [for (button in buttons) button.anim]; character.ghosts = ghosts; } @@ -84,7 +96,7 @@ class CharacterAnimsWindow extends UIButtonList { public function removeAnimDisplay(name:String) displayAnimsFramesList.remove(name); - public function deleteAnimation(button:CharacterAnimButton) { + public function deleteAnimation(button:CharacterAnimButton, addToUndo:Bool = true) { if (buttons.members.length <= 1) return; if (character.getAnimName() == button.anim) @:privateAccess CharacterEditor.instance._animation_down(null); @@ -93,6 +105,7 @@ class CharacterAnimsWindow extends UIButtonList { if (character.animOffsets.exists(button.anim)) character.animOffsets.remove(button.anim); if (character.animDatas.exists(button.anim)) character.animDatas.remove(button.anim); + if (addToUndo) CharacterEditor.undos.addToUndo(CAnimDelete(button.ID, button.data)); remove(button); button.destroy(); } @@ -120,7 +133,7 @@ class CharacterAnimsWindow extends UIButtonList { addAnimation(animData); } - public function addAnimation(animData:AnimData, animID:Int = -1) @:privateAccess { + public function addAnimation(animData:AnimData, animID:Int = -1, addToUndo:Bool = true) @:privateAccess { XMLUtil.addAnimToSprite(character, animData); var newButton:CharacterAnimButton = new CharacterAnimButton(0, 0, animData, this); @@ -132,6 +145,8 @@ class CharacterAnimsWindow extends UIButtonList { if (newButton.valid) buildAnimDisplay(animData.name, animData); + + if (addToUndo) CharacterEditor.undos.addToUndo(CAnimCreate(newButton.ID, newButton.data)); } @:noCompletion var __autoCompleteAnims:Array = []; diff --git a/source/funkin/editors/character/CharacterEditor.hx b/source/funkin/editors/character/CharacterEditor.hx index d4a72376..1e73b24d 100644 --- a/source/funkin/editors/character/CharacterEditor.hx +++ b/source/funkin/editors/character/CharacterEditor.hx @@ -507,8 +507,13 @@ class CharacterEditor extends UIState { characterPropertiesWindow.editCharacterInfo(oldInfo, false); case CCharEditSprite(oldSprite, newSprite): case CAnimCreate(animID, animData): + characterAnimsWindow.deleteAnimation(characterAnimsWindow.buttons.members[animID], false); case CAnimDelete(animID, animData): + characterAnimsWindow.addAnimation(animData, animID, false); case CAnimEditOrder(animID, newAnimID): + var button:CharacterAnimButton = characterAnimsWindow.buttons.members[newAnimID]; + characterAnimsWindow.buttons.members.remove(button); + characterAnimsWindow.buttons.members.insert(animID, button); case CAnimEditName(animID, oldName, newName): case CAnimEditAnim(animID, oldAnim, newAnim): case CAnimEditOffset(animID, oldOffset, newOffset): @@ -516,6 +521,9 @@ class CharacterEditor extends UIState { case CAnimEditLooping(animID, newLooping): case CAnimEditIndices(animID, oldIndicies, newIndicies): case CCharClearOffsets(oldOffsets): + for (anim => offset in oldOffsets) + if (characterAnimsWindow.animButtons[anim] != null) + characterAnimsWindow.animButtons[anim].changeOffset(offset.x, offset.y); } } @@ -543,8 +551,13 @@ class CharacterEditor extends UIState { characterPropertiesWindow.editCharacterInfo(newInfo, false); case CCharEditSprite(oldSprite, newSprite): case CAnimCreate(animID, animData): + characterAnimsWindow.addAnimation(animData, animID, false); case CAnimDelete(animID, animData): + characterAnimsWindow.deleteAnimation(characterAnimsWindow.buttons.members[animID], false); case CAnimEditOrder(animID, newAnimID): + var button:CharacterAnimButton = characterAnimsWindow.buttons.members[animID]; + characterAnimsWindow.buttons.members.remove(button); + characterAnimsWindow.buttons.members.insert(newAnimID, button); case CAnimEditName(animID, oldName, newName): case CAnimEditAnim(animID, oldAnim, newAnim): case CAnimEditOffset(animID, oldOffset, newOffset): @@ -552,6 +565,7 @@ class CharacterEditor extends UIState { case CAnimEditLooping(animID, newLooping): case CAnimEditIndices(animID, oldIndicies, newIndicies): case CCharClearOffsets(oldOffsets): + clearOffsets(false); } } @@ -576,9 +590,18 @@ class CharacterEditor extends UIState { t.icon = (Options.characterDragging = !Options.characterDragging) ? 1 : 0; } - function _offsets_clear(_) { + function _offsets_clear(_) clearOffsets(); + + function clearOffsets(addToUndo:Bool = true) { + var oldOffsets:Map = [ + for (anim => offsets in character.animOffsets) + anim => offsets.clone() + ]; + for (anim => button in characterAnimsWindow.animButtons) button.changeOffset(0, 0); + + if (addToUndo) undos.addToUndo(CCharClearOffsets(oldOffsets)); } function _change_offset(x:Float, y:Float) {