Example #1
0
        public override int On進行描画()
        {
            if (!base.b活性化してない)
            {
                #region [ 初めての進行描画 ]
                //---------------------
                if (base.b初めての進行描画)
                {
                    if (TJAPlayer3.r直前のステージ == TJAPlayer3.stageStartUp)
                    {
                        this.actFI.tFadeIn開始();
                        base.eフェーズID = CStage.Eフェーズ.タイトル_起動画面からのFadeIn;
                    }
                    else
                    {
                        this.actFI.tFadeIn開始();
                        base.eフェーズID = CStage.Eフェーズ.共通_FadeIn;
                    }
                    base.b初めての進行描画 = false;
                }
                //---------------------
                #endregion

                // 進行

                #region [ カーソル上移動 ]
                //---------------------
                if (this.ct上移動用.b進行中)
                {
                    this.ct上移動用.t進行();
                    if (this.ct上移動用.b終了値に達した)
                    {
                        this.ct上移動用.t停止();
                    }
                }
                //---------------------
                #endregion
                #region [ カーソル下移動 ]
                //---------------------
                if (this.ct下移動用.b進行中)
                {
                    this.ct下移動用.t進行();
                    if (this.ct下移動用.b終了値に達した)
                    {
                        this.ct下移動用.t停止();
                    }
                }
                //---------------------
                #endregion

                // キー入力

                if (base.eフェーズID == CStage.Eフェーズ.共通_通常状態)                        // 通常状態
                {
                    if (TJAPlayer3.InputManager.Keyboard.bIsKeyPressed((int)SlimDXKeys.Key.Escape))
                    {
                        return((int)E戻り値.EXIT);
                    }

                    if (TJAPlayer3.InputManager.Keyboard.bIsKeyPressed((int)SlimDXKeys.Key.UpArrow) || TJAPlayer3.InputManager.Keyboard.bIsKeyPressed((int)SlimDXKeys.Key.LeftArrow) || TJAPlayer3.Pad.bPressed(EPad.LBlue) || TJAPlayer3.Pad.bPressed(EPad.LBlue2P) && TJAPlayer3.ConfigIni.nPlayerCount >= 2)
                    {
                        this.tカーソルを上へ移動する();
                    }

                    if (TJAPlayer3.InputManager.Keyboard.bIsKeyPressed((int)SlimDXKeys.Key.DownArrow) || TJAPlayer3.InputManager.Keyboard.bIsKeyPressed((int)SlimDXKeys.Key.RightArrow) || TJAPlayer3.Pad.bPressed(EPad.RBlue) || TJAPlayer3.Pad.bPressed(EPad.RBlue2P) && TJAPlayer3.ConfigIni.nPlayerCount >= 2)
                    {
                        this.tカーソルを下へ移動する();
                    }

                    if (((TJAPlayer3.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && TJAPlayer3.InputManager.Keyboard.bIsKeyPressed((int)SlimDXKeys.Key.Return)) || TJAPlayer3.Pad.bPressed(EPad.LRed) || TJAPlayer3.Pad.bPressed(EPad.RRed) || (TJAPlayer3.Pad.bPressed(EPad.LRed2P) || TJAPlayer3.Pad.bPressed(EPad.RRed2P)) && TJAPlayer3.ConfigIni.nPlayerCount >= 2))
                    {
                        if ((this.n現在のカーソル行 == (int)E戻り値.GAMESTART - 1) && TJAPlayer3.Skin.soundゲーム開始音.b読み込み成功)
                        {
                            if (!((TJAPlayer3.InputManager.Keyboard.bIsKeyDown((int)SlimDXKeys.Key.LeftControl) || TJAPlayer3.InputManager.Keyboard.bIsKeyDown((int)SlimDXKeys.Key.RightControl)) && TJAPlayer3.InputManager.Keyboard.bIsKeyDown((int)SlimDXKeys.Key.A)))
                            {
                                TJAPlayer3.Skin.soundゲーム開始音.t再生する();
                            }
                        }
                        else
                        {
                            TJAPlayer3.Skin.sound決定音.t再生する();
                        }
                        if (this.n現在のカーソル行 == (int)E戻り値.EXIT - 1)
                        {
                            return((int)E戻り値.EXIT);
                        }
                        this.actFO.tFadeOut開始();
                        base.eフェーズID = CStage.Eフェーズ.共通_FadeOut;
                    }
                    //					if ( CDTXMania.InputManager.Keyboard.bIsKeyPressed( (int) Key.Space ) )
                    //						Trace.TraceInformation( "DTXMania Title: SPACE key registered. " + CDTXMania.ct.nシステム時刻 );
                }

                // 描画

                if (TJAPlayer3.Tx.Title_Background != null)
                {
                    TJAPlayer3.Tx.Title_Background.t2D描画(TJAPlayer3.app.Device, 0, 0);
                }

                #region [ バージョン表示 ]
                //string strVersion = "KTT:J:A:I:2017072200";
                string       strCreator = "https://github.com/Mr-Ojii/TJAPlayer3";
                AssemblyName asmApp     = Assembly.GetExecutingAssembly().GetName();
#if DEBUG
                TJAPlayer3.act文字コンソール.tPrint(4, 44, C文字コンソール.EFontType.白, "DEBUG BUILD");
#endif
                TJAPlayer3.act文字コンソール.tPrint(4, 4, C文字コンソール.EFontType.白, asmApp.Name + " Ver." + TJAPlayer3.VERSION + " (" + strCreator + ")");
                TJAPlayer3.act文字コンソール.tPrint(4, 24, C文字コンソール.EFontType.白, "Skin:" + TJAPlayer3.Skin.Skin_Name + " Ver." + TJAPlayer3.Skin.Skin_Version + " (" + TJAPlayer3.Skin.Skin_Creator + ")");
                //CDTXMania.act文字コンソール.tPrint(4, 24, C文字コンソール.EFontType.白, strSubTitle);
                TJAPlayer3.act文字コンソール.tPrint(4, (720 - 24), C文字コンソール.EFontType.白, "TJAPlayer3-f forked TJAPlayer3(AioiLight) forked TJAPlayer2 forPC(kairera0467)");
                #endregion


                if (TJAPlayer3.Tx.Title_InBar != null && TJAPlayer3.Tx.Title_AcBar != null)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        TJAPlayer3.Tx.Title_InBar.t2D描画(TJAPlayer3.app.Device, MENU_XT[i] - TJAPlayer3.Tx.Title_InBar.szTextureSize.Width / 2, MENU_YT);
                    }

                    if (this.ct下移動用.b進行中)
                    {
                        TJAPlayer3.Tx.Title_AcBar.vcScaling.X = this.ct下移動用.n現在の値 * 0.01f;
                        TJAPlayer3.Tx.Title_AcBar.t2D描画(TJAPlayer3.app.Device, MENU_XT[this.n現在のカーソル行] - TJAPlayer3.Tx.Title_AcBar.szTextureSize.Width / 2 * this.ct下移動用.n現在の値 * 0.01f, MENU_YT);
                    }
                    else if (this.ct上移動用.b進行中)
                    {
                        TJAPlayer3.Tx.Title_AcBar.vcScaling.X = this.ct上移動用.n現在の値 * 0.01f;
                        TJAPlayer3.Tx.Title_AcBar.t2D描画(TJAPlayer3.app.Device, MENU_XT[this.n現在のカーソル行] - TJAPlayer3.Tx.Title_AcBar.szTextureSize.Width / 2 * this.ct上移動用.n現在の値 * 0.01f, MENU_YT);
                    }
                    else
                    {
                        TJAPlayer3.Tx.Title_AcBar.vcScaling.X = 1.0f;
                        TJAPlayer3.Tx.Title_AcBar.t2D描画(TJAPlayer3.app.Device, MENU_XT[this.n現在のカーソル行] - TJAPlayer3.Tx.Title_AcBar.szTextureSize.Width / 2, MENU_YT);
                    }

                    for (int i = 0; i < 3; i++)
                    {
                        if (i != this.n現在のカーソル行)
                        {
                            texttexture[i].t2D描画(TJAPlayer3.app.Device, MENU_XT[i] - texttexture[i].szTextureSize.Width / 2, MENU_YT + 30);
                        }
                        else
                        {
                            texttexture[i + 3].t2D描画(TJAPlayer3.app.Device, MENU_XT[i] - texttexture[i + 3].szTextureSize.Width / 2, MENU_YT + 30);
                        }
                    }
                }

                // URLの座標が押されたらブラウザで開いてやる 兼 マウスクリックのテスト
                // クライアント領域内のカーソル座標を取得する。
                // point.X、point.Yは負の値になることもある。
                var point = TJAPlayer3.app.PointToClient(new Point(OpenTK.Input.Mouse.GetCursorState().X, OpenTK.Input.Mouse.GetCursorState().Y));
                // クライアント領域の横幅を取得して、1280で割る。もちろんdouble型。
                var scaling = 1.000 * TJAPlayer3.app.ClientSize.Width / 1280;
                if (TJAPlayer3.InputManager.Mouse.bIsKeyPressed((int)SlimDXKeys.Mouse.Left))
                {
                    if (point.X >= 180 * scaling && point.X <= 490 * scaling && point.Y >= 0 && point.Y <= 20 * scaling)
                    {
                        CWebOpen.Open(strCreator);
                    }
                }


                CStage.Eフェーズ eフェーズid = base.eフェーズID;
                switch (eフェーズid)
                {
                case CStage.Eフェーズ.共通_FadeIn:
                    if (this.actFI.On進行描画() != 0)
                    {
                        TJAPlayer3.Skin.soundタイトル音.t再生する();
                        base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
                    }
                    break;

                case CStage.Eフェーズ.共通_FadeOut:
                    if (this.actFO.On進行描画() == 0)
                    {
                        break;
                    }
                    base.eフェーズID = CStage.Eフェーズ.共通_終了状態;
                    switch (this.n現在のカーソル行)
                    {
                    case (int)E戻り値.GAMESTART - 1:
                        if (!((TJAPlayer3.InputManager.Keyboard.bIsKeyDown((int)SlimDXKeys.Key.LeftControl) || TJAPlayer3.InputManager.Keyboard.bIsKeyDown((int)SlimDXKeys.Key.RightControl)) && TJAPlayer3.InputManager.Keyboard.bIsKeyDown((int)SlimDXKeys.Key.A)))
                        {
                            return((int)E戻り値.GAMESTART);
                        }
                        else
                        {
                            return((int)E戻り値.MAINTENANCE);
                        }

                    case (int)E戻り値.CONFIG - 1:
                        return((int)E戻り値.CONFIG);

                    case (int)E戻り値.EXIT - 1:
                        return((int)E戻り値.EXIT);
                        //return ( this.n現在のカーソル行 + 1 );
                    }
                    break;

                case CStage.Eフェーズ.タイトル_起動画面からのFadeIn:
                    if (this.actFI.On進行描画() != 0)
                    {
                        TJAPlayer3.Skin.soundタイトル音.t再生する();
                        base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
                    }
                    break;
                }
            }
            return(0);
        }
