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\")); }
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.ステージ管理.最初のステージ名); }
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("遊んでくれてありがとう!"); }