Funkin/source/funkin/Preferences.hx
2024-05-25 01:11:34 +02:00

190 lines
4.1 KiB
Haxe

package funkin;
import funkin.save.Save;
/**
* A core class which provides a store of user-configurable, globally relevant values.
*/
class Preferences
{
/**
* FPS
* @default `60`
*/
public static var framerate(get, set):Int;
static function get_framerate():Int
{
#if web
return 60;
#else
return Save?.instance?.options?.framerate ?? 60;
#end
}
static function set_framerate(value:Int):Int
{
#if web
return 60;
#else
var save:Save = Save.instance;
save.options.framerate = value;
save.flush();
FlxG.updateFramerate = value;
FlxG.drawFramerate = value;
return value;
#end
}
/**
* Whether some particularly fowl language is displayed.
* @default `true`
*/
public static var naughtyness(get, set):Bool;
static function get_naughtyness():Bool
{
return Save?.instance?.options?.naughtyness;
}
static function set_naughtyness(value:Bool):Bool
{
var save:Save = Save.instance;
save.options.naughtyness = value;
save.flush();
return value;
}
/**
* If enabled, the strumline is at the bottom of the screen rather than the top.
* @default `false`
*/
public static var downscroll(get, set):Bool;
static function get_downscroll():Bool
{
return Save?.instance?.options?.downscroll;
}
static function set_downscroll(value:Bool):Bool
{
var save:Save = Save.instance;
save.options.downscroll = value;
save.flush();
return value;
}
/**
* If disabled, flashing lights in the main menu and other areas will be less intense.
* @default `true`
*/
public static var flashingLights(get, set):Bool;
static function get_flashingLights():Bool
{
return Save?.instance?.options?.flashingLights ?? true;
}
static function set_flashingLights(value:Bool):Bool
{
var save:Save = Save.instance;
save.options.flashingLights = value;
save.flush();
return value;
}
/**
* If disabled, the camera bump synchronized to the beat.
* @default `false`
*/
public static var zoomCamera(get, set):Bool;
static function get_zoomCamera():Bool
{
return Save?.instance?.options?.zoomCamera;
}
static function set_zoomCamera(value:Bool):Bool
{
var save:Save = Save.instance;
save.options.zoomCamera = value;
save.flush();
return value;
}
/**
* If enabled, an FPS and memory counter will be displayed even if this is not a debug build.
* @default `false`
*/
public static var debugDisplay(get, set):Bool;
static function get_debugDisplay():Bool
{
return Save?.instance?.options?.debugDisplay;
}
static function set_debugDisplay(value:Bool):Bool
{
if (value != Save.instance.options.debugDisplay)
{
toggleDebugDisplay(value);
}
var save = Save.instance;
save.options.debugDisplay = value;
save.flush();
return value;
}
/**
* If enabled, the game will automatically pause when tabbing out.
* @default `true`
*/
public static var autoPause(get, set):Bool;
static function get_autoPause():Bool
{
return Save?.instance?.options?.autoPause ?? true;
}
static function set_autoPause(value:Bool):Bool
{
if (value != Save.instance.options.autoPause) FlxG.autoPause = value;
var save:Save = Save.instance;
save.options.autoPause = value;
save.flush();
return value;
}
/**
* Loads the user's preferences from the save data and apply them.
*/
public static function init():Void
{
// Apply the autoPause setting (enables automatic pausing on focus lost).
FlxG.autoPause = Preferences.autoPause;
// Apply the debugDisplay setting (enables the FPS and RAM display).
toggleDebugDisplay(Preferences.debugDisplay);
}
static function toggleDebugDisplay(show:Bool):Void
{
if (show)
{
// Enable the debug display.
FlxG.stage.addChild(Main.fpsCounter);
#if !html5
FlxG.stage.addChild(Main.memoryCounter);
#end
}
else
{
// Disable the debug display.
FlxG.stage.removeChild(Main.fpsCounter);
#if !html5
FlxG.stage.removeChild(Main.memoryCounter);
#end
}
}
}