Example #2
0
        private static void Main()
        {
            mutex = new Mutex(false, "TJAPlayer3-f-Ver." + Assembly.GetExecutingAssembly().GetName().Version.ToString());

            if (mutex.WaitOne(0, false))
            {
                Trace.WriteLine("Current Directory: " + Environment.CurrentDirectory);
                Trace.WriteLine("EXEのあるフォルダ: " + Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));

                Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

                // BEGIN #23670 2010.11.13 from: キャッチされない例外は放出せずに、ログに詳細を出力する。
                // BEGIM #24606 2011.03.08 from: DEBUG 時は例外発生箇所を直接デバッグできるようにするため、例外をキャッチしないようにする。
                //2020.04.15 Mr-Ojii DEBUG 時も例外をキャッチするようにした。
                try
                {
                    using (var mania = new TJAPlayer3())
                        mania.Run();

                    Trace.WriteLine("");
                    Trace.WriteLine("Thank You For Playing!!!");
                }
                catch (Exception e)
                {
                    Trace.WriteLine("");
                    Trace.Write(e.ToString());
                    Trace.WriteLine("");
                    Trace.WriteLine("An error has occurred. Sorry.");
                    AssemblyName asmApp = Assembly.GetExecutingAssembly().GetName();

                    //エラーが発生したことをユーザーに知らせるため、HTMLを作成する。
                    using (StreamWriter writer = new StreamWriter(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "/Error.html", false, Encoding.UTF8))
                    {
                        writer.WriteLine("<html>");
                        writer.WriteLine("<head>");
                        writer.WriteLine("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\">");
                        writer.WriteLine("<style>");
                        writer.WriteLine("<!--");
                        writer.WriteLine("table{ border-collapse: collapse; } td,th { border: 2px solid; }");
                        writer.WriteLine("-->");
                        writer.WriteLine("</style>");
                        writer.WriteLine("</head>");
                        writer.WriteLine("<body>");
                        writer.WriteLine("<h1>An error has occurred.(エラーが発生しました。)</h1>");
#if DEBUG
                        writer.WriteLine("<p>It is a debug build, so it did not send any error information.(Debugビルドのため、エラー情報を送信しませんでした。)</p>");
#else
                        writer.WriteLine("<p>Error information has been sent.(エラー情報を送信しました。)</p>");
#endif
                        writer.WriteLine("<table>");
                        writer.WriteLine("<tbody>");
                        writer.WriteLine("<tr><th>Name</th><th>Version</th><th>Exception</th><th>DateTime</th><th>SkinName</th><th>SkinVersion</th><th>SkinCreator</th><th>OS</th><th>OSDescription</th><th>OSArchitecture</th><th>RuntimeIdentifier</th><th>FrameworkDescription</th><th>ProcessArchitecture</th></tr>");
                        writer.WriteLine($"<tr><td>{asmApp.Name}</td><td>{asmApp.Version.ToString()}</td><td>{e.ToString()}</td><td>{DateTime.UtcNow.ToString()}</td><td>{SkinName}</td><td>{SkinVersion}</td><td>{SkinCreator}</td><td>{Environment.OSVersion}</td><td>{RuntimeInformation.OSDescription}</td><td>{RuntimeInformation.OSArchitecture}</td><td>{RuntimeInformation.RuntimeIdentifier}</td><td>{RuntimeInformation.FrameworkDescription}</td><td>{RuntimeInformation.ProcessArchitecture}</td></tr>");
                        writer.WriteLine("</tbody>");
                        writer.WriteLine("</table>");
                        writer.WriteLine("</body>");
                        writer.WriteLine("</html>");
                    }
                    CWebOpen.Open(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "/Error.html");

#if !DEBUG
                    //エラーの送信
                    JObject errorjsonobject = new JObject(
                        new JProperty("name", asmApp.Name),
                        new JProperty("version", asmApp.Version.ToString()),
                        new JProperty("exception", e.ToString()),
                        new JProperty("datetime", DateTime.UtcNow.ToString()),
                        new JProperty("skinname", SkinName),
                        new JProperty("skinversion", SkinVersion),
                        new JProperty("skincreator", SkinCreator),
                        new JProperty("operatingsystem", Environment.OSVersion.ToString()),
                        new JProperty("osdescription", RuntimeInformation.OSDescription),
                        new JProperty("osarchitecture", RuntimeInformation.OSArchitecture.ToString()),
                        new JProperty("runtimeidentifier", RuntimeInformation.RuntimeIdentifier),
                        new JProperty("frameworkdescription", RuntimeInformation.FrameworkDescription),
                        new JProperty("processarchitecture", RuntimeInformation.ProcessArchitecture.ToString())
                        );

                    using (var client = new HttpClient())
                    {
                        var content = new StringContent(JsonConvert.SerializeObject(errorjsonobject, Formatting.None), Encoding.UTF8, "application/json");

                        var resString = client.PostAsync("https://script.google.com/macros/s/AKfycbzPWvX1cd5aDcDjs0ohgBveIxBh6wZPvGk0Xvg7xFsEsoXXUFCSUeziaVsn7uoMtm_3/exec", content).Result;
                    }
#endif
                }

                if (Trace.Listeners.Count > 1)
                {
                    Trace.Listeners.RemoveAt(1);
                }

                mutex.ReleaseMutex();
                mutex = null;
            }
            else
            {
                Console.WriteLine($"TJAPlayer3-f(Ver.{Assembly.GetExecutingAssembly().GetName().Version}) is already running.");
                Thread.Sleep(2000);
            }
        }
