package; import flixel.util.FlxColor; import Controls.KeyboardScheme; import flixel.FlxG; import openfl.display.FPS; import openfl.Lib; class OptionCatagory { private var _options:Array = new Array(); public final function getOptions():Array { return _options; } public final function addOption(opt:Option) { _options.push(opt); } public final function removeOption(opt:Option) { _options.remove(opt); } private var _name:String = "New Catagory"; public final function getName() { return _name; } public function new (catName:String, options:Array) { _name = catName; _options = options; } } class Option { public function new() { display = updateDisplay(); } private var description:String = ""; private var display:String; public final function getDisplay():String { return display; } public final function getDescription():String { return description; } // Returns whether the label is to be updated. public function press():Bool { return throw "stub!"; } private function updateDisplay():String { return throw "stub!"; } } class DFJKOption extends Option { private var controls:Controls; public function new(controls:Controls) { super(); this.controls = controls; } public override function press():Bool { FlxG.save.data.dfjk = !FlxG.save.data.dfjk; if (FlxG.save.data.dfjk) controls.setKeyboardScheme(KeyboardScheme.Solo, true); else controls.setKeyboardScheme(KeyboardScheme.Duo(true), true); display = updateDisplay(); return true; } private override function updateDisplay():String { return FlxG.save.data.dfjk ? "DFJK" : "WASD"; } } class DownscrollOption extends Option { public function new(desc:String) { super(); description = desc; } public override function press():Bool { FlxG.save.data.downscroll = !FlxG.save.data.downscroll; display = updateDisplay(); return true; } private override function updateDisplay():String { return FlxG.save.data.downscroll ? "Downscroll" : "Upscroll"; } } class AccuracyOption extends Option { public function new(desc:String) { super(); description = desc; } public override function press():Bool { FlxG.save.data.accuracyDisplay = !FlxG.save.data.accuracyDisplay; display = updateDisplay(); return true; } private override function updateDisplay():String { return "Accuracy " + (!FlxG.save.data.accuracyDisplay ? "off" : "on"); } } class SongPositionOption extends Option { public function new(desc:String) { super(); description = desc; } public override function press():Bool { FlxG.save.data.songPosition = !FlxG.save.data.songPosition; display = updateDisplay(); return true; } private override function updateDisplay():String { return "Song Position " + (!FlxG.save.data.songPosition ? "off" : "on"); } } class EtternaModeOption extends Option { public function new(desc:String) { super(); description = desc; } public override function press():Bool { FlxG.save.data.etternaMode = !FlxG.save.data.etternaMode; display = updateDisplay(); return true; } private override function updateDisplay():String { return "Etterna Mode " + (!FlxG.save.data.etternaMode ? "off" : "on"); } } class FPSOption extends Option { public function new(desc:String) { super(); description = desc; } public override function press():Bool { FlxG.save.data.fps = !FlxG.save.data.fps; (cast (Lib.current.getChildAt(0), Main)).toggleFPS(FlxG.save.data.fps); display = updateDisplay(); return true; } private override function updateDisplay():String { return "FPS Counter " + (!FlxG.save.data.fps ? "off" : "on"); } } class FPSCapOption extends Option { public function new(desc:String) { super(); description = desc; } public override function press():Bool { return false; } private override function updateDisplay():String { return "FPS Cap"; } } class ScrollSpeedOption extends Option { public function new(desc:String) { super(); description = desc; } public override function press():Bool { return false; } private override function updateDisplay():String { return "Scroll Speed"; } } class RainbowFPSOption extends Option { public function new(desc:String) { super(); description = desc; } public override function press():Bool { FlxG.save.data.fpsRain = !FlxG.save.data.fpsRain; (cast (Lib.current.getChildAt(0), Main)).changeFPSColor(FlxColor.WHITE); display = updateDisplay(); return true; } private override function updateDisplay():String { return "FPS Rainbow " + (!FlxG.save.data.fpsRain ? "off" : "on"); } } class ReplayOption extends Option { public function new(desc:String) { super(); description = desc; } public override function press():Bool { trace("switch"); FlxG.switchState(new LoadReplayState()); return false; } private override function updateDisplay():String { return "Load replays"; } } class CustomizeGameplay extends Option { public function new(desc:String) { super(); description = desc; } public override function press():Bool { trace("switch"); FlxG.switchState(new GameplayCustomizeState()); return false; } private override function updateDisplay():String { return "Customize Gameplay"; } }