OSDN Git Service

DTXManiaソリューション、DTXManiaプロジェクト、DTXCreatorプロジェクト、FDKプロジェクトについて英語化。
[dtxmania/dtxmania.git] / DTXMania / コード / ステージ / 05.選曲 / CActSelectQuickConfig.cs
diff --git a/DTXMania/コード/ステージ/05.選曲/CActSelectQuickConfig.cs b/DTXMania/コード/ステージ/05.選曲/CActSelectQuickConfig.cs
new file mode 100644 (file)
index 0000000..4d03695
--- /dev/null
@@ -0,0 +1,402 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Text;
+using System.Drawing;
+using System.IO;
+using SharpDX;
+using FDK;
+
+namespace DTXMania
+{
+       internal class CActSelectQuickConfig : CActSelectPopupMenu
+       {
+               readonly string QuickCfgTitle = "Quick Config";
+               COptionStringList QTarget;
+               COptionStringList QAuto;
+               List<COptionBase> lci;
+               Font ft表示用フォント;
+               CTexture txパネル本体;
+               CTexture tx文字列パネル;
+
+               public CActSelectQuickConfig()
+               {
+                       CActSelectQuickConfigMain();
+               }
+
+               private void CActSelectQuickConfigMain()
+               {
+                       /*
+                       •Target: Drums/Guitar/Bass 
+                       •Auto Mode: All ON/All OFF/CUSTOM 
+                       •Auto Lane: 
+                       •Scroll Speed: 
+                       •Play Speed: 
+                       •Risky: 
+                       •Hidden/Sudden: None/Hidden/Sudden/Both 
+                       •AUTO Ghost: Perfect/Last Play/Hi Skill/Hi Score/Online
+                       •Target Ghost: None/Perfect/Last Play/Hi Skill/Hi Score/Online
+                       •Conf SET: SET-1/SET-2/SET-3 
+                       •More... 
+                       •EXIT 
+                       */
+                       QTarget = new COptionStringList("Drums");
+                       QTarget.Initialize("Target", "", new string[] { "Drums", "Guitar", "Bass" });
+                       QTarget.OnEnterDelegate = () =>
+                       {
+                               EPart nCurrentTarget = 0;
+                               if (QTarget.Index == 0)
+                               {
+                                       nCurrentTarget = EPart.Drums;
+                               }
+                               else if (QTarget.Index == 1)
+                               {
+                                       nCurrentTarget = EPart.Guitar;
+                               }
+                               else if (QTarget.Index == 2)
+                               {
+                                       nCurrentTarget = EPart.Bass;
+                               }
+                               lci = MakeListCItemBase(nCurrentTarget);
+                               // eInst = (E楽器パート) nCurrentTarget;
+                               // ここではeInstは変えない。メニューを開いたタイミングでのみeInstを使う
+                               Initialize(lci, true, QuickCfgTitle, n現在の選択行);
+                               MakeAutoPanel();
+                       };
+                       lci = MakeListCItemBase(EPart.Drums);
+                       // ConfSet=0, nInst=Drums
+                       base.Initialize(lci, true, QuickCfgTitle, 2);
+               }
+
+               private List<COptionBase> MakeListCItemBase(EPart nInst)
+               {
+                       List<COptionBase> ret = new List<COptionBase>();
+
+                       QAuto = new COptionStringList("Custom");
+                       if (nInst == EPart.Drums)
+                       {
+                               string[] items_dr = new string[] { "All On", "Auto HH", "Auto BD", "Custom", "All Off" };
+                               int dr_init_idx = 3;
+                               if (CDTXMania.Instance.ConfigIni.bAutoPlay.IsAllTrue(EPart.Drums))
+                               {
+                                       dr_init_idx = 0;
+                               }
+                               else if (CDTXMania.Instance.ConfigIni.bAutoPlay.bIsAutoHH)
+                               {
+                                       dr_init_idx = 1;
+                               }
+                               else if (CDTXMania.Instance.ConfigIni.bAutoPlay.bIsAutoBD)
+                               {
+                                       dr_init_idx = 2;
+                               }
+                               else if (CDTXMania.Instance.ConfigIni.bAutoPlay.IsAllFalse(EPart.Drums))
+                               {
+                                       dr_init_idx = 4;
+                               }
+                               QAuto.Initialize("Auto", "", items_dr);
+                               QAuto.Index = dr_init_idx;
+                               QAuto.OnEnterDelegate = () =>
+                               {
+                                       if (QAuto.Value == "All On")
+                                       {
+                                               CDTXMania.Instance.ConfigIni.bAutoPlay.Set(EPart.Drums, EThreeState.On);
+                                       }
+                                       else if (QAuto.Value == "All Off")
+                                       {
+                                               CDTXMania.Instance.ConfigIni.bAutoPlay.Set(EPart.Drums, EThreeState.Off);
+                                       }
+                                       else if (QAuto.Value == "Auto HH")
+                                       {
+                                               CDTXMania.Instance.ConfigIni.bAutoPlay.SetAutoHH();
+                                       }
+                                       else if (QAuto.Value == "Auto BD")
+                                       {
+                                               CDTXMania.Instance.ConfigIni.bAutoPlay.SetAutoBD();
+                                       }
+                                       MakeAutoPanel();
+                               };
+                       }
+                       else if (nInst == EPart.Guitar || nInst == EPart.Bass)
+                       {
+                               string[] items_gt = new string[] { "All On", "Auto Pick", "Auto Neck", "Custom", "All Off" };
+                               // 初期値の決定
+                               int gt_init_idx = 3;
+                               if (CDTXMania.Instance.ConfigIni.bAutoPlay.IsAllTrue(nInst))
+                               {
+                                       gt_init_idx = 0;
+                               }
+                               else if (CDTXMania.Instance.ConfigIni.bAutoPlay.bIsAutoPick(nInst))
+                               {
+                                       gt_init_idx = 1;
+                               }
+                               else if (CDTXMania.Instance.ConfigIni.bAutoPlay.bIsAutoNeck(nInst))
+                               {
+                                       gt_init_idx = 2;
+                               }
+                               else if (CDTXMania.Instance.ConfigIni.bAutoPlay.IsAllFalse(nInst))
+                               {
+                                       gt_init_idx = 4;
+                               }
+                               QAuto.Initialize("Auto", "", items_gt);
+                               QAuto.Index = gt_init_idx;
+                               QAuto.OnEnterDelegate = () =>
+                               {
+                                       if (QAuto.Value == "All On")
+                                       {
+                                               CDTXMania.Instance.ConfigIni.bAutoPlay.Set(nInst, EThreeState.On);
+                                       }
+                                       else if (QAuto.Value == "All Off")
+                                       {
+                                               CDTXMania.Instance.ConfigIni.bAutoPlay.Set(nInst, EThreeState.Off);
+                                       }
+                                       else if (QAuto.Value == "Auto Neck")
+                                       {
+                                               CDTXMania.Instance.ConfigIni.bAutoPlay.SetAutoNeck(nInst);
+                                       }
+                                       else if (QAuto.Value == "Auto Pick")
+                                       {
+                                               CDTXMania.Instance.ConfigIni.bAutoPlay.SetAutoPick(nInst);
+                                       }
+                                       else if (QAuto.Value == "All Off")
+                                       {
+                                               CDTXMania.Instance.ConfigIni.bAutoPlay.Set(nInst, EThreeState.Off);
+                                       }
+                                       MakeAutoPanel();
+                               };
+                       }
+
+                       COptionLabel more = new COptionLabel("More", "");
+                       more.OnEnterDelegate = () =>
+                       {
+                               bGotoDetailConfig = true;
+                               tDeativatePopupMenu();
+                       };
+
+                       COptionLabel tret = new COptionLabel("Return", "");
+                       tret.OnEnterDelegate = () =>
+                       {
+                               tDeativatePopupMenu();
+                       };
+
+                       ret.Add(QTarget);
+                       ret.Add(QAuto);
+                       ret.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed[nInst]);
+                       ret.Add(CDTXMania.Instance.ConfigIni.eDark);
+                       ret.Add(CDTXMania.Instance.ConfigIni.nRisky);
+                       ret.Add(CDTXMania.Instance.ConfigIni.nPlaySpeed);
+                       ret.Add(CDTXMania.Instance.ConfigIni.eSudHidInv[nInst]);
+                       ret.Add(CDTXMania.Instance.ConfigIni.eAutoGhost[nInst]);
+                       ret.Add(CDTXMania.Instance.ConfigIni.eTargetGhost[nInst]);
+                       ret.Add(more);
+                       ret.Add(tret);
+
+                       return ret;
+               }
+
+               // メソッド
+               public override void tActivatePopupMenu(EPart einst)
+               {
+                       this.CActSelectQuickConfigMain();
+                       base.tActivatePopupMenu(einst);
+               }
+
+               /// <summary>
+               /// Auto Modeにフォーカスを合わせているときだけ、AUTOの設定状態を表示する。
+               /// 現状はDrumでのみ表示。
+               /// </summary>
+               public override void t進行描画sub()
+               {
+                       if (lci[base.n現在の選択行] == QAuto)
+                       {
+                               if (tx文字列パネル == null)   // TagetとAuto Modeを全く変更せずにAuto Modeまで動かした場合限り、ここに来る
+                               {
+                                       MakeAutoPanel();
+                               }
+
+                               if (this.txパネル本体 != null)
+                               {
+                                       this.txパネル本体.t2D描画(CDTXMania.Instance.Device, 213 * Scale.X, 167 * Scale.Y);
+                               }
+                               if (this.tx文字列パネル != null)
+                               {
+                                       int x = (QTarget.Index == 0) ? 230 : 260;
+                                       this.tx文字列パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, 190 * Scale.Y);
+
+                               }
+                       }
+               }
+
+               /// <summary>
+               /// DrumsのAUTOパラメータを一覧表示するパネルを作成する
+               /// </summary>
+               public void MakeAutoPanel()
+               {
+                       Bitmap image = new Bitmap((int)(300 * Scale.X), (int)(130 * Scale.Y));
+                       Graphics graphics = Graphics.FromImage(image);
+
+                       string header = "", s = "";
+                       switch (QTarget.Index)
+                       {
+                               case 0:
+                                       header = "LHSBHLFC";
+                                       s = GetAutoParameters(EPart.Drums);
+                                       break;
+                               case 1:
+                                       header = "RGBPW";
+                                       s = GetAutoParameters(EPart.Guitar);
+                                       break;
+                               case 2:
+                                       header = "RGBPW";
+                                       s = GetAutoParameters(EPart.Bass);
+                                       break;
+                               default:
+                                       break;
+                       }
+                       for (int i = 0; i < header.Length; i++)
+                       {
+                               graphics.DrawString(header[i].ToString(), this.ft表示用フォント, Brushes.White, (float)i * 24 * Scale.X, (float)0f);
+                               graphics.DrawString(s[i].ToString(), this.ft表示用フォント, Brushes.White, (float)i * 24 * Scale.X, (float)24f * Scale.Y);
+                       }
+                       graphics.Dispose();
+
+                       try
+                       {
+                               if (this.tx文字列パネル != null)
+                               {
+                                       this.tx文字列パネル.Dispose();
+                               }
+                               this.tx文字列パネル = new CTexture(CDTXMania.Instance.Device, image, CDTXMania.Instance.TextureFormat);
+                               this.tx文字列パネル.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);
+                               image.Dispose();
+                       }
+                       catch (CTextureCreateFailedException)
+                       {
+                               Trace.TraceError("演奏履歴文字列テクスチャの作成に失敗しました。");
+                               this.tx文字列パネル = null;
+                       }
+               }
+
+               /// <summary>
+               /// 簡易CONFIG内のAUTO状態を、文字列で返す。
+               /// </summary>
+               /// <param name="target">対象楽器</param>
+               /// <returns>AutoならA,さもなくば_。この文字が複数並んだ文字列。</returns>
+               private string GetAutoParameters(EPart target)
+               {
+                       string s = "";
+                       switch (target)
+                       {
+                               #region [ DRUMS ]
+                               case EPart.Drums:
+                                       switch (QAuto.Index)
+                                       {
+                                               case 0: // All Auto
+                                                       s = "AAAAAAAAAA";
+                                                       break;
+                                               case 1: // Auto HH
+                                                       s = "_AA_______";
+                                                       break;
+                                               case 2: // Auto BD
+                                                       s = "____A_____";
+                                                       break;
+                                               case 3: // Custom
+                                                       for (EPad i = EPad.DrumsPadMin; i < EPad.DrumsPadMax; i++)
+                                                       {
+                                                               s += (CDTXMania.Instance.ConfigIni.bAutoPlay[i]) ? "A" : "_";
+                                                       }
+                                                       break;
+                                               case 4: // OFF
+                                                       s = "__________";
+                                                       break;
+                                               default:
+                                                       throw new ArgumentOutOfRangeException();
+                                       }
+                                       break;
+                               #endregion
+                               #region [ Guitar / Bass ]
+                               case EPart.Guitar:
+                               case EPart.Bass:
+                                       switch (QAuto.Index)
+                                       {
+                                               case 0: // All Auto
+                                                       s = "AAAAA";
+                                                       break;
+                                               case 1: // Auto Neck
+                                                       s = "AAA__";
+                                                       break;
+                                               case 2: // Auto Pick
+                                                       s = "___A_";
+                                                       break;
+                                               case 3: // Custom
+                                                       EPad from = (target == EPart.Guitar) ? EPad.GuitarPadMin : EPad.BassPadMin;
+                                                       EPad to = (target == EPart.Guitar) ? EPad.GuitarPadMax : EPad.BassPadMax;
+                                                       for (EPad i = from; i < to; i++)
+                                                       {
+                                                               s += (CDTXMania.Instance.ConfigIni.bAutoPlay[i]) ? "A" : "_";
+                                                       }
+                                                       break;
+                                               case 4: // OFF
+                                                       s = "_____";
+                                                       break;
+                                               default:
+                                                       throw new ArgumentOutOfRangeException();
+                                       }
+                                       break;
+                               default:
+                                       break;
+                                       #endregion
+                       }
+                       return s;
+               }
+
+
+               // CActivity 実装
+
+               public override void On活性化()
+               {
+                       if (base.b活性化してない)
+                       {
+                               this.ft表示用フォント = new Font("Arial", 26f * Scale.Y, FontStyle.Bold, GraphicsUnit.Pixel);
+                               base.On活性化();
+                               this.bGotoDetailConfig = false;
+                       }
+               }
+
+               public override void On非活性化()
+               {
+                       if (base.b活性化してる)
+                       {
+                               if (this.ft表示用フォント != null)
+                               {
+                                       this.ft表示用フォント.Dispose();
+                                       this.ft表示用フォント = null;
+                               }
+                               base.On非活性化();
+                       }
+               }
+
+               public override void OnManagedリソースの作成()
+               {
+                       if (base.b活性化してる)
+                       {
+                               string pathパネル本体 = CSkin.Path(@"Graphics\ScreenSelect popup auto settings.png");
+                               if (File.Exists(pathパネル本体))
+                               {
+                                       this.txパネル本体 = TextureFactory.tテクスチャの生成(pathパネル本体, true);
+                               }
+                               base.OnManagedリソースの作成();
+                       }
+               }
+
+               public override void OnManagedリソースの解放()
+               {
+                       if (base.b活性化してる)
+                       {
+                               TextureFactory.tテクスチャの解放(ref this.txパネル本体);
+                               TextureFactory.tテクスチャの解放(ref this.tx文字列パネル);
+                               base.OnManagedリソースの解放();
+                       }
+               }
+
+       }
+}