Example #3
0
        private static void Main()
        {
            mutex二重起動防止用 = new Mutex(false, "TJAPlayer3-f");
            bool mutexbool = mutex二重起動防止用.WaitOne(0, false);

kidou:
            if (mutexbool)
            {
                Trace.WriteLine("Current Directory: " + Environment.CurrentDirectory);
                Trace.WriteLine("EXEのあるフォルダ: " + Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));

                Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

                // BEGIN #23670 2010.11.13 from: キャッチされない例外は放出せずに、ログに詳細を出力する。
                // BEGIM #24606 2011.03.08 from: DEBUG 時は例外発生箇所を直接デバッグできるようにするため、例外をキャッチしないようにする。
                //2020.04.15 Mr-Ojii DEBUG 時も例外をキャッチするようにした。
                try
                {
                    using (var mania = new TJAPlayer3())
                        mania.Run();

                    Trace.WriteLine("");
                    Trace.WriteLine("遊んでくれてありがとう!");
                }
                catch (Exception e)
                {
                    Trace.WriteLine("");
                    Trace.Write(e.ToString());
                    Trace.WriteLine("");
                    Trace.WriteLine("エラーだゴメン!(涙");
                    AssemblyName asmApp = Assembly.GetExecutingAssembly().GetName();
                    MessageBox.Show("エラーが発生しました。\n" +
                                    "原因がわからない場合は、以下のエラー文を添えて、エラー送信フォームに送信してください。\n" +
                                    e.ToString(), asmApp.Name + " Ver." + asmApp.Version.ToString().Substring(0, asmApp.Version.ToString().Length - 2) + " Error", MessageBoxButtons.OK, MessageBoxIcon.Error);                // #23670 2011.2.28 yyagi to show error dialog
                    DialogResult result = MessageBox.Show("エラー送信フォームを開きますか?(ブラウザが起動します)\n",
                                                          asmApp.Name + " Ver." + asmApp.Version.ToString().Substring(0, asmApp.Version.ToString().Length - 2),
                                                          MessageBoxButtons.YesNo,
                                                          MessageBoxIcon.Asterisk);
                    if (result == DialogResult.Yes)
                    {
                        DialogResult result2 = MessageBox.Show("GitHubのエラー送信フォームを開きますか?※GitHubアカウントが必要です。\n\nGoogleのエラー送信フォームを開きますか?※アカウントの必要なし\n\nGitHubのからのエラー報告のほうが「Mr.おじい」が早くエラーの存在に気づけます。\n(Y:GitHub / N:Google)",
                                                               asmApp.Name + " Ver." + asmApp.Version.ToString().Substring(0, asmApp.Version.ToString().Length - 2),
                                                               MessageBoxButtons.YesNo,
                                                               MessageBoxIcon.Asterisk);

                        if (result2 == DialogResult.Yes)
                        {
                            CWebOpen.Open("https://github.com/Mr-Ojii/TJAPlayer3-f/issues/new?body=エラー文(TJAPlayer3-fから開いた場合は自動入力されます)%0D%0A" +
                                          System.Web.HttpUtility.UrlEncode(e.ToString()) +
                                          "%0D%0A" +
                                          "%0D%0A" +
                                          "使用しているスキン名・バージョン%0D%0A" +
                                          "%0D%0A" +
                                          "%0D%0A" +
                                          "バグを引き起こすまでの手順を書いてください%0D%0A" +
                                          "%0D%0A" +
                                          "%0D%0A" +
                                          "再生していた譜面(.tja)または画面%0D%0A" +
                                          "%0D%0A" +
                                          "%0D%0A" +
                                          "使用しているOS%0D%0A" +
                                          "%0D%0A" +
                                          "%0D%0A" +
                                          "不具合の内容%0D%0A" +
                                          "%0D%0A" +
                                          "%0D%0A" +
                                          "(追加情報を自由に書いてください(任意))%0D%0A");
                        }
                        else
                        {
                            CWebOpen.Open("https://docs.google.com/forms/d/e/1FAIpQLSffkhp-3kDJIZH23xMoweik5sAgy2UyaIkEQd1khn9DuR_RWg/viewform?entry.1025217940=" +
                                          System.Web.HttpUtility.UrlEncode(e.ToString()));
                        }
                    }
                }
                // END #24606 2011.03.08 from
                // END #23670 2010.11.13 from

                if (Trace.Listeners.Count > 1)
                {
                    Trace.Listeners.RemoveAt(1);
                }


                // BEGIN #24615 2011.03.09 from: Mutex.WaitOne() が true を返した場合は、Mutex のリリースが必要である。
                mutex二重起動防止用.ReleaseMutex();
                mutex二重起動防止用 = null;

                // END #24615 2011.03.09 from
            }
            else                        // DTXManiaが既に起動中
            {
                DialogResult dr = MessageBox.Show("すでにTJAPlayer3-fが起動していますが、起動しますか?", "注意", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
                if (dr == DialogResult.Yes)
                {
                    mutexbool = true;
                    goto kidou;
                }
                else
                {
                    Environment.Exit(0);
                }
            }
        }
