package; import flixel.FlxG; import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; import flixel.group.FlxGroup.FlxTypedGroup; import flixel.group.FlxGroup; import flixel.math.FlxMath; import flixel.text.FlxText; import flixel.tweens.FlxTween; import flixel.util.FlxTimer; import lime.net.curl.CURLCode; using StringTools; class StoryMenuState extends MusicBeatState { var scoreText:FlxText; var weekData:Array = [['Tutorial'], ['Bopeebo', 'Fresh', 'Dadbattle'], ['Spookeez', 'South']]; var curDifficulty:Int = 1; public static var weekUnlocked:Array = [true, true, false]; var weekCharacters:Array = [['dad', 'bf', 'gf'], ['dad', 'bf', 'gf'], ['spooky', 'bf', 'gf']]; var curWeek:Int = 0; var txtTracklist:FlxText; var grpWeekText:FlxTypedGroup; var grpWeekCharacters:FlxTypedGroup; var grpLocks:FlxTypedGroup; var difficultySelectors:FlxGroup; var sprDifficulty:FlxSprite; var leftArrow:FlxSprite; var rightArrow:FlxSprite; override function create() { if (FlxG.sound.music != null) { if (!FlxG.sound.music.playing) FlxG.sound.playMusic('assets/music/freakyMenu' + TitleState.soundExt); } persistentUpdate = persistentDraw = true; 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); grpWeekText = new FlxTypedGroup(); add(grpWeekText); grpWeekCharacters = new FlxTypedGroup(); grpLocks = new FlxTypedGroup(); add(grpLocks); for (i in 0...weekData.length) { var weekThing:MenuItem = new MenuItem(0, yellowBG.y + yellowBG.height + 10, i); weekThing.y += ((weekThing.height + 20) * i); weekThing.targetY = i; grpWeekText.add(weekThing); weekThing.screenCenter(X); weekThing.antialiasing = true; // weekThing.updateHitbox(); // Needs an offset thingie 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); } } 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(); weekCharacterThing.x -= 80; case 'gf': weekCharacterThing.setGraphicSize(Std.int(weekCharacterThing.width * 0.5)); weekCharacterThing.updateHitbox(); } grpWeekCharacters.add(weekCharacterThing); } difficultySelectors = new FlxGroup(); add(difficultySelectors); leftArrow = new FlxSprite(grpWeekText.members[0].x + grpWeekText.members[0].width + 10, grpWeekText.members[0].y + 10); leftArrow.frames = ui_tex; leftArrow.animation.addByPrefix('idle', "arrow left"); leftArrow.animation.addByPrefix('press', "arrow push left"); leftArrow.animation.play('idle'); difficultySelectors.add(leftArrow); sprDifficulty = new FlxSprite(leftArrow.x + 130, leftArrow.y); sprDifficulty.frames = ui_tex; sprDifficulty.animation.addByPrefix('easy', 'EASY'); sprDifficulty.animation.addByPrefix('normal', 'NORMAL'); sprDifficulty.animation.addByPrefix('hard', 'HARD'); sprDifficulty.animation.play('easy'); changeDifficulty(); difficultySelectors.add(sprDifficulty); rightArrow = new FlxSprite(sprDifficulty.x + sprDifficulty.width + 50, leftArrow.y); rightArrow.frames = ui_tex; rightArrow.animation.addByPrefix('idle', 'arrow right'); rightArrow.animation.addByPrefix('press', "arrow push right", 24, false); rightArrow.animation.play('idle'); difficultySelectors.add(rightArrow); add(yellowBG); add(grpWeekCharacters); 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); // add(rankText); add(scoreText); updateText(); super.create(); } override function update(elapsed:Float) { // scoreText.setFormat('VCR OSD Mono', 32); lerpScore = Math.floor(FlxMath.lerp(lerpScore, intendedScore, 0.5)); scoreText.text = "WEEK SCORE:" + lerpScore; // FlxG.watch.addQuick('font', scoreText.font); difficultySelectors.visible = weekUnlocked[curWeek]; grpLocks.forEach(function(lock:FlxSprite) { lock.y = grpWeekText.members[lock.ID].y; }); if (!movedBack) { if (!selectedWeek) { if (controls.UP_P) { changeWeek(-1); } if (controls.DOWN_P) { changeWeek(1); } 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); } if (controls.ACCEPT) { selectWeek(); } } if (controls.BACK && !movedBack && !selectedWeek) { FlxG.sound.play('assets/sounds/cancelMenu' + TitleState.soundExt); movedBack = true; FlxG.switchState(new MainMenuState()); } super.update(elapsed); } var movedBack:Bool = false; var selectedWeek:Bool = false; function selectWeek() { if (weekUnlocked[curWeek]) { FlxG.sound.play('assets/sounds/confirmMenu' + TitleState.soundExt); grpWeekText.members[curWeek].week.animation.resume(); grpWeekCharacters.members[1].animation.play('bfConfirm'); PlayState.storyPlaylist = weekData[curWeek]; PlayState.isStoryMode = true; selectedWeek = true; 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()); PlayState.storyWeek = curWeek; PlayState.campaignScore = 0; new FlxTimer().start(1, function(tmr:FlxTimer) { if (FlxG.sound.music != null) FlxG.sound.music.stop(); FlxG.switchState(new PlayState()); }); } } 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; // USING THESE WEIRD VALUES SO THAT IT DOESNT FLOAT UP sprDifficulty.y = leftArrow.y - 15; intendedScore = Highscore.getWeekScore(curWeek, curDifficulty); FlxTween.tween(sprDifficulty, {y: leftArrow.y + 15, alpha: 1}, 0.07); } var lerpScore:Int = 0; var intendedScore:Int = 0; function changeWeek(change:Int = 0):Void { curWeek += change; if (curWeek >= weekData.length) curWeek = 0; if (curWeek < 0) curWeek = weekData.length - 1; var bullShit:Int = 0; for (item in grpWeekText.members) { item.targetY = bullShit - curWeek; if (item.targetY == Std.int(0) && weekUnlocked[curWeek]) item.alpha = 1; else item.alpha = 0.6; bullShit++; } FlxG.sound.play('assets/sounds/scrollMenu' + TitleState.soundExt); updateText(); } function updateText() { grpWeekCharacters.members[0].animation.play(weekCharacters[curWeek][0]); grpWeekCharacters.members[1].animation.play(weekCharacters[curWeek][1]); grpWeekCharacters.members[2].animation.play(weekCharacters[curWeek][2]); txtTracklist.text = "Tracks\n"; var stringThing:Array = weekData[curWeek]; for (i in stringThing) { txtTracklist.text += "\n" + i; } txtTracklist.text = txtTracklist.text.toUpperCase(); txtTracklist.screenCenter(X); txtTracklist.x -= FlxG.width * 0.35; intendedScore = Highscore.getWeekScore(curWeek, curDifficulty); } }