Funkin/source/Main.hx

113 lines
3.0 KiB
Haxe
Raw Normal View History

2020-10-03 06:50:15 +00:00
package;
import flixel.FlxGame;
2021-02-16 06:53:25 +00:00
import flixel.FlxState;
2022-04-18 23:36:09 +00:00
import funkin.MemoryCounter;
import haxe.ui.Toolkit;
2021-02-16 06:53:25 +00:00
import openfl.Lib;
2020-10-04 06:42:58 +00:00
import openfl.display.FPS;
2020-10-03 06:50:15 +00:00
import openfl.display.Sprite;
2021-02-16 06:53:25 +00:00
import openfl.events.Event;
2021-03-05 00:36:56 +00:00
import openfl.media.Video;
import openfl.net.NetStream;
2020-10-03 06:50:15 +00:00
class Main extends Sprite
{
2021-02-16 06:53:25 +00:00
var gameWidth:Int = 1280; // Width of the game in pixels (might be less / more in actual pixels depending on your zoom).
var gameHeight:Int = 720; // Height of the game in pixels (might be less / more in actual pixels depending on your zoom).
var initialState:Class<FlxState> = funkin.InitState; // The FlxState the game starts with.
2021-02-16 06:53:25 +00:00
var zoom:Float = -1; // If -1, zoom is automatically calculated to fit the window dimensions.
2021-03-13 18:37:59 +00:00
#if web
2021-02-16 06:53:25 +00:00
var framerate:Int = 60; // How many frames per second the game should run at.
2021-03-13 18:37:59 +00:00
#else
// TODO: This should probably be in the options menu?
2022-01-31 19:16:28 +00:00
var framerate:Int = 144; // How many frames per second the game should run at.
2021-03-13 18:37:59 +00:00
#end
2021-02-16 06:53:25 +00:00
var skipSplash:Bool = true; // Whether to skip the flixel splash screen that appears in release mode.
var startFullscreen:Bool = false; // Whether to start the game in fullscreen on desktop targets
// You can pretty much ignore everything from here on - your code should go in your states.
public static function main():Void
{
Lib.current.addChild(new Main());
}
2020-10-03 06:50:15 +00:00
public function new()
{
super();
2021-02-16 06:53:25 +00:00
2022-04-18 23:36:09 +00:00
// TODO: Replace this with loadEnabledMods().
funkin.modding.PolymodHandler.loadAllMods();
2021-02-16 06:53:25 +00:00
if (stage != null)
{
init();
}
else
{
addEventListener(Event.ADDED_TO_STAGE, init);
}
}
private function init(?E:Event):Void
{
if (hasEventListener(Event.ADDED_TO_STAGE))
{
removeEventListener(Event.ADDED_TO_STAGE, init);
}
setupGame();
}
2021-03-05 00:36:56 +00:00
var video:Video;
var netStream:NetStream;
private var overlay:Sprite;
2021-03-31 03:51:17 +00:00
public static var fpsCounter:FPS;
public static var memoryCounter:MemoryCounter;
2021-03-31 03:51:17 +00:00
2021-02-16 06:53:25 +00:00
private function setupGame():Void
{
2022-07-14 23:03:42 +00:00
/**
* The `zoom` argument of FlxGame was removed in the dev branch of Flixel,
* since it was considered confusing and unintuitive.
* If you want to change how the game scales when you resize the window,
* you can use `FlxG.scaleMode`.
* -Eric
*/
2021-02-16 06:53:25 +00:00
#if !debug
2022-11-25 00:09:47 +00:00
/**
* Someone was like "hey let's make a state that only runs code on debug builds"
* then put essential initialization code in it.
* The easiest fix is to make it run in all builds.
* -Eric
*/
// initialState = funkin.TitleState;
2021-02-16 06:53:25 +00:00
#end
initHaxeUI();
2022-07-14 23:03:42 +00:00
addChild(new FlxGame(gameWidth, gameHeight, initialState, framerate, framerate, skipSplash, startFullscreen));
2020-10-04 06:42:58 +00:00
#if debug
2021-03-31 03:51:17 +00:00
fpsCounter = new FPS(10, 3, 0xFFFFFF);
addChild(fpsCounter);
2022-03-06 07:37:38 +00:00
#if !html5
memoryCounter = new MemoryCounter(10, 13, 0xFFFFFF);
addChild(memoryCounter);
2020-10-04 06:42:58 +00:00
#end
2022-03-06 07:37:38 +00:00
#end
2020-10-03 06:50:15 +00:00
}
2021-03-05 00:36:56 +00:00
function initHaxeUI()
{
// Calling this before any HaxeUI components get used is important:
// - It initializes the theme styles.
// - It scans the class path and registers any HaxeUI components.
Toolkit.init();
Toolkit.theme = "dark"; // don't be cringe
}
2020-10-03 06:50:15 +00:00
}