1
0
Fork 0
mirror of https://github.com/ninjamuffin99/Funkin.git synced 2025-03-25 03:19:24 +00:00

Fixed TitleState not firing onBeat

This commit is contained in:
MasterEric 2022-09-26 17:18:19 -04:00
parent 679ca4aafb
commit 8a2e4687b2
4 changed files with 33 additions and 9 deletions

View file

@ -34,16 +34,21 @@ class Conductor
/** /**
* Beats per minute of the current song at the current time. * Beats per minute of the current song at the current time.
*/ */
public static var bpm(get, null):Float = 100; public static var bpm(get, null):Float;
static function get_bpm():Float static function get_bpm():Float
{ {
if (bpmOverride != null)
return bpmOverride;
if (currentTimeChange == null) if (currentTimeChange == null)
return 100; return 100;
return currentTimeChange.bpm; return currentTimeChange.bpm;
} }
static var bpmOverride:Null<Float> = null;
// OLD, replaced with timeChanges. // OLD, replaced with timeChanges.
public static var bpmChangeMap:Array<BPMChangeEvent> = []; public static var bpmChangeMap:Array<BPMChangeEvent> = [];
@ -111,23 +116,29 @@ class Conductor
return lastChange; return lastChange;
} }
@:deprecated // Use loadSong with metadata files instead.
public static function forceBPM(bpm:Float) public static function forceBPM(bpm:Float)
{ {
// TODO: Get rid of this and use song metadata instead. Conductor.bpmOverride = bpm;
Conductor.bpm = bpm;
} }
/** /**
* Update the conductor with the current song position. * Update the conductor with the current song position.
* BPM, current step, etc. will be re-calculated based on the song position. * BPM, current step, etc. will be re-calculated based on the song position.
*
* @param songPosition The current position in the song in milliseconds.
* Leave blank to use the FlxG.sound.music position.
*/ */
public static function update(songPosition:Float) public static function update(songPosition:Float = null)
{ {
if (songPosition == null)
songPosition = (FlxG.sound.music != null) ? (FlxG.sound.music.time + Conductor.offset) : 0;
var oldBeat = currentBeat; var oldBeat = currentBeat;
var oldStep = currentStep; var oldStep = currentStep;
Conductor.songPosition = songPosition; Conductor.songPosition = songPosition;
Conductor.bpm = Conductor.getLastBPMChange().bpm; // Conductor.bpm = Conductor.getLastBPMChange().bpm;
currentTimeChange = timeChanges[0]; currentTimeChange = timeChanges[0];
for (i in 0...timeChanges.length) for (i in 0...timeChanges.length)
@ -139,15 +150,21 @@ class Conductor
break; break;
} }
if (currentTimeChange == null) if (currentTimeChange == null && bpmOverride == null)
{ {
trace('WARNING: Conductor is broken, timeChanges is empty.'); trace('WARNING: Conductor is broken, timeChanges is empty.');
} }
else else if (currentTimeChange != null)
{ {
currentStep = Math.floor((currentTimeChange.beatTime * 4) + (songPosition - currentTimeChange.timeStamp) / stepCrochet); currentStep = Math.floor((currentTimeChange.beatTime * 4) + (songPosition - currentTimeChange.timeStamp) / stepCrochet);
currentBeat = Math.floor(currentStep / 4); currentBeat = Math.floor(currentStep / 4);
} }
else
{
// Assume a constant BPM equal to the forced value.
currentStep = Math.floor((songPosition) / stepCrochet);
currentBeat = Math.floor(currentStep / 4);
}
// FlxSignals are really cool. // FlxSignals are really cool.
if (currentStep != oldStep) if (currentStep != oldStep)
@ -157,6 +174,7 @@ class Conductor
beatHit.dispatch(); beatHit.dispatch();
} }
@:deprecated // Switch to TimeChanges instead.
public static function mapBPMChanges(song:SwagSong) public static function mapBPMChanges(song:SwagSong)
{ {
bpmChangeMap = []; bpmChangeMap = [];
@ -181,7 +199,6 @@ class Conductor
totalSteps += deltaSteps; totalSteps += deltaSteps;
totalPos += ((60 / curBPM) * 1000 / 4) * deltaSteps; totalPos += ((60 / curBPM) * 1000 / 4) * deltaSteps;
} }
trace("new BPM map BUDDY " + bpmChangeMap);
} }
public static function mapTimeChanges(currentChart:SongDifficulty) public static function mapTimeChanges(currentChart:SongDifficulty)

View file

@ -259,6 +259,8 @@ class TitleState extends MusicBeatState
FlxG.sound.music.pitch -= 0.5 * elapsed; FlxG.sound.music.pitch -= 0.5 * elapsed;
#end #end
Conductor.update();
/* if (FlxG.onMobile) /* if (FlxG.onMobile)
{ {
if (gfDance != null) if (gfDance != null)

View file

@ -1786,7 +1786,7 @@ class PlayState extends MusicBeatState
// BPM might change between the current and target section but IDGAF // BPM might change between the current and target section but IDGAF
FlxG.sound.music.time = Conductor.songPosition + (sec * 4 * (1000 * 60 / Conductor.bpm)); FlxG.sound.music.time = Conductor.songPosition + (sec * 4 * (1000 * 60 / Conductor.bpm));
Conductor.update(FlxG.sound.music.time + Conductor.offset); Conductor.update();
resyncVocals(); resyncVocals();
} }
#end #end

View file

@ -114,6 +114,11 @@ class SongDataParser
} }
} }
public static function listSongIds():Array<String>
{
return [for (x in songCache.keys()) x];
}
public static function parseSongMetadata(songId:String):Array<SongMetadata> public static function parseSongMetadata(songId:String):Array<SongMetadata>
{ {
var result:Array<SongMetadata> = []; var result:Array<SongMetadata> = [];