package; import Conductor.BPMChangeEvent; import flixel.FlxG; import flixel.addons.ui.FlxUIState; import flixel.math.FlxRect; import flixel.util.FlxTimer; import flixel.addons.transition.FlxTransitionableState; import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; import flixel.util.FlxColor; import flixel.util.FlxGradient; import flixel.FlxSubState; import flixel.FlxSprite; import flixel.FlxCamera; class CustomFadeTransition extends MusicBeatSubstate { public static var finishCallback:Void->Void; private var leTween:FlxTween = null; public static var nextCamera:FlxCamera; var isTransIn:Bool = false; var transBlack:FlxSprite; var transGradient:FlxSprite; public function new(duration:Float, isTransIn:Bool) { super(); this.isTransIn = isTransIn; var zoom:Float = CoolUtil.boundTo(FlxG.camera.zoom, 0.05, 1); var width:Int = Std.int(FlxG.width / zoom); var height:Int = Std.int(FlxG.height / zoom); transGradient = FlxGradient.createGradientFlxSprite(width, height, (isTransIn ? [0x0, FlxColor.BLACK] : [FlxColor.BLACK, 0x0])); transGradient.scrollFactor.set(); add(transGradient); transBlack = new FlxSprite().makeGraphic(width, height + 400, FlxColor.BLACK); transBlack.scrollFactor.set(); add(transBlack); transGradient.x -= (width - FlxG.width) / 2; transBlack.x = transGradient.x; if(isTransIn) { transGradient.y = transBlack.y - transBlack.height; FlxTween.tween(transGradient, {y: transGradient.height + 50}, duration, { onComplete: function(twn:FlxTween) { close(); }, ease: FlxEase.linear}); } else { transGradient.y = -transGradient.height; transBlack.y = transGradient.y - transBlack.height + 50; leTween = FlxTween.tween(transGradient, {y: transGradient.height + 50}, duration, { onComplete: function(twn:FlxTween) { if(finishCallback != null) { finishCallback(); } }, ease: FlxEase.linear}); } if(nextCamera != null) { transBlack.cameras = [nextCamera]; transGradient.cameras = [nextCamera]; } nextCamera = null; } override function update(elapsed:Float) { if(isTransIn) { transBlack.y = transGradient.y + transGradient.height; } else { transBlack.y = transGradient.y - transBlack.height; } super.update(elapsed); if(isTransIn) { transBlack.y = transGradient.y + transGradient.height; } else { transBlack.y = transGradient.y - transBlack.height; } } override function destroy() { if(leTween != null) { #if MODS_ALLOWED if(isTransIn) { Paths.destroyLoadedImages(); } #end finishCallback(); leTween.cancel(); } super.destroy(); } }