OSDN Git Service

SlimDX から SharpDX へ機械的に移行。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 05.選曲 / CActSelectQuickConfig.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Diagnostics;\r
4 using System.Text;\r
5 using System.Drawing;\r
6 using System.IO;\r
7 using SharpDX;\r
8 using FDK;\r
9 \r
10 namespace DTXMania\r
11 {\r
12         internal class CActSelectQuickConfig : CActSelectPopupMenu\r
13         {\r
14                 readonly string QuickCfgTitle = "Quick Config";\r
15                 COptionStringList QTarget;\r
16                 COptionStringList QAuto;\r
17                 List<COptionBase> lci;\r
18                 Font ft表示用フォント;\r
19                 CTexture txパネル本体;\r
20                 CTexture tx文字列パネル;\r
21 \r
22                 public CActSelectQuickConfig()\r
23                 {\r
24                         CActSelectQuickConfigMain();\r
25                 }\r
26 \r
27                 private void CActSelectQuickConfigMain()\r
28                 {\r
29                         /*\r
30                         •Target: Drums/Guitar/Bass \r
31                         •Auto Mode: All ON/All OFF/CUSTOM \r
32                         •Auto Lane: \r
33                         •Scroll Speed: \r
34                         •Play Speed: \r
35                         •Risky: \r
36                         •Hidden/Sudden: None/Hidden/Sudden/Both \r
37                         •AUTO Ghost: Perfect/Last Play/Hi Skill/Hi Score/Online\r
38                         •Target Ghost: None/Perfect/Last Play/Hi Skill/Hi Score/Online\r
39                         •Conf SET: SET-1/SET-2/SET-3 \r
40                         •More... \r
41                         •EXIT \r
42                         */\r
43                         QTarget = new COptionStringList("Drums");\r
44                         QTarget.Initialize("Target", "", new string[] { "Drums", "Guitar", "Bass" });\r
45                         QTarget.OnEnterDelegate = () =>\r
46                         {\r
47                                 EPart nCurrentTarget = 0;\r
48                                 if (QTarget.Index == 0)\r
49                                 {\r
50                                         nCurrentTarget = EPart.Drums;\r
51                                 }\r
52                                 else if (QTarget.Index == 1)\r
53                                 {\r
54                                         nCurrentTarget = EPart.Guitar;\r
55                                 }\r
56                                 else if (QTarget.Index == 2)\r
57                                 {\r
58                                         nCurrentTarget = EPart.Bass;\r
59                                 }\r
60                                 lci = MakeListCItemBase(nCurrentTarget);\r
61                                 // eInst = (E楽器パート) nCurrentTarget;\r
62                                 // ここではeInstは変えない。メニューを開いたタイミングでのみeInstを使う\r
63                                 Initialize(lci, true, QuickCfgTitle, n現在の選択行);\r
64                                 MakeAutoPanel();\r
65                         };\r
66                         lci = MakeListCItemBase(EPart.Drums);\r
67                         // ConfSet=0, nInst=Drums\r
68                         base.Initialize(lci, true, QuickCfgTitle, 2);\r
69                 }\r
70 \r
71                 private List<COptionBase> MakeListCItemBase(EPart nInst)\r
72                 {\r
73                         List<COptionBase> ret = new List<COptionBase>();\r
74 \r
75                         QAuto = new COptionStringList("Custom");\r
76                         if (nInst == EPart.Drums)\r
77                         {\r
78                                 string[] items_dr = new string[] { "All On", "Auto HH", "Auto BD", "Custom", "All Off" };\r
79                                 int dr_init_idx = 3;\r
80                                 if (CDTXMania.Instance.ConfigIni.bAutoPlay.IsAllTrue(EPart.Drums))\r
81                                 {\r
82                                         dr_init_idx = 0;\r
83                                 }\r
84                                 else if (CDTXMania.Instance.ConfigIni.bAutoPlay.bIsAutoHH)\r
85                                 {\r
86                                         dr_init_idx = 1;\r
87                                 }\r
88                                 else if (CDTXMania.Instance.ConfigIni.bAutoPlay.bIsAutoBD)\r
89                                 {\r
90                                         dr_init_idx = 2;\r
91                                 }\r
92                                 else if (CDTXMania.Instance.ConfigIni.bAutoPlay.IsAllFalse(EPart.Drums))\r
93                                 {\r
94                                         dr_init_idx = 4;\r
95                                 }\r
96                                 QAuto.Initialize("Auto", "", items_dr);\r
97                                 QAuto.Index = dr_init_idx;\r
98                                 QAuto.OnEnterDelegate = () =>\r
99                                 {\r
100                                         if (QAuto.Value == "All On")\r
101                                         {\r
102                                                 CDTXMania.Instance.ConfigIni.bAutoPlay.Set(EPart.Drums, EThreeState.On);\r
103                                         }\r
104                                         else if (QAuto.Value == "All Off")\r
105                                         {\r
106                                                 CDTXMania.Instance.ConfigIni.bAutoPlay.Set(EPart.Drums, EThreeState.Off);\r
107                                         }\r
108                                         else if (QAuto.Value == "Auto HH")\r
109                                         {\r
110                                                 CDTXMania.Instance.ConfigIni.bAutoPlay.SetAutoHH();\r
111                                         }\r
112                                         else if (QAuto.Value == "Auto BD")\r
113                                         {\r
114                                                 CDTXMania.Instance.ConfigIni.bAutoPlay.SetAutoBD();\r
115                                         }\r
116                                         MakeAutoPanel();\r
117                                 };\r
118                         }\r
119                         else if (nInst == EPart.Guitar || nInst == EPart.Bass)\r
120                         {\r
121                                 string[] items_gt = new string[] { "All On", "Auto Pick", "Auto Neck", "Custom", "All Off" };\r
122                                 // 初期値の決定\r
123                                 int gt_init_idx = 3;\r
124                                 if (CDTXMania.Instance.ConfigIni.bAutoPlay.IsAllTrue(nInst))\r
125                                 {\r
126                                         gt_init_idx = 0;\r
127                                 }\r
128                                 else if (CDTXMania.Instance.ConfigIni.bAutoPlay.bIsAutoPick(nInst))\r
129                                 {\r
130                                         gt_init_idx = 1;\r
131                                 }\r
132                                 else if (CDTXMania.Instance.ConfigIni.bAutoPlay.bIsAutoNeck(nInst))\r
133                                 {\r
134                                         gt_init_idx = 2;\r
135                                 }\r
136                                 else if (CDTXMania.Instance.ConfigIni.bAutoPlay.IsAllFalse(nInst))\r
137                                 {\r
138                                         gt_init_idx = 4;\r
139                                 }\r
140                                 QAuto.Initialize("Auto", "", items_gt);\r
141                                 QAuto.Index = gt_init_idx;\r
142                                 QAuto.OnEnterDelegate = () =>\r
143                                 {\r
144                                         if (QAuto.Value == "All On")\r
145                                         {\r
146                                                 CDTXMania.Instance.ConfigIni.bAutoPlay.Set(nInst, EThreeState.On);\r
147                                         }\r
148                                         else if (QAuto.Value == "All Off")\r
149                                         {\r
150                                                 CDTXMania.Instance.ConfigIni.bAutoPlay.Set(nInst, EThreeState.Off);\r
151                                         }\r
152                                         else if (QAuto.Value == "Auto Neck")\r
153                                         {\r
154                                                 CDTXMania.Instance.ConfigIni.bAutoPlay.SetAutoNeck(nInst);\r
155                                         }\r
156                                         else if (QAuto.Value == "Auto Pick")\r
157                                         {\r
158                                                 CDTXMania.Instance.ConfigIni.bAutoPlay.SetAutoPick(nInst);\r
159                                         }\r
160                                         else if (QAuto.Value == "All Off")\r
161                                         {\r
162                                                 CDTXMania.Instance.ConfigIni.bAutoPlay.Set(nInst, EThreeState.Off);\r
163                                         }\r
164                                         MakeAutoPanel();\r
165                                 };\r
166                         }\r
167 \r
168                         COptionLabel more = new COptionLabel("More", "");\r
169                         more.OnEnterDelegate = () =>\r
170                         {\r
171                                 bGotoDetailConfig = true;\r
172                                 tDeativatePopupMenu();\r
173                         };\r
174 \r
175                         COptionLabel tret = new COptionLabel("Return", "");\r
176                         tret.OnEnterDelegate = () =>\r
177                         {\r
178                                 tDeativatePopupMenu();\r
179                         };\r
180 \r
181                         ret.Add(QTarget);\r
182                         ret.Add(QAuto);\r
183                         ret.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed[nInst]);\r
184                         ret.Add(CDTXMania.Instance.ConfigIni.eDark);\r
185                         ret.Add(CDTXMania.Instance.ConfigIni.nRisky);\r
186                         ret.Add(CDTXMania.Instance.ConfigIni.nPlaySpeed);\r
187                         ret.Add(CDTXMania.Instance.ConfigIni.eSudHidInv[nInst]);\r
188                         ret.Add(CDTXMania.Instance.ConfigIni.eAutoGhost[nInst]);\r
189                         ret.Add(CDTXMania.Instance.ConfigIni.eTargetGhost[nInst]);\r
190                         ret.Add(more);\r
191                         ret.Add(tret);\r
192 \r
193                         return ret;\r
194                 }\r
195 \r
196                 // メソッド\r
197                 public override void tActivatePopupMenu(EPart einst)\r
198                 {\r
199                         this.CActSelectQuickConfigMain();\r
200                         base.tActivatePopupMenu(einst);\r
201                 }\r
202 \r
203                 /// <summary>\r
204                 /// Auto Modeにフォーカスを合わせているときだけ、AUTOの設定状態を表示する。\r
205                 /// 現状はDrumでのみ表示。\r
206                 /// </summary>\r
207                 public override void t進行描画sub()\r
208                 {\r
209                         if (lci[base.n現在の選択行] == QAuto)\r
210                         {\r
211                                 if (tx文字列パネル == null)   // TagetとAuto Modeを全く変更せずにAuto Modeまで動かした場合限り、ここに来る\r
212                                 {\r
213                                         MakeAutoPanel();\r
214                                 }\r
215 \r
216                                 if (this.txパネル本体 != null)\r
217                                 {\r
218                                         this.txパネル本体.t2D描画(CDTXMania.Instance.Device, 213 * Scale.X, 167 * Scale.Y);\r
219                                 }\r
220                                 if (this.tx文字列パネル != null)\r
221                                 {\r
222                                         int x = (QTarget.Index == 0) ? 230 : 260;\r
223                                         this.tx文字列パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, 190 * Scale.Y);\r
224 \r
225                                 }\r
226                         }\r
227                 }\r
228 \r
229                 /// <summary>\r
230                 /// DrumsのAUTOパラメータを一覧表示するパネルを作成する\r
231                 /// </summary>\r
232                 public void MakeAutoPanel()\r
233                 {\r
234                         Bitmap image = new Bitmap((int)(300 * Scale.X), (int)(130 * Scale.Y));\r
235                         Graphics graphics = Graphics.FromImage(image);\r
236 \r
237                         string header = "", s = "";\r
238                         switch (QTarget.Index)\r
239                         {\r
240                                 case 0:\r
241                                         header = "LHSBHLFC";\r
242                                         s = GetAutoParameters(EPart.Drums);\r
243                                         break;\r
244                                 case 1:\r
245                                         header = "RGBPW";\r
246                                         s = GetAutoParameters(EPart.Guitar);\r
247                                         break;\r
248                                 case 2:\r
249                                         header = "RGBPW";\r
250                                         s = GetAutoParameters(EPart.Bass);\r
251                                         break;\r
252                                 default:\r
253                                         break;\r
254                         }\r
255                         for (int i = 0; i < header.Length; i++)\r
256                         {\r
257                                 graphics.DrawString(header[i].ToString(), this.ft表示用フォント, Brushes.White, (float)i * 24 * Scale.X, (float)0f);\r
258                                 graphics.DrawString(s[i].ToString(), this.ft表示用フォント, Brushes.White, (float)i * 24 * Scale.X, (float)24f * Scale.Y);\r
259                         }\r
260                         graphics.Dispose();\r
261 \r
262                         try\r
263                         {\r
264                                 if (this.tx文字列パネル != null)\r
265                                 {\r
266                                         this.tx文字列パネル.Dispose();\r
267                                 }\r
268                                 this.tx文字列パネル = new CTexture(CDTXMania.Instance.Device, image, CDTXMania.Instance.TextureFormat);\r
269                                 this.tx文字列パネル.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);\r
270                                 image.Dispose();\r
271                         }\r
272                         catch (CTextureCreateFailedException)\r
273                         {\r
274                                 Trace.TraceError("演奏履歴文字列テクスチャの作成に失敗しました。");\r
275                                 this.tx文字列パネル = null;\r
276                         }\r
277                 }\r
278 \r
279                 /// <summary>\r
280                 /// 簡易CONFIG内のAUTO状態を、文字列で返す。\r
281                 /// </summary>\r
282                 /// <param name="target">対象楽器</param>\r
283                 /// <returns>AutoならA,さもなくば_。この文字が複数並んだ文字列。</returns>\r
284                 private string GetAutoParameters(EPart target)\r
285                 {\r
286                         string s = "";\r
287                         switch (target)\r
288                         {\r
289                                 #region [ DRUMS ]\r
290                                 case EPart.Drums:\r
291                                         switch (QAuto.Index)\r
292                                         {\r
293                                                 case 0: // All Auto\r
294                                                         s = "AAAAAAAAAA";\r
295                                                         break;\r
296                                                 case 1: // Auto HH\r
297                                                         s = "_AA_______";\r
298                                                         break;\r
299                                                 case 2: // Auto BD\r
300                                                         s = "____A_____";\r
301                                                         break;\r
302                                                 case 3: // Custom\r
303                                                         for (EPad i = EPad.DrumsPadMin; i < EPad.DrumsPadMax; i++)\r
304                                                         {\r
305                                                                 s += (CDTXMania.Instance.ConfigIni.bAutoPlay[i]) ? "A" : "_";\r
306                                                         }\r
307                                                         break;\r
308                                                 case 4: // OFF\r
309                                                         s = "__________";\r
310                                                         break;\r
311                                                 default:\r
312                                                         throw new ArgumentOutOfRangeException();\r
313                                         }\r
314                                         break;\r
315                                 #endregion\r
316                                 #region [ Guitar / Bass ]\r
317                                 case EPart.Guitar:\r
318                                 case EPart.Bass:\r
319                                         switch (QAuto.Index)\r
320                                         {\r
321                                                 case 0: // All Auto\r
322                                                         s = "AAAAA";\r
323                                                         break;\r
324                                                 case 1: // Auto Neck\r
325                                                         s = "AAA__";\r
326                                                         break;\r
327                                                 case 2: // Auto Pick\r
328                                                         s = "___A_";\r
329                                                         break;\r
330                                                 case 3: // Custom\r
331                                                         EPad from = (target == EPart.Guitar) ? EPad.GuitarPadMin : EPad.BassPadMin;\r
332                                                         EPad to = (target == EPart.Guitar) ? EPad.GuitarPadMax : EPad.BassPadMax;\r
333                                                         for (EPad i = from; i < to; i++)\r
334                                                         {\r
335                                                                 s += (CDTXMania.Instance.ConfigIni.bAutoPlay[i]) ? "A" : "_";\r
336                                                         }\r
337                                                         break;\r
338                                                 case 4: // OFF\r
339                                                         s = "_____";\r
340                                                         break;\r
341                                                 default:\r
342                                                         throw new ArgumentOutOfRangeException();\r
343                                         }\r
344                                         break;\r
345                                 default:\r
346                                         break;\r
347                                         #endregion\r
348                         }\r
349                         return s;\r
350                 }\r
351 \r
352 \r
353                 // CActivity 実装\r
354 \r
355                 public override void On活性化()\r
356                 {\r
357                         if (base.b活性化してない)\r
358                         {\r
359                                 this.ft表示用フォント = new Font("Arial", 26f * Scale.Y, FontStyle.Bold, GraphicsUnit.Pixel);\r
360                                 base.On活性化();\r
361                                 this.bGotoDetailConfig = false;\r
362                         }\r
363                 }\r
364 \r
365                 public override void On非活性化()\r
366                 {\r
367                         if (base.b活性化してる)\r
368                         {\r
369                                 if (this.ft表示用フォント != null)\r
370                                 {\r
371                                         this.ft表示用フォント.Dispose();\r
372                                         this.ft表示用フォント = null;\r
373                                 }\r
374                                 base.On非活性化();\r
375                         }\r
376                 }\r
377 \r
378                 public override void OnManagedリソースの作成()\r
379                 {\r
380                         if (base.b活性化してる)\r
381                         {\r
382                                 string pathパネル本体 = CSkin.Path(@"Graphics\ScreenSelect popup auto settings.png");\r
383                                 if (File.Exists(pathパネル本体))\r
384                                 {\r
385                                         this.txパネル本体 = TextureFactory.tテクスチャの生成(pathパネル本体, true);\r
386                                 }\r
387                                 base.OnManagedリソースの作成();\r
388                         }\r
389                 }\r
390 \r
391                 public override void OnManagedリソースの解放()\r
392                 {\r
393                         if (base.b活性化してる)\r
394                         {\r
395                                 TextureFactory.tテクスチャの解放(ref this.txパネル本体);\r
396                                 TextureFactory.tテクスチャの解放(ref this.tx文字列パネル);\r
397                                 base.OnManagedリソースの解放();\r
398                         }\r
399                 }\r
400 \r
401         }\r
402 }\r