package funkin.options; import funkin.system.Controls; import openfl.Lib; import flixel.util.FlxSave; import flixel.input.keyboard.FlxKey; @:build(funkin.macros.OptionsMacro.build()) class Options { @:dox(hide) public static var __save:FlxSave; @:dox(hide) private static var __eventAdded = false; /** * SETTINGS */ public static var naughtyness:Bool = true; public static var downscroll:Bool = false; public static var ghostTapping:Bool = true; public static var flashingMenu:Bool = true; public static var camZoomOnBeat:Bool = true; public static var fpsCounter:Bool = true; public static var autoPause:Bool = true; public static var antialiasing:Bool = true; public static var volume:Float = 1; public static var week6PixelPerfect:Bool = true; public static var lowMemoryMode:Bool = false; public static var betaUpdates:Bool = false; public static var splashesEnabled:Bool = true; public static var hitWindow:Float = 250; public static var framerate:Int = 120; public static var lastLoadedMod:String = null; /** * EDITORS SETTINGS */ public static var editorSFX:Bool = true; public static var resizableEditors:Bool = true; /** * PLAYER 1 CONTROLS */ public static var P1_NOTE_LEFT:Array = [A]; public static var P1_NOTE_DOWN:Array = [S]; public static var P1_NOTE_UP:Array = [W]; public static var P1_NOTE_RIGHT:Array = [D]; public static var P1_LEFT:Array = [A]; public static var P1_DOWN:Array = [S]; public static var P1_UP:Array = [W]; public static var P1_RIGHT:Array = [D]; public static var P1_ACCEPT:Array = [ENTER]; public static var P1_BACK:Array = [BACKSPACE]; public static var P1_PAUSE:Array = [ENTER]; public static var P1_RESET:Array = [R]; public static var P1_SWITCHMOD:Array = [TAB]; /** * PLAYER 2 CONTROLS (ALT) */ public static var P2_NOTE_LEFT:Array = [LEFT]; public static var P2_NOTE_DOWN:Array = [DOWN]; public static var P2_NOTE_UP:Array = [UP]; public static var P2_NOTE_RIGHT:Array = [RIGHT]; public static var P2_LEFT:Array = [LEFT]; public static var P2_DOWN:Array = [DOWN]; public static var P2_UP:Array = [UP]; public static var P2_RIGHT:Array = [RIGHT]; public static var P2_ACCEPT:Array = [SPACE]; public static var P2_BACK:Array = [ESCAPE]; public static var P2_PAUSE:Array = [ESCAPE]; public static var P2_RESET:Array = []; public static var P2_SWITCHMOD:Array = []; /** * SOLO GETTERS */ public static var SOLO_NOTE_LEFT(get, null):Array; public static var SOLO_NOTE_DOWN(get, null):Array; public static var SOLO_NOTE_UP(get, null):Array; public static var SOLO_NOTE_RIGHT(get, null):Array; public static var SOLO_LEFT(get, null):Array; public static var SOLO_DOWN(get, null):Array; public static var SOLO_UP(get, null):Array; public static var SOLO_RIGHT(get, null):Array; public static var SOLO_ACCEPT(get, null):Array; public static var SOLO_BACK(get, null):Array; public static var SOLO_PAUSE(get, null):Array; public static var SOLO_RESET(get, null):Array; public static var SOLO_SWITCHMOD(get, null):Array; public static function load() { if (__save == null) __save = new FlxSave(); __save.bind("options", "CodenameEngine"); for(field in Reflect.fields(__save.data)) { var obj = Reflect.field(__save.data, field); Reflect.setProperty(Options, field, obj); } if (!__eventAdded) { Lib.application.onExit.add(function(i:Int) { trace("Saving settings..."); save(); }); __eventAdded = true; } FlxG.sound.volume = volume; applySettings(); } public static function applySettings() { applyKeybinds(); FlxG.game.stage.quality = (FlxG.forceNoAntialiasing = !antialiasing) ? LOW : BEST; FlxG.autoPause = autoPause; FlxG.drawFramerate = FlxG.updateFramerate = framerate; } public static function applyKeybinds() { PlayerSettings.solo.setKeyboardScheme(Solo); PlayerSettings.player1.setKeyboardScheme(Duo(true)); PlayerSettings.player2.setKeyboardScheme(Duo(false)); } public static function save() { volume = FlxG.sound.volume; for(field in Type.getClassFields(Options)) { var obj = Reflect.field(Options, field); if (Reflect.isFunction(obj) || obj is FlxSave) continue; Reflect.setField(__save.data, field, obj); } __save.flush(); } }