2024-08-23 12:36:35 +00:00
|
|
|
package funkin.ui.freeplay.backcards;
|
|
|
|
|
|
|
|
import funkin.ui.freeplay.FreeplayState;
|
|
|
|
import flixel.FlxCamera;
|
|
|
|
import flixel.FlxSprite;
|
|
|
|
import flixel.group.FlxGroup;
|
|
|
|
import flixel.group.FlxGroup.FlxTypedGroup;
|
|
|
|
import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup;
|
|
|
|
import flixel.math.FlxAngle;
|
|
|
|
import flixel.math.FlxPoint;
|
|
|
|
import flixel.text.FlxText;
|
|
|
|
import flixel.tweens.FlxEase;
|
|
|
|
import flixel.tweens.FlxTween;
|
|
|
|
import flixel.util.FlxColor;
|
|
|
|
import flixel.util.FlxSpriteUtil;
|
|
|
|
import flixel.util.FlxTimer;
|
|
|
|
import funkin.graphics.adobeanimate.FlxAtlasSprite;
|
|
|
|
import funkin.graphics.FunkinSprite;
|
|
|
|
import funkin.ui.freeplay.charselect.PlayableCharacter;
|
|
|
|
import funkin.ui.MusicBeatSubState;
|
|
|
|
import lime.utils.Assets;
|
|
|
|
import openfl.display.BlendMode;
|
|
|
|
import flixel.group.FlxSpriteGroup;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A class for the backing cards so they dont have to be part of freeplayState......
|
|
|
|
*/
|
|
|
|
class BackingCard extends FlxSpriteGroup
|
|
|
|
{
|
|
|
|
public var backingTextYeah:FlxAtlasSprite;
|
|
|
|
public var orangeBackShit:FunkinSprite;
|
|
|
|
public var alsoOrangeLOL:FunkinSprite;
|
|
|
|
public var pinkBack:FunkinSprite;
|
|
|
|
public var confirmGlow:FlxSprite;
|
|
|
|
public var confirmGlow2:FlxSprite;
|
|
|
|
public var confirmTextGlow:FlxSprite;
|
|
|
|
public var cardGlow:FlxSprite;
|
|
|
|
|
|
|
|
var _exitMovers:Null<FreeplayState.ExitMoverData>;
|
|
|
|
var _exitMoversCharSel:Null<FreeplayState.ExitMoverData>;
|
|
|
|
|
2024-08-30 00:02:32 +00:00
|
|
|
public var instance:FreeplayState;
|
|
|
|
|
|
|
|
public function new(currentCharacter:PlayableCharacter, ?_instance:FreeplayState)
|
2024-08-23 12:36:35 +00:00
|
|
|
{
|
|
|
|
super();
|
|
|
|
|
2024-08-30 00:02:32 +00:00
|
|
|
if (_instance != null) instance = _instance;
|
|
|
|
|
2024-08-23 12:36:35 +00:00
|
|
|
cardGlow = new FlxSprite(-30, -30).loadGraphic(Paths.image('freeplay/cardGlow'));
|
|
|
|
confirmGlow = new FlxSprite(-30, 240).loadGraphic(Paths.image('freeplay/confirmGlow'));
|
|
|
|
confirmTextGlow = new FlxSprite(-8, 115).loadGraphic(Paths.image('freeplay/glowingText'));
|
|
|
|
pinkBack = FunkinSprite.create('freeplay/pinkBack');
|
|
|
|
orangeBackShit = new FunkinSprite(84, 440).makeSolidColor(Std.int(pinkBack.width), 75, 0xFFFEDA00);
|
|
|
|
alsoOrangeLOL = new FunkinSprite(0, orangeBackShit.y).makeSolidColor(100, Std.int(orangeBackShit.height), 0xFFFFD400);
|
|
|
|
confirmGlow2 = new FlxSprite(confirmGlow.x, confirmGlow.y).loadGraphic(Paths.image('freeplay/confirmGlow2'));
|
|
|
|
backingTextYeah = new FlxAtlasSprite(640, 370, Paths.animateAtlas("freeplay/backing-text-yeah"),
|
|
|
|
{
|
|
|
|
FrameRate: 24.0,
|
|
|
|
Reversed: false,
|
|
|
|
// ?OnComplete:Void -> Void,
|
|
|
|
ShowPivot: false,
|
|
|
|
Antialiasing: true,
|
|
|
|
ScrollFactor: new FlxPoint(1, 1),
|
|
|
|
});
|
|
|
|
|
|
|
|
pinkBack.color = 0xFFFFD4E9; // sets it to pink!
|
|
|
|
pinkBack.x -= pinkBack.width;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Apply exit movers for the pieces of the backing card.
|
|
|
|
* @param exitMovers The exit movers to apply.
|
|
|
|
*/
|
|
|
|
public function applyExitMovers(?exitMovers:FreeplayState.ExitMoverData, ?exitMoversCharSel:FreeplayState.ExitMoverData):Void
|
|
|
|
{
|
|
|
|
if (exitMovers == null)
|
|
|
|
{
|
|
|
|
exitMovers = _exitMovers;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_exitMovers = exitMovers;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (exitMovers == null) return;
|
|
|
|
|
|
|
|
if (exitMoversCharSel == null)
|
|
|
|
{
|
|
|
|
exitMoversCharSel = _exitMoversCharSel;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_exitMoversCharSel = exitMoversCharSel;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (exitMoversCharSel == null) return;
|
|
|
|
|
|
|
|
exitMovers.set([pinkBack, orangeBackShit, alsoOrangeLOL],
|
|
|
|
{
|
|
|
|
x: -pinkBack.width,
|
|
|
|
y: pinkBack.y,
|
|
|
|
speed: 0.4,
|
|
|
|
wait: 0
|
|
|
|
});
|
|
|
|
|
|
|
|
exitMoversCharSel.set([pinkBack],
|
|
|
|
{
|
|
|
|
y: -100,
|
|
|
|
speed: 0.8,
|
|
|
|
wait: 0.1
|
|
|
|
});
|
|
|
|
|
|
|
|
exitMoversCharSel.set([orangeBackShit, alsoOrangeLOL],
|
|
|
|
{
|
|
|
|
y: -40,
|
|
|
|
speed: 0.8,
|
|
|
|
wait: 0.1
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2024-08-30 00:02:32 +00:00
|
|
|
/**
|
|
|
|
* Helper function to snap the back of the card to its final position.
|
|
|
|
* Used when returning from character select, as we dont want to play the full animation of everything sliding in.
|
|
|
|
*/
|
|
|
|
public function skipIntroTween():Void
|
|
|
|
{
|
|
|
|
FlxTween.cancelTweensOf(pinkBack);
|
|
|
|
pinkBack.x = 0;
|
|
|
|
}
|
|
|
|
|
2024-08-23 12:36:35 +00:00
|
|
|
/**
|
|
|
|
* Called in create. Adds sprites and tweens.
|
|
|
|
*/
|
|
|
|
public function init():Void
|
|
|
|
{
|
|
|
|
FlxTween.tween(pinkBack, {x: 0}, 0.6, {ease: FlxEase.quartOut});
|
|
|
|
add(pinkBack);
|
|
|
|
|
|
|
|
add(orangeBackShit);
|
|
|
|
|
|
|
|
add(alsoOrangeLOL);
|
|
|
|
|
|
|
|
FlxSpriteUtil.alphaMaskFlxSprite(orangeBackShit, pinkBack, orangeBackShit);
|
|
|
|
orangeBackShit.visible = false;
|
|
|
|
alsoOrangeLOL.visible = false;
|
|
|
|
|
|
|
|
confirmTextGlow.blend = BlendMode.ADD;
|
|
|
|
confirmTextGlow.visible = false;
|
|
|
|
|
|
|
|
confirmGlow.blend = BlendMode.ADD;
|
|
|
|
|
|
|
|
confirmGlow.visible = false;
|
|
|
|
confirmGlow2.visible = false;
|
|
|
|
|
|
|
|
add(confirmGlow2);
|
|
|
|
add(confirmGlow);
|
|
|
|
|
|
|
|
add(confirmTextGlow);
|
|
|
|
|
|
|
|
add(backingTextYeah);
|
|
|
|
|
|
|
|
cardGlow.blend = BlendMode.ADD;
|
|
|
|
cardGlow.visible = false;
|
|
|
|
|
|
|
|
add(cardGlow);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called after the dj finishes their start animation.
|
|
|
|
*/
|
|
|
|
public function introDone():Void
|
|
|
|
{
|
|
|
|
pinkBack.color = 0xFFFFD863;
|
|
|
|
orangeBackShit.visible = true;
|
|
|
|
alsoOrangeLOL.visible = true;
|
|
|
|
cardGlow.visible = true;
|
|
|
|
FlxTween.tween(cardGlow, {alpha: 0, "scale.x": 1.2, "scale.y": 1.2}, 0.45, {ease: FlxEase.sineOut});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called when selecting a song.
|
|
|
|
*/
|
|
|
|
public function confirm():Void
|
|
|
|
{
|
|
|
|
FlxTween.color(pinkBack, 0.33, 0xFFFFD0D5, 0xFF171831, {ease: FlxEase.quadOut});
|
|
|
|
orangeBackShit.visible = false;
|
|
|
|
alsoOrangeLOL.visible = false;
|
|
|
|
|
|
|
|
confirmGlow.visible = true;
|
|
|
|
confirmGlow2.visible = true;
|
|
|
|
|
2024-08-30 00:02:32 +00:00
|
|
|
backingTextYeah.anim.play("");
|
2024-08-23 12:36:35 +00:00
|
|
|
confirmGlow2.alpha = 0;
|
|
|
|
confirmGlow.alpha = 0;
|
|
|
|
|
2024-08-30 00:02:32 +00:00
|
|
|
FlxTween.color(instance.bgDad, 0.5, 0xFFA8A8A8, 0xFF646464,
|
|
|
|
{
|
|
|
|
onUpdate: function(_) {
|
|
|
|
instance.angleMaskShader.extraColor = instance.bgDad.color;
|
|
|
|
}
|
|
|
|
});
|
2024-08-23 12:36:35 +00:00
|
|
|
FlxTween.tween(confirmGlow2, {alpha: 0.5}, 0.33,
|
|
|
|
{
|
|
|
|
ease: FlxEase.quadOut,
|
|
|
|
onComplete: function(_) {
|
|
|
|
confirmGlow2.alpha = 0.6;
|
|
|
|
confirmGlow.alpha = 1;
|
|
|
|
confirmTextGlow.visible = true;
|
|
|
|
confirmTextGlow.alpha = 1;
|
|
|
|
FlxTween.tween(confirmTextGlow, {alpha: 0.4}, 0.5);
|
|
|
|
FlxTween.tween(confirmGlow, {alpha: 0}, 0.5);
|
2024-08-30 00:02:32 +00:00
|
|
|
FlxTween.color(instance.bgDad, 2, 0xFFCDCDCD, 0xFF555555,
|
|
|
|
{
|
|
|
|
ease: FlxEase.expoOut,
|
|
|
|
onUpdate: function(_) {
|
|
|
|
instance.angleMaskShader.extraColor = instance.bgDad.color;
|
|
|
|
}
|
|
|
|
});
|
2024-08-23 12:36:35 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2024-08-30 00:02:32 +00:00
|
|
|
* Called when entering character select, does nothing by default.
|
|
|
|
*/
|
|
|
|
public function enterCharSel():Void {}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called on each beat in freeplay state.
|
|
|
|
*/
|
|
|
|
public function beatHit():Void {}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called when exiting the freeplay menu.
|
2024-08-23 12:36:35 +00:00
|
|
|
*/
|
|
|
|
public function disappear():Void
|
|
|
|
{
|
|
|
|
FlxTween.color(pinkBack, 0.25, 0xFFFFD863, 0xFFFFD0D5, {ease: FlxEase.quadOut});
|
|
|
|
|
|
|
|
cardGlow.visible = true;
|
|
|
|
cardGlow.alpha = 1;
|
|
|
|
cardGlow.scale.set(1, 1);
|
|
|
|
FlxTween.tween(cardGlow, {alpha: 0, "scale.x": 1.2, "scale.y": 1.2}, 0.25, {ease: FlxEase.sineOut});
|
|
|
|
|
|
|
|
orangeBackShit.visible = false;
|
|
|
|
alsoOrangeLOL.visible = false;
|
|
|
|
}
|
|
|
|
}
|