Skip to content
Merged
286 changes: 154 additions & 132 deletions src/lt/states/IntroState.hx
Original file line number Diff line number Diff line change
Expand Up @@ -4,147 +4,169 @@ package lt.states;
* Animation that starts when the game boots up.
*/
class IntroState extends FlxState {
public static var _boxSize:Int = 72;
public static var _scaleDec:Float = 0.3;
public static var _boxSize:Int = 72;
public static var _scaleDec:Float = 0.3;

var playerBox:Sprite;
var tileBox:Sprite;
var ltText:FlxText;

var currentlyLoading:Bool = false;
var currentlyLoading:Bool = false;

override function create():Void
{
Utils.initialize();
haxe.Timer.measure(()->{
loadIntro();
animateIntro();
});
override function create():Void {
Utils.initialize();
haxe.Timer.measure(() -> {
loadIntro();
animateIntro();
});

super.create();
}

function loadIntro():Void {
// Player Box sprite
var _centerOffset:Float = 90;
playerBox = new Sprite().makeGraphic(_boxSize, _boxSize);
playerBox.x = ((FlxG.width - playerBox.width) * 0.5) - _centerOffset;
playerBox.screenCenter(Y);
add(playerBox);

// Tile Box sprite
tileBox = new Sprite().loadGraphic(Assets.image("play/tile"));
tileBox.setGraphicSize(playerBox.frameWidth, playerBox.frameHeight);
tileBox.updateHitbox();
tileBox.x = ((FlxG.width - tileBox.width) * 0.5) + _centerOffset;
tileBox.screenCenter(Y);
add(tileBox);

// Text underneath it
ltText = new FlxText(0,0,-1,PhraseManager.getPhrase("LINETAPPER").toUpperCase(),20);
function loadIntro():Void {
// Player Box sprite
var _centerOffset:Float = 90;

playerBox = new Sprite().makeGraphic(_boxSize, _boxSize);
playerBox.x = ((FlxG.width - playerBox.width) * 0.5) - _centerOffset;
playerBox.screenCenter(Y);
add(playerBox);

// Tile Box sprite
tileBox = new Sprite().loadGraphic(Assets.image("play/tile"));
tileBox.setGraphicSize(playerBox.frameWidth, playerBox.frameHeight);
tileBox.updateHitbox();
tileBox.x = ((FlxG.width - tileBox.width) * 0.5) + _centerOffset;
tileBox.screenCenter(Y);
add(tileBox);

// Text underneath it
ltText = new FlxText(0, 0, -1, PhraseManager.getPhrase("LINETAPPER").toUpperCase(), 20);
ltText.setFormat(Assets.font("extenro-bold"), 18, FlxColor.WHITE, CENTER, OUTLINE, FlxColor.BLACK);
ltText.screenCenter(X);
ltText.y = playerBox.y + playerBox.height + 20;

add(ltText);
}

var _textFlicker:Bool = false;
function animateIntro() {
var _tweenXOffset:Float = 30;

playerBox.x -= _tweenXOffset;
tileBox.x += _tweenXOffset;
ltText.y += _tweenXOffset;

ltText.alpha = playerBox.alpha = tileBox.alpha = 0;

// Actually animating it (yeah this is horrible.)
new FlxTimer().start(1,(_)->{ // Make a little wait here
// LineTapper Sequence
FlxTween.tween(playerBox, {x: playerBox.x+_tweenXOffset, alpha: 1}, 0.5, {ease:FlxEase.expoOut});
FlxTween.tween(tileBox, {x: tileBox.x-_tweenXOffset, alpha: 1}, 0.5, {ease:FlxEase.expoOut, onComplete: (_)->{
_textFlicker = true;
FlxTween.tween(ltText, {y: ltText.y-_tweenXOffset}, 0.5, {ease:FlxEase.expoOut, onComplete:(_)->{
new FlxTimer().start(0.5,(_)->{
// Loading Sequence
var xTarget:Float = (FlxG.width - playerBox.width) * 0.5;
_textFlicker = true;
FlxTween.tween(ltText, {y: ltText.y+_tweenXOffset}, 0.5, {ease:FlxEase.expoOut, onComplete:(_)->{
ltText.text = PhraseManager.getPhrase('loading', "LOADING...").toUpperCase();
ltText.screenCenter(X);
ltText.x += 10;
ltText.alpha = 0;
FlxTween.tween(ltText, {y: ltText.y-_tweenXOffset, alpha:1}, 0.5, {ease:FlxEase.expoOut});
FlxTween.tween(playerBox.scale, {x: playerBox.scale.x - _scaleDec, y: playerBox.scale.y - _scaleDec}, 0.5, {ease:FlxEase.expoOut});
}});

FlxTween.tween(playerBox, {x: xTarget}, 0.5, {ease:FlxEase.expoOut});
FlxTween.tween(tileBox, {x: xTarget}, 0.5, {ease:FlxEase.expoOut, onComplete:(_)->{
tileBox.kill();
tileBox.destroy();
remove(tileBox);
currentlyLoading = true;
}});
});
}});
}});
});

}

override function update(elapsed:Float) {
if (FlxG.keys.justPressed.T) {
Utils.switchState(new TestTransition());
}
flickerEffectUpdate(elapsed);
loadingSeqUpdate(elapsed);

if (FlxG.keys.justPressed.SPACE)
FlxG.resetState();
super.update(elapsed);
}

var _rotateTime:Float = 0;
function loadingSeqUpdate(elapsed:Float) {
if (!currentlyLoading) return;

if (_rotateTime > 3) {
playerBox.angle = 0;
FlxTween.tween(ltText, {alpha:0}, 0.5, {ease:FlxEase.linear, onComplete:(_)->{
ltText.destroy();
remove(ltText);
Utils.switchState(new MenuState(false, true));
}});
} else {
_rotateTime += elapsed;
playerBox.angle = FlxEase.expoInOut(_rotateTime%1)*(-90);
}

}

/**
* Flicker effect thing
*/

var _flickerDelay:Float = 0.03;
var _curFlickTime:Float = 0;
var _curFlickPos:Float = 0;
var _flickerEndTime:Float = 0.3;
function flickerEffectUpdate(elapsed:Float) {
if (!_textFlicker) return;

_curFlickTime += elapsed;
_curFlickPos += elapsed;
if (_curFlickTime > _flickerDelay){
ltText.alpha = 1 - ltText.alpha;
_curFlickTime = 0;
}

if (_curFlickPos > _flickerEndTime) {
_textFlicker = false;
_curFlickPos = 0;
}
}
}
ltText.y = playerBox.y + playerBox.height + 20;

add(ltText);
}

var _textFlicker:Bool = false;

function animateIntro() {
var _tweenXOffset:Float = 30;

playerBox.x -= _tweenXOffset;
tileBox.x += _tweenXOffset;
ltText.y += _tweenXOffset;

ltText.alpha = playerBox.alpha = tileBox.alpha = 0;

// Actually animating it (yeah this is horrible.)
new FlxTimer().start(1, (_) -> { // Make a little wait here
// LineTapper Sequence
FlxTween.tween(playerBox, {x: playerBox.x + _tweenXOffset, alpha: 1}, 0.5, {ease: FlxEase.expoOut});
FlxTween.tween(tileBox, {x: tileBox.x - _tweenXOffset, alpha: 1}, 0.5, {
ease: FlxEase.expoOut,
onComplete: (_) -> {
_textFlicker = true;
FlxTween.tween(ltText, {y: ltText.y - _tweenXOffset}, 0.5, {
ease: FlxEase.expoOut,
onComplete: (_) -> {
new FlxTimer().start(0.5, (_) -> {
// Loading Sequence
var xTarget:Float = (FlxG.width - playerBox.width) * 0.5;
_textFlicker = true;
FlxTween.tween(ltText, {y: ltText.y + _tweenXOffset}, 0.5, {
ease: FlxEase.expoOut,
onComplete: (_) -> {
ltText.text = PhraseManager.getPhrase('loading', "LOADING...").toUpperCase();
ltText.screenCenter(X);
ltText.x += 10;
ltText.alpha = 0;
FlxTween.tween(ltText, {y: ltText.y - _tweenXOffset, alpha: 1}, 0.5, {ease: FlxEase.expoOut});
FlxTween.tween(playerBox.scale, {x: playerBox.scale.x - _scaleDec, y: playerBox.scale.y - _scaleDec}, 0.5,
{ease: FlxEase.expoOut});
}
});

FlxTween.tween(playerBox, {x: xTarget}, 0.5, {ease: FlxEase.expoOut});
FlxTween.tween(tileBox, {x: xTarget}, 0.5, {
ease: FlxEase.expoOut,
onComplete: (_) -> {
tileBox.kill();
tileBox.destroy();
remove(tileBox);
currentlyLoading = true;
}
});
});
}
});
}
});
});
}

override function update(elapsed:Float) {
if (FlxG.keys.justPressed.T) {
Utils.switchState(new TestTransition());
}
flickerEffectUpdate(elapsed);
loadingSeqUpdate(elapsed);

if (FlxG.keys.justPressed.SPACE)
FlxG.resetState();
super.update(elapsed);
}

var _rotateTime:Float = 0;

function loadingSeqUpdate(elapsed:Float) {
if (!currentlyLoading)
return;

if (_rotateTime > 3) {
playerBox.angle = 0;
FlxTween.tween(ltText, {alpha: 0}, 0.5, {
ease: FlxEase.linear,
onComplete: (_) -> {
ltText.destroy();
remove(ltText);
#if SONG_SELECT
Utils.switchState(() -> new SongSelectState(false, true));
#else
Utils.switchState(() -> new MenuState(false, true));
#end
}
});
} else {
_rotateTime += elapsed;
playerBox.angle = FlxEase.expoInOut(_rotateTime % 1) * (-90);
}
}

/**
* Flicker effect thing
*/
var _flickerDelay:Float = 0.03;

var _curFlickTime:Float = 0;
var _curFlickPos:Float = 0;
var _flickerEndTime:Float = 0.3;

function flickerEffectUpdate(elapsed:Float) {
if (!_textFlicker)
return;

_curFlickTime += elapsed;
_curFlickPos += elapsed;
if (_curFlickTime > _flickerDelay) {
ltText.alpha = 1 - ltText.alpha;
_curFlickTime = 0;
}

if (_curFlickPos > _flickerEndTime) {
_textFlicker = false;
_curFlickPos = 0;
}
}
}
2 changes: 1 addition & 1 deletion src/lt/states/MenuState.hx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class MenuState extends State {
function get_options():Array<Dynamic>{
return [
[PhraseManager.getPhrase("settings").toLowerCase(), () -> openSubState(new SettingsSubstate())],
[PhraseManager.getPhrase("play").toLowerCase(), () -> Utils.switchState(new MenuDebugState(), PhraseManager.getPhrase("Song Select"))],
[PhraseManager.getPhrase("play").toLowerCase(), () -> Utils.switchState(() -> new SongSelectState(), PhraseManager.getPhrase("Song Select"))],
[PhraseManager.getPhrase("edit").toLowerCase(), () -> Utils.switchState(new LevelEditorState(), PhraseManager.getPhrase("Level Editor"))],
[PhraseManager.getPhrase("credits").toLowerCase(), () -> Utils.switchState(new CreditsState(), PhraseManager.getPhrase("Credits"))],
];
Expand Down
Loading