Example #4
0
        private static void Main()
        {
            Trace.WriteLine("Current Directory: " + Environment.CurrentDirectory);
            Trace.WriteLine("EXEのあるフォルダ: " + Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));

            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

            // BEGIN #23670 2010.11.13 from: キャッチされない例外は放出せずに、ログに詳細を出力する。
            // BEGIM #24606 2011.03.08 from: DEBUG 時は例外発生箇所を直接デバッグできるようにするため、例外をキャッチしないようにする。
            //2020.04.15 Mr-Ojii DEBUG 時も例外をキャッチするようにした。
            try
            {
                using (var mania = new TJAPlayer3())
                    mania.Run();

                Trace.WriteLine("");
                Trace.WriteLine("Thank You For Playing!!!");
            }
            catch (Exception e)
            {
                Trace.WriteLine("");
                Trace.Write(e.ToString());
                Trace.WriteLine("");
                Trace.WriteLine("An error has occurred. Sorry.");
                AssemblyName asmApp = Assembly.GetExecutingAssembly().GetName();

                //エラーが発生したことをユーザーに知らせるため、HTMLを作成する。
                using (StreamWriter writer = new StreamWriter(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "/Error.html", false, Encoding.UTF8))
                {
                    writer.WriteLine("<html>");
                    writer.WriteLine("<head>");
                    writer.WriteLine("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\">");
                    writer.WriteLine("<style>");
                    writer.WriteLine("<!--");
                    writer.WriteLine("table{ border-collapse: collapse; } td,th { border: 2px solid; }");
                    writer.WriteLine("-->");
                    writer.WriteLine("</style>");
                    writer.WriteLine("</head>");
                    writer.WriteLine("<body>");
                    writer.WriteLine("<h1>An error has occurred.(エラーが発生しました。)</h1>");
#if DEBUG
                    writer.WriteLine("<p>It is a debug build, so it did not send any error information.(Debugビルドのため、エラー情報を送信しませんでした。)</p>");
#else
                    writer.WriteLine("<p>Error information has been sent.(エラー情報を送信しました。)</p>");
#endif
                    writer.WriteLine("<table>");
                    writer.WriteLine("<tbody>");
                    writer.WriteLine("<tr><th>Name</th><th>Version</th><th>Exception</th><th>DateTime</th><th>SkinName</th><th>SkinVersion</th><th>SkinCreator</th><th>OS</th></tr>");
                    writer.WriteLine($"<tr><td>{asmApp.Name}</td><td>{asmApp.Version.ToString()}</td><td>{e.ToString()}</td><td>{DateTime.UtcNow.ToString()}</td><td>{SkinName}</td><td>{SkinVersion}</td><td>{SkinCreator}</td><td>{Environment.OSVersion.ToString()}</td></tr>");
                    writer.WriteLine("</tbody>");
                    writer.WriteLine("</table>");
                    writer.WriteLine("</body>");
                    writer.WriteLine("</html>");
                }
                CWebOpen.Open(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "/Error.html");

#if !DEBUG
                //エラーの送信
                JObject errorjsonobject = new JObject(
                    new JProperty("name", asmApp.Name),
                    new JProperty("version", asmApp.Version.ToString()),
                    new JProperty("exception", e.ToString()),
                    new JProperty("datetime", DateTime.UtcNow.ToString()),
                    new JProperty("skinname", SkinName),
                    new JProperty("skinversion", SkinVersion),
                    new JProperty("skincreator", SkinCreator),
                    new JProperty("operatingsystem", Environment.OSVersion.ToString())
                    );

                using (var client = new HttpClient())
                {
                    var content = new StringContent(JsonConvert.SerializeObject(errorjsonobject, Formatting.None), Encoding.UTF8, "application/json");

                    var resString = client.PostAsync("https://script.google.com/macros/s/AKfycbw6QWCXEEbciDV7tA5zV72EyLkynlJUCiM0cRz5TR4nDQeRUiA/exec", content).Result;
                }
#endif
            }

            // END #24606 2011.03.08 from
            // END #23670 2010.11.13 from

            if (Trace.Listeners.Count > 1)
            {
                Trace.Listeners.RemoveAt(1);
            }

            // END #24615 2011.03.09 from
        }
        public override int On進行描画()
        {
            if (!base.b活性化してない)
            {
                #region [ 初めての進行描画 ]
                //---------------------
                if (base.b初めての進行描画)
                {
                    if (TJAPlayer3.r直前のステージ == TJAPlayer3.stage起動)
                    {
                        this.actFIfromSetup.tフェードイン開始();
                        base.eフェーズID = CStage.Eフェーズ.タイトル_起動画面からのフェードイン;
                    }
                    else
                    {
                        this.actFI.tフェードイン開始();
                        base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;
                    }
                    base.b初めての進行描画 = false;
                }
                //---------------------
                #endregion

                // 進行

                #region [ カーソル上移動 ]
                //---------------------
                if (this.ct上移動用.b進行中)
                {
                    this.ct上移動用.t進行();
                    if (this.ct上移動用.b終了値に達した)
                    {
                        this.ct上移動用.t停止();
                    }
                }
                //---------------------
                #endregion
                #region [ カーソル下移動 ]
                //---------------------
                if (this.ct下移動用.b進行中)
                {
                    this.ct下移動用.t進行();
                    if (this.ct下移動用.b終了値に達した)
                    {
                        this.ct下移動用.t停止();
                    }
                }
                //---------------------
                #endregion

                // キー入力

                if (base.eフェーズID == CStage.Eフェーズ.共通_通常状態)                        // 通常状態
                {
                    if (TJAPlayer3.Input管理.Keyboard.bキーが押された((int)SlimDXKeys.Key.Escape))
                    {
                        return((int)E戻り値.EXIT);
                    }

                    this.ctキー反復用.Up.tキー反復(TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.UpArrow) || TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.LeftArrow) || TJAPlayer3.Pad.b押されている(Eパッド.LBlue) || TJAPlayer3.Pad.b押されている(Eパッド.LBlue2P) && TJAPlayer3.ConfigIni.nPlayerCount >= 2, new CCounter.DGキー処理(this.tカーソルを上へ移動する));

                    this.ctキー反復用.Down.tキー反復(TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.DownArrow) || TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.RightArrow) || TJAPlayer3.Pad.b押されている(Eパッド.RBlue) || TJAPlayer3.Pad.b押されている(Eパッド.RBlue2P) && TJAPlayer3.ConfigIni.nPlayerCount >= 2, new CCounter.DGキー処理(this.tカーソルを下へ移動する));


                    if (((TJAPlayer3.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && TJAPlayer3.Input管理.Keyboard.bキーが押された((int)SlimDXKeys.Key.Return)) || TJAPlayer3.Pad.b押された(Eパッド.LRed) || TJAPlayer3.Pad.b押された(Eパッド.RRed) || (TJAPlayer3.Pad.b押された(Eパッド.LRed2P) || TJAPlayer3.Pad.b押された(Eパッド.RRed2P)) && TJAPlayer3.ConfigIni.nPlayerCount >= 2))
                    {
                        if ((this.n現在のカーソル行 == (int)E戻り値.GAMESTART - 1) && TJAPlayer3.Skin.soundゲーム開始音.b読み込み成功)
                        {
                            if (!((TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.LeftControl) || TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.RightControl)) && TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.A)))
                            {
                                TJAPlayer3.Skin.soundゲーム開始音.t再生する();
                            }
                        }
                        else
                        {
                            TJAPlayer3.Skin.sound決定音.t再生する();
                        }
                        if (this.n現在のカーソル行 == (int)E戻り値.EXIT - 1)
                        {
                            return((int)E戻り値.EXIT);
                        }
                        this.actFO.tフェードアウト開始();
                        base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;
                    }
                    //					if ( CDTXMania.Input管理.Keyboard.bキーが押された( (int) Key.Space ) )
                    //						Trace.TraceInformation( "DTXMania Title: SPACE key registered. " + CDTXMania.ct.nシステム時刻 );
                }

                // 描画

                if (TJAPlayer3.Tx.Title_Background != null)
                {
                    TJAPlayer3.Tx.Title_Background.t2D描画(TJAPlayer3.app.Device, 0, 0);
                }

                #region [ バージョン表示 ]
                //string strVersion = "KTT:J:A:I:2017072200";
                string       strCreator = "https://github.com/Mr-Ojii/TJAPlayer3";
                AssemblyName asmApp     = Assembly.GetExecutingAssembly().GetName();
