@@ -10,6 +10,15 @@ public class UgcGenerator : IGenerator<ChuChart>
1010{
1111 private int RSL = 480 * 4 ;
1212 private List < Alert > alerts = [ ] ;
13+ public List < ( string , string ) > ExtraHeaders = [ ] ;
14+
15+ /**
16+ * <param name="extraHeaders">在生成的UGC的HEAD区域,添加上额外的字段。</param>
17+ */
18+ public UgcGenerator ( List < ( string , string ) > ? extraHeaders = null )
19+ {
20+ if ( extraHeaders != null ) ExtraHeaders = extraHeaders ;
21+ }
1322
1423 public ( string , List < Alert > ) Generate ( ChuChart chart )
1524 {
@@ -48,6 +57,7 @@ void Dfs(ChuNote n)
4857 private string Serialize ( ChuChart ugc )
4958 {
5059 ugc . Sort ( ) ;
60+ var extraHeaderKeys = ExtraHeaders . Select ( x => x . Item1 ) . ToHashSet ( ) ;
5161
5262 var sb = new StringBuilder ( ) ;
5363 sb . AppendLine ( $ "' Created with MuConvert v{ Utils . AppVersion } ") ;
@@ -62,6 +72,10 @@ private string Serialize(ChuChart ugc)
6272 sb . AppendLine ( FormattableString . Invariant ( $ "@CONST\t { ugc . Level : F5} ") ) ;
6373 var songId = ! ( string . IsNullOrEmpty ( ugc . MusicId ) || ugc . MusicId == "0" ) ? ugc . MusicId : $ "MuC-{ DateTimeOffset . UtcNow . ToUnixTimeMilliseconds ( ) } ";
6474 sb . AppendLine ( $ "@SONGID\t { songId } ") ;
75+ foreach ( var ( key , value ) in ExtraHeaders )
76+ { // 写入用户传入的ExtraHeaders中要求的字段
77+ sb . AppendLine ( $ "@{ key } \t { value } ") ;
78+ }
6579 sb . AppendLine ( "@FLAG\t HIPRECISION\t TRUE" ) ; // 表明,谱面中的高度使用的是两位高度而不是一位高度
6680 sb . AppendLine ( $ "@TICKS\t { RSL / 4 } ") ;
6781 foreach ( var met in ugc . MetList )
@@ -74,15 +88,15 @@ private string Serialize(ChuChart ugc)
7488 var ( m , o ) = Utils . BarAndTick ( b . Time , RSL ) ;
7589 sb . AppendLine ( FormattableString . Invariant ( $ "@BPM\t { m } '{ o } \t { b . Bpm : F5} ") ) ;
7690 }
77- sb . AppendLine ( "@TIL\t 0\t 0'0\t 1.00000" ) ;
91+ if ( ! extraHeaderKeys . Contains ( "TIL" ) ) sb . AppendLine ( "@TIL\t 0\t 0'0\t 1.00000" ) ; // 用户没有通过ExtraHeaders指定,则提供一个默认值
7892
7993 foreach ( var s in ugc . SflList . OrderBy ( x => x . Time ) )
8094 {
8195 var ( m , o ) = Utils . BarAndTick ( s . Time , RSL ) ;
8296 sb . AppendLine ( FormattableString . Invariant ( $ "@SPDMOD\t { m } '{ o } \t { s . Multiplier : 0.00000} ") ) ;
8397 }
8498
85- sb . AppendLine ( "@MAINTIL\t 0" ) ;
99+ if ( ! extraHeaderKeys . Contains ( "MAINTIL" ) ) sb . AppendLine ( "@MAINTIL\t 0" ) ; // 用户没有通过ExtraHeaders指定,则提供一个默认值
86100 sb . AppendLine ( "@ENDHEAD" ) ;
87101 sb . AppendLine ( ) ;
88102
0 commit comments