95 lines
2.6 KiB
Haxe
95 lines
2.6 KiB
Haxe
|
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();
|
||
|
}
|
||
|
}
|