+ #region " コマンドライン引数を解析する。"
+ //----------------
+ // 最初の要素は exe ファイル名なのでスキップする。
+ this.コマンドライン引数を解析する( Environment.GetCommandLineArgs().Skip( 1 ) );
+ //----------------
+ #endregion
+
+ #region " 高解像度タイマを使えないならエラー。"
+ //-----------------
+ if( false == System.Diagnostics.Stopwatch.IsHighResolution )
+ throw new SSTException( "このシステムは、高解像度タイマをサポートしていません。" );
+ //-----------------
+ #endregion
+ #region " MediaFoundation を起動する。"
+ //-----------------
+ SharpDX.MediaFoundation.MediaManager.Startup();
+ //-----------------
+ #endregion
+ #region " Sleep 精度を上げる。"
+ //-----------------
+ Win32.timeBeginPeriod( 1 );
+ //-----------------
+ #endregion
+
+ #region " コンフィグ を初期化する。"
+ //----------------
+ FDK.Log.Info( "コンフィグを初期化します。" );
+ StrokeStyleT.bs_Config = new 設定.Config();
+ StrokeStyleT.bs_Config.ConfigXmlを読み込む();
+ //----------------
+ #endregion
+
+ #region " コンフィグで指定されたウィンドウサイズに変更する。"
+ //----------------
+ this.MainForm.ClientSize = new System.Drawing.Size( StrokeStyleT.Config.物理画面サイズpx.Width, StrokeStyleT.Config.物理画面サイズpx.Height );
+ //----------------
+ #endregion
+ #region " フォームタイトルと設計画面サイズを設定する。"
+ //----------------
+ this.MainForm.Text = $"StrokeStyle<T> {System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()}";
+ if( StrokeStyleT.ビュアーモードである )
+ this.MainForm.Text += " (Viewer)";
+
+ this.設計画面サイズdpx = new SharpDX.Size2F( 1920f, 1080f );
+ //----------------
+ #endregion
+
+ #region " デバイスリソースを作成する。"
+ //----------------
+ FDK.Log.BeginInfo( "デバイスリソースを作成します。" );
+ FDK.Log.Info( $"設計画面サイズ: {this.設計画面サイズdpx}" );
+ FDK.Log.Info( $"物理画面サイズ: {this.MainForm.ClientSize}" );
+ this.デバイスリソース = new FDK.メディア.デバイスリソース( this.設計画面サイズdpx );
+ this.デバイスリソース.すべてのリソースを作成する( this.MainForm.ClientSize, this.MainForm.Handle );
+ //----------------
+ #endregion
+
+ #region " ステージを生成する。"
+ //----------------
+ this.最初のダミーステージ = new ステージ.ステージ();
+ this.起動ステージ = new ステージ.起動.起動ステージ();
+ this.タイトルステージ = new ステージ.タイトル.タイトルステージ();
+ this.ログインステージ = new ステージ.ログイン.ログインステージ();
+ this.選曲ステージ = new ステージ.選曲.選曲ステージ();
+ this.曲読込ステージ = new ステージ.曲読込.曲読込ステージ();
+ this.演奏ステージ = new ステージ.演奏.演奏ステージ();
+ this.結果ステージ = new ステージ.結果.結果ステージ();
+
+ // 外部依存アクションを接続する。
+ this.曲読込ステージ.読込曲のファイルパスを取得する = () => ( ( StrokeStyleT.曲ツリー管理.現在選択されているノード as SST.曲.MusicNode )?.sstfファイルパス );
+ this.結果ステージ.演奏ステージインスタンスを取得する = () => ( this.演奏ステージ );
+ this.結果ステージ.BGMを終了する = () => { this.演奏ステージ.BGMを解放する(); };
+ //----------------
+ #endregion
+ #region " ユーザを初期化する。"
+ //-----------------
+ FDK.Log.Info( "ユーザ情報を初期化します。" );
+ StrokeStyleT.ユーザ管理.UsersXmlを読み込む();
+
+ // ユーザ別の初期化。
+ foreach( var ユーザ in StrokeStyleT.ユーザ管理.ユーザリスト )
+ ユーザ.SourcesXmlを読み込む();
+ //-----------------
+ #endregion
+ #region " WASAPI デバイスを初期化する。"
+ //----------------
+ StrokeStyleT.bs_Wasapiデバイス = new FDK.メディア.サウンド.WASAPI排他.ExclusiveDevice();
+ StrokeStyleT.bs_Wasapiデバイス.初期化する( 15.0f );
+ //----------------
+ #endregion
+ #region " キーボード入力 を初期化する。"
+ //-----------------
+ FDK.Log.Info( "キーボード入力デバイスを初期化します。" );
+ StrokeStyleT.bs_キーボード入力 = new FDK.入力.Keyboard( this.MainForm.Handle );
+ //-----------------
+ #endregion
+ #region " MIDI入力 を初期化する。"
+ //-----------------
+ FDK.Log.Info( "MIDI入力デバイスを初期化します。" );
+ StrokeStyleT.bs_MIDI入力 = new FDK.入力.MidiIn();
+ //-----------------
+ #endregion
+
+ FDK.Log.Info( "最初のダミーステージを開始します。" );
+ this.現在のステージ = this.最初のダミーステージ;
+
+ //#warning 全画面モード切替えを KeyDown で仮実装。
+ this.MainForm.KeyDown += ( target, arg ) => {
+
+ // F11 → 画面モードの切り替え
+ if( arg.KeyCode == System.Windows.Forms.Keys.F11 )
+ {
+ this.全画面モードとウィンドウモードを切り替える();
+ arg.Handled = true;
+ }
+ };
+
+ Debug.Assert( SharpDX.Size2F.Empty != this.設計画面サイズdpx, "初期化メソッド内で設計画面サイズを設定してあること。" );