From 3f0082d6e7f4e9d09a72d44a15635dc08f8a0872 Mon Sep 17 00:00:00 2001 From: AbnormalPoof Date: Tue, 2 Dec 2025 16:01:24 -0600 Subject: [PATCH] Add `getFramesWithKeyword()` --- source/funkin/graphics/FunkinSprite.hx | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/source/funkin/graphics/FunkinSprite.hx b/source/funkin/graphics/FunkinSprite.hx index 725fdc081..bd55214fd 100644 --- a/source/funkin/graphics/FunkinSprite.hx +++ b/source/funkin/graphics/FunkinSprite.hx @@ -451,6 +451,46 @@ class FunkinSprite extends FlxAnimate return false; } + /** + * Gets every frame on every symbol that starts with the given keyword. + * @param keyword The keyword to search for. + * @return An array of frames. + */ + public function getFramesWithKeyword(keyword:String):Array + { + if (!this.isAnimate) + { + trace('WARNING: getFramesWithKeyword() only works texture atlases!'); + return []; + } + + var symbolItems:Array = []; + var frames:Array = []; + + @:privateAccess + for (symbol in this.library.dictionary.keys()) + { + var symbolItem:Null = this.library.getSymbol(symbol); + if (symbolItem == null) continue; + + if (symbolItem.name.contains(keyword)) + { + symbolItems.push(symbolItem); + } + } + + for (symbolItem in symbolItems) + { + symbolItem.timeline.forEachLayer((layer) -> { + layer.forEachFrame((frame) -> { + frames.push(frame); + }); + }); + } + + return frames; + } + /** * Gets the current animation ID. */