#if DEBUG
                TJAPlayer3.act文字コンソール.tPrint(4, 44, C文字コンソール.Eフォント種別.白, "DEBUG BUILD");
#endif
                TJAPlayer3.act文字コンソール.tPrint(4, 4, C文字コンソール.Eフォント種別.白, asmApp.Name + " Ver." + TJAPlayer3.VERSION + " (" + strCreator + ")");
                TJAPlayer3.act文字コンソール.tPrint(4, 24, C文字コンソール.Eフォント種別.白, "Skin:" + TJAPlayer3.Skin.Skin_Name + " Ver." + TJAPlayer3.Skin.Skin_Version + " (" + TJAPlayer3.Skin.Skin_Creator + ")");
                //CDTXMania.act文字コンソール.tPrint(4, 24, C文字コンソール.Eフォント種別.白, strSubTitle);
                TJAPlayer3.act文字コンソール.tPrint(4, (720 - 24), C文字コンソール.Eフォント種別.白, "TJAPlayer3-f forked TJAPlayer3(AioiLight) forked TJAPlayer2 forPC(kairera0467)");
                #endregion


                if (TJAPlayer3.Tx.Title_InBar != null && TJAPlayer3.Tx.Title_AcBar != null)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        TJAPlayer3.Tx.Title_InBar.t2D描画(TJAPlayer3.app.Device, MENU_XT[i] - TJAPlayer3.Tx.Title_InBar.szテクスチャサイズ.Width / 2, MENU_YT);
                    }


                    if (this.ct下移動用.b進行中)
                    {
                        TJAPlayer3.Tx.Title_AcBar.vc拡大縮小倍率.X = this.ct下移動用.n現在の値 * 0.01f;
                        TJAPlayer3.Tx.Title_AcBar.t2D描画(TJAPlayer3.app.Device, MENU_XT[this.n現在のカーソル行] - TJAPlayer3.Tx.Title_AcBar.sz画像サイズ.Width / 2 * this.ct下移動用.n現在の値 * 0.01f, MENU_YT);
                    }
                    else if (this.ct上移動用.b進行中)
                    {
                        TJAPlayer3.Tx.Title_AcBar.vc拡大縮小倍率.X = this.ct上移動用.n現在の値 * 0.01f;
                        TJAPlayer3.Tx.Title_AcBar.t2D描画(TJAPlayer3.app.Device, MENU_XT[this.n現在のカーソル行] - TJAPlayer3.Tx.Title_AcBar.sz画像サイズ.Width / 2 * this.ct上移動用.n現在の値 * 0.01f, MENU_YT);
                    }
                    else
                    {
                        TJAPlayer3.Tx.Title_AcBar.vc拡大縮小倍率.X = 1.0f;
                        TJAPlayer3.Tx.Title_AcBar.t2D描画(TJAPlayer3.app.Device, MENU_XT[this.n現在のカーソル行] - TJAPlayer3.Tx.Title_AcBar.sz画像サイズ.Width / 2, MENU_YT);
                    }

                    for (int i = 0; i < 3; i++)
                    {
                        if (i != this.n現在のカーソル行)
                        {
                            texttexture[i].t2D描画(TJAPlayer3.app.Device, MENU_XT[i] - texttexture[i].szテクスチャサイズ.Width / 2, MENU_YT + 30);
                        }
                        else
                        {
                            texttexture[i + 3].t2D描画(TJAPlayer3.app.Device, MENU_XT[i] - texttexture[i + 3].szテクスチャサイズ.Width / 2, MENU_YT + 30);
                        }
                    }
                }
                else
                {
                    if (TJAPlayer3.Tx.Title_Menu != null)
                    {
                        int x = MENU_X;
                        int y = MENU_Y + (this.n現在のカーソル行 * MENU_H);
                        if (this.ct上移動用.b進行中)
                        {
                            y += (int)((double)MENU_H / 2 * (Math.Cos(Math.PI * (((double)this.ct上移動用.n現在の値) / 100.0)) + 1.0));
                        }
                        else if (this.ct下移動用.b進行中)
                        {
                            y -= (int)((double)MENU_H / 2 * (Math.Cos(Math.PI * (((double)this.ct下移動用.n現在の値) / 100.0)) + 1.0));
                        }
                        TJAPlayer3.Tx.Title_Menu.vc拡大縮小倍率.X = 1f;
                        TJAPlayer3.Tx.Title_Menu.vc拡大縮小倍率.Y = 1f;
                        TJAPlayer3.Tx.Title_Menu.Opacity    = 0xff;
                        TJAPlayer3.Tx.Title_Menu.t2D描画(TJAPlayer3.app.Device, x, y, new Rectangle(0, MENU_H * 4, MENU_W, MENU_H));
                    }
                    if (TJAPlayer3.Tx.Title_Menu != null)
                    {
                        //this.txメニュー.t2D描画( CDTXMania.app.Device, 0xce, 0xcb, new Rectangle( 0, 0, MENU_W, MWNU_H ) );
                        // #24525 2011.3.16 yyagi: "OPTION"を省いて描画。従来スキンとの互換性確保のため。
                        TJAPlayer3.Tx.Title_Menu.t2D描画(TJAPlayer3.app.Device, MENU_X, MENU_Y, new Rectangle(0, 0, MENU_W, MENU_H));
                        TJAPlayer3.Tx.Title_Menu.t2D描画(TJAPlayer3.app.Device, MENU_X, MENU_Y + MENU_H, new Rectangle(0, MENU_H * 2, MENU_W, MENU_H * 2));
                    }
                }

                // URLの座標が押されたらブラウザで開いてやる 兼 マウスクリックのテスト
                // クライアント領域内のカーソル座標を取得する。
                // point.X、point.Yは負の値になることもある。
                var point = TJAPlayer3.app.Window.PointToClient(System.Windows.Forms.Cursor.Position);
                // クライアント領域の横幅を取得して、1280で割る。もちろんdouble型。
                var scaling = 1.000 * TJAPlayer3.app.Window.ClientSize.Width / 1280;
                if (TJAPlayer3.Input管理.Mouse.bキーが押された((int)SlimDXKeys.Mouse.Left))
                {
                    if (point.X >= 180 * scaling && point.X <= 490 * scaling && point.Y >= 0 && point.Y <= 20 * scaling)
                    {
                        CWebOpen.Open(strCreator);
                    }
                }

                //CDTXMania.act文字コンソール.tPrint(0, 80, C文字コンソール.Eフォント種別.白, point.X.ToString());
                //CDTXMania.act文字コンソール.tPrint(0, 100, C文字コンソール.Eフォント種別.白, point.Y.ToString());
                //CDTXMania.act文字コンソール.tPrint(0, 120, C文字コンソール.Eフォント種別.白, scaling.ToString());


                CStage.Eフェーズ eフェーズid = base.eフェーズID;
                switch (eフェーズid)
                {
                case CStage.Eフェーズ.共通_フェードイン:
                    if (this.actFI.On進行描画() != 0)
                    {
                        TJAPlayer3.Skin.soundタイトル音.t再生する();
                        base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
                    }
                    break;

                case CStage.Eフェーズ.共通_フェードアウト:
                    if (this.actFO.On進行描画() == 0)
                    {
                        break;
                    }
                    base.eフェーズID = CStage.Eフェーズ.共通_終了状態;
                    switch (this.n現在のカーソル行)
                    {
                    case (int)E戻り値.GAMESTART - 1:
                        if (!((TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.LeftControl) || TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.RightControl)) && TJAPlayer3.Input管理.Keyboard.bキーが押されている((int)SlimDXKeys.Key.A)))
                        {
                            return((int)E戻り値.GAMESTART);
                        }
                        else
                        {
                            return((int)E戻り値.MAINTENANCE);
                        }

                    case (int)E戻り値.CONFIG - 1:
                        return((int)E戻り値.CONFIG);

                    case (int)E戻り値.EXIT - 1:
                        return((int)E戻り値.EXIT);
                        //return ( this.n現在のカーソル行 + 1 );
                    }
                    break;

                case CStage.Eフェーズ.タイトル_起動画面からのフェードイン:
                    if (this.actFIfromSetup.On進行描画() != 0)
                    {
                        TJAPlayer3.Skin.soundタイトル音.t再生する();
                        base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
                    }
                    break;
                }
            }
            return(0);
        }