Skip to content

Commit d0de6ad

Browse files
committed
[F] 生成谱面时,字符串插值确保使用InvarientCultrue
1 parent 477a767 commit d0de6ad

5 files changed

Lines changed: 16 additions & 15 deletions

File tree

generator/chu/C2sGenerator.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ private string Serialize(ChuChart chart, List<Alert> alerts)
2929
sb.AppendLine("LEVEL\t0.0");
3030
sb.AppendLine($"CREATOR\t{chart.Designer}");
3131
var bpm_def = chart.BpmList.BPM_DEF();
32-
sb.AppendLine($"BPM_DEF\t{bpm_def.Item1}\t{bpm_def.Item2}\t{bpm_def.Item3}\t{bpm_def.Item4}");
32+
sb.AppendLine(FormattableString.Invariant($"BPM_DEF\t{bpm_def.Item1}\t{bpm_def.Item2}\t{bpm_def.Item3}\t{bpm_def.Item4}"));
3333
sb.AppendLine("MET_DEF\t4\t4");
3434
sb.AppendLine($"RESOLUTION\t{RSL}");
3535
sb.AppendLine($"CLK_DEF\t{RSL}");
@@ -41,7 +41,7 @@ private string Serialize(ChuChart chart, List<Alert> alerts)
4141
foreach (var b in chart.BpmList)
4242
{
4343
var (m, o) = Utils.BarAndTick(b.Time, RSL);
44-
sb.AppendLine($"BPM\t{m}\t{o}\t{b.Bpm:0.000}");
44+
sb.AppendLine(FormattableString.Invariant($"BPM\t{m}\t{o}\t{b.Bpm:0.000}"));
4545
}
4646

4747
foreach (var met in chart.MetList)
@@ -54,7 +54,7 @@ private string Serialize(ChuChart chart, List<Alert> alerts)
5454
{
5555
var (m, o) = Utils.BarAndTick(s.Time, RSL);
5656
var durTicks = Utils.Tick(s.Duration, RSL);
57-
sb.AppendLine($"SFL\t{m}\t{o}\t{durTicks}\t{s.Multiplier:0.000000}");
57+
sb.AppendLine(FormattableString.Invariant($"SFL\t{m}\t{o}\t{durTicks}\t{s.Multiplier:0.000000}"));
5858
}
5959
sb.AppendLine();
6060

@@ -114,11 +114,11 @@ private static bool IsSlideContinueSegments(ChuNote n) // Air Slide的前驱只
114114

115115
private static string FormatAsdAsc(ChuNote n, int m, int o, int durTicks)
116116
{
117-
return $"{n.Type}\t{m}\t{o}\t{n.Cell}\t{n.Width}\t{n.TargetNote}\t{n.Height}\t{durTicks}\t{n.EndCell}\t{n.EndWidth}\t{n.EndHeight}\t{AirColorTag(n)}";
117+
return FormattableString.Invariant($"{n.Type}\t{m}\t{o}\t{n.Cell}\t{n.Width}\t{n.TargetNote}\t{n.Height:0.#}\t{durTicks}\t{n.EndCell}\t{n.EndWidth}\t{n.EndHeight:0.#}\t{AirColorTag(n)}");
118118
}
119119

120120
private static string FormatAld(ChuNote n, int m, int o, int durTicks)
121121
{
122-
return $"ALD\t{m}\t{o}\t{n.Cell}\t{n.Width}\t{n.CrushInterval}\t{n.Height}\t{durTicks}\t{n.EndCell}\t{n.EndWidth}\t{n.EndHeight}";
122+
return FormattableString.Invariant($"ALD\t{m}\t{o}\t{n.Cell}\t{n.Width}\t{n.CrushInterval}\t{n.Height:0.#}\t{durTicks}\t{n.EndCell}\t{n.EndWidth}\t{n.EndHeight:0.#}");
123123
}
124124
}

generator/chu/SusGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ private string Serialize(ChuChart sus)
2323
if (!string.IsNullOrEmpty(sus.Title)) sb.AppendLine($"#TITLE \"{sus.Title}\"");
2424
if (!string.IsNullOrEmpty(sus.Artist)) sb.AppendLine($"#ARTIST \"{sus.Artist}\"");
2525
if (!string.IsNullOrEmpty(sus.Designer)) sb.AppendLine($"#DESIGNER \"{sus.Designer}\"");
26-
sb.AppendLine($"#BPM_DEF {sus.StartBpm:F2}");
26+
sb.AppendLine(FormattableString.Invariant($"#BPM_DEF {sus.StartBpm:F2}"));
2727
sb.AppendLine($"#REQUEST \"{RSL / 4}\"");
2828
sb.AppendLine();
2929

