Tobee_Night_Funkin_PSYCH/source/PauseSubState.hx

248 lines
6.9 KiB
Haxe

package;
import Controls.Control;
import flixel.FlxG;
import flixel.FlxSprite;
import flixel.FlxSubState;
import flixel.addons.transition.FlxTransitionableState;
import flixel.group.FlxGroup.FlxTypedGroup;
import flixel.input.keyboard.FlxKey;
import flixel.system.FlxSound;
import flixel.text.FlxText;
import flixel.tweens.FlxEase;
import flixel.tweens.FlxTween;
import flixel.util.FlxColor;
import flixel.FlxCamera;
class PauseSubState extends MusicBeatSubstate
{
var grpMenuShit:FlxTypedGroup<Alphabet>;
var menuItems:Array<String> = [];
var menuItemsOG:Array<String> = ['Resume', 'Restart Song', 'Change Difficulty', 'Toggle Practice Mode', 'Botplay', 'Exit to menu'];
var difficultyChoices = [];
var curSelected:Int = 0;
var pauseMusic:FlxSound;
var practiceText:FlxText;
var botplayText:FlxText;
public static var transCamera:FlxCamera;
public function new(x:Float, y:Float)
{
super();
menuItems = menuItemsOG;
for (i in 0...CoolUtil.difficultyStuff.length) {
var diff:String = '' + CoolUtil.difficultyStuff[i][0];
difficultyChoices.push(diff);
}
difficultyChoices.push('BACK');
pauseMusic = new FlxSound().loadEmbedded(Paths.music('breakfast'), true, true);
pauseMusic.volume = 0;
pauseMusic.play(false, FlxG.random.int(0, Std.int(pauseMusic.length / 2)));
FlxG.sound.list.add(pauseMusic);
var bg:FlxSprite = new FlxSprite().makeGraphic(FlxG.width, FlxG.height, FlxColor.BLACK);
bg.alpha = 0;
bg.scrollFactor.set();
add(bg);
var levelInfo:FlxText = new FlxText(20, 15, 0, "", 32);
levelInfo.text += PlayState.SONG.song;
levelInfo.scrollFactor.set();
levelInfo.setFormat(Paths.font("vcr.ttf"), 32);
levelInfo.updateHitbox();
add(levelInfo);
var levelDifficulty:FlxText = new FlxText(20, 15 + 32, 0, "", 32);
levelDifficulty.text += CoolUtil.difficultyString();
levelDifficulty.scrollFactor.set();
levelDifficulty.setFormat(Paths.font('vcr.ttf'), 32);
levelDifficulty.updateHitbox();
add(levelDifficulty);
var blueballedTxt:FlxText = new FlxText(20, 15 + 64, 0, "", 32);
blueballedTxt.text = "Blueballed: " + PlayState.deathCounter;
blueballedTxt.scrollFactor.set();
blueballedTxt.setFormat(Paths.font('vcr.ttf'), 32);
blueballedTxt.updateHitbox();
add(blueballedTxt);
practiceText = new FlxText(20, 15 + 101, 0, "PRACTICE MODE", 32);
practiceText.scrollFactor.set();
practiceText.setFormat(Paths.font('vcr.ttf'), 32);
practiceText.x = FlxG.width - (practiceText.width + 20);
practiceText.updateHitbox();
practiceText.visible = PlayState.practiceMode;
add(practiceText);
botplayText = new FlxText(20, FlxG.height - 40, 0, "BOTPLAY", 32);
botplayText.scrollFactor.set();
botplayText.setFormat(Paths.font('vcr.ttf'), 32);
botplayText.x = FlxG.width - (botplayText.width + 20);
botplayText.updateHitbox();
botplayText.visible = PlayState.cpuControlled;
add(botplayText);
blueballedTxt.alpha = 0;
levelDifficulty.alpha = 0;
levelInfo.alpha = 0;
levelInfo.x = FlxG.width - (levelInfo.width + 20);
levelDifficulty.x = FlxG.width - (levelDifficulty.width + 20);
blueballedTxt.x = FlxG.width - (blueballedTxt.width + 20);
FlxTween.tween(bg, {alpha: 0.6}, 0.4, {ease: FlxEase.quartInOut});
FlxTween.tween(levelInfo, {alpha: 1, y: 20}, 0.4, {ease: FlxEase.quartInOut, startDelay: 0.3});
FlxTween.tween(levelDifficulty, {alpha: 1, y: levelDifficulty.y + 5}, 0.4, {ease: FlxEase.quartInOut, startDelay: 0.5});
FlxTween.tween(blueballedTxt, {alpha: 1, y: blueballedTxt.y + 5}, 0.4, {ease: FlxEase.quartInOut, startDelay: 0.7});
grpMenuShit = new FlxTypedGroup<Alphabet>();
add(grpMenuShit);
for (i in 0...menuItems.length)
{
var songText:Alphabet = new Alphabet(0, (70 * i) + 30, menuItems[i], true, false);
songText.isMenuItem = true;
songText.targetY = i;
grpMenuShit.add(songText);
}
changeSelection();
cameras = [FlxG.cameras.list[FlxG.cameras.list.length - 1]];
}
override function update(elapsed:Float)
{
if (pauseMusic.volume < 0.5)
pauseMusic.volume += 0.01 * elapsed;
super.update(elapsed);
var upP = controls.UI_UP_P;
var downP = controls.UI_DOWN_P;
var accepted = controls.ACCEPT;
if (upP)
{
changeSelection(-1);
}
if (downP)
{
changeSelection(1);
}
if (accepted)
{
var daSelected:String = menuItems[curSelected];
for (i in 0...difficultyChoices.length-1) {
if(difficultyChoices[i] == daSelected) {
var name:String = PlayState.SONG.song.toLowerCase();
var poop = Highscore.formatSong(name, curSelected);
PlayState.SONG = Song.loadFromJson(poop, name);
PlayState.storyDifficulty = curSelected;
CustomFadeTransition.nextCamera = transCamera;
MusicBeatState.resetState();
FlxG.sound.music.volume = 0;
PlayState.changedDifficulty = true;
PlayState.cpuControlled = false;
return;
}
}
switch (daSelected)
{
case "Resume":
close();
case 'Change Difficulty':
menuItems = difficultyChoices;
regenMenu();
case 'Toggle Practice Mode':
PlayState.practiceMode = !PlayState.practiceMode;
PlayState.usedPractice = true;
practiceText.visible = PlayState.practiceMode;
case "Restart Song":
CustomFadeTransition.nextCamera = transCamera;
MusicBeatState.resetState();
FlxG.sound.music.volume = 0;
case 'Botplay':
PlayState.cpuControlled = !PlayState.cpuControlled;
PlayState.usedPractice = true;
botplayText.visible = PlayState.cpuControlled;
case "Exit to menu":
PlayState.deathCounter = 0;
PlayState.seenCutscene = false;
CustomFadeTransition.nextCamera = transCamera;
if(PlayState.isStoryMode) {
MusicBeatState.switchState(new StoryMenuState());
} else {
MusicBeatState.switchState(new FreeplayState());
}
FlxG.sound.playMusic(Paths.music('freakyMenu'));
PlayState.usedPractice = false;
PlayState.changedDifficulty = false;
PlayState.cpuControlled = false;
case 'BACK':
menuItems = menuItemsOG;
regenMenu();
}
}
}
override function destroy()
{
pauseMusic.destroy();
super.destroy();
}
function changeSelection(change:Int = 0):Void
{
curSelected += change;
FlxG.sound.play(Paths.sound('scrollMenu'), 0.4);
if (curSelected < 0)
curSelected = menuItems.length - 1;
if (curSelected >= menuItems.length)
curSelected = 0;
var bullShit:Int = 0;
for (item in grpMenuShit.members)
{
item.targetY = bullShit - curSelected;
bullShit++;
item.alpha = 0.6;
// item.setGraphicSize(Std.int(item.width * 0.8));
if (item.targetY == 0)
{
item.alpha = 1;
// item.setGraphicSize(Std.int(item.width));
}
}
}
function regenMenu():Void {
for (i in 0...grpMenuShit.members.length) {
this.grpMenuShit.remove(this.grpMenuShit.members[0], true);
}
for (i in 0...menuItems.length) {
var item = new Alphabet(0, 70 * i + 30, menuItems[i], true, false);
item.isMenuItem = true;
item.targetY = i;
grpMenuShit.add(item);
}
curSelected = 0;
changeSelection();
}
}