Should be done

This commit is contained in:
Ralty
2025-07-06 10:33:25 +07:00
parent 5ee4ff2a10
commit 34b4de31fc
4 changed files with 24 additions and 31 deletions
+2 -2
View File
@@ -141,8 +141,8 @@ class FunkinSprite extends FlxSkewedSprite implements IBeatReceiver implements I
private var countedBeat = 0;
public function beatHit(curBeat:Int)
{
if (Conductor.curBeat != curBeat || (skipNegativeBeats && curBeat < 0)) return;
if (beatAnims.length > 0 && (curBeat + beatOffset - Conductor.lastBeatChange) % (beatInterval * CoolUtil.maxInt(Math.floor(4 / Conductor.stepsPerBeat), 1)) == 0)
if (skipNegativeBeats && curBeat < 0) return;
if (beatAnims.length > 0 && (curBeat + beatOffset) % (beatInterval * CoolUtil.maxInt(Math.floor(4 / Conductor.stepsPerBeat), 1)) == 0)
{
// TODO: find a solution without countedBeat
var anim = beatAnims[FlxMath.wrap(countedBeat++, 0, beatAnims.length - 1)];
+1 -1
View File
@@ -35,7 +35,7 @@ class EventsData {
],
"BPM Change" => [{name: "Target BPM", type: TFloat(1.00, 9999, 0.001, 3), defValue: 100}],
"Continuous BPM Change" => [{name: "Target BPM", type: TFloat(1.00, 9999, 0.001, 3), defValue: 100}, {name: "Time (steps)", type: TFloat(0.25, 9999, 0.25, 2), defValue: 4}],
"Time Signature Change" => [{name: "Target Numerator", type: TFloat(1), defValue: 4}, {name: "Target Denominator", type: TFloat(1), defValue: 4}],
"Time Signature Change" => [{name: "Target Numerator", type: TFloat(1), defValue: 4}, {name: "Target Denominator", type: TFloat(1), defValue: 4}, {name: "Denominator is Steps Per Beat", type: TBool, defValue: false}],
"Scroll Speed Change" => [
{name: "Tween Speed?", type: TBool, defValue: true},
{name: "New Speed", type: TFloat(0.01, 99, 0.01, 2), defValue: 1.},
+19 -26
View File
@@ -125,8 +125,8 @@ final class Conductor
* How much value notes to divide for beat (bottom or divisor number in time signature).
* Only for a convinient way to access divisor instead of multiply by steps per beat.
*/
public static var denominator(get, never):Int;
private static function get_denominator() return Math.floor(16 / stepsPerBeat);
public static var denominator(get, never):Float;
private static function get_denominator() return FlxMath.roundDecimal(16 / stepsPerBeat, 2);
/**
* Last step from BPM Change
@@ -190,10 +190,13 @@ final class Conductor
*/
public static var invalidEvents:Array<ChartEvent> = [];
private static var validEventNames:Array<String> = ["BPM Change", "Time Signature Change", "Continuous BPM Change"];
@:dox(hide) public function new() {}
public static function reset() {
songPosition = lastSongPos = curBeatFloat = curStepFloat = curBeat = curStep = 0;
curChangeIndex = 0;
changeBPM();
}
@@ -244,19 +247,13 @@ final class Conductor
if (song.events == null) return;
// fix the sort first...
var events:Array<ChartEvent> = [];
for (e in song.events) if (e.params != null && (e.name == "BPM Change" || e.name == "Time Signature Change" || e.name == "Continuous BPM Change")) events.push(e);
events.sort(function(a, b) {
if (MathUtil.equal(a.time, b.time)) {
if (a.name == "Continuous BPM Change") return 1;
if (b.name == "Continuous BPM Change") return -1;
}
var events:Array<ChartEvent> = [for (e in song.events) if (e.params != null && validEventNames.contains(e.name)) e];
events.sort((a, b) -> {
if (MathUtil.equal(a.time, b.time)) return a.name == "Continuous BPM Change" ? 1 : -1;
return Std.int(a.time - b.time);
});
for (e in events) {
curChange = mapEvent(e, curChange);
}
for (e in events) curChange = mapEvent(e, curChange);
}
private static function mapEvent(e:ChartEvent, curChange:BPMChangeEvent) {
@@ -275,7 +272,9 @@ final class Conductor
if (curChange.songTime != time) curChange = mapBPMChange(curChange, time, curChange.bpm);
curChange.beatsPerMeasure = params[0];
curChange.stepsPerBeat = Math.floor(16 / params[1]); // convert from denominator to stepsPerBeat
if (params[2]) curChange.stepsPerBeat = params[1];
else curChange.stepsPerBeat = Math.floor(16 / params[1]); // convert from denominator to stepsPerBeat
curChange.stepTime = CoolUtil.floorInt(curChange.stepTime + .99998);
curChange.beatTime = CoolUtil.floorInt(curChange.beatTime + .99998);
@@ -287,11 +286,11 @@ final class Conductor
invalidEvents.push(e);
return curChange; //DO NOT!!!!
}
curChange = mapBPMChange(curChange, time, params[0]);
var endTime = time + (params[1]) / (curChange.bpm - prevBPM) * Math.log(curChange.bpm / prevBPM) * 15000;
curChange.endSongTime = time + (params[1]) / (curChange.bpm - prevBPM) * Math.log(curChange.bpm / prevBPM) * 15000;
curChange.endStepTime = curChange.stepTime + params[1];
curChange.continuous = true;
curChange.endSongTime = endTime;
}
return curChange;
}
@@ -311,21 +310,15 @@ final class Conductor
invalidEvents = [];
for (event in Charter.instance.eventsGroup.members) {
event.events.sort(function(a, b) {
if (MathUtil.equal(a.time, b.time)) {
if (a.name == "Continuous BPM Change") return 1;
if (b.name == "Continuous BPM Change") return -1;
}
event.events.sort((a, b) -> {
if (MathUtil.equal(a.time, b.time)) return a.name == "Continuous BPM Change" ? 1 : -1;
return 0;
});
var eventTime = Conductor.getTimeForStep(event.step);
var eventTime = Conductor.getStepsInTime(event.step);
for (e in event.events) {
e.time = eventTime;
if ((e.name == "BPM Change" || e.name == "Time Signature Change" || e.name == "Continuous BPM Change")) {
curChange = mapEvent(e, curChange);
}
if (!Math.isNaN(eventTime)) e.time = eventTime;
if (validEventNames.contains(e.name)) curChange = mapEvent(e, curChange);
}
}
}
+2 -2
View File
@@ -173,8 +173,8 @@ class Character extends FunkinSprite implements IBeatReceiver implements IOffset
public override function beatHit(curBeat:Int) {
scripts.call("beatHit", [curBeat]);
if (Conductor.curBeat != curBeat || (skipNegativeBeats && curBeat < 0)) return;
if (danceOnBeat && (curBeat + beatOffset - Conductor.lastBeatChange) % (beatInterval * CoolUtil.maxInt(Math.floor(4 / Conductor.stepsPerBeat), 1)) == 0 && !__lockAnimThisFrame)
if (skipNegativeBeats && curBeat < 0) return;
if (danceOnBeat && (curBeat + beatOffset) % (beatInterval * CoolUtil.maxInt(Math.floor(4 / Conductor.stepsPerBeat), 1)) == 0 && !__lockAnimThisFrame)
tryDance();
}