1
0
Fork 0
mirror of https://github.com/ninjamuffin99/Funkin.git synced 2024-11-05 06:14:36 +00:00
Funkin/source/StoryMenuState.hx

345 lines
8.7 KiB
Haxe
Raw Normal View History

2020-10-30 21:18:26 +00:00
package;
import flixel.FlxG;
import flixel.FlxSprite;
import flixel.graphics.frames.FlxAtlasFrames;
2020-10-30 21:55:20 +00:00
import flixel.group.FlxGroup.FlxTypedGroup;
2020-10-30 22:21:34 +00:00
import flixel.group.FlxGroup;
2020-11-06 10:56:45 +00:00
import flixel.math.FlxMath;
2020-10-30 21:18:26 +00:00
import flixel.text.FlxText;
2020-10-31 23:53:26 +00:00
import flixel.tweens.FlxTween;
2020-10-31 01:55:09 +00:00
import flixel.util.FlxTimer;
2020-10-31 23:53:26 +00:00
import lime.net.curl.CURLCode;
2020-10-30 21:18:26 +00:00
using StringTools;
class StoryMenuState extends MusicBeatState
{
var scoreText:FlxText;
2020-11-06 10:21:29 +00:00
var weekData:Array<Dynamic> = [['Tutorial'], ['Bopeebo', 'Fresh', 'Dadbattle'], ['Spookeez', 'South']];
2020-10-31 23:53:26 +00:00
var curDifficulty:Int = 1;
2020-10-31 04:25:23 +00:00
2020-11-06 10:21:29 +00:00
public static var weekUnlocked:Array<Bool> = [true, true, false];
2020-10-31 04:25:23 +00:00
2020-11-06 10:21:29 +00:00
var weekCharacters:Array<Dynamic> = [['dad', 'bf', 'gf'], ['dad', 'bf', 'gf'], ['spooky', 'bf', 'gf']];
2020-10-30 21:18:26 +00:00
var curWeek:Int = 0;
var txtTracklist:FlxText;
2020-10-30 21:55:20 +00:00
var grpWeekText:FlxTypedGroup<MenuItem>;
2020-10-31 00:09:33 +00:00
var grpWeekCharacters:FlxTypedGroup<MenuCharacter>;
2020-10-30 21:55:20 +00:00
2020-10-30 22:21:34 +00:00
var grpLocks:FlxTypedGroup<FlxSprite>;
var difficultySelectors:FlxGroup;
2020-10-31 23:53:26 +00:00
var sprDifficulty:FlxSprite;
var leftArrow:FlxSprite;
var rightArrow:FlxSprite;
2020-10-30 22:21:34 +00:00
2020-10-30 21:18:26 +00:00
override function create()
{
if (FlxG.sound.music != null)
{
if (!FlxG.sound.music.playing)
FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt);
}
2020-11-01 07:58:20 +00:00
2020-10-31 02:33:28 +00:00
persistentUpdate = persistentDraw = true;
2020-10-30 21:18:26 +00:00
scoreText = new FlxText(10, 10, 0, "SCORE: 49324858", 36);
scoreText.setFormat("VCR OSD Mono", 32);
var rankText:FlxText = new FlxText(0, 10);
rankText.text = 'RANK: GREAT';
rankText.setFormat("assets/fonts/vcr.ttf", 32);
rankText.size = scoreText.size;
rankText.screenCenter(X);
var ui_tex = FlxAtlasFrames.fromSparrow(AssetPaths.campaign_menu_UI_assets__png, AssetPaths.campaign_menu_UI_assets__xml);
var yellowBG:FlxSprite = new FlxSprite(0, 56).makeGraphic(FlxG.width, 400, 0xFFF9CF51);
2020-10-30 21:55:20 +00:00
grpWeekText = new FlxTypedGroup<MenuItem>();
add(grpWeekText);
2020-10-31 00:09:33 +00:00
grpWeekCharacters = new FlxTypedGroup<MenuCharacter>();
2020-10-30 22:21:34 +00:00
grpLocks = new FlxTypedGroup<FlxSprite>();
add(grpLocks);
2020-10-30 21:18:26 +00:00
for (i in 0...weekData.length)
{
2020-11-06 10:21:29 +00:00
var weekThing:MenuItem = new MenuItem(0, yellowBG.y + yellowBG.height + 10, i);
2020-10-30 21:55:20 +00:00
weekThing.y += ((weekThing.height + 20) * i);
weekThing.targetY = i;
grpWeekText.add(weekThing);
weekThing.screenCenter(X);
2020-10-30 22:21:34 +00:00
weekThing.antialiasing = true;
// weekThing.updateHitbox();
2020-11-06 10:21:29 +00:00
// Needs an offset thingie
2020-10-30 22:21:34 +00:00
if (!weekUnlocked[i])
{
var lock:FlxSprite = new FlxSprite(weekThing.width + 10 + weekThing.x);
lock.frames = ui_tex;
lock.animation.addByPrefix('lock', 'lock');
lock.animation.play('lock');
lock.ID = i;
lock.antialiasing = true;
grpLocks.add(lock);
}
2020-10-30 21:18:26 +00:00
}
2020-10-31 00:09:33 +00:00
for (char in 0...3)
{
var weekCharacterThing:MenuCharacter = new MenuCharacter((FlxG.width * 0.25) * (1 + char) - 150, weekCharacters[curWeek][char]);
weekCharacterThing.y += 70;
weekCharacterThing.antialiasing = true;
switch (weekCharacterThing.character)
{
case 'dad':
weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.5));
weekCharacterThing.updateHitbox();
case 'bf':
weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.9));
weekCharacterThing.updateHitbox();
2020-11-01 07:01:00 +00:00
weekCharacterThing.x -= 80;
2020-10-31 00:09:33 +00:00
case 'gf':
weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.5));
weekCharacterThing.updateHitbox();
}
grpWeekCharacters.add(weekCharacterThing);
}
2020-10-30 22:21:34 +00:00
difficultySelectors = new FlxGroup();
add(difficultySelectors);
2020-11-06 10:21:29 +00:00
leftArrow = new FlxSprite(grpWeekText.members[0].x + grpWeekText.members[0].width + 10, grpWeekText.members[0].y + 10);
2020-10-30 22:21:34 +00:00
leftArrow.frames = ui_tex;
leftArrow.animation.addByPrefix('idle', "arrow left");
2020-10-31 23:53:26 +00:00
leftArrow.animation.addByPrefix('press', "arrow push left");
2020-10-30 22:21:34 +00:00
leftArrow.animation.play('idle');
difficultySelectors.add(leftArrow);
2020-10-31 23:53:26 +00:00
sprDifficulty = new FlxSprite(leftArrow.x + 130, leftArrow.y);
2020-10-30 22:21:34 +00:00
sprDifficulty.frames = ui_tex;
sprDifficulty.animation.addByPrefix('easy', 'EASY');
sprDifficulty.animation.addByPrefix('normal', 'NORMAL');
sprDifficulty.animation.addByPrefix('hard', 'HARD');
sprDifficulty.animation.play('easy');
2020-10-31 23:53:26 +00:00
changeDifficulty();
2020-10-30 22:21:34 +00:00
difficultySelectors.add(sprDifficulty);
2020-10-31 23:53:26 +00:00
rightArrow = new FlxSprite(sprDifficulty.x + sprDifficulty.width + 50, leftArrow.y);
2020-10-30 22:21:34 +00:00
rightArrow.frames = ui_tex;
rightArrow.animation.addByPrefix('idle', 'arrow right');
2020-10-31 23:53:26 +00:00
rightArrow.animation.addByPrefix('press', "arrow push right", 24, false);
2020-10-30 22:21:34 +00:00
rightArrow.animation.play('idle');
difficultySelectors.add(rightArrow);
2020-10-30 21:18:26 +00:00
add(yellowBG);
2020-10-31 00:09:33 +00:00
add(grpWeekCharacters);
2020-10-30 21:18:26 +00:00
txtTracklist = new FlxText(FlxG.width * 0.05, yellowBG.x + yellowBG.height + 100, 0, "Tracks", 32);
txtTracklist.alignment = CENTER;
txtTracklist.font = rankText.font;
txtTracklist.color = 0xFFe55777;
add(txtTracklist);
2020-11-01 07:01:00 +00:00
// add(rankText);
2020-11-06 10:56:45 +00:00
add(scoreText);
2020-10-30 21:18:26 +00:00
updateText();
super.create();
}
override function update(elapsed:Float)
{
// scoreText.setFormat('VCR OSD Mono', 32);
2020-11-06 10:56:45 +00:00
lerpScore = Math.floor(FlxMath.lerp(lerpScore, intendedScore, 0.5));
scoreText.text = "WEEK SCORE:" + lerpScore;
2020-10-30 21:18:26 +00:00
// FlxG.watch.addQuick('font', scoreText.font);
2020-10-30 22:21:34 +00:00
difficultySelectors.visible = weekUnlocked[curWeek];
grpLocks.forEach(function(lock:FlxSprite)
{
lock.y = grpWeekText.members[lock.ID].y;
});
2020-10-31 10:07:22 +00:00
if (!movedBack)
2020-10-31 01:55:09 +00:00
{
2020-10-31 10:07:22 +00:00
if (!selectedWeek)
{
if (controls.UP_P)
2020-10-31 19:53:58 +00:00
{
2020-10-31 10:07:22 +00:00
changeWeek(-1);
2020-10-31 19:53:58 +00:00
}
2020-10-31 10:07:22 +00:00
if (controls.DOWN_P)
2020-10-31 19:53:58 +00:00
{
2020-10-31 10:07:22 +00:00
changeWeek(1);
2020-10-31 19:53:58 +00:00
}
2020-10-31 23:53:26 +00:00
if (controls.RIGHT)
rightArrow.animation.play('press')
else
rightArrow.animation.play('idle');
if (controls.LEFT)
leftArrow.animation.play('press');
else
leftArrow.animation.play('idle');
if (controls.RIGHT_P)
changeDifficulty(1);
if (controls.LEFT_P)
changeDifficulty(-1);
2020-10-31 10:07:22 +00:00
}
if (controls.ACCEPT)
2020-10-31 19:53:58 +00:00
{
2020-10-31 10:07:22 +00:00
selectWeek();
2020-10-31 19:53:58 +00:00
}
2020-10-31 01:55:09 +00:00
}
2020-10-31 10:07:22 +00:00
if (controls.BACK && !movedBack && !selectedWeek)
{
2020-10-31 19:53:58 +00:00
FlxG.sound.play('assets/sounds/cancelMenu' + TitleState.soundExt);
2020-10-31 10:07:22 +00:00
movedBack = true;
FlxG.switchState(new MainMenuState());
}
2020-10-30 21:18:26 +00:00
super.update(elapsed);
}
2020-10-31 10:07:22 +00:00
var movedBack:Bool = false;
2020-10-31 01:55:09 +00:00
var selectedWeek:Bool = false;
function selectWeek()
{
if (weekUnlocked[curWeek])
{
2020-10-31 19:53:58 +00:00
FlxG.sound.play('assets/sounds/confirmMenu' + TitleState.soundExt);
2020-10-31 01:55:09 +00:00
grpWeekText.members[curWeek].week.animation.resume();
grpWeekCharacters.members[1].animation.play('bfConfirm');
PlayState.storyPlaylist = weekData[curWeek];
PlayState.isStoryMode = true;
selectedWeek = true;
2020-10-31 23:53:26 +00:00
var diffic = "";
switch (curDifficulty)
{
case 0:
diffic = '-easy';
case 2:
diffic = '-hard';
}
PlayState.storyDifficulty = curDifficulty;
PlayState.SONG = Song.loadFromJson(PlayState.storyPlaylist[0].toLowerCase() + diffic, PlayState.storyPlaylist[0].toLowerCase());
2020-11-06 10:56:45 +00:00
PlayState.storyWeek = curWeek;
2020-11-06 21:51:11 +00:00
PlayState.campaignScore = 0;
2020-10-31 01:55:09 +00:00
new FlxTimer().start(1, function(tmr:FlxTimer)
{
2020-11-01 03:22:49 +00:00
if (FlxG.sound.music != null)
FlxG.sound.music.stop();
2020-10-31 01:55:09 +00:00
FlxG.switchState(new PlayState());
});
}
}
2020-10-31 23:53:26 +00:00
function changeDifficulty(change:Int = 0):Void
{
curDifficulty += change;
if (curDifficulty < 0)
curDifficulty = 2;
if (curDifficulty > 2)
curDifficulty = 0;
sprDifficulty.offset.x = 0;
switch (curDifficulty)
{
case 0:
sprDifficulty.animation.play('easy');
sprDifficulty.offset.x = 20;
case 1:
sprDifficulty.animation.play('normal');
sprDifficulty.offset.x = 70;
case 2:
sprDifficulty.animation.play('hard');
sprDifficulty.offset.x = 20;
}
sprDifficulty.alpha = 0;
2020-11-01 04:55:00 +00:00
// USING THESE WEIRD VALUES SO THAT IT DOESNT FLOAT UP
sprDifficulty.y = leftArrow.y - 15;
2020-11-06 10:56:45 +00:00
intendedScore = Highscore.getWeekScore(curWeek, curDifficulty);
2020-11-01 04:55:00 +00:00
FlxTween.tween(sprDifficulty, {y: leftArrow.y + 15, alpha: 1}, 0.07);
2020-10-31 23:53:26 +00:00
}
2020-11-06 10:56:45 +00:00
var lerpScore:Int = 0;
var intendedScore:Int = 0;
2020-10-30 21:18:26 +00:00
function changeWeek(change:Int = 0):Void
{
curWeek += change;
if (curWeek >= weekData.length)
curWeek = 0;
if (curWeek < 0)
curWeek = weekData.length - 1;
2020-10-30 21:55:20 +00:00
var bullShit:Int = 0;
for (item in grpWeekText.members)
{
item.targetY = bullShit - curWeek;
2020-11-06 10:21:29 +00:00
if (item.targetY == Std.int(0) && weekUnlocked[curWeek])
item.alpha = 1;
else
item.alpha = 0.6;
2020-10-30 21:55:20 +00:00
bullShit++;
}
2020-10-31 19:53:58 +00:00
FlxG.sound.play('assets/sounds/scrollMenu' + TitleState.soundExt);
2020-10-30 21:18:26 +00:00
updateText();
}
function updateText()
{
2020-10-31 01:55:09 +00:00
grpWeekCharacters.members[0].animation.play(weekCharacters[curWeek][0]);
grpWeekCharacters.members[1].animation.play(weekCharacters[curWeek][1]);
grpWeekCharacters.members[2].animation.play(weekCharacters[curWeek][2]);
2020-10-30 21:18:26 +00:00
txtTracklist.text = "Tracks\n";
var stringThing:Array<String> = weekData[curWeek];
for (i in stringThing)
{
txtTracklist.text += "\n" + i;
}
2020-10-30 21:55:20 +00:00
txtTracklist.text = txtTracklist.text.toUpperCase();
2020-10-30 21:18:26 +00:00
txtTracklist.screenCenter(X);
txtTracklist.x -= FlxG.width * 0.35;
2020-11-06 10:56:45 +00:00
intendedScore = Highscore.getWeekScore(curWeek, curDifficulty);
2020-10-30 21:18:26 +00:00
}
}