generator/chu/UgcGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ private string Serialize(ChuChart ugc, List<Alert> alerts)
2727
if (!string.IsNullOrEmpty(ugc.Designer)) sb.AppendLine($"@DESIGN\t{ugc.Designer}");
2828
sb.AppendLine($"@DIFF\t{ugc.Difficulty}");
2929
sb.AppendLine($"@LEVEL\t{ugc.DisplayLevel}");
30-
sb.AppendLine($"@CONST\t{ugc.Level:F5}");
30+
sb.AppendLine(FormattableString.Invariant($"@CONST\t{ugc.Level:F5}"));
3131
sb.AppendLine($"@SONGID\t{ugc.MusicId}");
3232
sb.AppendLine($"@TICKS\t{RSL / 4}");
3333
foreach (var met in ugc.MetList)
@@ -38,14 +38,14 @@ private string Serialize(ChuChart ugc, List<Alert> alerts)
3838
foreach (var b in ugc.BpmList)
3939
{
4040
var (m, o) = Utils.BarAndTick(b.Time, RSL);
41-
sb.AppendLine($"@BPM\t{m}'{o}\t{b.Bpm:F5}");
41+
sb.AppendLine(FormattableString.Invariant($"@BPM\t{m}'{o}\t{b.Bpm:F5}"));
4242
}
4343
sb.AppendLine("@TIL\t0\t0'0\t1.00000");
4444

4545
foreach (var s in ugc.SflList.OrderBy(x => x.Time))
4646
{
4747
var (m, o) = Utils.BarAndTick(s.Time, RSL);
48-
sb.AppendLine($"@SPDMOD\t{m}'{o}\t{s.Multiplier:0.00000}");
48+
sb.AppendLine(FormattableString.Invariant($"@SPDMOD\t{m}'{o}\t{s.Multiplier:0.00000}"));
4949
}
5050

5151
sb.AppendLine("@MAINTIL\t0");

generator/mai/MA2Generator.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Globalization;
12
using System.Text;
23
using MuConvert.generator;
34
using MuConvert.utils;
@@ -188,7 +189,7 @@ protected virtual List<MA2Line> AddSlide(Slide slide, int bar, int tick)
188189
protected void GenerateFileHead(StringBuilder result)
189190
{
190191
var bpmStatistics = chart.BpmList.BPM_DEF();
191-
string head = string.Format(headTemplate,
192+
string head = string.Format(CultureInfo.InvariantCulture, headTemplate,
192193
$"{MA2Version / 100}.{MA2Version % 100:D2}.00", IsUtage?1:0,
193194
bpmStatistics.Item1, bpmStatistics.Item2, bpmStatistics.Item3, bpmStatistics.Item4,
194195
RSL, RSL/4 * chart.ClockCount, Utils.AppVersion);
@@ -201,7 +202,7 @@ protected void GenerateBPM(StringBuilder result)
201202
foreach (var bpm in chart.BpmList)
202203
{
203204
var (bar, tick) = BT(bpm.Time);
204-
result.AppendLine($"BPM\t{bar}\t{tick}\t{bpm.Bpm:F3}");
205+
result.AppendLine(FormattableString.Invariant($"BPM\t{bar}\t{tick}\t{bpm.Bpm:F3}"));
205206
}
206207
result.AppendLine($"MET\t0\t0\t4\t{chart.ClockCount}");
207208
result.AppendLine();
@@ -291,7 +292,7 @@ protected void GenerateStatistics(StringBuilder result, Statistics stats)
291292
result.AppendLine($"TTM_SCR_ALL\t{theoryScore}");
292293

293294
var score_sss = stats.WeightedNoteCount * 500; // 旧框扣除额外分
294-
result.AppendLine($"TTM_SCR_S\t{Math.Ceiling(score_sss * 0.97 / 50) * 50}");
295+
result.AppendLine(FormattableString.Invariant($"TTM_SCR_S\t{Math.Ceiling(score_sss * 0.97 / 50) * 50}"));
295296
result.AppendLine($"TTM_SCR_SS\t{score_sss}");
296297
result.AppendLine($"TTM_RAT_ACV\t{(long)theoryScore * 10000 / score_sss }"); // 用long避免溢出
297298
result.AppendLine();

generator/mai/SimaiGenerator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ private string DurationStr(Rational start, Duration duration, bool forceAbsTime
123123
}
124124
else
125125
{ // 返回绝对时间
126-
return $"[#{(decimal)duration.Seconds:0.####}]";
126+
return FormattableString.Invariant($"[#{(decimal)duration.Seconds:0.####}]");
127127
}
128128
}
129129

@@ -149,7 +149,7 @@ private string DurationStr(Rational start, Duration duration, bool forceAbsTime
149149
{
150150
var bpmChange = chart.BpmList[bpmIdx];
151151
bpmIdx++;
152-
buf.Add(new SimaiNote(bpmChange.Time, $"({bpmChange.Bpm:0.#######})", 0, true));
152+
buf.Add(new SimaiNote(bpmChange.Time, FormattableString.Invariant($"({bpmChange.Bpm:0.#######})"), 0, true));
153153
continue;
154154
}
155155

@@ -197,7 +197,7 @@ private string DurationStr(Rational start, Duration duration, bool forceAbsTime
197197
forceAbsTime: nonStdWaitTime && Workaround_ForceUseAbsDurationForSlidesWithNonStandardWaitTime);
198198
if (nonStdWaitTime)
199199
{ // 非标准等待时间的星星,应该加上等待时间标记。simai仅支持绝对时间的等待时间标记。
200-
durationStr = $"[{(decimal)slide.WaitTime.Seconds:0.####}##{durationStr[1..].TrimStart('#')}";
200+
durationStr = FormattableString.Invariant($"[{(decimal)slide.WaitTime.Seconds:0.####}##{durationStr[1..].TrimStart('#')}");
201201
}
202202
res += durationStr;
203203
rollingTime += seg.Duration.Bar;

0 commit comments

Comments
 (0)