OSDN Git Service

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