package; import Conductor.BPMChangeEvent; import flixel.FlxG; import flixel.addons.ui.FlxUIState; import flixel.math.FlxRect; import flixel.util.FlxTimer; import flixel.addons.transition.FlxTransitionableState; import flixel.tweens.FlxEase; import flixel.tweens.FlxTween; import flixel.FlxSprite; import flixel.util.FlxColor; import flixel.util.FlxGradient; import flixel.FlxState; import flixel.FlxBasic; class MusicBeatState extends FlxUIState { private var lastBeat:Float = 0; private var lastStep:Float = 0; private var curStep:Int = 0; private var curBeat:Int = 0; private var controls(get, never):Controls; inline function get_controls():Controls return PlayerSettings.player1.controls; override function create() { var skip:Bool = FlxTransitionableState.skipNextTransOut; super.create(); // Custom made Trans out if(!skip) { openSubState(new CustomFadeTransition(1, true)); } FlxTransitionableState.skipNextTransOut = false; } #if (VIDEOS_ALLOWED && windows) override public function onFocus():Void { FlxVideo.onFocus(); super.onFocus(); } override public function onFocusLost():Void { FlxVideo.onFocusLost(); super.onFocusLost(); } #end override function update(elapsed:Float) { //everyStep(); var oldStep:Int = curStep; updateCurStep(); updateBeat(); if (oldStep != curStep && curStep > 0) stepHit(); super.update(elapsed); } private function updateBeat():Void { curBeat = Math.floor(curStep / 4); } private function updateCurStep():Void { var lastChange:BPMChangeEvent = { stepTime: 0, songTime: 0, bpm: 0 } for (i in 0...Conductor.bpmChangeMap.length) { if (Conductor.songPosition >= Conductor.bpmChangeMap[i].songTime) lastChange = Conductor.bpmChangeMap[i]; } curStep = lastChange.stepTime + Math.floor(((Conductor.songPosition - ClientPrefs.noteOffset) - lastChange.songTime) / Conductor.stepCrochet); } public static function switchState(nextState:FlxState) { // Custom made Trans in var curState:Dynamic = FlxG.state; var leState:MusicBeatState = curState; if(!FlxTransitionableState.skipNextTransIn) { leState.openSubState(new CustomFadeTransition(0.7, false)); if(nextState == FlxG.state) { CustomFadeTransition.finishCallback = function() { FlxG.resetState(); }; //trace('resetted'); } else { CustomFadeTransition.finishCallback = function() { FlxG.switchState(nextState); }; //trace('changed state'); } return; } FlxTransitionableState.skipNextTransIn = false; FlxG.switchState(nextState); } public static function resetState() { MusicBeatState.switchState(FlxG.state); } public static function getState():MusicBeatState { var curState:Dynamic = FlxG.state; var leState:MusicBeatState = curState; return leState; } public function stepHit():Void { if (curStep % 4 == 0) beatHit(); } public function beatHit():Void { //do literally nothing dumbass } }