package funkin.play.notes; import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; import flixel.graphics.frames.FlxFramesCollection; import funkin.util.assets.FlxAnimationUtil; import flixel.FlxSprite; import funkin.play.notes.notestyle.NoteStyle; class NoteHoldCover extends FlxTypedSpriteGroup { static final FRAMERATE_DEFAULT:Int = 24; public var holdNote:SustainTrail; public var glow:FlxSprite; var sparks:FlxSprite; public function new(noteStyle:NoteStyle) { super(0, 0); setupHoldNoteCover(noteStyle); } /** * Add ALL the animations to this sprite. We will recycle and reuse the FlxSprite multiple times. */ function setupHoldNoteCover(noteStyle:NoteStyle):Void { glow = new FlxSprite(); add(glow); // TODO: null check here like how NoteSplash does noteStyle.buildHoldCoverSprite(this); glow.animation.onFinish.add(this.onAnimationFinished); if (glow.animation.getAnimationList().length < 3 * 4) { trace('WARNING: NoteHoldCover failed to initialize all animations.'); } } public override function update(elapsed):Void { super.update(elapsed); } public function playStart():Void { var direction:NoteDirection = holdNote.noteDirection; glow.animation.play('holdCoverStart${direction.colorName.toTitleCase()}'); } public function playContinue():Void { var direction:NoteDirection = holdNote.noteDirection; glow.animation.play('holdCover${direction.colorName.toTitleCase()}'); } public function playEnd():Void { var direction:NoteDirection = holdNote.noteDirection; glow.animation.play('holdCoverEnd${direction.colorName.toTitleCase()}'); } public override function kill():Void { super.kill(); this.visible = false; holdNote.cover = null; if (glow != null) glow.visible = false; if (sparks != null) sparks.visible = false; } public override function revive():Void { super.revive(); this.visible = true; this.alpha = 1.0; if (glow != null) glow.visible = true; if (sparks != null) sparks.visible = true; } public function onAnimationFinished(animationName:String):Void { if (animationName.startsWith('holdCoverStart')) { playContinue(); } if (animationName.startsWith('holdCoverEnd')) { // *lightning* *zap* *crackle* this.visible = false; this.kill(); } } }