OSDN Git Service

DTXMania089リリースに際してのtag付け。
[dtxmania/dtxmania.git] / 110401(DTXMania089) / DTXManiaプロジェクト / コード / スコア、曲 / CSetDef.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Drawing;\r
5 using System.IO;\r
6 \r
7 namespace DTXMania\r
8 {\r
9         public class CSetDef\r
10         {\r
11                 // プロパティ\r
12 \r
13                 public List<CBlock> blocks;\r
14                 public class CBlock\r
15                 {\r
16                         /// <summary>\r
17                         /// このブロックが有効である(何かのプロパティがセットされた)場合、true を示す。\r
18                         /// </summary>\r
19                         public bool b使用中 { get; private set; }\r
20 \r
21                         /// <summary>\r
22                         /// スコアファイル名(#LxFILE)を保持する。配列は [0~4] で、存在しないレベルは null となる。\r
23                         /// </summary>\r
24                         public string[] File\r
25                         {\r
26                                 get\r
27                                 {\r
28                                         return this._file;\r
29                                 }\r
30                                 set\r
31                                 {\r
32                                         this._file = value;\r
33                                         this.b使用中 = true;\r
34                                 }\r
35                         }\r
36 \r
37                         /// <summary>\r
38                         /// スコアのフォント色(#FONTCOLOR)を保持する。\r
39                         /// </summary>\r
40                         public Color FontColor\r
41                         {\r
42                                 get\r
43                                 {\r
44                                         return this._fontcolor;\r
45                                 }\r
46                                 set\r
47                                 {\r
48                                         this._fontcolor = value;\r
49                                         this.b使用中 = true;\r
50                                 }\r
51                         }\r
52 \r
53                         /// <summary>\r
54                         /// スコアのジャンル名を保持する。(現在は使われていない。)\r
55                         /// </summary>\r
56                         public string Genre\r
57                         {\r
58                                 get\r
59                                 {\r
60                                         return this._genre;\r
61                                 }\r
62                                 set\r
63                                 {\r
64                                         this._genre = value;\r
65                                         this.b使用中 = true;\r
66                                 }\r
67                         }\r
68 \r
69                         /// <summary>\r
70                         /// スコアのラベル(#LxLABEL)を保持する。配列は[0~4] で、存在しないレベルは null となる。\r
71                         /// </summary>\r
72                         public string[] Label\r
73                         {\r
74                                 get\r
75                                 {\r
76                                         return this._label;\r
77                                 }\r
78                                 set\r
79                                 {\r
80                                         this._label = value;\r
81                                         this.b使用中 = true;\r
82                                 }\r
83                         }\r
84 \r
85                         /// <summary>\r
86                         /// スコアのタイトル(#TITLE)を保持する。\r
87                         /// </summary>\r
88                         public string Title\r
89                         {\r
90                                 get\r
91                                 {\r
92                                         return this._title;\r
93                                 }\r
94                                 set\r
95                                 {\r
96                                         this._title = value;\r
97                                         this.b使用中 = true;\r
98                                 }\r
99                         }\r
100 \r
101                         #region [ private ]\r
102                         //-----------------\r
103                         private string[] _file = new string[ 5 ];\r
104                         private Color _fontcolor = Color.White;\r
105                         private string _genre = "";\r
106                         private string[] _label = new string[ 5 ];\r
107                         private string _title = "";\r
108                         //-----------------\r
109                         #endregion\r
110                 }\r
111 \r
112 \r
113                 // コンストラクタ\r
114 \r
115                 public CSetDef()\r
116                 {\r
117                         this.blocks = new List<CBlock>();\r
118                 }\r
119                 public CSetDef( string setdefファイル名 )\r
120                         : this()\r
121                 {\r
122                         this.t読み込み( setdefファイル名 );\r
123                 }\r
124 \r
125 \r
126                 // メソッド\r
127 \r
128                 public void t読み込み( string setdefファイル名 )\r
129                 {\r
130                         var reader = new StreamReader( setdefファイル名, Encoding.GetEncoding( "shift-jis" ) );\r
131                         CBlock block = new CBlock();\r
132                         string str = null;\r
133                         while( ( str = reader.ReadLine() ) != null )\r
134                         {\r
135                                 if( str.Length != 0 )\r
136                                 {\r
137                                         try\r
138                                         {\r
139                                                 str = str.TrimStart( new char[] { ' ', '\t' } );\r
140                                                 if( ( str[ 0 ] == '#' ) && ( str[ 0 ] != ';' ) )\r
141                                                 {\r
142                                                         if( str.IndexOf( ';' ) != -1 )\r
143                                                         {\r
144                                                                 str = str.Substring( 0, str.IndexOf( ';' ) );\r
145                                                         }\r
146                                                         if( str.StartsWith( "#TITLE", StringComparison.OrdinalIgnoreCase ) )\r
147                                                         {\r
148                                                                 if( block.b使用中 )\r
149                                                                 {\r
150                                                                         this.tFILEの指定があるのにLxLABELが省略されているときはデフォルトの名前をセットする( block );\r
151                                                                         this.tLxLABELの指定があるのにFILEが省略されているときはなかったものとする( block );\r
152                                                                         this.blocks.Add( block );\r
153                                                                         block = new CBlock();\r
154                                                                 }\r
155                                                                 block.Title = str.Substring( 6 ).TrimStart( new char[] { ':', ' ', '\t' } );\r
156                                                         }\r
157                                                         else if( str.StartsWith( "#FONTCOLOR", StringComparison.OrdinalIgnoreCase ) )\r
158                                                         {\r
159                                                                 block.FontColor = ColorTranslator.FromHtml( "#" + str.Substring( 10 ).Trim( new char[] { ':', '#', ' ', '\t' } ) );\r
160                                                         }\r
161                                                         else if( str.StartsWith( "#L1FILE", StringComparison.OrdinalIgnoreCase ) )\r
162                                                         {\r
163                                                                 block.File[ 0 ] = str.Substring( 7 ).Trim( new char[] { ':', ' ', '\t' } );\r
164                                                         }\r
165                                                         else if( str.StartsWith( "#L2FILE", StringComparison.OrdinalIgnoreCase ) )\r
166                                                         {\r
167                                                                 block.File[ 1 ] = str.Substring( 7 ).Trim( new char[] { ':', ' ', '\t' } );\r
168                                                         }\r
169                                                         else if( str.StartsWith( "#L3FILE", StringComparison.OrdinalIgnoreCase ) )\r
170                                                         {\r
171                                                                 block.File[ 2 ] = str.Substring( 7 ).Trim( new char[] { ':', ' ', '\t' } );\r
172                                                         }\r
173                                                         else if( str.StartsWith( "#L4FILE", StringComparison.OrdinalIgnoreCase ) )\r
174                                                         {\r
175                                                                 block.File[ 3 ] = str.Substring( 7 ).Trim( new char[] { ':', ' ', '\t' } );\r
176                                                         }\r
177                                                         else if( str.StartsWith( "#L5FILE", StringComparison.OrdinalIgnoreCase ) )\r
178                                                         {\r
179                                                                 block.File[ 4 ] = str.Substring( 7 ).Trim( new char[] { ':', ' ', '\t' } );\r
180                                                         }\r
181                                                         else if( str.StartsWith( "#L1LABEL", StringComparison.OrdinalIgnoreCase ) )\r
182                                                         {\r
183                                                                 block.Label[ 0 ] = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
184                                                         }\r
185                                                         else if( str.StartsWith( "#L2LABEL", StringComparison.OrdinalIgnoreCase ) )\r
186                                                         {\r
187                                                                 block.Label[ 1 ] = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
188                                                         }\r
189                                                         else if( str.StartsWith( "#L3LABEL", StringComparison.OrdinalIgnoreCase ) )\r
190                                                         {\r
191                                                                 block.Label[ 2 ] = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
192                                                         }\r
193                                                         else if( str.StartsWith( "#L4LABEL", StringComparison.OrdinalIgnoreCase ) )\r
194                                                         {\r
195                                                                 block.Label[ 3 ] = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
196                                                         }\r
197                                                         else if( str.StartsWith( "#L5LABEL", StringComparison.OrdinalIgnoreCase ) )\r
198                                                         {\r
199                                                                 block.Label[ 4 ] = str.Substring( 8 ).Trim( new char[] { ':', ' ', '\t' } );\r
200                                                         }\r
201                                                 }\r
202                                                 continue;\r
203                                         }\r
204                                         catch\r
205                                         {\r
206                                                 continue;\r
207                                         }\r
208                                 }\r
209                         }\r
210                         reader.Close();\r
211                         if( block.b使用中 )\r
212                         {\r
213                                 this.tFILEの指定があるのにLxLABELが省略されているときはデフォルトの名前をセットする( block );\r
214                                 this.tLxLABELの指定があるのにFILEが省略されているときはなかったものとする( block );\r
215                                 this.blocks.Add( block );\r
216                         }\r
217                 }\r
218 \r
219 \r
220                 // その他\r
221 \r
222                 #region [ private ]\r
223                 //-----------------\r
224                 private void tFILEの指定があるのにLxLABELが省略されているときはデフォルトの名前をセットする( CBlock block )\r
225                 {\r
226                         string[] strArray = new string[] { "BASIC", "ADVANCED", "EXTREME", "HYPER", "ULTIMATE" };\r
227                         for( int i = 0; i < 5; i++ )\r
228                         {\r
229                                 if( ( ( block.File[ i ] != null ) && ( block.File[ i ].Length > 0 ) ) && string.IsNullOrEmpty( block.Label[ i ] ) )\r
230                                 {\r
231                                         block.Label[ i ] = strArray[ i ];\r
232                                 }\r
233                         }\r
234                 }\r
235                 private void tLxLABELの指定があるのにFILEが省略されているときはなかったものとする( CBlock block )\r
236                 {\r
237                         for( int i = 0; i < 5; i++ )\r
238                         {\r
239                                 if( ( ( block.Label[ i ] != null ) && ( block.Label[ i ].Length > 0 ) ) && string.IsNullOrEmpty( block.File[ i ] ) )\r
240                                 {\r
241                                         block.Label[ i ] = "";\r
242                                 }\r
243                         }\r
244                 }\r
245                 //-----------------\r
246                 #endregion\r
247         }\r
248 }\r