1
0
Fork 0
mirror of https://github.com/ninjamuffin99/Funkin.git synced 2024-11-24 15:56:30 +00:00
Funkin/source/MusicBeatState.hx

90 lines
1.7 KiB
Haxe
Raw Normal View History

package;
import flixel.FlxG;
import flixel.addons.transition.FlxTransitionableState;
2020-10-12 03:52:21 +00:00
import flixel.addons.ui.FlxUIState;
2020-10-24 09:19:13 +00:00
import flixel.util.FlxTimer;
2020-10-12 03:52:21 +00:00
class MusicBeatState extends FlxUIState
{
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
override function create()
{
2020-10-24 09:19:13 +00:00
#if (!web)
TitleState.soundExt = '.ogg';
#end
super.create();
}
2020-10-10 03:22:07 +00:00
override function update(elapsed:Float)
{
2020-10-10 03:22:07 +00:00
everyStep();
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-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
*/
private function everyStep():Void
{
if (Conductor.songPosition > lastStep + Conductor.stepCrochet - Conductor.safeZoneOffset
|| Conductor.songPosition < lastStep + Conductor.safeZoneOffset)
{
if (Conductor.songPosition > lastStep + Conductor.stepCrochet)
{
stepHit();
}
}
}
private function updateCurStep():Void
{
curStep = Math.floor(Conductor.songPosition / Conductor.stepCrochet);
}
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();
}
public function beatHit():Void
{
lastBeat += Conductor.crochet;
totalBeats += 1;
}
}