1
0
Fork 0
mirror of https://github.com/ninjamuffin99/Funkin.git synced 2024-11-29 10:13:32 +00:00
Funkin/source/funkin/MusicBeatSubstate.hx

97 lines
2 KiB
Haxe
Raw Normal View History

package funkin;
2020-10-28 09:26:33 +00:00
import flixel.FlxSubState;
import flixel.util.FlxColor;
2022-04-18 23:36:09 +00:00
import funkin.Conductor.BPMChangeEvent;
import funkin.modding.events.ScriptEvent;
import funkin.modding.module.ModuleHandler;
2020-10-28 09:26:33 +00:00
2022-04-18 23:36:09 +00:00
/**
* MusicBeatSubstate reincorporates the functionality of MusicBeatState into an FlxSubState.
*/
2020-10-28 09:26:33 +00:00
class MusicBeatSubstate extends FlxSubState
{
public function new(bgColor:FlxColor = FlxColor.TRANSPARENT)
2020-10-28 09:26:33 +00:00
{
super(bgColor);
2020-10-28 09:26:33 +00:00
}
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 update(elapsed:Float)
{
2021-06-23 08:15:44 +00:00
// everyStep();
var oldStep:Int = curStep;
2020-10-28 09:26:33 +00:00
updateCurStep();
curBeat = Math.floor(curStep / 4);
if (oldStep != curStep && curStep >= 0)
stepHit();
2020-10-28 09:26:33 +00:00
super.update(elapsed);
}
private function updateCurStep():Void
{
var lastChange:BPMChangeEvent = {
stepTime: 0,
songTime: 0,
bpm: 0
}
for (i in 0...Conductor.bpmChangeMap.length)
2020-10-28 09:26:33 +00:00
{
if (Conductor.songPosition > Conductor.bpmChangeMap[i].songTime)
lastChange = Conductor.bpmChangeMap[i];
2020-10-28 09:26:33 +00:00
}
2022-07-07 00:37:35 +00:00
curStep = lastChange.stepTime + Math.floor(((Conductor.songPosition - Conductor.audioOffset) - lastChange.songTime) / Conductor.stepCrochet);
2020-10-28 09:26:33 +00:00
}
public function stepHit():Bool
2020-10-28 09:26:33 +00:00
{
var event = new SongTimeScriptEvent(ScriptEvent.SONG_STEP_HIT, curBeat, curStep);
dispatchEvent(event);
if (event.eventCanceled)
return false;
if (curStep % 4 == 0)
2020-10-28 09:26:33 +00:00
beatHit();
return true;
2020-10-28 09:26:33 +00:00
}
2022-04-18 23:36:09 +00:00
function dispatchEvent(event:ScriptEvent)
{
ModuleHandler.callEvent(event);
}
/**
* Close this substate and replace it with a different one.
*/
public function switchSubState(substate:FlxSubState):Void
{
this.close();
this._parentState.openSubState(substate);
}
public function beatHit():Bool
2020-10-28 09:26:33 +00:00
{
var event = new SongTimeScriptEvent(ScriptEvent.SONG_BEAT_HIT, curBeat, curStep);
dispatchEvent(event);
if (event.eventCanceled)
return false;
return true;
2020-10-28 09:26:33 +00:00
}
}