2020-10-10 02:39:52 +00:00
|
|
|
package;
|
|
|
|
|
2020-10-16 11:03:10 +00:00
|
|
|
import flixel.FlxG;
|
2020-10-10 02:39:52 +00:00
|
|
|
import flixel.addons.transition.FlxTransitionableState;
|
2020-10-12 03:52:21 +00:00
|
|
|
import flixel.addons.ui.FlxUIState;
|
2021-01-16 22:21:06 +00:00
|
|
|
import flixel.math.FlxRect;
|
2020-10-24 09:19:13 +00:00
|
|
|
import flixel.util.FlxTimer;
|
2020-10-10 02:39:52 +00:00
|
|
|
|
2020-10-12 03:52:21 +00:00
|
|
|
class MusicBeatState extends FlxUIState
|
2020-10-10 02:39:52 +00:00
|
|
|
{
|
|
|
|
private var lastBeat:Float = 0;
|
|
|
|
private var lastStep:Float = 0;
|
|
|
|
|
|
|
|
private var totalBeats:Int = 0;
|
|
|
|
private var totalSteps:Int = 0;
|
|
|
|
|
2020-10-13 08:07:04 +00:00
|
|
|
private var curStep:Int = 0;
|
|
|
|
private var curBeat:Int = 0;
|
2020-10-28 08:24:56 +00:00
|
|
|
private var controls(get, never):Controls;
|
|
|
|
|
|
|
|
inline function get_controls():Controls
|
|
|
|
return PlayerSettings.player1.controls;
|
2020-10-13 08:07:04 +00:00
|
|
|
|
2020-10-10 02:39:52 +00:00
|
|
|
override function create()
|
|
|
|
{
|
2021-01-16 22:21:06 +00:00
|
|
|
if (transIn != null)
|
|
|
|
trace('reg ' + transIn.region);
|
|
|
|
|
2020-10-24 09:19:13 +00:00
|
|
|
#if (!web)
|
|
|
|
TitleState.soundExt = '.ogg';
|
|
|
|
#end
|
|
|
|
|
2020-10-10 02:39:52 +00:00
|
|
|
super.create();
|
|
|
|
}
|
|
|
|
|
2020-10-10 03:22:07 +00:00
|
|
|
override function update(elapsed:Float)
|
2020-10-10 02:39:52 +00:00
|
|
|
{
|
2020-10-10 03:22:07 +00:00
|
|
|
everyStep();
|
|
|
|
|
2020-10-16 11:03:10 +00:00
|
|
|
updateCurStep();
|
2020-11-20 12:21:04 +00:00
|
|
|
// Needs to be ROUNED, rather than ceil or floor
|
2020-11-21 10:43:04 +00:00
|
|
|
updateBeat();
|
2020-10-13 08:07:04 +00:00
|
|
|
|
2020-10-10 03:22:07 +00:00
|
|
|
super.update(elapsed);
|
2020-10-10 02:39:52 +00:00
|
|
|
}
|
|
|
|
|
2020-11-21 10:43:04 +00:00
|
|
|
private function updateBeat():Void
|
|
|
|
{
|
|
|
|
curBeat = Math.round(curStep / 4);
|
|
|
|
}
|
|
|
|
|
2020-10-10 03:22:07 +00:00
|
|
|
/**
|
|
|
|
* CHECKS EVERY FRAME
|
|
|
|
*/
|
2020-10-10 02:39:52 +00:00
|
|
|
private function everyStep():Void
|
|
|
|
{
|
|
|
|
if (Conductor.songPosition > lastStep + Conductor.stepCrochet - Conductor.safeZoneOffset
|
|
|
|
|| Conductor.songPosition < lastStep + Conductor.safeZoneOffset)
|
|
|
|
{
|
|
|
|
if (Conductor.songPosition > lastStep + Conductor.stepCrochet)
|
|
|
|
{
|
|
|
|
stepHit();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-10-16 11:03:10 +00:00
|
|
|
private function updateCurStep():Void
|
|
|
|
{
|
|
|
|
curStep = Math.floor(Conductor.songPosition / Conductor.stepCrochet);
|
|
|
|
}
|
|
|
|
|
2020-10-10 02:39:52 +00:00
|
|
|
public function stepHit():Void
|
|
|
|
{
|
|
|
|
totalSteps += 1;
|
|
|
|
lastStep += Conductor.stepCrochet;
|
2020-10-10 03:22:07 +00:00
|
|
|
|
2020-11-18 02:31:59 +00:00
|
|
|
// If the song is at least 3 steps behind
|
|
|
|
if (Conductor.songPosition > lastStep + (Conductor.stepCrochet * 3))
|
|
|
|
{
|
|
|
|
lastStep = Conductor.songPosition;
|
2020-11-20 12:21:04 +00:00
|
|
|
totalSteps = Math.ceil(lastStep / Conductor.stepCrochet);
|
2020-11-18 02:31:59 +00:00
|
|
|
}
|
|
|
|
|
2020-10-10 03:22:07 +00:00
|
|
|
if (totalSteps % 4 == 0)
|
|
|
|
beatHit();
|
2020-10-10 02:39:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function beatHit():Void
|
|
|
|
{
|
|
|
|
lastBeat += Conductor.crochet;
|
|
|
|
totalBeats += 1;
|
|
|
|
}
|
|
|
|
}
|