コード例 #1
0
        public void TestInitialize()
        {
            var exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

            VariablePath.フォルダ変数を追加または更新する("Exe", $@"{exePath}\");
            VariablePath.フォルダ変数を追加または更新する("System", Path.Combine(exePath, @"System\"));
            VariablePath.フォルダ変数を追加または更新する("AppData", Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.Create), @"DTXMania2\"));
        }
コード例 #2
0
        public App()
            : base(設計画面サイズ: new SizeF(1920f, 1080f), 物理画面サイズ: new SizeF(1280f, 720f), 深度ステンシルを使う: false)
        {
            #region " プロダクトバージョンのメジャー番号をリリース番号として取得する。"
            //----------------
            if (int.TryParse(Application.ProductVersion.Split('.').ElementAt(0), out int release))
            {
                App.リリース番号 = release;
            }
            else
            {
                throw new Exception("アセンブリのプロダクトバージョンに記載ミスがあります。");
            }
            //----------------
            #endregion

            this.Text = Application.ProductName + " rel." + App.リリース番号.ToString("000");

            var exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            VariablePath.フォルダ変数を追加または更新する("Exe", $@"{exePath}\");
            VariablePath.フォルダ変数を追加または更新する("System", Path.Combine(exePath, @"System\"));
            VariablePath.フォルダ変数を追加または更新する("AppData", Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.Create), @"DTXMatixx\"));

            if (!(Directory.Exists(VariablePath.フォルダ変数の内容を返す("AppData"))))
            {
                Directory.CreateDirectory(VariablePath.フォルダ変数の内容を返す("AppData"));                      // なければ作成。
            }
            App.乱数 = new Random(DateTime.Now.Millisecond);

            App.システム設定 = システム設定.復元する();

            App.入力管理 = new 入力管理(this.Handle)
            {
                キーバインディングを取得する = () => App.システム設定.キーバインディング,
                キーバインディングを保存する = () => App.システム設定.保存する(),
            };
            App.入力管理.Initialize();

            App.ステージ管理 = new ステージ管理();

            App.曲ツリー = new 曲ツリー();

            App.演奏スコア = null;

            App.WAV管理 = null;

            App.サウンドデバイス = new SoundDevice(CSCore.CoreAudioAPI.AudioClientShareMode.Shared);
            App.サウンドタイマ  = new SoundTimer(App.サウンドデバイス);
            App.ドラムサウンド  = new ドラムサウンド();

            App.ユーザ管理 = new ユーザ管理();
#if DEBUG_
            App.ユーザ管理.ユーザリスト.SelectItem((user) => (user.ユーザID == "Guest"));
            App.ユーザ管理.ログオン中のユーザ.AutoPlay[AutoPlay種別.LeftCrash]  = true;
            App.ユーザ管理.ログオン中のユーザ.AutoPlay[AutoPlay種別.HiHat]      = true;
            App.ユーザ管理.ログオン中のユーザ.AutoPlay[AutoPlay種別.Foot]       = true;
            App.ユーザ管理.ログオン中のユーザ.AutoPlay[AutoPlay種別.Snare]      = false;                // スネアと
            App.ユーザ管理.ログオン中のユーザ.AutoPlay[AutoPlay種別.Bass]       = false;                // バスだけ手動
            App.ユーザ管理.ログオン中のユーザ.AutoPlay[AutoPlay種別.Tom1]       = true;
            App.ユーザ管理.ログオン中のユーザ.AutoPlay[AutoPlay種別.Tom2]       = true;
            App.ユーザ管理.ログオン中のユーザ.AutoPlay[AutoPlay種別.Tom3]       = true;
            App.ユーザ管理.ログオン中のユーザ.AutoPlay[AutoPlay種別.RightCrash] = true;
#else
            App.ユーザ管理.ユーザリスト.SelectItem((user) => (user.ユーザID == "AutoPlayer"));                    // ひとまずAutoPlayerを選択。
#endif
            this._活性化する();

            base.全画面モード = App.ユーザ管理.ログオン中のユーザ.全画面モードである;

            // 最初のステージへ遷移する。
            App.ステージ管理.ステージを遷移する(App.グラフィックデバイス, App.ステージ管理.最初のステージ名);
        }
コード例 #3
0
        static void Main(string[] args)
        {
            try
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                #region " SharpDX のデバッグパラメータを設定する。"
                //----------------
#if DEBUG
                SharpDX.Configuration.EnableReleaseOnFinalizer         = true;  // ファイナライザの実行中、未解放のCOMを見つけたら解放を試みる。
                SharpDX.Configuration.EnableTrackingReleaseOnFinalizer = true;  // その際には Trace にメッセージを出力する。
#endif
                //----------------
                #endregion

                #region " フォルダ変数を設定する。"
                //----------------
                var exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                VariablePath.フォルダ変数を追加または更新する("Exe", $@"{exePath}\");
                VariablePath.フォルダ変数を追加または更新する("System", Path.Combine(exePath, @"System\"));
                VariablePath.フォルダ変数を追加または更新する("AppData", Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.Create), @"DTXMania2\"));
                VariablePath.フォルダ変数を追加または更新する("UserProfile", Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + @"\");
                //----------------
                #endregion

                #region " %USERPROFILE%/AppData/DTXMania2 フォルダがなければ作成する。"
                //----------------
                var AppDataフォルダ名 = new VariablePath("$(AppData)");

                if (!(Directory.Exists(AppDataフォルダ名.数なしパス)))
                {
                    Directory.CreateDirectory(AppDataフォルダ名.数なしパス);
                }
                //----------------
                #endregion

                #region " ログファイルへのログの複製出力開始。"
                //----------------
                Trace.AutoFlush = true;

                ログファイル名 = Log.ログファイル名を生成する(Path.Combine(AppDataフォルダ名.数なしパス, "Logs"), "Log.", TimeSpan.FromDays(ログファイルの最大保存日数));

                // ログファイルをTraceリスナとして追加。
                // 以降、Trace(ならびにFDK.Logクラス)による出力は、このリスナ(=ログファイル)にも出力される。
                Trace.Listeners.Add(new TraceLogListener(new StreamWriter(ログファイル名, false, Encoding.GetEncoding("utf-8"))));

                // 最初の出力。
                Log.現在のスレッドに名前をつける("UI");
                Log.WriteLine(Application.ProductName + " " + AppForm.リリース番号.ToString("000"));      // アプリ名とバージョン
                Log.システム情報をログ出力する();
                Log.WriteLine("");
                //----------------
                #endregion

                #region " コマンドライン引数を解析する。"
                //----------------
                var options = new CommandLineOptions();

                if (!options.解析する(args))    // 解析に失敗すればfalse
                {
                    // 利用法を表示して終了。

                    Log.WriteLine(options.Usage);                 // ログと

                    using (var console = new FDK.Console())
                        console.Out?.WriteLine(options.Usage);    // 標準出力の両方へ
                    return;
                }
                //----------------
                #endregion

                #region " アプリ起動。"
                //----------------
                // Appインスタンスを生成、初期化。
                using (var app = new AppForm(options))
                {
                    if (app.WCFサービスをチェックする(options))
                    {
                        // アプリを起動。
                        // アプリが終了するまで、このメソッドからは戻ってこない。

                        Application.Run(app);

                        // 戻ってきた際、再起動フラグが立っていたらここでアプリを再起動する。

                        if (app.再起動が必要)
                        {
                            Application.Restart();
                        }
                    }
                    else
                    {
                        // false ならアプリを起動しない。
                    }
                }
                //----------------
                #endregion
            }



            // Release 時には、未処理の例外をキャッチしたらダイアログを表示する。
#if !DEBUG
            catch (Exception e)
            {
                using (var dlg = new 未処理例外検出ダイアログ())
                {
                    Trace.WriteLine("");
                    Trace.WriteLine("====> 未処理の例外が検出されました。");
                    Trace.WriteLine("");
                    Trace.WriteLine(e.ToString());

                    dlg.ShowDialog();
                }
            }
#else
            // DEBUG 時には、未処理の例外が発出されても無視。(デバッガでキャッチすることを想定。)
            finally
            {
            }
#endif

            System.Threading.Tasks.Task.Delay(1000).Wait();
            Log.WriteLine("");
            Log.WriteLine("遊んでくれてありがとう!");
        }