OSDN Git Service

557de722d6cca195ae74b51c721c9b0e57f569f6
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 05.選曲 / CActSelectステータスパネル.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Runtime.InteropServices;\r
5 using System.Drawing;\r
6 using FDK;\r
7 \r
8 namespace DTXMania\r
9 {\r
10         internal class CActSelectステータスパネル : CActivity\r
11         {\r
12                 // メソッド\r
13 \r
14                 public CActSelectステータスパネル()\r
15                 {\r
16                         base.b活性化してない = true;\r
17                 }\r
18                 public void t選択曲が変更された()\r
19                 {\r
20                         C曲リストノード c曲リストノード = CDTXMania.Instance.stage選曲.r現在選択中の曲;\r
21                         Cスコア cスコア = CDTXMania.Instance.stage選曲.r現在選択中のスコア;\r
22                         if ((c曲リストノード != null) && (cスコア != null))\r
23                         {\r
24                                 this.n現在選択中の曲の難易度 = CDTXMania.Instance.stage選曲.n現在選択中の曲の難易度;\r
25                                 for (E楽器パート i = E楽器パート.DRUMS; i <= E楽器パート.BASS; i++)\r
26                                 {\r
27                                         int nLevel = cスコア.譜面情報.レベル[i];\r
28                                         if (nLevel < 0)\r
29                                         {\r
30                                                 nLevel = 0;\r
31                                         }\r
32                                         if (nLevel > 99)\r
33                                         {\r
34                                                 nLevel = 99;\r
35                                         }\r
36                                         this.n現在選択中の曲のレベル[i] = nLevel;\r
37                                         this.n現在選択中の曲の最高ランク[i] = cスコア.譜面情報.最大ランク[i];\r
38                                         this.b現在選択中の曲がフルコンボ[i] = cスコア.譜面情報.フルコンボ[i];\r
39                                         this.db現在選択中の曲の最高スキル値[i] = cスコア.譜面情報.最大スキル[i];\r
40                                 }\r
41                                 for (int i = 0; i < 5; i++)\r
42                                 {\r
43                                         this.str難易度ラベル[i] = c曲リストノード.ar難易度ラベル[i];\r
44                                 }\r
45                                 if (this.r直前の曲 != c曲リストノード)\r
46                                 {\r
47                                         this.n難易度開始文字位置 = 0;\r
48                                 }\r
49                                 this.r直前の曲 = c曲リストノード;\r
50                         }\r
51                 }\r
52 \r
53 \r
54                 // CActivity 実装\r
55 \r
56                 public override void On活性化()\r
57                 {\r
58                         this.n本体X = (int)(3 * Scale.X);\r
59                         this.n本体Y = (int)(0x15d * Scale.Y);\r
60                         this.n現在選択中の曲の難易度 = 0;\r
61                         for (E楽器パート i = E楽器パート.DRUMS; i <= E楽器パート.BASS; i++)\r
62                         {\r
63                                 this.n現在選択中の曲のレベル[i] = 0;\r
64                                 this.n現在選択中の曲の最高ランク[i] = CScoreIni.ERANK.UNKNOWN;\r
65                                 this.b現在選択中の曲がフルコンボ[i] = false;\r
66                                 this.db現在選択中の曲の最高スキル値[i] = 0.0;\r
67                         }\r
68                         for (int j = 0; j < 5; j++)\r
69                         {\r
70                                 this.str難易度ラベル[j] = "";\r
71                         }\r
72                         this.n難易度開始文字位置 = 0;\r
73                         this.r直前の曲 = null;\r
74                         base.On活性化();\r
75                 }\r
76                 public override void On非活性化()\r
77                 {\r
78                         this.ct登場アニメ用 = null;\r
79                         this.ct難易度スクロール用 = null;\r
80                         this.ct難易度矢印用 = null;\r
81                         base.On非活性化();\r
82                 }\r
83                 public override void OnManagedリソースの作成()\r
84                 {\r
85                         if (!base.b活性化してない)\r
86                         {\r
87                                 this.txパネル本体 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenSelect status panel.png"), true);\r
88                                 this.txレベル数字 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenSelect level numbers.png"), false);\r
89                                 this.txスキルゲージ = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenSelect skill gauge.png"), false);\r
90                                 this.txゲージ用数字他 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenSelect skill number on gauge etc.png"), false);\r
91                                 this.tx難易度用矢印 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenSelect triangle arrow.png"), false);\r
92                                 base.OnManagedリソースの作成();\r
93                         }\r
94                 }\r
95                 public override void OnManagedリソースの解放()\r
96                 {\r
97                         if (!base.b活性化してない)\r
98                         {\r
99                                 TextureFactory.tテクスチャの解放(ref this.txパネル本体);\r
100                                 TextureFactory.tテクスチャの解放(ref this.txレベル数字);\r
101                                 TextureFactory.tテクスチャの解放(ref this.txスキルゲージ);\r
102                                 TextureFactory.tテクスチャの解放(ref this.txゲージ用数字他);\r
103                                 TextureFactory.tテクスチャの解放(ref this.tx難易度用矢印);\r
104                                 base.OnManagedリソースの解放();\r
105                         }\r
106                 }\r
107                 public override int On進行描画()\r
108                 {\r
109                         if (!base.b活性化してない)\r
110                         {\r
111                                 #region [ 初めての進行描画 ]\r
112                                 //-----------------\r
113                                 if (base.b初めての進行描画)\r
114                                 {\r
115                                         this.ct登場アニメ用 = new CCounter(0, 100, 5, CDTXMania.Instance.Timer);\r
116                                         this.ct難易度スクロール用 = new CCounter(0, 20, 1, CDTXMania.Instance.Timer);\r
117                                         this.ct難易度矢印用 = new CCounter(0, 5, 80, CDTXMania.Instance.Timer);\r
118                                         base.b初めての進行描画 = false;\r
119                                 }\r
120                                 //-----------------\r
121                                 #endregion\r
122 \r
123                                 // 進行\r
124 \r
125                                 this.ct登場アニメ用.t進行();\r
126 \r
127                                 this.ct難易度スクロール用.t進行();\r
128                                 if (this.ct難易度スクロール用.b終了値に達した)\r
129                                 {\r
130                                         int num = this.n現在の難易度ラベルが完全表示されているかを調べてスクロール方向を返す();\r
131                                         if (num < 0)\r
132                                         {\r
133                                                 this.n難易度開始文字位置--;\r
134                                         }\r
135                                         else if (num > 0)\r
136                                         {\r
137                                                 this.n難易度開始文字位置++;\r
138                                         }\r
139                                         this.ct難易度スクロール用.n現在の値 = 0;\r
140                                 }\r
141 \r
142                                 this.ct難易度矢印用.t進行Loop();\r
143 \r
144                                 // 描画\r
145 \r
146                                 #region [ パネル本体の描画 ]\r
147                                 //-----------------\r
148                                 if (this.txパネル本体 != null)\r
149                                 {\r
150                                         if (this.ct登場アニメ用.b終了値に達した)\r
151                                         {\r
152                                                 this.n本体X = (int)(3 * Scale.X);\r
153                                                 this.n本体Y = (int)(0x15d * Scale.Y);\r
154                                         }\r
155                                         else\r
156                                         {\r
157                                                 double num2 = ((double)((int)(100 * Scale.X) - this.ct登場アニメ用.n現在の値)) / 100.0;\r
158                                                 double num3 = Math.Sin(Math.PI / 2 * num2);\r
159                                                 this.n本体X = 3 - ((int)((this.txパネル本体.sz画像サイズ.Width * num3) * num3));\r
160                                                 this.n本体Y = (int)(0x15d * Scale.Y);\r
161                                         }\r
162                                         this.txパネル本体.t2D描画(CDTXMania.Instance.Device, this.n本体X, this.n本体Y);\r
163                                 }\r
164                                 //-----------------\r
165                                 #endregion\r
166 \r
167                                 #region [ 難易度文字列の描画 ]\r
168                                 //-----------------\r
169 \r
170                                 #region [ chArray ← 難易度文字列を並べたもの、index ← その文字数 ]\r
171                                 //-----------------\r
172                                 char[] chArray = new char[0x100];\r
173                                 C文字コンソール.Eフォント種別[] eフォント種別Array = new C文字コンソール.Eフォント種別[0x100];\r
174                                 bool flag = false;\r
175                                 bool flag2 = true;\r
176                                 int index = 0;\r
177                                 for (int i = 0; i < 5; i++)\r
178                                 {\r
179                                         if ((this.str難易度ラベル[i] != null) && (this.str難易度ラベル[i].Length > 0))\r
180                                         {\r
181                                                 string str = this.str難易度ラベル[i];\r
182                                                 char[] chArray2 = new char[0x100];\r
183                                                 int num6 = 0;\r
184                                                 while ((num6 < 0xff) && (num6 < this.str難易度ラベル[i].Length))\r
185                                                 {\r
186                                                         chArray2[num6] = str[num6];\r
187                                                         num6++;\r
188                                                 }\r
189                                                 chArray2[num6] = '\0';\r
190                                                 if (!flag2)\r
191                                                 {\r
192                                                         if (index < 0xff)\r
193                                                         {\r
194                                                                 chArray[index] = ' ';\r
195                                                                 eフォント種別Array[index] = C文字コンソール.Eフォント種別.白;\r
196                                                                 index++;\r
197                                                         }\r
198                                                         if (index < 0xff)\r
199                                                         {\r
200                                                                 chArray[index] = ' ';\r
201                                                                 eフォント種別Array[index] = C文字コンソール.Eフォント種別.白;\r
202                                                                 index++;\r
203                                                         }\r
204                                                 }\r
205                                                 flag2 = false;\r
206                                                 num6 = 0;\r
207                                                 while ((chArray2[num6] != '\0') && (index < 0xff))\r
208                                                 {\r
209                                                         chArray[index] = chArray2[num6++];\r
210                                                         eフォント種別Array[index] = (this.n現在選択中の曲の難易度 == i) ? C文字コンソール.Eフォント種別.赤 : C文字コンソール.Eフォント種別.白;\r
211                                                         index++;\r
212                                                 }\r
213                                                 chArray[index] = '\0';\r
214                                         }\r
215                                 }\r
216                                 //-----------------\r
217                                 #endregion\r
218 \r
219                                 if (index > 0)\r
220                                 {\r
221                                         int x = this.n本体X + (int)(20 * Scale.X);\r
222                                         int y = this.n本体Y + (int)(0x10 * Scale.Y);\r
223                                         index = this.n難易度開始文字位置;\r
224                                         flag = true;\r
225                                         while (index < (this.n難易度開始文字位置 + 55))         // 0x24 -> 55\r
226                                         {\r
227                                                 CDTXMania.Instance.act文字コンソール.tPrint(\r
228                                                         x,\r
229                                                         y + 5,\r
230                                                         eフォント種別Array[index],\r
231                                                         chArray[index].ToString()\r
232                                                 );\r
233                                                 x += 8 * 2;\r
234                                                 index++;\r
235                                                 if (chArray[index] == '\0')\r
236                                                 {\r
237                                                         flag = false;\r
238                                                         break;\r
239                                                 }\r
240                                         }\r
241                                         if (this.n難易度開始文字位置 > 0)\r
242                                         {\r
243                                                 int num9 = (this.n本体X + (int)(12 * Scale.X)) - (int)(this.ct難易度矢印用.n現在の値 * Scale.X);\r
244                                                 int num10 = (this.n本体Y + (int)(0x10 * Scale.Y)) + (int)(5 * Scale.Y);\r
245                                                 if (this.tx難易度用矢印 != null)\r
246                                                 {\r
247                                                         this.tx難易度用矢印.t2D描画(CDTXMania.Instance.Device, num9, num10, new Rectangle(0, 0, (int)(8 * Scale.X), (int)(0x10 * Scale.Y)));\r
248                                                 }\r
249                                         }\r
250                                         if (flag)\r
251                                         {\r
252                                                 int num11 = ((this.n本体X + (int)(20 * Scale.X)) + (int)(0x120 * Scale.X)) + (int)(this.ct難易度矢印用.n現在の値 * Scale.Y);\r
253                                                 int num12 = (this.n本体Y + (int)(0x10 * Scale.Y)) + (int)(5 * Scale.Y);\r
254                                                 if (this.tx難易度用矢印 != null)\r
255                                                 {\r
256                                                         this.tx難易度用矢印.t2D描画(CDTXMania.Instance.Device, num11, num12, new Rectangle((int)(8 * Scale.X), 0, (int)(8 * Scale.X), (int)(0x10 * Scale.Y)));\r
257                                                 }\r
258                                         }\r
259                                 }\r
260                                 //-----------------\r
261                                 #endregion\r
262 \r
263                                 Cスコア cスコア = CDTXMania.Instance.stage選曲.r現在選択中のスコア;\r
264 \r
265                                 #region [ 選択曲の Lv の描画 ]\r
266                                 //-----------------\r
267                                 if ((cスコア != null) && (this.txレベル数字 != null))\r
268                                 {\r
269                                         for (E楽器パート i = E楽器パート.DRUMS; i <= E楽器パート.BASS; i++)\r
270                                         {\r
271                                                 Rectangle rect十の位;\r
272                                                 Rectangle rect一の位;\r
273                                                 int nDispPosX = this.n本体X + (int)(66 * Scale.X);\r
274                                                 int nDispPosY = this.n本体Y + (int)(50 * Scale.Y) + CDTXMania.Instance.Coordinates.OffsetGuitarBassSwap[(CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass ? 1 : 0)][i].Y;\r
275                                                 int nLevel = this.n現在選択中の曲のレベル[i];\r
276                                                 if (nLevel < 0)\r
277                                                 {\r
278                                                         nLevel = 0;\r
279                                                 }\r
280                                                 else if (nLevel > 99)\r
281                                                 {\r
282                                                         nLevel = 99;\r
283                                                 }\r
284                                                 // Lv25刻みで、白→オレンジ→黄色→赤、と色を変える\r
285                                                 // \r
286                                                 int nRectOffsetX = ((nLevel / 25) < 2) ? (int)(64 * Scale.X) : 0;\r
287                                                 int nRectOffsetY = (((nLevel / 25) % 2) == 0) ? (int)(64 * Scale.Y) : 0;\r
288                                                 if (nLevel == 0)\r
289                                                 {\r
290                                                         rect十の位 = this.rc数字[11];              // "--"\r
291                                                         rect一の位 = this.rc数字[11];              // "-- "\r
292                                                 }\r
293                                                 else if (cスコア.譜面情報.レベルを非表示にする)\r
294                                                 {\r
295                                                         rect十の位 = this.rc数字[10];              // "?"\r
296                                                         rect一の位 = this.rc数字[10];              // "?"\r
297                                                 }\r
298                                                 else\r
299                                                 {\r
300                                                         rect十の位 = this.rc数字[nLevel / 10];\r
301                                                         rect一の位 = this.rc数字[nLevel % 10];\r
302                                                 }\r
303                                                 rect十の位.X += nRectOffsetX;\r
304                                                 rect十の位.Y += nRectOffsetY;\r
305                                                 rect一の位.X += nRectOffsetX;\r
306                                                 rect一の位.Y += nRectOffsetY;\r
307                                                 this.txレベル数字.t2D描画(CDTXMania.Instance.Device, nDispPosX, nDispPosY, rect十の位);\r
308                                                 this.txレベル数字.t2D描画(CDTXMania.Instance.Device, nDispPosX + (int)(13 * Scale.X), nDispPosY, rect一の位);\r
309                                         }\r
310                                 }\r
311                                 //-----------------\r
312                                 #endregion\r
313                                 #region [ 選択曲の 最高スキル値ゲージ+数値の描画 ]\r
314                                 //-----------------\r
315                                 for (E楽器パート i = E楽器パート.DRUMS; i <= E楽器パート.BASS; i++)\r
316                                 {\r
317                                         if (this.n現在選択中の曲のレベル[i] != 0)\r
318                                         {\r
319                                                 double dMaxSkill = this.db現在選択中の曲の最高スキル値[i];\r
320                                                 if (dMaxSkill != 0.0)\r
321                                                 {\r
322                                                         int nDispPosX = this.n本体X + (int)(100 * Scale.X);\r
323                                                         int nDispPosY = this.n本体Y + (int)(53 * Scale.Y) + +CDTXMania.Instance.Coordinates.OffsetGuitarBassSwap[(CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass ? 1 : 0)][i].Y;\r
324                                                         this.txスキルゲージ.t2D描画(CDTXMania.Instance.Device, nDispPosX, nDispPosY,\r
325                                                                                                                 new Rectangle(0, 0, (int)(170.0 * Scale.X * dMaxSkill / 100.0), (int)(10 * Scale.Y)));\r
326                                                 }\r
327                                                 string sMaxSkillString = dMaxSkill.ToString("##0.00");\r
328                                                 int nMaxSkillStringWidth = 0;\r
329                                                 foreach (char ch in sMaxSkillString)\r
330                                                 {\r
331                                                         for (int j = 0; j < 12; j++)\r
332                                                         {\r
333                                                                 if (ch == this.st数字[j].ch)\r
334                                                                 {\r
335                                                                         nMaxSkillStringWidth += this.st数字[j].rc.Width - 1;\r
336                                                                         break;\r
337                                                                 }\r
338                                                         }\r
339                                                 }\r
340                                                 int x = this.n本体X + (int)(182 * Scale.X) - nMaxSkillStringWidth / 2;\r
341                                                 int y = this.n本体Y + (int)(53 * Scale.Y) + +CDTXMania.Instance.Coordinates.OffsetGuitarBassSwap[(CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass ? 1 : 0)][i].Y;\r
342                                                 foreach (char ch in sMaxSkillString)\r
343                                                 {\r
344                                                         for (int j = 0; j < 12; j++)\r
345                                                         {\r
346                                                                 if (ch == this.st数字[j].ch)\r
347                                                                 {\r
348                                                                         if (this.txゲージ用数字他 != null)\r
349                                                                         {\r
350                                                                                 this.txゲージ用数字他.t2D描画(CDTXMania.Instance.Device, x, y, this.st数字[j].rc);\r
351                                                                         }\r
352                                                                         x += this.st数字[j].rc.Width - 1;\r
353                                                                         break;\r
354                                                                 }\r
355                                                         }\r
356                                                 }\r
357                                         }\r
358                                         else\r
359                                         {\r
360                                                 int x = this.n本体X + (int)((182 - 20) * Scale.X);\r
361                                                 int y = this.n本体Y + (int)(53 * Scale.Y) + +CDTXMania.Instance.Coordinates.OffsetGuitarBassSwap[(CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass ? 1 : 0)][i].Y;\r
362                                                 if (this.txゲージ用数字他 != null)\r
363                                                 {\r
364                                                         this.txゲージ用数字他.t2D描画(CDTXMania.Instance.Device, x, y, new Rectangle(0, (int)(22 * Scale.Y), (int)(42 * Scale.X), (int)(10 * Scale.Y)));\r
365                                                 }\r
366                                         }\r
367                                 }\r
368                                 //-----------------\r
369                                 #endregion\r
370                                 #region [ 選択曲の 最高ランクの描画 ]\r
371                                 //-----------------\r
372                                 for (E楽器パート i = E楽器パート.DRUMS; i <= E楽器パート.BASS; i++)\r
373                                 {\r
374                                         CScoreIni.ERANK nMaxRank = this.n現在選択中の曲の最高ランク[i];\r
375                                         if (nMaxRank != CScoreIni.ERANK.UNKNOWN)\r
376                                         {\r
377                                                 int x = this.n本体X + (int)(278 * Scale.X);\r
378                                                 int y = this.n本体Y + (int)(55 * Scale.Y) + +CDTXMania.Instance.Coordinates.OffsetGuitarBassSwap[(CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass ? 1 : 0)][i].Y;\r
379                                                 if (this.txゲージ用数字他 != null)\r
380                                                 {\r
381                                                         this.txゲージ用数字他.t2D描画(CDTXMania.Instance.Device, x, y, this.rcランク[(int)nMaxRank]);\r
382                                                 }\r
383                                         }\r
384                                 }\r
385                                 //-----------------\r
386                                 #endregion\r
387                                 #region [ 選択曲の FullCombo の 描画 ]\r
388                                 //-----------------\r
389                                 Rectangle rectFullCombo = new Rectangle((int)(30 * Scale.X), (int)(32 * Scale.Y), (int)(30 * Scale.X), (int)(16 * Scale.Y));\r
390                                 for (E楽器パート i = E楽器パート.DRUMS; i <= E楽器パート.BASS; i++)\r
391                                 {\r
392                                         if (this.b現在選択中の曲がフルコンボ[i])\r
393                                         {\r
394                                                 int x = this.n本体X + (int)(290 * Scale.X);\r
395                                                 int y = this.n本体Y + (int)(53 * Scale.Y) + +CDTXMania.Instance.Coordinates.OffsetGuitarBassSwap[(CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass ? 1 : 0)][i].Y;\r
396                                                 if (this.txゲージ用数字他 != null)\r
397                                                 {\r
398                                                         this.txゲージ用数字他.t2D描画(CDTXMania.Instance.Device, x, y, rectFullCombo);\r
399                                                 }\r
400                                         }\r
401                                 }\r
402                                 //-----------------\r
403                                 #endregion\r
404                         }\r
405                         return 0;\r
406                 }\r
407 \r
408 \r
409                 // その他\r
410 \r
411                 #region [ private ]\r
412                 //-----------------\r
413                 [StructLayout(LayoutKind.Sequential)]\r
414                 private struct ST数字\r
415                 {\r
416                         public char ch;\r
417                         public Rectangle rc;\r
418                         public ST数字(char ch, Rectangle rc)\r
419                         {\r
420                                 this.ch = ch;\r
421                                 this.rc = rc;\r
422                         }\r
423                 }\r
424 \r
425                 private STDGBVALUE<bool> b現在選択中の曲がフルコンボ;\r
426                 private CCounter ct登場アニメ用;\r
427                 private CCounter ct難易度スクロール用;\r
428                 private CCounter ct難易度矢印用;\r
429                 private STDGBVALUE<double> db現在選択中の曲の最高スキル値;\r
430                 private STDGBVALUE<int> n現在選択中の曲のレベル;\r
431                 private STDGBVALUE<CScoreIni.ERANK> n現在選択中の曲の最高ランク;\r
432                 private int n現在選択中の曲の難易度;\r
433                 private int n難易度開始文字位置;\r
434                 private const int n難易度表示可能文字数 = 0x24;\r
435                 private int n本体X;\r
436                 private int n本体Y;\r
437                 private readonly Rectangle[] rcランク = new Rectangle[] {\r
438                         new Rectangle( (int)(0 * Scale.X), (int)(0x20 * Scale.Y), (int)(10 * Scale.X), (int)(10 * Scale.Y) ),\r
439                         new Rectangle( (int)(10 * Scale.X), (int)(0x20 * Scale.Y), (int)(10 * Scale.X), (int)(10 * Scale.Y) ),\r
440                         new Rectangle( (int)(20 * Scale.X), (int)(0x20 * Scale.Y), (int)(10 * Scale.X), (int)(10 * Scale.Y) ),\r
441                         new Rectangle( (int)(0 * Scale.X), (int)(0x2a * Scale.Y), (int)(10 * Scale.X), (int)(10 * Scale.Y) ),\r
442                         new Rectangle( (int)(10 * Scale.X), (int)(0x2a * Scale.Y), (int)(10 * Scale.X), (int)(10 * Scale.Y) ),\r
443                         new Rectangle( (int)(20 * Scale.X), (int)(0x2a * Scale.Y), (int)(10 * Scale.X), (int)(10 * Scale.Y) ),\r
444                         new Rectangle( (int)(0 * Scale.X), (int)(0x34 * Scale.Y), (int)(10 * Scale.X), (int)(10 * Scale.Y) )\r
445                 };\r
446                 private readonly Rectangle[] rc数字 = new Rectangle[] {\r
447                         new Rectangle( (int)(0 * Scale.X), (int)(0 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) ),\r
448                         new Rectangle( (int)(15 * Scale.X), (int)(0 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) ),\r
449                         new Rectangle( (int)(30 * Scale.X), (int)(0 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) ),\r
450                         new Rectangle( (int)(0x2d * Scale.X), (int)(0 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) ),\r
451                         new Rectangle( (int)(0 * Scale.X), (int)(0x13 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) ),\r
452                         new Rectangle( (int)(15 * Scale.X), (int)(0x13 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) ),\r
453                         new Rectangle( (int)(30 * Scale.X), (int)(0x13 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) ),\r
454                         new Rectangle( (int)(0x2d * Scale.X), (int)(0x13 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) ),\r
455                         new Rectangle( (int)(0 * Scale.X), (int)(0x26 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) ),\r
456                         new Rectangle( (int)(15 * Scale.X),(int)(0x26 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) ),\r
457                         new Rectangle( (int)(30 * Scale.X), (int)(0x26 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) ),\r
458                         new Rectangle( (int)(0x2d * Scale.X), (int)(0x26 * Scale.Y), (int)(15 * Scale.X), (int)(0x13 * Scale.Y) )\r
459                 };\r
460                 private C曲リストノード r直前の曲;\r
461                 private string[] str難易度ラベル = new string[] { "", "", "", "", "" };\r
462                 private readonly ST数字[] st数字 = new ST数字[] {\r
463                         new ST数字( '0', new Rectangle( (int)(0 * Scale.X), (int)(0 * Scale.Y), (int)(8 * Scale.X), (int)(11 * Scale.Y) ) ),\r
464                         new ST数字( '1', new Rectangle( (int)(8 * Scale.X), (int)(0 * Scale.Y), (int)(8 * Scale.X), (int)(11 * Scale.Y) ) ),\r
465                         new ST数字( '2', new Rectangle( (int)(0x10 * Scale.X), (int)(0 * Scale.Y), (int)(8 * Scale.X), (int)(11 * Scale.Y) ) ),\r
466                         new ST数字( '3', new Rectangle( (int)(0x18 * Scale.X), (int)(0 * Scale.Y), (int)(8 * Scale.X), (int)(11 * Scale.Y) ) ),\r
467                         new ST数字( '4', new Rectangle( (int)(0x20 * Scale.X), (int)(0 * Scale.Y), (int)(8 * Scale.X), (int)(11 * Scale.Y) ) ),\r
468                         new ST数字( '5', new Rectangle( (int)(40 * Scale.X), (int)(0 * Scale.Y), (int)(8 * Scale.X), (int)(11 * Scale.Y) ) ),\r
469                         new ST数字( '6', new Rectangle( (int)(0 * Scale.X), (int)(11 * Scale.Y), (int)(8 * Scale.X), (int)(11 * Scale.Y) ) ),\r
470                         new ST数字( '7', new Rectangle( (int)(8 * Scale.X), (int)(11 * Scale.Y), (int)(8 * Scale.X), (int)(11 * Scale.Y) ) ),\r
471                         new ST数字( '8', new Rectangle( (int)(0x10 * Scale.X), (int)(11 * Scale.Y), (int)(8 * Scale.X), (int)(11 * Scale.Y) ) ),\r
472                         new ST数字( '9', new Rectangle( (int)(0x18 * Scale.X), (int)(11 * Scale.Y), (int)(8 * Scale.X),(int)( 11 * Scale.Y) ) ),\r
473                         new ST数字( '.', new Rectangle( (int)(0x20 * Scale.X), (int)(11 * Scale.Y), (int)(4 * Scale.X), (int)(11 * Scale.Y) ) ),\r
474                         new ST数字( 'p', new Rectangle( (int)(0x24 * Scale.X), (int)(11 * Scale.Y), (int)(15 * Scale.X), (int)(11 * Scale.Y) ) )\r
475                 };\r
476                 private CTexture txゲージ用数字他;\r
477                 private CTexture txスキルゲージ;\r
478                 private CTexture txパネル本体;\r
479                 private CTexture txレベル数字;\r
480                 private CTexture tx難易度用矢印;\r
481 \r
482                 private int n現在の難易度ラベルが完全表示されているかを調べてスクロール方向を返す()\r
483                 {\r
484                         int num = 0;\r
485                         int length = 0;\r
486                         for (int i = 0; i < 5; i++)\r
487                         {\r
488                                 if ((this.str難易度ラベル[i] != null) && (this.str難易度ラベル[i].Length > 0))\r
489                                 {\r
490                                         length = this.str難易度ラベル[i].Length;\r
491                                 }\r
492                                 if (this.n現在選択中の曲の難易度 == i)\r
493                                 {\r
494                                         break;\r
495                                 }\r
496                                 if ((this.str難易度ラベル[i] != null) && (this.str難易度ラベル.Length > 0))\r
497                                 {\r
498                                         num += length + 2;\r
499                                 }\r
500                         }\r
501                         if (num >= (this.n難易度開始文字位置 + 55))    // 0x24 -> 55\r
502                         {\r
503                                 return 1;\r
504                         }\r
505                         if ((num + length) <= this.n難易度開始文字位置)\r
506                         {\r
507                                 return -1;\r
508                         }\r
509                         if (((num + length) - 1) >= (this.n難易度開始文字位置 + 55))   // 0x24 -> 55\r
510                         {\r
511                                 return 1;\r
512                         }\r
513                         if (num < this.n難易度開始文字位置)\r
514                         {\r
515                                 return -1;\r
516                         }\r
517                         return 0;\r
518                 }\r
519                 //-----------------\r
520                 #endregion\r
521         }\r
522 }\r