Fix osu! charts with timing point with negative timestamp not able to be imported.
This commit is contained in:
@@ -57,8 +57,7 @@ namespace Cryville.Crtr.Extensions.osu {
|
||||
Enum.TryParse(line.Substring(1, line.Length - 2), out section);
|
||||
continue;
|
||||
}
|
||||
try { ParseLine(meta, chart, diff, evs, section, line); }
|
||||
catch (Exception) { }
|
||||
ParseLine(meta, chart, diff, evs, section, line);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,10 +70,7 @@ namespace Cryville.Crtr.Extensions.osu {
|
||||
Chart.Sound bgmEv = null;
|
||||
TimeTimingModel tm = null;
|
||||
foreach (var ev in evs) {
|
||||
if (ev.StartTime != 0 && !(tm == null && ev is osuEvent.TimingChange)) {
|
||||
if (tm == null) throw new InvalidOperationException("Unconvertible chart: event before first timing point");
|
||||
tm.ForwardTo(ev.StartTime / 1e3);
|
||||
}
|
||||
if (tm != null) tm.ForwardTo(ev.StartTime / 1e3);
|
||||
if (ev is osuEvent.Audio) {
|
||||
var tev = (osuEvent.Audio)ev;
|
||||
chart.sounds.Add(bgmEv = new Chart.Sound { time = new BeatTime(0, 0, 1), id = meta.song.name });
|
||||
@@ -88,10 +84,12 @@ namespace Cryville.Crtr.Extensions.osu {
|
||||
group.motions.Add(new Chart.Motion { motion = string.Format(CultureInfo.InvariantCulture, "svm:{0}", tev.ScrollSpeed) });
|
||||
}
|
||||
else if (ev is osuEvent.EndEvent) {
|
||||
if (tm == null) throw new InvalidOperationException("Unconvertible chart: timed event before first timing point");
|
||||
var tev = (osuEvent.EndEvent)ev;
|
||||
longevs[tev.Original].endtime = tm.FractionalBeatTime;
|
||||
}
|
||||
else if (ev is osuEvent.HOMania) {
|
||||
if (tm == null) throw new InvalidOperationException("Unconvertible chart: timed event before first timing point");
|
||||
var tev = (osuEvent.HOMania)ev;
|
||||
var rn = new Chart.Note {
|
||||
time = tm.FractionalBeatTime,
|
||||
@@ -139,7 +137,7 @@ namespace Cryville.Crtr.Extensions.osu {
|
||||
var pair = SplitKeyVal(line);
|
||||
switch (pair.Key) {
|
||||
case @"AudioFilename":
|
||||
evs.Add(new osuEvent.Audio { AudioFile = pair.Value });
|
||||
evs.Add(new osuEvent.Audio { StartTime = double.NegativeInfinity, AudioFile = pair.Value });
|
||||
break;
|
||||
case @"Mode":
|
||||
int rulesetID = int.Parse(pair.Value, CultureInfo.InvariantCulture);
|
||||
@@ -186,10 +184,10 @@ namespace Cryville.Crtr.Extensions.osu {
|
||||
switch (type) {
|
||||
case LegacyEventType.Sprite:
|
||||
if (evs.Count == 0 || !(evs[evs.Count - 1] is osuEvent.Background))
|
||||
evs.Add(new osuEvent.Background { FileName = CleanFilename(split[3]) });
|
||||
evs.Add(new osuEvent.Background { StartTime = double.NegativeInfinity, FileName = CleanFilename(split[3]) });
|
||||
break;
|
||||
case LegacyEventType.Background:
|
||||
evs.Add(new osuEvent.Background { FileName = CleanFilename(split[2]) });
|
||||
evs.Add(new osuEvent.Background { StartTime = double.NegativeInfinity, FileName = CleanFilename(split[2]) });
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -330,7 +328,7 @@ namespace Cryville.Crtr.Extensions.osu {
|
||||
abstract class osuEvent : IComparable<osuEvent> {
|
||||
public virtual double StartTime { get; set; }
|
||||
public virtual double EndTime { get; set; }
|
||||
public bool IsLong { get { return EndTime - StartTime > 0; } }
|
||||
public bool IsLong { get { return EndTime - StartTime > 0 && EndTime > 0; } }
|
||||
public abstract int Priority { get; }
|
||||
public int CompareTo(osuEvent other) {
|
||||
var c = StartTime.CompareTo(other.StartTime);
|
||||
|
Reference in New Issue
Block a user