From 67fa5af8982c0942e7847f2d911649ae63b42f86 Mon Sep 17 00:00:00 2001 From: lunarcleint <88809950+lunarcleint@users.noreply.github.com> Date: Thu, 13 Jul 2023 22:31:16 -0700 Subject: [PATCH] atlas characters now work --- source/funkin/backend/FunkinSprite.hx | 21 ++++++++ .../editors/character/CharacterAnimsWindow.hx | 6 +-- .../editors/character/CharacterEditor.hx | 54 +++++++++---------- 3 files changed, 51 insertions(+), 30 deletions(-) diff --git a/source/funkin/backend/FunkinSprite.hx b/source/funkin/backend/FunkinSprite.hx index e7da3ae5..b32bc753 100644 --- a/source/funkin/backend/FunkinSprite.hx +++ b/source/funkin/backend/FunkinSprite.hx @@ -327,6 +327,27 @@ class FunkinSprite extends FlxSkewedSprite implements IBeatReceiver implements I return name; } + public inline function removeAnimation(name:String) { + if (animateAtlas != null) + @:privateAccess animateAtlas.anim.animsMap.remove(name); + else + animation.remove(name); + } + + public inline function getNameList():Array { + if (animateAtlas != null) + return [for (name in @:privateAccess animateAtlas.anim.animsMap.keys()) name]; + else + return animation.getNameList(); + } + + public inline function stopAnimation() { + if (animateAtlas != null) + animateAtlas.anim.pause(); + else + animation.stop(); + } + public inline function isAnimFinished() { return animateAtlas != null ? (animateAtlas.anim.finished) : (animation.curAnim != null ? animation.curAnim.finished : true); diff --git a/source/funkin/editors/character/CharacterAnimsWindow.hx b/source/funkin/editors/character/CharacterAnimsWindow.hx index e4679289..82a4a790 100644 --- a/source/funkin/editors/character/CharacterAnimsWindow.hx +++ b/source/funkin/editors/character/CharacterAnimsWindow.hx @@ -24,10 +24,10 @@ class CharacterAnimsWindow extends UIWindow { } public function createButtons() { - for (i=>anim in character.animation.getNameList()) - createNewButton(anim, character.getAnimOffset(anim), false, -1, false); + for (i=>anim in character.animDatas) + createNewButton(anim.name, character.getAnimOffset(anim.name), false, -1, false); - addButton = new UIButton(25, 16+((32+16)*(character.animation.getNameList().length)), "", + addButton = new UIButton(25, 16+((32+16)*(character.getNameList().length)), "", function () { CharacterEditor.instance.createAnimWithUI(); } diff --git a/source/funkin/editors/character/CharacterEditor.hx b/source/funkin/editors/character/CharacterEditor.hx index 83e5c03e..b9509743 100644 --- a/source/funkin/editors/character/CharacterEditor.hx +++ b/source/funkin/editors/character/CharacterEditor.hx @@ -224,7 +224,7 @@ class CharacterEditor extends UIState { uiGroup.add(characterPropertiresWindow); uiGroup.add(characterAnimsWindow); - playAnimation(character.animation.getNameList()[0]); + playAnimation(character.getNameList()[0]); add(topMenuSpr); add(uiGroup); @@ -244,7 +244,7 @@ class CharacterEditor extends UIState { } if (character != null) - characterPropertiresWindow.characterInfo.text = '(Num) Animations: ${character.animation.getNameList().length}\nFlipped: ${character.flipX}\nSprite: ${character.sprite}\nAnim: ${character.animation.name}'; + characterPropertiresWindow.characterInfo.text = '(Num) Animations: ${character.getNameList().length}\nFlipped: ${character.flipX}\nSprite: ${character.sprite}\nAnim: ${character.getAnimName()}'; if (FlxG.mouse.wheel != 0 && !(characterPropertiresWindow.hovered || characterAnimsWindow.hovered)) { zoom += 0.25 * FlxG.mouse.wheel; @@ -311,10 +311,10 @@ class CharacterEditor extends UIState { for (anim => offsets in oldOffsets) character.animOffsets.set(anim, offsets.clone()); - for (anim in character.animation.getNameList()) + for (anim in character.getNameList()) characterAnimsWindow.animButtons[anim].updateInfo(anim, character.getAnimOffset(anim), false); - changeOffset(character.animation.name, FlxPoint.get(0, 0), false); // apply da new offsets + changeOffset(character.getAnimName(), FlxPoint.get(0, 0), false); // apply da new offsets } if (v != null) redoList.insert(0, v); @@ -345,11 +345,11 @@ class CharacterEditor extends UIState { } function _char_edit_anim(_) { - editAnimWithUI(character.animation.name); + editAnimWithUI(character.getAnimName()); } function _char_remove_anim(_) { - deleteAnim(character.animation.name); + deleteAnim(character.getAnimName()); } function _char_edit_info(_) { @@ -375,7 +375,7 @@ class CharacterEditor extends UIState { playAnimation(animData.name); if (addtoUndo) - addToUndo(CCreateAnim(character.animation.getNameList().length, animData)); + addToUndo(CCreateAnim(character.getNameList().length, animData)); } public function editAnim(name:String, animData:AnimData, addtoUndo:Bool = true) { @@ -385,7 +385,7 @@ class CharacterEditor extends UIState { XMLUtil.addAnimToSprite(character, animData); button.updateInfo(animData.name, character.getAnimOffset(animData.name), false); - if (character.animation.name == animData.name) // update anim ifs its currently selected + if (character.getAnimName() == animData.name) // update anim ifs its currently selected playAnimation(animData.name); if (addtoUndo) @@ -393,16 +393,16 @@ class CharacterEditor extends UIState { } public function deleteAnim(name:String, addtoUndo:Bool = true) { - if (character.animation.getNameList().length-1 == 0) + if (character.getNameList().length-1 == 0) @:privateAccess character.animation._curAnim = null; else - playAnimation(character.animation.getNameList()[Std.int(Math.abs(character.animation.getNameList().indexOf(name)-1))]); + playAnimation(character.getNameList()[Std.int(Math.abs(character.getNameList().indexOf(name)-1))]); // undo shit blah blah - var oldID:Int = character.animation.getNameList().indexOf(name); + var oldID:Int = character.getNameList().indexOf(name); var oldAnimData:AnimData = character.animDatas.get(name); - if (character.animation.exists(name)) character.animation.remove(name); + character.removeAnimation(name); if (character.animOffsets.exists(name)) character.animOffsets.remove(name); if (character.animDatas.exists(name)) character.animDatas.remove(name); characterAnimsWindow.removeButton(name); @@ -416,13 +416,13 @@ class CharacterEditor extends UIState { } function _playback_play_anim(_) { - if (character.animation.getNameList().length != 0) - playAnimation(character.animation.name); + if (character.getNameList().length != 0) + playAnimation(character.getAnimName()); } function _playback_stop_anim(_) { - if (character.animation.getNameList().length != 0) - character.animation.stop(); + if (character.getNameList().length != 0) + character.stopAnimation(); } public function playAnimation(anim:String) { @@ -431,35 +431,35 @@ class CharacterEditor extends UIState { } function _offsets_left(_) { - changeOffset(character.animation.name, FlxPoint.get(1, 0)); + changeOffset(character.getAnimName(), FlxPoint.get(1, 0)); } function _offsets_up(_) { - changeOffset(character.animation.name, FlxPoint.get(0, 1)); + changeOffset(character.getAnimName(), FlxPoint.get(0, 1)); } function _offsets_down(_) { - changeOffset(character.animation.name, FlxPoint.get(0, -1)); + changeOffset(character.getAnimName(), FlxPoint.get(0, -1)); } function _offsets_right(_) { - changeOffset(character.animation.name, FlxPoint.get(-1, 0)); + changeOffset(character.getAnimName(), FlxPoint.get(-1, 0)); } function _offsets_extra_left(_) { - changeOffset(character.animation.name, FlxPoint.get(5, 0)); + changeOffset(character.getAnimName(), FlxPoint.get(5, 0)); } function _offsets_extra_up(_) { - changeOffset(character.animation.name, FlxPoint.get(0, 5)); + changeOffset(character.getAnimName(), FlxPoint.get(0, 5)); } function _offsets_extra_down(_) { - changeOffset(character.animation.name, FlxPoint.get(0, -5)); + changeOffset(character.getAnimName(), FlxPoint.get(0, -5)); } function _offsets_extra_right(_) { - changeOffset(character.animation.name, FlxPoint.get(-5, 0)); + changeOffset(character.getAnimName(), FlxPoint.get(-5, 0)); } function _offsets_clear(_) { @@ -467,7 +467,7 @@ class CharacterEditor extends UIState { } function changeOffset(anim:String, change:FlxPoint, addtoUndo:Bool = true) { - if (character.animation.getNameList().length == 0) return; + if (character.getNameList().length == 0) return; character.animOffsets.set(anim, character.getAnimOffset(anim) + change); characterAnimsWindow.animButtons[anim].updateInfo(anim, character.getAnimOffset(anim), false); @@ -478,14 +478,14 @@ class CharacterEditor extends UIState { } function clearOffsets(addtoUndo:Bool = true) { - if (character.animation.getNameList().length == 0) return; + if (character.getNameList().length == 0) return; var oldOffsets:Map = [ for (anim => offsets in character.animOffsets) anim => offsets.clone() ]; - for (anim in character.animation.getNameList()) { + for (anim in character.getNameList()) { character.animOffsets[anim].zero(); characterAnimsWindow.animButtons[anim].updateInfo(anim, character.getAnimOffset(anim), false); }