1
0
Fork 0
mirror of https://github.com/ninjamuffin99/Funkin.git synced 2024-11-09 16:24:42 +00:00
Funkin/source/MainMenuState.hx

166 lines
4 KiB
Haxe
Raw Normal View History

2020-11-01 01:11:14 +00:00
package;
2021-02-15 17:43:51 +00:00
import flixel.util.FlxTimer;
import flixel.FlxState;
import cpp.abi.Abi;
2020-11-01 01:11:14 +00:00
import flixel.FlxG;
import flixel.FlxObject;
import flixel.FlxSprite;
2021-02-12 06:20:20 +00:00
import flixel.addons.transition.FlxTransitionableState;
2020-11-01 01:11:14 +00:00
import flixel.effects.FlxFlicker;
import flixel.graphics.frames.FlxAtlasFrames;
import flixel.group.FlxGroup.FlxTypedGroup;
2020-11-07 02:17:27 +00:00
import flixel.text.FlxText;
2020-11-01 01:11:14 +00:00
import flixel.tweens.FlxEase;
import flixel.tweens.FlxTween;
2020-11-07 02:17:27 +00:00
import flixel.util.FlxColor;
2020-12-16 03:00:22 +00:00
import io.newgrounds.NG;
2020-11-07 02:17:27 +00:00
import lime.app.Application;
2020-11-01 01:11:14 +00:00
2021-02-15 17:43:51 +00:00
import ui.MenuItemList;
2020-12-25 08:40:01 +00:00
using StringTools;
2020-11-01 01:11:14 +00:00
class MainMenuState extends MusicBeatState
{
2021-02-15 17:43:51 +00:00
var menuItems:MenuItemList;
2020-11-01 01:11:14 +00:00
var magenta:FlxSprite;
var camFollow:FlxObject;
override function create()
{
2021-02-12 06:20:20 +00:00
transIn = FlxTransitionableState.defaultTransIn;
transOut = FlxTransitionableState.defaultTransOut;
if (!FlxG.sound.music.playing)
{
2021-02-08 21:34:48 +00:00
FlxG.sound.playMusic(Paths.music('freakyMenu'));
}
2020-11-01 01:11:14 +00:00
persistentUpdate = persistentDraw = true;
2021-02-08 21:34:48 +00:00
var bg:FlxSprite = new FlxSprite(-80).loadGraphic(Paths.image('menuBG'));
2020-11-01 01:11:14 +00:00
bg.scrollFactor.x = 0;
bg.scrollFactor.y = 0.18;
bg.setGraphicSize(Std.int(bg.width * 1.1));
bg.updateHitbox();
bg.screenCenter();
bg.antialiasing = true;
add(bg);
camFollow = new FlxObject(0, 0, 1, 1);
add(camFollow);
2021-02-08 21:34:48 +00:00
magenta = new FlxSprite(-80).loadGraphic(Paths.image('menuDesat'));
2020-11-01 01:11:14 +00:00
magenta.scrollFactor.x = 0;
magenta.scrollFactor.y = 0.18;
magenta.setGraphicSize(Std.int(magenta.width * 1.1));
magenta.updateHitbox();
magenta.screenCenter();
magenta.visible = false;
magenta.antialiasing = true;
2020-11-07 02:17:27 +00:00
magenta.color = 0xFFfd719b;
2020-11-01 01:11:14 +00:00
add(magenta);
// magenta.scrollFactor.set();
2021-02-15 17:43:51 +00:00
menuItems = new MenuItemList('FNF_main_menu_assets');
2020-11-01 01:11:14 +00:00
add(menuItems);
2021-02-15 17:43:51 +00:00
menuItems.onChange.add(onMenuItemChange);
menuItems.onAcceptPress.add(function(_)
{
FlxFlicker.flicker(magenta, 1.1, 0.15, false, true);
});
var hasPopupBlocker = #if web true #else false #end;
menuItems.addItem('story mode', function () startExitState(new StoryMenuState()));
menuItems.addItem('freeplay', function () startExitState(new FreeplayState()));
// addMenuItem('options', function () startExitState(new OptionMenu()));
#if (!switch)
menuItems.addItem('donate', selectDonate, hasPopupBlocker);
#end
#if newgrounds
if (NG.core.loggedIn)
menuItems.addItem("logout", selectLogout);
else
menuItems.addItem("login", selectLogin, hasPopupBlocker);
#end
// center vertically
var spacing = 160;
var top = (FlxG.height - (spacing * (menuItems.length - 1))) / 2;
for (i in 0...menuItems.length)
2020-11-01 01:11:14 +00:00
{
2021-02-15 17:43:51 +00:00
var menuItem = menuItems.members[i];
menuItem.x = FlxG.width / 2;
menuItem.y = top + spacing * i;
2020-11-01 01:11:14 +00:00
}
FlxG.camera.follow(camFollow, null, 0.06);
2020-12-13 07:45:36 +00:00
var versionShit:FlxText = new FlxText(5, FlxG.height - 18, 0, "v" + Application.current.meta.get('version'), 12);
2020-11-07 02:17:27 +00:00
versionShit.scrollFactor.set();
versionShit.setFormat("VCR OSD Mono", 16, FlxColor.WHITE, LEFT, FlxTextBorderStyle.OUTLINE, FlxColor.BLACK);
add(versionShit);
2020-12-25 05:17:21 +00:00
// NG.core.calls.event.logEvent('swag').send();
2020-12-16 03:00:22 +00:00
2020-11-01 01:11:14 +00:00
super.create();
}
2021-02-15 17:43:51 +00:00
function onMenuItemChange(selected:MenuItem)
2020-11-01 01:11:14 +00:00
{
2021-02-15 17:43:51 +00:00
camFollow.setPosition(selected.getGraphicMidpoint().x, selected.getGraphicMidpoint().y);
}
function selectDonate()
{
#if linux
Sys.command('/usr/bin/xdg-open', ["https://ninja-muffin24.itch.io/funkin", "&"]);
#else
FlxG.openURL('https://ninja-muffin24.itch.io/funkin');
#end
}
function selectLogin()
{
}
function selectLogout()
{
}
function startExitState(state:FlxState)
{
var duration = 0.4;
menuItems.forEach(function(item)
2020-11-01 01:11:14 +00:00
{
2021-02-15 17:43:51 +00:00
if (menuItems.selectedIndex != item.ID)
2020-11-01 01:11:14 +00:00
{
2021-02-15 17:43:51 +00:00
FlxTween.tween(item, {alpha: 0}, duration, { ease: FlxEase.quadOut });
2020-11-01 01:11:14 +00:00
}
2021-02-15 17:43:51 +00:00
else
2020-11-01 01:11:14 +00:00
{
2021-02-15 17:43:51 +00:00
item.visible = false;
2020-11-01 01:11:14 +00:00
}
});
2021-02-15 17:43:51 +00:00
new FlxTimer().start(duration, function(_) FlxG.switchState(state));
2020-11-01 01:11:14 +00:00
}
2021-02-15 17:43:51 +00:00
override function update(elapsed:Float)
2020-11-01 01:11:14 +00:00
{
2021-02-15 17:43:51 +00:00
if (FlxG.sound.music.volume < 0.8)
2020-11-01 01:11:14 +00:00
{
2021-02-15 17:43:51 +00:00
FlxG.sound.music.volume += 0.5 * FlxG.elapsed;
}
2020-11-01 01:11:14 +00:00
2021-02-15 17:43:51 +00:00
if (menuItems.active && controls.BACK)
FlxG.switchState(new TitleState());
2020-11-01 01:11:14 +00:00
2021-02-15 17:43:51 +00:00
super.update(elapsed);
2020-11-01 01:11:14 +00:00
}
}