package funkin.options; import flixel.FlxG; import funkin.system.Controls; import openfl.Lib; import flixel.util.FlxSave; import flixel.input.keyboard.FlxKey; 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 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; /** * 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]; /** * 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 = []; /** * SOLO GETTERS & SETTERS */ 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; // GETTERS REGION #if REGION private static function get_SOLO_LEFT() { var a:Array = []; for(e in P1_LEFT) a.push(e); for(e in P2_LEFT) a.push(e); return a; } private static function get_SOLO_DOWN() { var a:Array = []; for(e in P1_DOWN) a.push(e); for(e in P2_DOWN) a.push(e); return a; } private static function get_SOLO_UP() { var a:Array = []; for(e in P1_UP) a.push(e); for(e in P2_UP) a.push(e); return a; } private static function get_SOLO_RIGHT() { var a:Array = []; for(e in P1_RIGHT) a.push(e); for(e in P2_RIGHT) a.push(e); return a; } private static function get_SOLO_NOTE_LEFT() { var a:Array = []; for(e in P1_NOTE_LEFT) a.push(e); for(e in P2_NOTE_LEFT) a.push(e); return a; } private static function get_SOLO_NOTE_DOWN() { var a:Array = []; for(e in P1_NOTE_DOWN) a.push(e); for(e in P2_NOTE_DOWN) a.push(e); return a; } private static function get_SOLO_NOTE_UP() { var a:Array = []; for(e in P1_NOTE_UP) a.push(e); for(e in P2_NOTE_UP) a.push(e); return a; } private static function get_SOLO_NOTE_RIGHT() { var a:Array = []; for(e in P1_NOTE_RIGHT) a.push(e); for(e in P2_NOTE_RIGHT) a.push(e); return a; } private static function get_SOLO_ACCEPT() { var a:Array = []; for(e in P1_ACCEPT) a.push(e); for(e in P2_ACCEPT) a.push(e); return a; } private static function get_SOLO_BACK() { var a:Array = []; for(e in P1_BACK) a.push(e); for(e in P2_BACK) a.push(e); return a; } private static function get_SOLO_PAUSE() { var a:Array = []; for(e in P1_PAUSE) a.push(e); for(e in P2_PAUSE) a.push(e); return a; } private static function get_SOLO_RESET() { var a:Array = []; for(e in P1_RESET) a.push(e); for(e in P2_RESET) a.push(e); return a; } #end public static function load() { if (__save == null) __save = new FlxSave(); __save.bind("options"); 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() { PlayerSettings.player1.setKeyboardScheme(Solo); FlxG.game.stage.quality = (FlxG.forceNoAntialiasing = !antialiasing) ? LOW : BEST; FlxG.autoPause = autoPause; } 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(); } }