read 'uninherited' value to determine timing point type

This commit is contained in:
MaxOhn
2022-03-11 22:13:26 +01:00
parent 34c3a195da
commit 8986cf334e
3 changed files with 20 additions and 11 deletions
+1
View File
@@ -8,3 +8,4 @@ output
/pp-plot/.env /pp-plot/.env
/pp-plot/target /pp-plot/target
/pp-plot/accuracy_*
+1
View File
@@ -1,6 +1,7 @@
## Upcoming ## Upcoming
- osu: Fix panic on maps with 0 objects - osu: Fix panic on maps with 0 objects
- Fixed timing point parsing on some (older) maps where "uninherited" value did not coincide with beat length
- Added `AttributeProvider` impl for `{Mode}PerformanceAttributes` - Added `AttributeProvider` impl for `{Mode}PerformanceAttributes`
- [BREAKING] Store `HitObject::sound` in `Beatmap::sounds` instead to reduce the struct size - [BREAKING] Store `HitObject::sound` in `Beatmap::sounds` instead to reduce the struct size
- [BREAKING] Removed the mode features `osu`, `fruits`, `taiko`, and `mania`. Now all modes are always supported. - [BREAKING] Removed the mode features `osu`, `fruits`, `taiko`, and `mania`. Now all modes are always supported.
+17 -10
View File
@@ -278,11 +278,26 @@ macro_rules! parse_timingpoints_body {
.validate()?; .validate()?;
let beat_len: f64 = split.next().next_field("beat len")?.trim().parse()?; let beat_len: f64 = split.next().next_field("beat len")?.trim().parse()?;
let timing_change = split.nth(4).and_then(|value| value.bytes().next());
if timing_change == Some(b'1') {
$self.timing_points.push(TimingPoint { time, beat_len });
if time < prev_time {
unsorted_timings = true;
} else {
prev_time = time;
}
} else {
let speed_multiplier = if beat_len < 0.0 {
(-100.0 / beat_len).max(0.1).min(10.0)
} else {
1.0
};
if beat_len < 0.0 {
let point = DifficultyPoint { let point = DifficultyPoint {
time, time,
speed_multiplier: (-100.0 / beat_len).max(0.1).min(10.0), speed_multiplier,
}; };
$self.difficulty_points.push(point); $self.difficulty_points.push(point);
@@ -292,14 +307,6 @@ macro_rules! parse_timingpoints_body {
} else { } else {
prev_diff = time; prev_diff = time;
} }
} else {
$self.timing_points.push(TimingPoint { time, beat_len });
if time < prev_time {
unsorted_timings = true;
} else {
prev_time = time;
}
} }
$buf.clear(); $buf.clear();