OSDN Git Service

進行と描画を分離していた箇所のうち、高速進行が不要なものは進行描画メソッドに移行。
authorくまかみ工房 <kumakamikoubou@gmail.com>
Tue, 6 Jun 2017 12:14:56 +0000 (21:14 +0900)
committerくまかみ工房 <kumakamikoubou@gmail.com>
Tue, 6 Jun 2017 12:14:56 +0000 (21:14 +0900)
20 files changed:
StrokeStyleT/App.cs
StrokeStyleT/ステージ/クリア/クリアステージ.cs
StrokeStyleT/ステージ/コンソールフォント.cs
StrokeStyleT/ステージ/ステージ.cs
StrokeStyleT/ステージ/タイトル/タイトルステージ.cs
StrokeStyleT/ステージ/ドラムセット.cs
StrokeStyleT/ステージ/フェードアウト.cs
StrokeStyleT/ステージ/フェードイン.cs
StrokeStyleT/ステージ/ユーザ/ユーザ選択ステージ.cs
StrokeStyleT/ステージ/曲読込/曲読込ステージ.cs
StrokeStyleT/ステージ/演奏/コンボ.cs
StrokeStyleT/ステージ/演奏/ヒットランク.cs
StrokeStyleT/ステージ/演奏/レーンフレーム.cs
StrokeStyleT/ステージ/演奏/回転羽.cs
StrokeStyleT/ステージ/演奏/演奏ステージ.cs
StrokeStyleT/ステージ/結果/結果ステージ.cs
StrokeStyleT/ステージ/起動/起動ステージ.cs
StrokeStyleT/ステージ/選曲/曲パネルビュー.cs
StrokeStyleT/ステージ/選曲/曲決定アニメ.cs
StrokeStyleT/ステージ/選曲/選曲ステージ.cs

index b049df9..1be968a 100644 (file)
@@ -277,7 +277,7 @@ namespace SST
                                                break;
 
                                        case AppStatus.実行中:
-                                               this._描画処理を行う();
+                                               this._進行と描画を行う();
                                                break;
 
                                        case AppStatus.終了:
@@ -443,9 +443,9 @@ namespace SST
                }
 
                /// <summary>
-               ///             描画ループの処理内容。
+               ///             進行描画ループの処理内容。
                /// </summary>
-               private void _描画処理を行う()
+               private void _進行と描画を行う()
                {
                        var gd = App.グラフィックデバイス;
                        bool vsync = false;
@@ -471,9 +471,9 @@ namespace SST
                                        //----------------
                                        #endregion
 
-                                       #region " (2) 現在のステージの描画を行う。"
+                                       #region " (2) 現在のステージの進行描画を行う。"
                                        //----------------
-                                       App.ステージ管理.現在のステージ.描画する( gd );
+                                       App.ステージ管理.現在のステージ.進行描画する( gd );
                                        //----------------
                                        #endregion
 
index b5d63d5..bf8fcb9 100644 (file)
@@ -45,28 +45,7 @@ namespace SST.ステージ.クリア
                        }
                }
 
-               public override void 高速進行する()
-               {
-                       App.入力管理.すべての入力デバイスをポーリングする();
-
-                       switch( this.現在のフェーズ )
-                       {
-                               case フェーズ.開始:
-                                       //this._背景動画.再生を開始する();   --> フレームを開けないよう、描画側で処理する。
-                                       //this.現在のフェーズ = フェーズ.表示中;
-                                       break;
-
-                               case フェーズ.表示中:
-                                       if( this._背景動画.動画がエラーまたは再生を終了した )
-                                               this.現在のフェーズ = フェーズ.完了;
-                                       break;
-
-                               case フェーズ.完了:
-                                       break;
-                       }
-               }
-
-               public override void 描画する( グラフィックデバイス gd )
+               public override void 進行描画する( グラフィックデバイス gd )
                {
                        retry:
 
@@ -80,13 +59,15 @@ namespace SST.ステージ.クリア
 
                                case フェーズ.表示中:
                                        this._背景動画.描画する( gd, new SharpDX.RectangleF( 0f, 0f, gd.設計画面サイズ.Width, gd.設計画面サイズ.Height ) );
+                                       if( this._背景動画.動画がエラーまたは再生を終了した )
+                                               this.現在のフェーズ = フェーズ.完了;
                                        break;
 
                                case フェーズ.完了:
                                        break;
                        }
 
-                       this._フェードイン.描画する( gd, this._白パネル );
+                       this._フェードイン.進行描画する( gd, this._白パネル );
                }
 
 
index 3a0ce74..b86d18e 100644 (file)
@@ -32,7 +32,7 @@ namespace SST.ステージ
                        }
                }
 
-               public void 描画する( グラフィックデバイス gd, float X, float Y, string 描画する文字列, float 不透明度0to1 = 1f )
+               public void 進行描画する( グラフィックデバイス gd, float X, float Y, string 描画する文字列, float 不透明度0to1 = 1f )
                {
                        if( null == this._フォント白32x16 )
                                return;
index 060dfe0..aa113ea 100644 (file)
@@ -13,17 +13,20 @@ namespace SST.ステージ
        class ステージ : FDK.Activity
        {
                /// <summary>
-               ///             高速に行うべき進行処理を行う。
+               ///             ステージの進行処理のうち、高速に行うべき処理を行う。
                /// </summary>
+               /// <remarks>
+               ///             高速処理が不要な進行(描画用のアニメなど)は、進行描画メソッド側で行うこと。
+               /// </remarks>
                public virtual void 高速進行する()
                {
                        Debug.Assert( this.活性化している );
                }
 
                /// <summary>
-               ///             ステージの描画と、通常速度での進行を行う。
+               ///             ステージの通常速度での進行と描画を行う。
                /// </summary>
-               public virtual void 描画する( グラフィックデバイス gd )
+               public virtual void 進行描画する( グラフィックデバイス gd )
                {
                        Debug.Assert( this.活性化している );
                }
index 47fc8a2..a049f30 100644 (file)
@@ -47,55 +47,45 @@ namespace SST.ステージ.タイトル
                        }
                }
 
-               public override void 高速進行する()
-               {
-                       this._FPS.FPSをカウントしプロパティを更新する();
-
-                       App.入力管理.すべての入力デバイスをポーリングする();
-
-                       switch( this.現在のフェーズ )
-                       {
-                               case フェーズ.表示:
-                                       if( App.入力管理.キーボードデバイス.キーが押された( 0, Key.Escape ) )
-                                       {
-                                               #region " ESC → キャンセル "
-                                               //----------------
-                                               Log.Info( $"{FDKUtilities.現在のメソッド名}: キャンセルされました。" );
-                                               this.現在のフェーズ = フェーズ.キャンセル;
-                                               //----------------
-                                               #endregion
-                                       }
-                                       if( App.入力管理.シンバルが入力された() )
-                                       {
-                                               #region " シンバル → 確定 "
-                                               //----------------
-                                               Log.Info( $"{FDKUtilities.現在のメソッド名}: 確定されました。" );
-                                               this.現在のフェーズ = フェーズ.確定;
-                                               //----------------
-                                               #endregion
-                                       }
-                                       break;
-
-                               case フェーズ.確定:
-                               case フェーズ.キャンセル:
-                                       break;
-                       }
-               }
-
-               public override void 描画する( グラフィックデバイス gd )
+               public override void 進行描画する( グラフィックデバイス gd )
                {
                        Debug.Assert( this.活性化している );
                        Debug.Assert( null != gd );
 
                        this._FPS.VPSをカウントする();
+                       this._FPS.FPSをカウントしプロパティを更新する();
+
+                       App.入力管理.すべての入力デバイスをポーリングする();
 
                        switch( this.現在のフェーズ )
                        {
                                case フェーズ.表示:
-                                       this._背景画像.描画する( gd, 0.0f, 0.0f );
+                                       {
+                                               // (1) 描画
+                                               this._背景画像.描画する( gd, 0.0f, 0.0f );
 #if DEBUG
-                                       this._FPS.描画する( gd );
+                                               this._FPS.描画する( gd );
 #endif
+                                               // (2) 入力
+                                               if( App.入力管理.キーボードデバイス.キーが押された( 0, Key.Escape ) )
+                                               {
+                                                       #region " ESC → キャンセル "
+                                                       //----------------
+                                                       Log.Info( $"{FDKUtilities.現在のメソッド名}: キャンセルされました。" );
+                                                       this.現在のフェーズ = フェーズ.キャンセル;
+                                                       //----------------
+                                                       #endregion
+                                               }
+                                               if( App.入力管理.シンバルが入力された() )
+                                               {
+                                                       #region " シンバル → 確定 "
+                                                       //----------------
+                                                       Log.Info( $"{FDKUtilities.現在のメソッド名}: 確定されました。" );
+                                                       this.現在のフェーズ = フェーズ.確定;
+                                                       //----------------
+                                                       #endregion
+                                               }
+                                       }
                                        break;
 
                                case フェーズ.確定:
index 117a5a4..71936e9 100644 (file)
@@ -143,8 +143,10 @@ namespace SST.ステージ
                        }
                }
 
-               public void 進行する()
+               public void 進行描画する( グラフィックデバイス gd )
                {
+                       Debug.Assert( this.活性化している );
+
                        #region " Bass "
                        //----------------
                        if( this._Bass振動用カウンタ?.終了値に達していない ?? false )
@@ -152,6 +154,7 @@ namespace SST.ステージ
                                float 最大振幅 = (float) ( 2.0 * Math.Cos( ( Math.PI / 2.0 ) * this._Bass振動用カウンタ.現在値の割合 ) );   // 2 → 0
                                this._Bassの振動幅 = (float) ( 最大振幅 * Math.Sin( 10.0 * Math.PI * this._Bass振動用カウンタ.現在値の割合 ) ); // 10周
                        }
+                       this._Bass.描画する( gd, 881f, 891f + this._Bassの振動幅 );
                        //----------------
                        #endregion
 
@@ -163,6 +166,7 @@ namespace SST.ステージ
                                float 最大振幅 = (float) ( 2.0 * Math.Cos( ( Math.PI / 2.0 ) * this._LowTom振動用カウンタ.現在値の割合 ) );  // 2 → 0
                                this._LowTomの振動幅 = (float) ( 最大振幅 * Math.Sin( 15.0 * Math.PI * this._LowTom振動用カウンタ.現在値の割合 ) );  // 15周
                        }
+                       this._LowTom.描画する( gd, 999f, 901f + this._LowTomの振動幅 + this._Bassの振動幅 );
                        //----------------
                        #endregion
 
@@ -174,6 +178,7 @@ namespace SST.ステージ
                                float 最大振幅 = (float) ( 2.0 * Math.Cos( ( Math.PI / 2.0 ) * this._HiTom振動用カウンタ.現在値の割合 ) );   // 2 → 0
                                this._HiTomの振動幅 = (float) ( 最大振幅 * Math.Sin( 15.0 * Math.PI * this._HiTom振動用カウンタ.現在値の割合 ) ); // 15周
                        }
+                       this._HiTom.描画する( gd, 850f, 901f + this._HiTomの振動幅 + this._Bassの振動幅 );
                        //----------------
                        #endregion
 
@@ -185,6 +190,7 @@ namespace SST.ステージ
                                float 最大振幅 = (float) ( 2.0 * Math.Cos( ( Math.PI / 2.0 ) * this._FloorTom振動用カウンタ.現在値の割合 ) );   // 2 → 0
                                this._FloorTomの振動幅 = (float) ( 最大振幅 * Math.Sin( 10.0 * Math.PI * this._FloorTom振動用カウンタ.現在値の割合 ) ); // 10周
                        }
+                       this._FloorTom.描画する( gd, 1050f, 981f + this._FloorTomの振動幅 );
                        //----------------
                        #endregion
 
@@ -196,6 +202,7 @@ namespace SST.ステージ
                                float 最大振幅 = (float) ( 2.0 * Math.Cos( ( Math.PI / 2.0 ) * this._Snare振動用カウンタ.現在値の割合 ) );   // 2 → 0
                                this._Snareの振動幅 = (float) ( 最大振幅 * Math.Sin( 17.0 * Math.PI * this._Snare振動用カウンタ.現在値の割合 ) ); // 17周
                        }
+                       this._Snare.描画する( gd, 741f, 988f + this._Snareの振動幅 );
                        //----------------
                        #endregion
 
@@ -207,6 +214,8 @@ namespace SST.ステージ
                                float 最大振幅 = ( this.ハイハットの開度 < 0.2f ) ? 1f : (float) ( 2.0 * Math.Cos( ( Math.PI / 2.0 ) * this._HiHat振動用カウンタ.現在値の割合 ) );   // 2 → 0, 開度が小さい場合は 1。
                                this._HiHatの振動幅 = (float) ( 最大振幅 * Math.Sin( 20.0 * Math.PI * this._HiHat振動用カウンタ.現在値の割合 ) ); // 20周
                        }
+                       this._HiHatBottom.描画する( gd, 657f, 935f );       // Bottom は振動しない。
+                       this._HiHatTop.描画する( gd, 657f, ( 935f - 20f * this.ハイハットの開度 ) + this._HiHatの振動幅 );
                        //----------------
                        #endregion
 
@@ -218,6 +227,9 @@ namespace SST.ステージ
                                float 最大振幅 = (float) ( 1.0 * Math.Cos( ( Math.PI / 2.0 ) * this._RCymbal振動用カウンタ.現在値の割合 ) );   // 1 → 0
                                this._RCymbalの振動幅 = (float) ( 最大振幅 * Math.Sin( 20.0 * Math.PI * this._RCymbal振動用カウンタ.現在値の割合 ) ); // 20周
                        }
+                       this._RCymbalStand.描画する( gd, 1229f, 920f ); // スタンドは振動しない。
+                       this._RCymbal.描画する( gd, ( 1257f - this._RCymbal.サイズ.Width / 2f ), ( 923f - this._RCymbal.サイズ.Height / 2f ) + this._RCymbalの振動幅 );
+                       this._RCymbalTop.描画する( gd, 1229f, 880f + this._RCymbalの振動幅 );
                        //----------------
                        #endregion
 
@@ -229,32 +241,11 @@ namespace SST.ステージ
                                float 最大振幅 = (float) ( 1.0 * Math.Cos( ( Math.PI / 2.0 ) * this._LCymbal振動用カウンタ.現在値の割合 ) );   // 1 → 0
                                this._LCymbalの振動幅 = (float) ( 最大振幅 * Math.Sin( 20.0 * Math.PI * this._LCymbal振動用カウンタ.現在値の割合 ) ); // 20周
                        }
-                       //----------------
-                       #endregion
-               }
-
-               public void 描画する( グラフィックデバイス gd )
-               {
-                       this._Bass.描画する( gd, 881f, 891f + this._Bassの振動幅 );
-
-                       this._LowTom.描画する( gd, 999f, 901f + this._LowTomの振動幅 + this._Bassの振動幅 );
-
-                       this._HiTom.描画する( gd, 850f, 901f + this._HiTomの振動幅 + this._Bassの振動幅 );
-
-                       this._FloorTom.描画する( gd, 1050f, 981f + this._FloorTomの振動幅 );
-
-                       this._Snare.描画する( gd, 741f, 988f + this._Snareの振動幅 );
-
-                       this._HiHatBottom.描画する( gd, 657f, 935f );               // Bottom は振動しない。
-                       this._HiHatTop.描画する( gd, 657f, ( 935f - 20f * this.ハイハットの開度 ) + this._HiHatの振動幅 );
-
-                       this._RCymbalStand.描画する( gd, 1229f, 920f );     // スタンドは振動しない。
-                       this._RCymbal.描画する( gd, ( 1257f - this._RCymbal.サイズ.Width / 2f ), ( 923f - this._RCymbal.サイズ.Height / 2f ) + this._RCymbalの振動幅 );
-                       this._RCymbalTop.描画する( gd, 1229f, 880f + this._RCymbalの振動幅 );
-
-                       this._LCymbalStand.描画する( gd, 472f, 916f );      // スタンドは振動しない。
+                       this._LCymbalStand.描画する( gd, 472f, 916f );  // スタンドは振動しない。
                        this._LCymbal.描画する( gd, ( 649f - this._LCymbal.サイズ.Width / 2f ), ( 918f - this._LCymbal.サイズ.Height / 2f ) + this._LCymbalの振動幅 );
                        this._LCymbalTop.描画する( gd, 633f, 891f + this._LCymbalの振動幅 );
+                       //----------------
+                       #endregion
                }
 
 
index f47920d..169aaff 100644 (file)
@@ -70,13 +70,10 @@ namespace SST.ステージ
                        this._透明度カウンタ = new Counter( 最初の値, 最後の値, 値をひとつ増加させるのにかける時間ms );
                }
 
-               public void 進行する()
+               public void 進行描画する( グラフィックデバイス gd, 画像 フェードアウトに使うタイル画像 )
                {
-                       // チカるの防止のため、進行処理は描画で行う。
-               }
+                       Debug.Assert( this.活性化している );
 
-               public void 描画する( グラフィックデバイス gd, 画像 フェードアウトに使うタイル画像 )
-               {
                        if( this.開始されていない )
                                return;
 
index d1d497f..38cccdd 100644 (file)
@@ -70,13 +70,10 @@ namespace SST.ステージ
                        this._透明度カウンタ = new Counter( 最初の値, 最後の値, 値をひとつ増加させるのにかける時間ms );
                }
 
-               public void 進行する()
+               public void 進行描画する( グラフィックデバイス gd, 画像 フェードインに使うタイル画像 )
                {
-                       // チカるの防止のため、進行処理は描画で行う。
-               }
+                       Debug.Assert( this.活性化している );
 
-               public void 描画する( グラフィックデバイス gd, 画像 フェードインに使うタイル画像 )
-               {
                        if( this.開始されていない )
                                return;
 
index ddb6cf4..aa996ed 100644 (file)
@@ -64,14 +64,18 @@ namespace SST.ステージ.ユーザ
                        }
                }
 
-               public override void é«\98é\80\9fé\80²è¡\8cã\81\99ã\82\8b()
+               public override void é\80²è¡\8cæ\8f\8fç\94»ã\81\99ã\82\8b( ã\82°ã\83©ã\83\95ã\82£ã\83\83ã\82¯ã\83\87ã\83\90ã\82¤ã\82¹ gd )
                {
+                       Debug.Assert( this.活性化している );
+                       Debug.Assert( null != gd );
+
                        if( this._活性化した直後である )
                        {
                                this._活性化した直後である = false;
                                this._背景動画.再生を開始する( 開始位置sec: 0.0, ループ再生する: true );
                        }
 
+                       this._FPS.VPSをカウントする();
                        this._FPS.FPSをカウントしプロパティを更新する();
 
                        App.入力管理.すべての入力デバイスをポーリングする();
@@ -79,13 +83,49 @@ namespace SST.ステージ.ユーザ
                        switch( this.現在のフェーズ )
                        {
                                case フェーズ.ログアウト:
+                                       App.ユーザ管理.ログアウトする( gd );
+                                       this.現在のフェーズ = ( App.ビュアーモードである ) ?
+                                               フェーズ.AutoPlayer選択 :     // ビュアーモードでは常に AutoPlayer でログインする。
+                                               フェーズ.ユーザ一覧;
+                                       break;
+
+                               case フェーズ.AutoPlayer選択:
+                                       App.ユーザ管理.ユーザを選択する( Properties.Resources.AUTOPLAYER );
+                                       this.現在のフェーズ = フェーズ.ログイン;
                                        break;
 
                                case フェーズ.ユーザ一覧:
-                                       #region " 進行・入力 "
+                                       #region " 描画 "
                                        //----------------
-                                       this._ドラムセット.進行する();
+                                       {
+                                               this._背景動画.描画する( gd, new SharpDX.RectangleF( 0f, 0f, gd.設計画面サイズ.Width, gd.設計画面サイズ.Height ) );
+
+                                               this._ステージ台.描画する( gd, 0, 0 );
+                                               this._ドラムセット.進行描画する( gd );
+
+                                               var user = App.ユーザ管理.選択されているユーザ;
 
+                                               this._SelectYourStyle.描画する( gd, 711f, 184f );
+                                               this._ユーザアイコン背景.描画する( gd, 445f, 377f );
+
+                                               var icon = ( user.写真.生成成功 ) ? user.写真 : this._既定のユーザアイコン;
+                                               icon.描画する( gd, 453, 385f,
+                                                       X方向拡大率: ( this._既定のユーザアイコン.サイズ.Width / icon.サイズ.Width ),
+                                                       Y方向拡大率: ( this._既定のユーザアイコン.サイズ.Height / icon.サイズ.Height ) );
+
+                                               this._テンプレート記号左.描画する( gd, 748f, 329f );
+                                               this._テンプレート記号右.描画する( gd, 748f + user.名前画像.レイアウトサイズ.Width + this._テンプレート記号右.サイズ.Width / 3f, 329f );
+
+                                               this._SSTロゴ.描画する( gd, 707f, 352f );
+
+                                               user.名前画像.描画する( gd, 848f, 480f );
+
+                                               this._FPS.描画する( gd );
+                                       }
+                                       //----------------
+                                       #endregion
+                                       #region " 入力 "
+                                       //----------------
                                        if( App.入力管理.キーボードデバイス.キーが押された( 0, Key.Escape ) )
                                        {
                                                #region " ESC → キャンセル "
@@ -143,70 +183,6 @@ namespace SST.ステージ.ユーザ
                                        #endregion
                                        break;
 
-                               case フェーズ.AutoPlayer選択:
-                               case フェーズ.ログイン:
-                               case フェーズ.完了:
-                               case フェーズ.キャンセル:
-                                       break;
-                       }
-               }
-
-               public override void 描画する( グラフィックデバイス gd )
-               {
-                       Debug.Assert( this.活性化している );
-                       Debug.Assert( null != gd );
-
-                       if( this._活性化した直後である )
-                               return;     // まだ進行処理が行われていない。
-
-                       this._FPS.VPSをカウントする();
-
-                       switch( this.現在のフェーズ )
-                       {
-                               case フェーズ.ログアウト:
-                                       App.ユーザ管理.ログアウトする( gd );
-                                       this.現在のフェーズ = ( App.ビュアーモードである ) ?
-                                               フェーズ.AutoPlayer選択 :     // ビュアーモードでは常に AutoPlayer でログインする。
-                                               フェーズ.ユーザ一覧;
-                                       break;
-
-                               case フェーズ.AutoPlayer選択:
-                                       App.ユーザ管理.ユーザを選択する( Properties.Resources.AUTOPLAYER );
-                                       this.現在のフェーズ = フェーズ.ログイン;
-                                       break;
-
-                               case フェーズ.ユーザ一覧:
-                                       #region " 描画 "
-                                       //----------------
-                                       {
-                                               this._背景動画.描画する( gd, new SharpDX.RectangleF( 0f, 0f, gd.設計画面サイズ.Width, gd.設計画面サイズ.Height ) );
-
-                                               this._ステージ台.描画する( gd, 0, 0 );
-                                               this._ドラムセット.描画する( gd );
-
-                                               var user = App.ユーザ管理.選択されているユーザ;
-
-                                               this._SelectYourStyle.描画する( gd, 711f, 184f );
-                                               this._ユーザアイコン背景.描画する( gd, 445f, 377f );
-
-                                               var icon = ( user.写真.生成成功 ) ? user.写真 : this._既定のユーザアイコン;
-                                               icon.描画する( gd, 453, 385f,
-                                                       X方向拡大率: ( this._既定のユーザアイコン.サイズ.Width / icon.サイズ.Width ),
-                                                       Y方向拡大率: ( this._既定のユーザアイコン.サイズ.Height / icon.サイズ.Height ) );
-
-                                               this._テンプレート記号左.描画する( gd, 748f, 329f );
-                                               this._テンプレート記号右.描画する( gd, 748f + user.名前画像.レイアウトサイズ.Width + this._テンプレート記号右.サイズ.Width / 3f, 329f );
-
-                                               this._SSTロゴ.描画する( gd, 707f, 352f );
-
-                                               user.名前画像.描画する( gd, 848f, 480f );
-
-                                               this._FPS.描画する( gd );
-                                       }
-                                       //----------------
-                                       #endregion
-                                       break;
-
                                case フェーズ.ログイン:
                                        App.ユーザ管理.ログインする( gd );
                                        this.現在のフェーズ = フェーズ.完了;
index d52a0fc..2a76bd3 100644 (file)
@@ -46,49 +46,51 @@ namespace SST.ステージ.曲読込
                        }
                }
 
-               public override void é«\98é\80\9fé\80²è¡\8cã\81\99ã\82\8b()
+               public override void é\80²è¡\8cæ\8f\8fç\94»ã\81\99ã\82\8b( ã\82°ã\83©ã\83\95ã\82£ã\83\83ã\82¯ã\83\87ã\83\90ã\82¤ã\82¹ gd )
                {
                        Debug.Assert( this.活性化している );
 
-                       if( this.現在のフェーズ != フェーズ.開始 )
-                               return;
-
-                       var node = ( App.ビュアーモードではない ) ?
-                               (MusicNode) App.ユーザ管理.選択されているユーザ.曲ツリー.フォーカスノード :        // (A) 通常モード
-                               App.ビュアー用ノード;                                                        // (B) ビュアーモード時
-
-                       string 選択曲ファイルパス = node.曲ファイルパス;
-                       Trace.Assert( 選択曲ファイルパス.Nullでも空でもない() );
-
-                       // スコアを読み込む。
-                       using( Log.Block( "曲の読み込み" ) )
+                       switch( this.現在のフェーズ )
                        {
-                               App.演奏スコア = new スコア( SST.IO.Folder.絶対パスに含まれるフォルダ変数を展開して返す( 選択曲ファイルパス ) );
-
-                               // サウンドデバイス遅延を取得し、全チップの発声時刻へ反映する。
-                               float 作成時遅延ms = App.演奏スコア.Header.サウンドデバイス遅延ms;
-                               if( 0 < 作成時遅延ms )
-                               {
-                                       float 再生時遅延ms = (float) ( App.サウンドデバイス.遅延sec * 1000.0 );
-                                       long 加算分ms = (long) ( 作成時遅延ms - 再生時遅延ms );  // 例: 作成時遅延 7ms, 再生時遅延 10ms の場合、発声時刻に 7-10 = -3ms 加算する(3ms 早く発声させる)。
-
-                                       Log.Info( $"作成時遅延={作成時遅延ms}ms, 再生時遅延={再生時遅延ms}ms => 加算分 = {加算分ms}ms" );
-
-                                       foreach( var chip in App.演奏スコア.チップリスト )
-                                               chip.発声時刻ms += 加算分ms;
-                               }
-
-                               this.現在のフェーズ = フェーズ.完了;
+                               case フェーズ.開始:
+                                       #region " *** "
+                                       //----------------
+                                       {
+                                               var node = ( App.ビュアーモードではない ) ?
+                                                       (MusicNode) App.ユーザ管理.選択されているユーザ.曲ツリー.フォーカスノード :        // (A) 通常モード
+                                                       App.ビュアー用ノード;                                                        // (B) ビュアーモード時
+
+                                               string 選択曲ファイルパス = node.曲ファイルパス;
+                                               Trace.Assert( 選択曲ファイルパス.Nullでも空でもない() );
+
+                                               // スコアを読み込む。
+                                               using( Log.Block( "曲の読み込み" ) )
+                                               {
+                                                       App.演奏スコア = new スコア( SST.IO.Folder.絶対パスに含まれるフォルダ変数を展開して返す( 選択曲ファイルパス ) );
+
+                                                       // サウンドデバイス遅延を取得し、全チップの発声時刻へ反映する。
+                                                       float 作成時遅延ms = App.演奏スコア.Header.サウンドデバイス遅延ms;
+                                                       if( 0 < 作成時遅延ms )
+                                                       {
+                                                               float 再生時遅延ms = (float) ( App.サウンドデバイス.遅延sec * 1000.0 );
+                                                               long 加算分ms = (long) ( 作成時遅延ms - 再生時遅延ms );  // 例: 作成時遅延 7ms, 再生時遅延 10ms の場合、発声時刻に 7-10 = -3ms 加算する(3ms 早く発声させる)。
+
+                                                               Log.Info( $"作成時遅延={作成時遅延ms}ms, 再生時遅延={再生時遅延ms}ms => 加算分 = {加算分ms}ms" );
+
+                                                               foreach( var chip in App.演奏スコア.チップリスト )
+                                                                       chip.発声時刻ms += 加算分ms;
+                                                       }
+
+                                                       this.現在のフェーズ = フェーズ.完了;
+                                               }
+                                       }
+                                       //----------------
+                                       #endregion
+                                       break;
+
+                               case フェーズ.完了:
+                                       break;
                        }
                }
-
-               public override void 描画する( グラフィックデバイス gd )
-               {
-                       Debug.Assert( this.活性化している );
-                       Debug.Assert( null != gd );
-
-                       if( this.現在のフェーズ != フェーズ.開始 )
-                               return;
-               }
        }
 }
index e1b9e82..50b3abe 100644 (file)
@@ -14,21 +14,9 @@ namespace SST.ステージ.演奏
        {
                public int COMBO値
                {
-                       get
-                       {
-                               lock( this._スレッド間同期 )
-                               {
-                                       return this._COMBO値;
-                               }
-                       }
-                       set
-                       {
-                               lock( this._スレッド間同期 )
-                               {
-                                       this._COMBO値 = value;
-                               }
-                       }
-               }
+                       get;
+                       set;
+               } = 0;
 
 
                public コンボ()
@@ -39,7 +27,7 @@ namespace SST.ステージ.演奏
                protected override void On活性化( グラフィックデバイス gd )
                {
                        this._現在のモード = EMode.非表示中;
-                       this._COMBO値 = 0;
+                       this.COMBO値 = 0;
                        this._前回のCOMBO値 = 0;
                        this._コンボが切れたときのCOMBO値 = 0;
                        this._コンボが切れた時刻 = QPCTimer.未使用;
@@ -49,113 +37,108 @@ namespace SST.ステージ.演奏
                {
                }
 
-               public void 進行する()
+               public void 進行描画する( グラフィックデバイス gd )
                {
-                       lock( this._スレッド間同期 )
-                       {
-                               int COMBO値 = this._COMBO値;
-
-                               EEvent 今回の状態遷移イベント;
-
-                               #region " 前回と今回の COMBO 値から、今回の状態遷移イベントを決定する。"
-                               //-----------------
-                               int 前回の値 = this._前回のCOMBO値;
-                               int 今回の値 = COMBO値;
+                       #region " 進行 "
+                       //----------------
+                       EEvent 今回の状態遷移イベント;
 
-                               if( 今回の値 < _表示可能な最小コンボ数 )
-                               {
-                                       今回の状態遷移イベント = EEvent.非表示;
-                               }
-                               else if( 前回の値 == 今回の値 )
-                               {
-                                       今回の状態遷移イベント = EEvent.同一数値;
-                               }
-                               else if( 前回の値 < 今回の値 )
-                               {
-                                       今回の状態遷移イベント = EEvent.数値更新;
-                               }
-                               else
-                               {
-                                       今回の状態遷移イベント = EEvent.ミス;
-                               }
-                               //-----------------
-                               #endregion
+                       #region " 前回と今回の COMBO 値から、今回の状態遷移イベントを決定する。"
+                       //-----------------
+                       int 前回の値 = this._前回のCOMBO値;
+                       int 今回の値 = COMBO値;
 
-                               this._前回のCOMBO値 = COMBO値;
+                       if( 今回の値 < _表示可能な最小コンボ数 )
+                       {
+                               今回の状態遷移イベント = EEvent.非表示;
+                       }
+                       else if( 前回の値 == 今回の値 )
+                       {
+                               今回の状態遷移イベント = EEvent.同一数値;
+                       }
+                       else if( 前回の値 < 今回の値 )
+                       {
+                               今回の状態遷移イベント = EEvent.数値更新;
+                       }
+                       else
+                       {
+                               今回の状態遷移イベント = EEvent.ミス;
+                       }
+                       //-----------------
+                       #endregion
 
-                               Retry:  // モードが変化した場合はここからリトライする。(次のターンに回すと、間にPresentを挟んで表示がチラつくから。)
+                       this._前回のCOMBO値 = COMBO値;
 
-                               switch( this._現在のモード )
-                               {
-                                       case EMode.非表示中:
-                                               #region " 数値が更新されたら 進行表示中モードへ。"
-                                               //-----------------
-                                               if( 今回の状態遷移イベント == EEvent.数値更新 )
-                                               {
-                                                       this._現在のモード = EMode.表示中;
-                                                       goto Retry;
-                                               }
-                                               this._単位付き数値.表示する = false;
-                                               //-----------------
-                                               #endregion
-                                               break;
-
-                                       case EMode.表示中:
-                                               #region " 遷移イベントが非表示・ミスのときは 残像表示中 モードへ。"
-                                               //-----------------
-                                               if( ( 今回の状態遷移イベント == EEvent.非表示 ) ||
-                                                       ( 今回の状態遷移イベント == EEvent.ミス ) )
-                                               {
-                                                       this._現在のモード = EMode.残像表示中;
-                                                       this._コンボが切れたときのCOMBO値 = 前回の値;
-                                                       this._コンボが切れた時刻 = QPCTimer.生カウント;
-                                                       goto Retry;
-                                               }
-                                               this._単位付き数値.数値 = 今回の値;
-                                               this._単位付き数値.表示する = true;
-                                               //-----------------
-                                               #endregion
-                                               break;
-
-                                       case EMode.残像表示中:
-                                               #region " 数値が更新された場合は 進行表示中 モードへ、残像表示時間が切れたときは 非表示 モードへ。"
-                                               //-----------------
-                                               if( 今回の状態遷移イベント == EEvent.数値更新 )
-                                               {
-                                                       this._現在のモード = EMode.表示中;
-                                                       goto Retry;
-                                               }
-                                               else if( QPCTimer.生カウント相対値を秒へ変換して返す( QPCTimer.生カウント - this._コンボが切れた時刻 ) > 1.0 )     // 1.0秒経った
-                                               {
-                                                       this._現在のモード = EMode.非表示中;
-                                                       goto Retry;
-                                               }
-                                               this._単位付き数値.数値 = this._コンボが切れたときのCOMBO値;
-                                               this._単位付き数値.表示する = true;
-                                               //-----------------
-                                               #endregion
-                                               break;
-                               }
-                       }
-               }
+                       Retry:  // モードが変化した場合はここからリトライする。(次のターンに回すと、間にPresentを挟んで表示がチラつくから。)
 
-               public void 描画する( グラフィックデバイス gd )
-               {
-                       lock( this._スレッド間同期 )
+                       switch( this._現在のモード )
                        {
-                               // 描画。
+                               case EMode.非表示中:
+                                       #region " 数値が更新されたら 進行表示中モードへ。"
+                                       //-----------------
+                                       if( 今回の状態遷移イベント == EEvent.数値更新 )
+                                       {
+                                               this._現在のモード = EMode.表示中;
+                                               goto Retry;
+                                       }
+                                       this._単位付き数値.表示する = false;
+                                       //-----------------
+                                       #endregion
+                                       break;
 
-                               float 中央X = 1920f / 2f;
-                               //switch( Global.Users.Config.ComboPosition )                   → コンボのX位置の調整はあとまわし。
-                               //{
-                               //      case Eコンボ表示位置.LEFT: n中央X = 300; break;
-                               //      case Eコンボ表示位置.CENTER: n中央X = 440; break;
-                               //      case Eコンボ表示位置.RIGHT: n中央X = 680; break;
-                               //}
-                               float 下辺Y = 130f; // Y座標は固定位置
+                               case EMode.表示中:
+                                       #region " 遷移イベントが非表示・ミスのときは 残像表示中 モードへ。"
+                                       //-----------------
+                                       if( ( 今回の状態遷移イベント == EEvent.非表示 ) ||
+                                               ( 今回の状態遷移イベント == EEvent.ミス ) )
+                                       {
+                                               this._現在のモード = EMode.残像表示中;
+                                               this._コンボが切れたときのCOMBO値 = 前回の値;
+                                               this._コンボが切れた時刻 = QPCTimer.生カウント;
+                                               goto Retry;
+                                       }
+                                       this._単位付き数値.数値 = 今回の値;
+                                       this._単位付き数値.表示する = true;
+                                       //-----------------
+                                       #endregion
+                                       break;
 
-                               this._単位付き数値.進行描画する( gd, 中央X, 下辺Y, _ドラムコンボの文字間隔 );
+                               case EMode.残像表示中:
+                                       #region " 数値が更新された場合は 進行表示中 モードへ、残像表示時間が切れたときは 非表示 モードへ。"
+                                       //-----------------
+                                       if( 今回の状態遷移イベント == EEvent.数値更新 )
+                                       {
+                                               this._現在のモード = EMode.表示中;
+                                               goto Retry;
+                                       }
+                                       else if( QPCTimer.生カウント相対値を秒へ変換して返す( QPCTimer.生カウント - this._コンボが切れた時刻 ) > 1.0 )     // 1.0秒経った
+                                       {
+                                               this._現在のモード = EMode.非表示中;
+                                               goto Retry;
+                                       }
+                                       this._単位付き数値.数値 = this._コンボが切れたときのCOMBO値;
+                                       this._単位付き数値.表示する = true;
+                                       //-----------------
+                                       #endregion
+                                       break;
                        }
+                       //----------------
+                       #endregion
+
+                       #region " 描画 "
+                       //----------------
+                       float 中央X = 1920f / 2f;
+                       //switch( Global.Users.Config.ComboPosition )                   → コンボのX位置の調整はあとまわし。
+                       //{
+                       //      case Eコンボ表示位置.LEFT: n中央X = 300; break;
+                       //      case Eコンボ表示位置.CENTER: n中央X = 440; break;
+                       //      case Eコンボ表示位置.RIGHT: n中央X = 680; break;
+                       //}
+                       float 下辺Y = 130f; // Y座標は固定位置
+
+                       this._単位付き数値.進行描画する( gd, 中央X, 下辺Y, _ドラムコンボの文字間隔 );
+                       //----------------
+                       #endregion
                }
 
 
@@ -180,8 +163,6 @@ namespace SST.ステージ.演奏
 
                private const int _表示可能な最小コンボ数 = 11;
 
-               private int _COMBO値 = 0;
-
                private int _前回のCOMBO値 = 0;
 
                private long _コンボが切れた時刻 = QPCTimer.未使用;
@@ -190,8 +171,6 @@ namespace SST.ステージ.演奏
 
                private コンボジャンプ _単位付き数値 = null;
 
-               private readonly object _スレッド間同期 = new object();
-
 
                private class コンボジャンプ : Activity
                {
@@ -200,42 +179,18 @@ namespace SST.ステージ.演奏
                        /// </summary>
                        public int 数値
                        {
-                               get
-                               {
-                                       lock( this._スレッド間同期 )
-                                       {
-                                               return this._表示する数値;
-                                       }
-                               }
-                               set
-                               {
-                                       lock( this._スレッド間同期 )
-                                       {
-                                               this._表示する数値 = value;
-                                       }
-                               }
-                       }
+                               get;
+                               set;
+                       } = 0;
 
                        /// <summary>
                        ///             false にすると非表示。
                        /// </summary>
                        public bool 表示する
                        {
-                               get
-                               {
-                                       lock( this._スレッド間同期 )
-                                       {
-                                               return this._表示する;
-                                       }
-                               }
-                               set
-                               {
-                                       lock( this._スレッド間同期 )
-                                       {
-                                               this._表示する = value;
-                                       }
-                               }
-                       }
+                               get;
+                               set;
+                       } = false;
 
 
                        public コンボジャンプ()
@@ -249,9 +204,9 @@ namespace SST.ステージ.演奏
 
                        protected override void On活性化( グラフィックデバイス gd )
                        {
-                               this._表示する数値 = 0;
+                               this.数値 = 0;
                                this._現在の数値 = 0;
-                               this._表示する = true;
+                               this.表示する = true;
                                this._ジャンプインデックス値 = 99999;
                                this._ジャンプインデックス進行 = new 定間隔進行();
                        }
@@ -262,101 +217,94 @@ namespace SST.ステージ.演奏
 
                        public void 進行描画する( グラフィックデバイス gd, float 中央X, float 下辺Y, float 文字間隔 )
                        {
-                               lock( this._スレッド間同期 )
+                               // 進行。
+
+                               #region " ジャンプインデックス値 の進行。"
+                               //-----------------
+                               if( 360 > this._ジャンプインデックス値 )
                                {
-                                       // 進行。
+                                       this._ジャンプインデックス進行.経過時間の分だけ進行する(
+                                               間隔ms: 2,
+                                               定間隔処理: () => {
+                                                       if( 2000 > this._ジャンプインデックス値 )
+                                                               this._ジャンプインデックス値 += 3;
+                                               } );
+                               }
+                               //-----------------
+                               #endregion
+
+                               #region " 数値が増加していればジャンプを開始する。"
+                               //-----------------
+                               if( this.数値 > this._現在の数値 )
+                               {
+                                       this._ジャンプインデックス値 = 0;
+                                       this._ジャンプインデックス進行 = new 定間隔進行();
+                               }
+                               //-----------------
+                               #endregion
+
+                               this._現在の数値 = this.数値;
+
+                               // 描画。
+
+                               if( this.表示する )
+                               {
+                                       // 数値と単位を表示。
+                                       var 位の数 = new int[ 10 ]; // 10桁もあれば足りるやろ
+                                       int 桁数 = 0;
 
-                                       #region " ジャンプインデックス値 の進行。"
+                                       #region " 現在の数値 の桁を 逆順に 位の数[] に格納する。(例:現在の数値=125 のとき 位の数 = { 5,2,1,0,0,0,0,0,0,0 }, 桁数 = 3 ) "
                                        //-----------------
-                                       if( 360 > this._ジャンプインデックス値 )
+                                       int n = this._現在の数値;
+                                       while( ( 0 < n ) && ( 10 > 桁数 ) )
                                        {
-                                               this._ジャンプインデックス進行.経過時間の分だけ進行する(
-                                                       間隔ms: 2,
-                                                       定間隔処理: () => {
-                                                               if( 2000 > this._ジャンプインデックス値 )
-                                                                       this._ジャンプインデックス値 += 3;
-                                                       } );
+                                               位の数[ 桁数 ] = n % 10;       // 1の位を格納
+                                               n = ( n - ( n % 10 ) ) / 10;  // 右へシフト(例: 12345 → 1234 )
+                                               桁数++;
                                        }
                                        //-----------------
                                        #endregion
 
-                                       #region " 数値が増加していればジャンプを開始する。"
+                                       #region " 単位文字の矩形(COMBO矩形) と 数字と単位を合わせた画像の全幅を算出。"
                                        //-----------------
-                                       if( this._表示する数値 > this._現在の数値 )
-                                       {
-                                               this._ジャンプインデックス値 = 0;
-                                               this._ジャンプインデックス進行 = new 定間隔進行();
-                                       }
+                                       var COMBO矩形 = this._文字矩形[ 10 ];
+                                       float 数字と単位を合わせた画像の全幅 = this._文字矩形[ 10 ].Width;
+
+                                       for( int i = 0; i < 桁数; i++ )
+                                               数字と単位を合わせた画像の全幅 += this._文字矩形[ 位の数[ i ] ].Width;
                                        //-----------------
                                        #endregion
 
-                                       this._現在の数値 = this._表示する数値;
+                                       #region " 位の数[] を、COMBO文字→ 1の位 → 10の位 … の順に、右から左へ向かって順番に表示する。"
+                                       //-----------------
+                                       float x = 中央X + ( 数字と単位を合わせた画像の全幅 / 2f );      // 右端X
+                                       float y = 下辺Y;
+                                       int jump = this._ジャンプインデックス値 - ( 桁数 * _桁ごとのジャンプの遅れ );
 
-                                       // 描画。
+                                       // "COMBO" を表示。
+                                       x -= COMBO矩形.Width;
+                                       this._数値と単位の画像.描画する( gd, x, ( 下辺Y - COMBO矩形.Height ), _不透明度0to1, 転送元矩形: COMBO矩形 );
 
-                                       if( this._表示する )
+                                       // 数値を1の位から順に表示。
+                                       for( int i = 0; i < 桁数; i++ )
                                        {
-                                               // 数値と単位を表示。
-                                               var 位の数 = new int[ 10 ]; // 10桁もあれば足りるやろ
-                                               int 桁数 = 0;
-
-                                               #region " 現在の数値 の桁を 逆順に 位の数[] に格納する。(例:現在の数値=125 のとき 位の数 = { 5,2,1,0,0,0,0,0,0,0 }, 桁数 = 3 ) "
-                                               //-----------------
-                                               int n = this._現在の数値;
-                                               while( ( 0 < n ) && ( 10 > 桁数 ) )
-                                               {
-                                                       位の数[ 桁数 ] = n % 10;       // 1の位を格納
-                                                       n = ( n - ( n % 10 ) ) / 10;  // 右へシフト(例: 12345 → 1234 )
-                                                       桁数++;
-                                               }
-                                               //-----------------
-                                               #endregion
-
-                                               #region " 単位文字の矩形(COMBO矩形) と 数字と単位を合わせた画像の全幅を算出。"
-                                               //-----------------
-                                               var COMBO矩形 = this._文字矩形[ 10 ];
-                                               float 数字と単位を合わせた画像の全幅 = this._文字矩形[ 10 ].Width;
-
-                                               for( int i = 0; i < 桁数; i++ )
-                                                       数字と単位を合わせた画像の全幅 += this._文字矩形[ 位の数[ i ] ].Width;
-                                               //-----------------
-                                               #endregion
-
-                                               #region " 位の数[] を、COMBO文字→ 1の位 → 10の位 … の順に、右から左へ向かって順番に表示する。"
-                                               //-----------------
-                                               float x = 中央X + ( 数字と単位を合わせた画像の全幅 / 2f );      // 右端X
-                                               float y = 下辺Y;
-                                               int jump = this._ジャンプインデックス値 - ( 桁数 * _桁ごとのジャンプの遅れ );
-
-                                               // "COMBO" を表示。
-                                               x -= COMBO矩形.Width;
-                                               this._数値と単位の画像.描画する( gd, x, ( 下辺Y - COMBO矩形.Height ), _不透明度0to1, 転送元矩形: COMBO矩形 );
-
-                                               // 数値を1の位から順に表示。
-                                               for( int i = 0; i < 桁数; i++ )
-                                               {
-                                                       var rc = this._文字矩形[ 位の数[ i ] ];
-
-                                                       x -= rc.Width + 文字間隔;
-                                                       y = 下辺Y - rc.Height;
-
-                                                       jump = this._ジャンプインデックス値 - ( ( ( 桁数 - i ) - 1 ) * _桁ごとのジャンプの遅れ );
-                                                       if( ( 0 <= jump ) && ( 180 > jump ) )
-                                                               y += this._ジャンプ差分値[ jump ];
-
-                                                       this._数値と単位の画像.描画する( gd, x, y, _不透明度0to1, 転送元矩形: rc );
-                                               }
-                                               //-----------------
-                                               #endregion
+                                               var rc = this._文字矩形[ 位の数[ i ] ];
+
+                                               x -= rc.Width + 文字間隔;
+                                               y = 下辺Y - rc.Height;
+
+                                               jump = this._ジャンプインデックス値 - ( ( ( 桁数 - i ) - 1 ) * _桁ごとのジャンプの遅れ );
+                                               if( ( 0 <= jump ) && ( 180 > jump ) )
+                                                       y += this._ジャンプ差分値[ jump ];
+
+                                               this._数値と単位の画像.描画する( gd, x, y, _不透明度0to1, 転送元矩形: rc );
                                        }
+                                       //-----------------
+                                       #endregion
                                }
                        }
 
 
-                       private int _表示する数値 = 0;
-
-                       private bool _表示する = false;
-
                        private int _現在の数値 = -1;
 
                        private 画像 _数値と単位の画像 = null;
@@ -388,8 +336,6 @@ namespace SST.ステージ.演奏
                        private int[] _ジャンプ差分値 = new int[ 180 ];
 
                        private 定間隔進行 _ジャンプインデックス進行 = null;
-
-                       private readonly object _スレッド間同期 = new object();
                }
        }
 }
index bf5702e..1ea7b04 100644 (file)
@@ -21,38 +21,32 @@ namespace SST.ステージ.演奏
 
                public void 表示開始( 表示レーン種別 laneType, ヒットランク種別 hitRankType )
                {
-                       lock( this._スレッド間同期 )
-                       {
-                               if( laneType == 表示レーン種別.Unknown )
-                                       return;
+                       if( laneType == 表示レーン種別.Unknown )
+                               return;
 
-                               // レーンに対応する進行描画コンテキストを更新し、表示を開始するためのパラメータを設定する。
-                               if( this._表示レーンto進行描画コンテキスト.ContainsKey( laneType ) ) // すでにあったら、
-                                       this._表示レーンto進行描画コンテキスト.Remove( laneType );       // 削除してから、
+                       // レーンに対応する進行描画コンテキストを更新し、表示を開始するためのパラメータを設定する。
+                       if( this._表示レーンto進行描画コンテキスト.ContainsKey( laneType ) ) // すでにあったら、
+                               this._表示レーンto進行描画コンテキスト.Remove( laneType );       // 削除してから、
 
-                               this._表示レーンto進行描画コンテキスト.Add(                                                                // 追加。
-                                       laneType,
-                                       new 進行描画コンテキスト() {
-                                               ヒットランク種別 = hitRankType,
-                                               進行カウンタ = new FDK.カウンタ.Counter( 最初の値: 0, 最後の値: 300, 値をひとつ増加させるのにかける時間ms: 1 ),    // カウント開始(=表示開始)
+                       this._表示レーンto進行描画コンテキスト.Add(                                  // 追加。
+                               laneType,
+                               new 進行描画コンテキスト() {
+                                       ヒットランク種別 = hitRankType,
+                                       進行カウンタ = new FDK.カウンタ.Counter( 最初の値: 0, 最後の値: 300, 値をひとつ増加させるのにかける時間ms: 1 ),    // カウント開始(=表示開始)
                                                X方向拡大率 = 1f,
-                                               Y方向拡大率 = 1f,
-                                               相対X座標 = 0,
-                                               相対Y座標 = 0,
-                                               透明度0to1 = 1f,
-                                       } );
-                       }
+                                       Y方向拡大率 = 1f,
+                                       相対X座標 = 0,
+                                       相対Y座標 = 0,
+                                       透明度0to1 = 1f,
+                               } );
                }
 
                public void 表示開始( チップ種別 chipType, ヒットランク種別 hitRankType )
                {
-                       lock( this._スレッド間同期 )
-                       {
-                               var laneType = App.ユーザ管理.選択されているユーザ.オプション設定.ドラムとチップと入力の対応表[ chipType ].表示レーン種別;
+                       var laneType = App.ユーザ管理.選択されているユーザ.オプション設定.ドラムとチップと入力の対応表[ chipType ].表示レーン種別;
 
-                               if( laneType != 表示レーン種別.Unknown )
-                                       this.表示開始( laneType, hitRankType );
-                       }
+                       if( laneType != 表示レーン種別.Unknown )
+                               this.表示開始( laneType, hitRankType );
                }
 
                protected override void On活性化( グラフィックデバイス gd )
@@ -68,140 +62,138 @@ namespace SST.ステージ.演奏
                        this._表示レーンto進行描画コンテキスト.Clear();
                }
 
-               public void 進行する()
+               public void 進行描画する( グラフィックデバイス gd, float レーンフレームの左端 )
                {
-                       lock( this._スレッド間同期 )
+                       #region " 進行 "
+                       //----------------
+                       foreach( 表示レーン種別 lane in Enum.GetValues( typeof( 表示レーン種別 ) ) )
                        {
-                               foreach( 表示レーン種別 lane in Enum.GetValues( typeof( 表示レーン種別 ) ) )
-                               {
-                                       var context = this._表示レーンto進行描画コンテキスト[ lane ];
+                               var context = this._表示レーンto進行描画コンテキスト[ lane ];
 
-                                       if( context.進行カウンタ.停止中である )
-                                               continue;   // カウンタが停止中 → このレーンについては何もしない。
+                               if( context.進行カウンタ.停止中である )
+                                       continue;   // カウンタが停止中 → このレーンについては何もしない。
 
-                                       if( context.進行カウンタ.終了値に達した )
+                               if( context.進行カウンタ.終了値に達した )
+                               {
+                                       #region " 進行カウンタが終了値に達したら停止 → 表示完了。"
+                                       //----------------
+                                       context.進行カウンタ.一時停止する();
+                                       continue;
+                                       //----------------
+                                       #endregion
+                               }
+
+                               if( context.ヒットランク種別 != ヒットランク種別.MISS )
+                               {
+                                       #region " (A) Perfect, Great, Good, Poor, Auto のアニメーション進行。"
+                                       //-----------------
+                                       if( context.進行カウンタ.現在値 < 50 )
                                        {
-                                               #region " 進行カウンタが終了値に達したら停止 → 表示完了。"
-                                               //----------------
-                                               context.進行カウンタ.一時停止する();
-                                               continue;
-                                               //----------------
-                                               #endregion
+                                               // (B-a) 0~49
+                                               context.X方向拡大率 = 1.0f + ( 1.0f * ( 1.0f - ( context.進行カウンタ.現在値 / 50.0f ) ) );
+                                               context.Y方向拡大率 = context.進行カウンタ.現在値 / 50.0f;
+                                               context.相対X座標 = 0;
+                                               context.相対Y座標 = 0;
+                                               context.透明度0to1 = 1.0f;
                                        }
-
-                                       if( context.ヒットランク種別 != ヒットランク種別.MISS )
+                                       else if( context.進行カウンタ.現在値 < 130 )
                                        {
-                                               #region " (A) Perfect, Great, Good, Poor, Auto のアニメーション進行。"
-                                               //-----------------
-                                               if( context.進行カウンタ.現在値 < 50 )
-                                               {
-                                                       // (B-a) 0~49
-                                                       context.X方向拡大率 = 1.0f + ( 1.0f * ( 1.0f - ( context.進行カウンタ.現在値 / 50.0f ) ) );
-                                                       context.Y方向拡大率 = context.進行カウンタ.現在値 / 50.0f;
-                                                       context.相対X座標 = 0;
-                                                       context.相対Y座標 = 0;
-                                                       context.透明度0to1 = 1.0f;
-                                               }
-                                               else if( context.進行カウンタ.現在値 < 130 )
-                                               {
-                                                       // (B-b) 50~129
-                                                       context.X方向拡大率 = 1.0f;
-                                                       context.Y方向拡大率 = 1.0f;
-                                                       context.相対X座標 = 0;
-                                                       context.相対Y座標 = ( ( context.進行カウンタ.現在値 % 6 ) == 0 ) ? ( App.乱数.Next( 6 ) - 3 ) : context.相対Y座標;
-                                                       context.透明度0to1 = 1.0f;
-                                               }
-                                               else if( context.進行カウンタ.現在値 < 240 )
-                                               {
-                                                       // (B-c) 130~239
-                                                       context.X方向拡大率 = 1.0f;
-                                                       context.Y方向拡大率 = 1.0f;
-                                                       context.相対X座標 = 0;
-                                                       context.相対Y座標 = 0;
-                                                       context.透明度0to1 = 1.0f;
-                                               }
-                                               else
-                                               {
-                                                       // (B-d) 240~300
-                                                       context.X方向拡大率 = 1.0f;
-                                                       context.Y方向拡大率 = 1.0f - ( ( 1.0f * ( context.進行カウンタ.現在値 - 240 ) ) / 60.0f );
-                                                       context.相対X座標 = 0;
-                                                       context.相対Y座標 = 0;
-                                                       context.透明度0to1 = 1.0f;
-                                               }
-                                               //-----------------
-                                               #endregion
+                                               // (B-b) 50~129
+                                               context.X方向拡大率 = 1.0f;
+                                               context.Y方向拡大率 = 1.0f;
+                                               context.相対X座標 = 0;
+                                               context.相対Y座標 = ( ( context.進行カウンタ.現在値 % 6 ) == 0 ) ? ( App.乱数.Next( 6 ) - 3 ) : context.相対Y座標;
+                                               context.透明度0to1 = 1.0f;
+                                       }
+                                       else if( context.進行カウンタ.現在値 < 240 )
+                                       {
+                                               // (B-c) 130~239
+                                               context.X方向拡大率 = 1.0f;
+                                               context.Y方向拡大率 = 1.0f;
+                                               context.相対X座標 = 0;
+                                               context.相対Y座標 = 0;
+                                               context.透明度0to1 = 1.0f;
                                        }
                                        else
                                        {
-                                               #region " (B) Miss のアニメーション進行だけ他とは違ってたり。"
-                                               //-----------------
-                                               if( context.進行カウンタ.現在値 < 50 )
-                                               {
-                                                       // (A-a) 0~49
-                                                       context.X方向拡大率 = 1.0f;
-                                                       context.Y方向拡大率 = context.進行カウンタ.現在値 / 50.0f;
-                                                       context.相対X座標 = 0;
-                                                       context.相対Y座標 = 0;
-                                                       context.透明度0to1 = 1.0f;
-                                               }
-                                               else if( context.進行カウンタ.現在値 < 200 )
-                                               {
-                                                       // (A-b) 50~199
-                                                       context.X方向拡大率 = 1.0f;
-                                                       context.Y方向拡大率 = 1.0f;
-                                                       context.相対X座標 = 0;
-                                                       context.相対Y座標 = 0;
-                                                       context.透明度0to1 = 1.0f;
-                                               }
-                                               else
-                                               {
-                                                       // (A-c) 200~300
-                                                       context.X方向拡大率 = 1.0f - ( ( context.進行カウンタ.現在値 - 200 ) / 100.0f );
-                                                       context.Y方向拡大率 = 1.0f - ( ( context.進行カウンタ.現在値 - 200 ) / 100.0f );
-                                                       context.相対X座標 = 0;
-                                                       context.相対Y座標 = 0;
-                                                       context.透明度0to1 = 1.0f;
-                                               }
-                                               //-----------------
-                                               #endregion
+                                               // (B-d) 240~300
+                                               context.X方向拡大率 = 1.0f;
+                                               context.Y方向拡大率 = 1.0f - ( ( 1.0f * ( context.進行カウンタ.現在値 - 240 ) ) / 60.0f );
+                                               context.相対X座標 = 0;
+                                               context.相対Y座標 = 0;
+                                               context.透明度0to1 = 1.0f;
                                        }
-
+                                       //-----------------
+                                       #endregion
+                               }
+                               else
+                               {
+                                       #region " (B) Miss のアニメーション進行だけ他とは違ってたり。"
+                                       //-----------------
+                                       if( context.進行カウンタ.現在値 < 50 )
+                                       {
+                                               // (A-a) 0~49
+                                               context.X方向拡大率 = 1.0f;
+                                               context.Y方向拡大率 = context.進行カウンタ.現在値 / 50.0f;
+                                               context.相対X座標 = 0;
+                                               context.相対Y座標 = 0;
+                                               context.透明度0to1 = 1.0f;
+                                       }
+                                       else if( context.進行カウンタ.現在値 < 200 )
+                                       {
+                                               // (A-b) 50~199
+                                               context.X方向拡大率 = 1.0f;
+                                               context.Y方向拡大率 = 1.0f;
+                                               context.相対X座標 = 0;
+                                               context.相対Y座標 = 0;
+                                               context.透明度0to1 = 1.0f;
+                                       }
+                                       else
+                                       {
+                                               // (A-c) 200~300
+                                               context.X方向拡大率 = 1.0f - ( ( context.進行カウンタ.現在値 - 200 ) / 100.0f );
+                                               context.Y方向拡大率 = 1.0f - ( ( context.進行カウンタ.現在値 - 200 ) / 100.0f );
+                                               context.相対X座標 = 0;
+                                               context.相対Y座標 = 0;
+                                               context.透明度0to1 = 1.0f;
+                                       }
+                                       //-----------------
+                                       #endregion
                                }
                        }
-               }
+                       //----------------
+                       #endregion
 
-               public void 描画する( グラフィックデバイス gd, float レーンフレームの左端 )
-               {
-                       lock( this._スレッド間同期 )
+                       #region " 描画 "
+                       //----------------
+                       foreach( 表示レーン種別 lane in Enum.GetValues( typeof( 表示レーン種別 ) ) )
                        {
-                               foreach( 表示レーン種別 lane in Enum.GetValues( typeof( 表示レーン種別 ) ) )
-                               {
-                                       var context = this._表示レーンto進行描画コンテキスト[ lane ];
+                               var context = this._表示レーンto進行描画コンテキスト[ lane ];
 
-                                       if( context.進行カウンタ.停止中である )
-                                               continue;   // カウンタが停止中 → このレーンについては何もしない。
+                               if( context.進行カウンタ.停止中である )
+                                       continue;   // カウンタが停止中 → このレーンについては何もしない。
 
-                                       var 判定文字列の画像 = this._ヒットランク画像[ context.ヒットランク種別 ];
-                                       if( 判定文字列の画像.生成失敗 )
-                                               return;
+                               var 判定文字列の画像 = this._ヒットランク画像[ context.ヒットランク種別 ];
+                               if( 判定文字列の画像.生成失敗 )
+                                       return;
 
-                                       var 判定文字列の左上端位置 =
-                                               new Vector2( context.相対X座標, context.相対Y座標 )
-                                               + new Vector2( レーンフレームの左端 + レーンフレーム.レーンto横中央相対位置[ lane ], this._表示レーンtoレーン表示縦中央位置[ lane ] )
-                                               + new Vector2(
-                                                       -( ( 判定文字列の画像.サイズ.Width * context.X方向拡大率 ) / 2f ),
-                                                       -( ( 判定文字列の画像.サイズ.Height * context.Y方向拡大率 ) / 2f ) );
+                               var 判定文字列の左上端位置 =
+                                       new Vector2( context.相対X座標, context.相対Y座標 )
+                                       + new Vector2( レーンフレームの左端 + レーンフレーム.レーンto横中央相対位置[ lane ], this._表示レーンtoレーン表示縦中央位置[ lane ] )
+                                       + new Vector2(
+                                               -( ( 判定文字列の画像.サイズ.Width * context.X方向拡大率 ) / 2f ),
+                                               -( ( 判定文字列の画像.サイズ.Height * context.Y方向拡大率 ) / 2f ) );
 
-                                       判定文字列の画像?.描画する(
-                                               gd,
-                                               左位置: 判定文字列の左上端位置.X,
-                                               上位置: 判定文字列の左上端位置.Y,
-                                               不透明度0to1: context.透明度0to1,
-                                               X方向拡大率: context.X方向拡大率,
-                                               Y方向拡大率: context.Y方向拡大率 );
-                               }
+                               判定文字列の画像?.描画する(
+                                       gd,
+                                       左位置: 判定文字列の左上端位置.X,
+                                       上位置: 判定文字列の左上端位置.Y,
+                                       不透明度0to1: context.透明度0to1,
+                                       X方向拡大率: context.X方向拡大率,
+                                       Y方向拡大率: context.Y方向拡大率 );
                        }
+                       //----------------
+                       #endregion
                }
 
 
@@ -274,7 +266,5 @@ namespace SST.ステージ.演奏
                        { 表示レーン種別.Tom3, 798f },
                        { 表示レーン種別.RightCrash, 633f },
                };
-
-               private readonly object _スレッド間同期 = new object();
        }
 }
index 2a492a9..440ba45 100644 (file)
@@ -16,21 +16,9 @@ namespace SST.ステージ.演奏
        {
                public float 高さ
                {
-                       get
-                       {
-                               lock( this._スレッド間同期 )
-                               {
-                                       return this._高さ;
-                               }
-                       }
-                       set
-                       {
-                               lock( this._スレッド間同期 )
-                               {
-                                       this._高さ = value;
-                               }
-                       }
-               }
+                       get;
+                       set;
+               } = 1080f;
 
                /// <summary>
                ///             レーンフレーム左端から各レーンの中央位置までの相対距離。
@@ -72,42 +60,39 @@ namespace SST.ステージ.演奏
                        };
                }
 
-               public void フラッシュ開始( 表示レーン種別 laneType )
+               protected override void On非活性化( グラフィックデバイス gd )
                {
-                       this._フラッシュ情報[ laneType ].Item1.開始する( 0, 10, 15 );
                }
 
-               public void 進行する()
+               public void フラッシュ開始( 表示レーン種別 laneType )
                {
+                       this._フラッシュ情報[ laneType ].Item1.開始する( 0, 10, 15 );
                }
 
-               public void 描画する( グラフィックデバイス gd, float 左端 )
+               public void 進行描画する( グラフィックデバイス gd, float 左端 )
                {
-                       lock( this._スレッド間同期 )
-                       {
-                               // (1) レーンフレームを描画する。
-                               this._レーンフレーム画像.描画する( gd, 左端, 0f );
+                       // (1) レーンフレームを描画する。
+                       this._レーンフレーム画像.描画する( gd, 左端, 0f );
 
-                               // (2) レーンフラッシュを描画する。
-                               var フラッシュ破片のサイズ = new SharpDX.Size2F( 16f, 32f );
-                               foreach( var kvp in this._フラッシュ情報 )
+                       // (2) レーンフラッシュを描画する。
+                       var フラッシュ破片のサイズ = new SharpDX.Size2F( 16f, 32f );
+                       foreach( var kvp in this._フラッシュ情報 )
+                       {
+                               if( this._フラッシュ情報[ kvp.Key ].Item1.終了値に達していない )
                                {
-                                       if( this._フラッシュ情報[ kvp.Key ].Item1.終了値に達していない )
-                                       {
-                                               float 割合 = this._フラッシュ情報[ kvp.Key ].Item1.現在値の割合;   // 0 → 1
-                                               float 横拡大率 = 0.2f + 0.8f * 割合;      // 0.2 → 1.0
-                                               割合 = (float) Math.Cos( 割合 * Math.PI / 2f );     // 1 → 0(加速しながら)
+                                       float 割合 = this._フラッシュ情報[ kvp.Key ].Item1.現在値の割合;   // 0 → 1
+                                       float 横拡大率 = 0.2f + 0.8f * 割合;  // 0.2 → 1.0
+                                       割合 = (float) Math.Cos( 割合 * Math.PI / 2f );     // 1 → 0(加速しながら)
 
-                                               for( float y = ( 演奏ステージ.ヒット判定バーの中央Y座標 - フラッシュ破片のサイズ.Height ); y > -( フラッシュ破片のサイズ.Height ); y -= フラッシュ破片のサイズ.Height )
-                                               {
-                                                       this._フラッシュ破片.描画する(
-                                                               gd,
-                                                               演奏ステージ.レーンフレームの左端位置 + レーンフレーム.レーンto横中央相対位置[ kvp.Key ] - ( フラッシュ破片のサイズ.Width * 横拡大率 ) / 2f,
-                                                               y,
-                                                               不透明度0to1: 割合 * 0.75f,   // ちょっと暗めに。
-                                                               転送元矩形: this._フラッシュ情報[ kvp.Key ].Item2,
-                                                               X方向拡大率: 横拡大率 );
-                                               }
+                                       for( float y = ( 演奏ステージ.ヒット判定バーの中央Y座標 - フラッシュ破片のサイズ.Height ); y > -( フラッシュ破片のサイズ.Height ); y -= フラッシュ破片のサイズ.Height )
+                                       {
+                                               this._フラッシュ破片.描画する(
+                                                       gd,
+                                                       演奏ステージ.レーンフレームの左端位置 + レーンフレーム.レーンto横中央相対位置[ kvp.Key ] - ( フラッシュ破片のサイズ.Width * 横拡大率 ) / 2f,
+                                                       y,
+                                                       不透明度0to1: 割合 * 0.75f,   // ちょっと暗めに。
+                                                       転送元矩形: this._フラッシュ情報[ kvp.Key ].Item2,
+                                                       X方向拡大率: 横拡大率 );
                                        }
                                }
                        }
@@ -116,12 +101,8 @@ namespace SST.ステージ.演奏
 
                private 画像 _レーンフレーム画像 = null;
 
-               private float _高さ = 1080f;
-
                private 画像 _フラッシュ破片 = null;
 
                private Dictionary<表示レーン種別, (Counter, SharpDX.RectangleF)> _フラッシュ情報 = null;
-
-               private readonly object _スレッド間同期 = new object();
        }
 }
index 9978327..1a38ea9 100644 (file)
@@ -24,26 +24,23 @@ namespace SST.ステージ.演奏
 
                public void 発火する( Vector2 中央位置 )
                {
-                       lock( this._スレッド間同期 )
-                       {
-                               float 開始角度 = App.乱数.Next( 360 );
+                       float 開始角度 = App.乱数.Next( 360 );
 
-                               // 羽を、小羽大羽あわせて 8 枚登録。
-                               int i = 0;
-                               for( int 羽番号 = 0; 羽番号 < 8; 羽番号++ ) // 0~3:大羽、4~7:小羽、計8枚。
+                       // 羽を、小羽大羽あわせて 8 枚登録。
+                       int i = 0;
+                       for( int 羽番号 = 0; 羽番号 < 8; 羽番号++ ) // 0~3:大羽、4~7:小羽、計8枚。
+                       {
+                               for( ; i < this._コンテキスト.Length; i++ )    // 空いているコンテキストを探す。
                                {
-                                       for( ; i < this._コンテキスト.Length; i++ )    // 空いているコンテキストを探す。
+                                       if( false == this._コンテキスト[ i ].使用中 )
                                        {
-                                               if( false == this._コンテキスト[ i ].使用中 )
-                                               {
-                                                       this._コンテキスト[ i ].使用中 = true;
-                                                       this._コンテキスト[ i ].中央位置 = 中央位置;
-                                                       this._コンテキスト[ i ].回転開始角度 = MathUtil.DegreesToRadians( 開始角度 + ( 羽番号 * 90.0f ) );  // 回転開始角度 = 0, 90, 180, 270, 0, 90, 180, 270
-                                                       this._コンテキスト[ i ].回転速度 = ( 羽番号 < 4 ) ? -1.5f : 1.5f; // 小羽と大羽は反対の方向に回転する
-                                                       this._コンテキスト[ i ].サイズ = ( 羽番号 < 4 ) ? 1.0f : 0.6f;   // 小羽は大羽の0.6倍
-                                                       this._コンテキスト[ i ].進行カウンタ = new Counter( 最初の値: 0, 最後の値: 70, 値をひとつ増加させるのにかける時間ms: 3 );    // 0 to 70 (210ms)
-                                                       break;
-                                               }
+                                               this._コンテキスト[ i ].使用中 = true;
+                                               this._コンテキスト[ i ].中央位置 = 中央位置;
+                                               this._コンテキスト[ i ].回転開始角度 = MathUtil.DegreesToRadians( 開始角度 + ( 羽番号 * 90.0f ) );  // 回転開始角度 = 0, 90, 180, 270, 0, 90, 180, 270
+                                               this._コンテキスト[ i ].回転速度 = ( 羽番号 < 4 ) ? -1.5f : 1.5f; // 小羽と大羽は反対の方向に回転する
+                                               this._コンテキスト[ i ].サイズ = ( 羽番号 < 4 ) ? 1.0f : 0.6f;   // 小羽は大羽の0.6倍
+                                               this._コンテキスト[ i ].進行カウンタ = new Counter( 最初の値: 0, 最後の値: 70, 値をひとつ増加させるのにかける時間ms: 3 );    // 0 to 70 (210ms)
+                                               break;
                                        }
                                }
                        }
@@ -65,54 +62,37 @@ namespace SST.ステージ.演奏
                {
                }
 
-               public void 進行する()
+               public void 進行描画する( グラフィックデバイス gd )
                {
-                       lock( this._スレッド間同期 )
+                       for( int i = 0; i < this._コンテキスト.Length; i++ )
                        {
-                               for( int i = 0; i < this._コンテキスト.Length; i++ )
-                               {
-                                       var context = this._コンテキスト[ i ];
+                               var context = this._コンテキスト[ i ];
 
-                                       if( false == context.使用中 )
-                                               continue;   // 未使用の羽はスキップする。
-
-                                       // 進行が終了した羽は未使用状態に戻す。
-                                       if( context.進行カウンタ.終了値に達した )
-                                       {
-                                               context.進行カウンタ.一時停止する();
-                                               context.使用中 = false;
-                                               continue;
-                                       }
-                               }
-                       }
-               }
+                               if( false == context.使用中 )
+                                       continue;   // 未使用の羽はスキップする。
 
-               public void 描画する( グラフィックデバイス gd )
-               {
-                       lock( this._スレッド間同期 )
-                       {
-                               for( int i = 0; i < this._コンテキスト.Length; i++ )
+                               // 進行が終了した羽は未使用状態に戻す。
+                               if( context.進行カウンタ.終了値に達した )
                                {
-                                       var context = this._コンテキスト[ i ];
-
-                                       if( false == context.使用中 )
-                                               continue;   // 未使用の羽はスキップする。
+                                       context.進行カウンタ.一時停止する();
+                                       context.使用中 = false;
+                                       continue;
+                               }
 
-                                       // 現在の進行カウンタの進行割合に応じて、Z軸回転率・幅拡大率・移動量を計算する。
-                                       float 進行割合0to1 = context.進行カウンタ.現在値の割合;
-                                       float Z軸回転率 = context.回転開始角度 + ( context.回転速度 * MathUtil.DegreesToRadians( 60.0f * 進行割合0to1 ) ); // 0→1 のとき 0→60度(等速で)
-                                       float 幅拡大率 = (float) ( ( 0.1 + 0.9 * Math.Cos( 進行割合0to1 * Math.PI / 2.0 ) ) * context.サイズ );    // 0→1 のとき 1.0→0.1(加速しながら)
-                                       float 平行移動量 = (float) ( Math.Sin( 進行割合0to1 * Math.PI / 2.0 ) * context.サイズ * 10.0f ); // 0→1 のとき 0→サイズ(減速しながら)
+                               // 現在の進行カウンタの進行割合に応じて、Z軸回転率・幅拡大率・移動量を計算する。
+                               float 進行割合0to1 = context.進行カウンタ.現在値の割合;
+                               float Z軸回転率 = context.回転開始角度 + ( context.回転速度 * MathUtil.DegreesToRadians( 60.0f * 進行割合0to1 ) ); // 0→1 のとき 0→60度(等速で)
+                               float 幅拡大率 = (float) ( ( 0.1 + 0.9 * Math.Cos( 進行割合0to1 * Math.PI / 2.0 ) ) * context.サイズ );    // 0→1 のとき 1.0→0.1(加速しながら)
+                               float 平行移動量 = (float) ( Math.Sin( 進行割合0to1 * Math.PI / 2.0 ) * context.サイズ * 10.0f ); // 0→1 のとき 0→サイズ(減速しながら)
 
-                                       // 1枚描画する。
-                                       var 変換行列2D =
-                                               Matrix3x2.Translation( 平行移動量, 平行移動量 )  //   平行移動(1)
-                                               * Matrix3x2.Scaling( 0.2f + 幅拡大率, 0.2f + context.サイズ )  // スケーリング
-                                               * Matrix3x2.Rotation( Z軸回転率 )   //Z軸回転; 画像の左上端が中心。
-                                               * Matrix3x2.Translation( context.中央位置.X, context.中央位置.Y );   // 平行移動(2)
+                               // 1枚描画する。
+                               var 変換行列2D =
+                                       Matrix3x2.Translation( 平行移動量, 平行移動量 )  //   平行移動(1)
+                                       * Matrix3x2.Scaling( 0.2f + 幅拡大率, 0.2f + context.サイズ )  // スケーリング
+                                       * Matrix3x2.Rotation( Z軸回転率 )   //Z軸回転; 画像の左上端が中心。
+                                       * Matrix3x2.Translation( context.中央位置.X, context.中央位置.Y );   // 平行移動(2)
 
-                                       this._羽画像.描画する( gd, 変換行列2D );
-                               }
+                               this._羽画像.描画する( gd, 変換行列2D );
                        }
                }
 
@@ -129,7 +109,5 @@ namespace SST.ステージ.演奏
                private コンテキスト[] _コンテキスト = null;
 
                private 画像 _羽画像 = null;
-
-               private readonly object _スレッド間同期 = new object();
        }
 }
index bf49552..30cd7ee 100644 (file)
@@ -199,58 +199,6 @@ namespace SST.ステージ.演奏
 
                                                this._FPS.FPSをカウントしプロパティを更新する();
 
-                                               #region " 譜面スクロール速度が変化している → 追い付き進行 "
-                                               //----------------
-                                               {
-                                                       double 倍率 = this._現在進行描画中の譜面スクロール速度の倍率;
-
-                                                       if( 倍率 < App.ユーザ管理.選択されているユーザ.オプション設定.譜面スクロール速度の倍率 )
-                                                       {
-                                                               if( 0 > this._スクロール倍率追い付き用_最後の値 )
-                                                               {
-                                                                       this._スクロール倍率追い付き用カウンタ = new LoopCounter( 0, 1000, 10 );    // 0→100; 全部で10×1000 = 10000ms = 10sec あれば十分だろう
-                                                                       this._スクロール倍率追い付き用_最後の値 = 0;
-                                                               }
-                                                               else
-                                                               {
-                                                                       while( this._スクロール倍率追い付き用_最後の値 < this._スクロール倍率追い付き用カウンタ.現在値 )
-                                                                       {
-                                                                               倍率 += 0.025;
-                                                                               this._スクロール倍率追い付き用_最後の値++;
-                                                                       }
-
-                                                                       this._現在進行描画中の譜面スクロール速度の倍率 =
-                                                                               Math.Min( 倍率, App.ユーザ管理.選択されているユーザ.オプション設定.譜面スクロール速度の倍率 );
-                                                               }
-                                                       }
-                                                       else if( 倍率 > App.ユーザ管理.選択されているユーザ.オプション設定.譜面スクロール速度の倍率 )
-                                                       {
-                                                               if( 0 > this._スクロール倍率追い付き用_最後の値 )
-                                                               {
-                                                                       this._スクロール倍率追い付き用カウンタ = new LoopCounter( 0, 1000, 10 );    // 0→100; 全部で10×1000 = 10000ms = 10sec あれば十分だろう
-                                                                       this._スクロール倍率追い付き用_最後の値 = 0;
-                                                               }
-                                                               else
-                                                               {
-                                                                       while( this._スクロール倍率追い付き用_最後の値 < this._スクロール倍率追い付き用カウンタ.現在値 )
-                                                                       {
-                                                                               倍率 -= 0.025;
-                                                                               this._スクロール倍率追い付き用_最後の値++;
-                                                                       }
-
-                                                                       this._現在進行描画中の譜面スクロール速度の倍率 =
-                                                                               Math.Max( 倍率, App.ユーザ管理.選択されているユーザ.オプション設定.譜面スクロール速度の倍率 );
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               this._スクロール倍率追い付き用_最後の値 = -1;
-                                                               this._スクロール倍率追い付き用カウンタ = null;
-                                                       }
-                                               }
-                                               //----------------
-                                               #endregion
-
                                                #region " 背景動画が再生されているのにBGMがまだ再生されていないなら、すぐに再生を開始する。"
                                                //----------------
                                                if( this._背景動画開始済み && !( this._BGM再生開始済み ) )
@@ -261,12 +209,6 @@ namespace SST.ステージ.演奏
                                                //----------------
                                                #endregion
 
-                                               this._レーンフレーム.進行する();
-                                               this._コンボ.進行する();
-                                               this._ヒットランク.進行する();
-                                               this._ドラムセット.進行する();
-                                               this._回転羽.進行する();
-
                                                double 現在の演奏時刻sec = this._演奏開始からの経過時間secを返す();
 
                                                #region " 自動ヒット処理。"
@@ -463,36 +405,10 @@ namespace SST.ステージ.演奏
                                        //----------------
                                        #endregion
                                        break;
-
-                               case フェーズ.クリア時フェードアウト:
-                                       #region " *** "
-                                       //----------------
-                                       if( this._クリア時フェードアウト.開始されていない )
-                                       {
-                                               this._クリア時フェードアウト.開始する();
-                                       }
-                                       else
-                                       {
-                                               this._クリア時フェードアウト.進行する();
-
-                                               if( this._クリア時フェードアウト.完了した )
-                                               {
-                                                       this.現在のフェーズ = フェーズ.クリア;
-                                               }
-                                       }
-                                       //----------------
-                                       #endregion
-                                       break;
-
-                               case フェーズ.Failed:
-                               case フェーズ.クリア:
-                               case フェーズ.キャンセル:
-                               case フェーズ.ビュアーメッセージ待機:
-                                       break;
                        }
                }
 
-               public override void 描画する( グラフィックデバイス gd )
+               public override void 進行描画する( グラフィックデバイス gd )
                {
                        Debug.Assert( this.活性化している );
                        Debug.Assert( null != gd );
@@ -503,6 +419,61 @@ namespace SST.ステージ.演奏
                                        if( this._活性化した直後である )
                                                break;  // 進行処理がまだ行われていない。
 
+                                       #region " 譜面スクロール速度が変化している → 追い付き進行 "
+                                       //----------------
+                                       {
+                                               double 倍率 = this._現在進行描画中の譜面スクロール速度の倍率;
+
+                                               if( 倍率 < App.ユーザ管理.選択されているユーザ.オプション設定.譜面スクロール速度の倍率 )
+                                               {
+                                                       if( 0 > this._スクロール倍率追い付き用_最後の値 )
+                                                       {
+                                                               this._スクロール倍率追い付き用カウンタ = new LoopCounter( 0, 1000, 10 );    // 0→100; 全部で10×1000 = 10000ms = 10sec あれば十分だろう
+                                                               this._スクロール倍率追い付き用_最後の値 = 0;
+                                                       }
+                                                       else
+                                                       {
+                                                               while( this._スクロール倍率追い付き用_最後の値 < this._スクロール倍率追い付き用カウンタ.現在値 )
+                                                               {
+                                                                       倍率 += 0.025;
+                                                                       this._スクロール倍率追い付き用_最後の値++;
+                                                               }
+
+                                                               this._現在進行描画中の譜面スクロール速度の倍率 =
+                                                                       Math.Min( 倍率, App.ユーザ管理.選択されているユーザ.オプション設定.譜面スクロール速度の倍率 );
+                                                       }
+                                               }
+                                               else if( 倍率 > App.ユーザ管理.選択されているユーザ.オプション設定.譜面スクロール速度の倍率 )
+                                               {
+                                                       if( 0 > this._スクロール倍率追い付き用_最後の値 )
+                                                       {
+                                                               this._スクロール倍率追い付き用カウンタ = new LoopCounter( 0, 1000, 10 );    // 0→100; 全部で10×1000 = 10000ms = 10sec あれば十分だろう
+                                                               this._スクロール倍率追い付き用_最後の値 = 0;
+                                                       }
+                                                       else
+                                                       {
+                                                               while( this._スクロール倍率追い付き用_最後の値 < this._スクロール倍率追い付き用カウンタ.現在値 )
+                                                               {
+                                                                       倍率 -= 0.025;
+                                                                       this._スクロール倍率追い付き用_最後の値++;
+                                                               }
+
+                                                               this._現在進行描画中の譜面スクロール速度の倍率 =
+                                                                       Math.Max( 倍率, App.ユーザ管理.選択されているユーザ.オプション設定.譜面スクロール速度の倍率 );
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       this._スクロール倍率追い付き用_最後の値 = -1;
+                                                       this._スクロール倍率追い付き用カウンタ = null;
+                                               }
+                                       }
+                                       //----------------
+                                       #endregion
+
+                                       this._コンボ.進行描画する( gd );
+                                       this._回転羽.進行描画する( gd );
+
                                        double 演奏時刻sec = this._演奏開始からの経過時間secを返す();
 
                                        #region " 背景動画とBGMの進行描画。"
@@ -551,25 +522,36 @@ namespace SST.ステージ.演奏
                                        #endregion
 
                                        this._ステージ台.描画する( gd, 0f, 0f );
-                                       this._レーンフレーム.描画する( gd, レーンフレームの左端位置 );
-                                       this._コンボ.描画する( gd );
-                                       this._ヒットランク.描画する( gd, レーンフレームの左端位置 );
+                                       this._レーンフレーム.進行描画する( gd, レーンフレームの左端位置 );
+                                       this._コンボ.進行描画する( gd );
+                                       this._ヒットランク.進行描画する( gd, レーンフレームの左端位置 );
                                        this._小節線拍線を描画する( gd, 演奏時刻sec );
                                        this._ヒット判定バー.描画する( gd, 597f, ヒット判定バーの中央Y座標 - 43f );
-                                       this._ドラムセット.描画する( gd );
+                                       this._ドラムセット.進行描画する( gd );
                                        this._チップを描画する( gd, 演奏時刻sec );
-                                       this._回転羽.描画する( gd );
+                                       this._回転羽.進行描画する( gd );
                                        this._FPS.VPSをカウントする();
                                        this._FPS.描画する( gd, 0f, 0f );
                                        break;
 
                                case フェーズ.クリア時フェードアウト:
+                                       if( this._クリア時フェードアウト.開始されていない )
+                                       {
+                                               this._クリア時フェードアウト.開始する();
+                                       }
+                                       else
+                                       {
+                                               if( this._クリア時フェードアウト.完了した )
+                                               {
+                                                       this.現在のフェーズ = フェーズ.クリア;
+                                               }
+                                       }
                                        this._ステージ台.描画する( gd, 0f, 0f );
-                                       this._レーンフレーム.描画する( gd, レーンフレームの左端位置 );
+                                       this._レーンフレーム.進行描画する( gd, レーンフレームの左端位置 );
                                        this._ヒット判定バー.描画する( gd, 597f, ヒット判定バーの中央Y座標 - 43f );
-                                       this._ドラムセット.描画する( gd );
-                                       this._回転羽.描画する( gd );
-                                       this._クリア時フェードアウト.描画する( gd, this._白パネル );
+                                       this._ドラムセット.進行描画する( gd );
+                                       this._回転羽.進行描画する( gd );
+                                       this._クリア時フェードアウト.進行描画する( gd, this._白パネル );
                                        this._FPS.VPSをカウントする();
                                        this._FPS.描画する( gd, 0f, 0f );
                                        break;
index 7403cb9..a12ea41 100644 (file)
@@ -7,8 +7,6 @@ using SharpDX.DirectInput;
 using FDK;
 using FDK.メディア;
 
-using FDKUtilities = FDK.FDKUtilities;
-
 namespace SST.ステージ.結果
 {
        class 結果ステージ : ステージ
@@ -55,64 +53,59 @@ namespace SST.ステージ.結果
                        }
                }
 
-               public override void é«\98é\80\9fé\80²è¡\8cã\81\99ã\82\8b()
+               public override void é\80²è¡\8cæ\8f\8fç\94»ã\81\99ã\82\8b( ã\82°ã\83©ã\83\95ã\82£ã\83\83ã\82¯ã\83\87ã\83\90ã\82¤ã\82¹ gd )
                {
-                       if( this.現在のフェーズ == フェーズ.完了 )
-                               return;
-
                        if( this._活性化した直後である )
                        {
                                this._背景動画.再生を開始する( 開始位置sec: 0.0, ループ再生する: true );
                                this._活性化した直後である = false;
                        }
 
-                       // 入力。
-
-                       App.入力管理.すべての入力デバイスをポーリングする();
-
-                       if( App.入力管理.キーボードデバイス.キーが押された( 0, Key.Escape ) || App.入力管理.シンバルが入力された() )
-                       {
-                               #region " シンバル or ESC → ステージ終了。"
-                               //----------------
-                               this.現在のフェーズ = フェーズ.完了;
-                               //----------------
-                               #endregion
-                       }
-               }
-
-               public override void 描画する( グラフィックデバイス gd )
-               {
-                       if( this.現在のフェーズ == フェーズ.完了 )
-                               return;
-
-                       if( this._活性化した直後である )
-                               return;     // まだ進行処理が行われていない。
-
-                       this._背景動画.描画する( gd, new RectangleF( 0f, 0f, gd.設計画面サイズ.Width, gd.設計画面サイズ.Height ) );
-                       this._背景画像.描画する( gd, 0f, 0f );
-
-                       #region " 結果表示パラメータ "
-                       //----------------
-                       this._結果表示パラメータパネル.描画する( gd, 60f, 196f );
-
-                       var 演奏ステージ = (演奏.演奏ステージ) App.ステージ管理.ステージリスト[ nameof( 演奏.演奏ステージ ) ];
-                       var hitRankTypes = new[] { 演奏.ヒットランク種別.PERFECT, 演奏.ヒットランク種別.GREAT, 演奏.ヒットランク種別.GOOD, 演奏.ヒットランク種別.POOR, 演奏.ヒットランク種別.MISS, 演奏.ヒットランク種別.AUTO };
-
-                       int 総数 = 0;
-                       foreach( var type in hitRankTypes )
-                               総数 += 演奏ステージ.ヒットランク別ヒット回数[ type ];
-
-                       float X = 360f;
-                       float Y = 230f;
-                       foreach( var type in hitRankTypes )
+                       switch( this.現在のフェーズ )
                        {
-                               int 回数 = 演奏ステージ.ヒットランク別ヒット回数[ type ];
-                               double 割合 = ( 0 < 総数 ) ? ( 回数 * 100.0 / 総数 ) : 0.0;
-                               this._結果表示パラメータ.描画する( gd, X, Y, $"{回数:00000}({割合:000.0}%)" );
-                               Y += 71f;
+                               case フェーズ.表示中:
+                                       // 描画
+                                       this._背景動画.描画する( gd, new RectangleF( 0f, 0f, gd.設計画面サイズ.Width, gd.設計画面サイズ.Height ) );
+                                       this._背景画像.描画する( gd, 0f, 0f );
+                                       #region " 結果表示パラメータ "
+                                       //----------------
+                                       this._結果表示パラメータパネル.描画する( gd, 60f, 196f );
+
+                                       var 演奏ステージ = (演奏.演奏ステージ) App.ステージ管理.ステージリスト[ nameof( 演奏.演奏ステージ ) ];
+                                       var hitRankTypes = new[] { 演奏.ヒットランク種別.PERFECT, 演奏.ヒットランク種別.GREAT, 演奏.ヒットランク種別.GOOD, 演奏.ヒットランク種別.POOR, 演奏.ヒットランク種別.MISS, 演奏.ヒットランク種別.AUTO };
+
+                                       int 総数 = 0;
+                                       foreach( var type in hitRankTypes )
+                                               総数 += 演奏ステージ.ヒットランク別ヒット回数[ type ];
+
+                                       float X = 360f;
+                                       float Y = 230f;
+                                       foreach( var type in hitRankTypes )
+                                       {
+                                               int 回数 = 演奏ステージ.ヒットランク別ヒット回数[ type ];
+                                               double 割合 = ( 0 < 総数 ) ? ( 回数 * 100.0 / 総数 ) : 0.0;
+                                               this._結果表示パラメータ.描画する( gd, X, Y, $"{回数:00000}({割合:000.0}%)" );
+                                               Y += 71f;
+                                       }
+                                       //----------------
+                                       #endregion
+
+                                       // 入力
+                                       App.入力管理.すべての入力デバイスをポーリングする();
+
+                                       if( App.入力管理.キーボードデバイス.キーが押された( 0, Key.Escape ) || App.入力管理.シンバルが入力された() )
+                                       {
+                                               #region " シンバル or ESC → ステージ終了。"
+                                               //----------------
+                                               this.現在のフェーズ = フェーズ.完了;
+                                               //----------------
+                                               #endregion
+                                       }
+                                       break;
+
+                               case フェーズ.完了:
+                                       break;
                        }
-                       //----------------
-                       #endregion
                }
 
                private bool _活性化した直後である = false;
index c7ff0f1..e481644 100644 (file)
@@ -57,9 +57,12 @@ namespace SST.ステージ.起動
                        }
                }
 
-               public override void é«\98é\80\9fé\80²è¡\8cã\81\99ã\82\8b()
+               public override void é\80²è¡\8cæ\8f\8fç\94»ã\81\99ã\82\8b( ã\82°ã\83©ã\83\95ã\82£ã\83\83ã\82¯ã\83\87ã\83\90ã\82¤ã\82¹ gd )
                {
                        Debug.Assert( this.活性化している );
+                       Debug.Assert( null != gd );
+
+                       retry:
 
                        switch( this.現在のフェーズ )
                        {
@@ -70,28 +73,41 @@ namespace SST.ステージ.起動
                                        break;
 
                                case フェーズ.フェードイン:
-                                       this._フェードイン.進行する();
                                        if( this._フェードイン.完了した )
                                        {
                                                this._フェーズカウンタ.開始する( 最初の値: 0, 最後の値: 2, 値をひとつ増加させるのにかける時間ms: 1000 );
                                                this.現在のフェーズ = フェーズ.表示;
+                                               goto retry;
+                                       }
+                                       else
+                                       {
+                                               this._背景画像.描画する( gd, 0f, 0f );
+                                               this._フェードイン.進行描画する( gd, this._フェードインアウト用パネル );
                                        }
                                        break;
 
                                case フェーズ.表示:
                                        if( this._フェーズカウンタ.終了値に達した )
                                        {
-                                               this.現在のフェーズ = フェーズ.フェードアウト;
                                                this._フェードアウト.開始する();
+                                               this.現在のフェーズ = フェーズ.フェードアウト;
+                                               goto retry;
+                                       }
+                                       else
+                                       {
+                                               this._背景画像.描画する( gd, 0f, 0f );
                                        }
                                        break;
 
                                case フェーズ.フェードアウト:
-                                       this._フェードアウト.進行する();
                                        if( this._フェードアウト.完了した )
                                        {
                                                this.現在のフェーズ = フェーズ.完了;
+                                               //goto retry;   --> ちらつきが起きるのでコメントアウト
                                        }
+                                       this._背景画像.描画する( gd, 0f, 0f );
+                                       this._フェードアウト.進行描画する( gd, this._フェードインアウト用パネル );
+
                                        break;
 
                                case フェーズ.完了:
@@ -112,35 +128,6 @@ namespace SST.ステージ.起動
                        }
                }
 
-               public override void 描画する( グラフィックデバイス gd )
-               {
-                       Debug.Assert( this.活性化している );
-                       Debug.Assert( null != gd );
-
-                       switch( this.現在のフェーズ )
-                       {
-                               case フェーズ.開始:
-                                       break;
-
-                               case フェーズ.フェードイン:
-                                       this._背景画像.描画する( gd, 0f, 0f );
-                                       this._フェードイン.描画する( gd, this._フェードインアウト用パネル );
-                                       break;
-
-                               case フェーズ.表示:
-                                       this._背景画像.描画する( gd, 0f, 0f );
-                                       break;
-
-                               case フェーズ.フェードアウト:
-                                       this._背景画像.描画する( gd, 0f, 0f );
-                                       this._フェードアウト.描画する( gd, this._フェードインアウト用パネル );
-                                       break;
-
-                               case フェーズ.完了:
-                                       break;
-                       }
-               }
-
 
                private 画像 _背景画像;
 
index 6c9cea6..3fe2ce4 100644 (file)
@@ -62,75 +62,73 @@ namespace SST.ステージ.選曲
                        }
                }
 
-               public void 進行する()
+               public void 進行描画する( グラフィックデバイス gd )
                {
+                       Debug.Assert( this.活性化している );
+
                        if( this._活性化した直後である )
                        {
                                this._活性化した直後である = false;
                                this._横スクロール用カウンタ = new FDK.カウンタ.定間隔進行();
                        }
-                       else
-                       {
-                               #region " 全パネルの横方向スクロール進行残があれば進行する。"
-                               //----------------
-                               this._横スクロール用カウンタ.経過時間の分だけ進行する( 1, () => {
 
-                                       int オフセットの加減算速度 = 1;
+                       // 進行
 
-                                       #region " カーソルが中央から遠いほど速くなるよう、オフセットの加減算速度(絶対値)を計算する。"
-                                       //------------------
-                                       int 距離 = Math.Abs( 4 - this._カーソル位置.X );
-                                       if( 2 > 距離 )
-                                               オフセットの加減算速度 = 1;
-                                       else
-                                               オフセットの加減算速度 = 2;
-                                       //------------------
-                                       #endregion
+                       #region " 全パネルの横方向スクロール進行残があれば進行する。"
+                       //----------------
+                       this._横スクロール用カウンタ.経過時間の分だけ進行する( 1, () => {
+
+                               int オフセットの加減算速度 = 1;
 
-                                       // オフセット と カーソル位置.X を更新する。
-                                       if( ( 4 > this._カーソル位置.X ) ||
-                                         ( ( 4 == this._カーソル位置.X ) && ( 0 > this._パネル全体のY軸回転オフセット ) ) )
+                               #region " カーソルが中央から遠いほど速くなるよう、オフセットの加減算速度(絶対値)を計算する。"
+                               //------------------
+                               int 距離 = Math.Abs( 4 - this._カーソル位置.X );
+                               if( 2 > 距離 )
+                                       オフセットの加減算速度 = 1;
+                               else
+                                       オフセットの加減算速度 = 2;
+                               //------------------
+                               #endregion
+
+                               // オフセット と カーソル位置.X を更新する。
+                               if( ( 4 > this._カーソル位置.X ) ||
+                                 ( ( 4 == this._カーソル位置.X ) && ( 0 > this._パネル全体のY軸回転オフセット ) ) )
+                               {
+                                       #region " (A) パネルは、左から右へ、移動する。"
+                                       //-----------------
+                                       this._パネル全体のY軸回転オフセット += オフセットの加減算速度;
+
+                                       // 1列分移動した
+                                       if( _パネルのY軸回転単位 <= this._パネル全体のY軸回転オフセット )
                                        {
-                                               #region " (A) パネルは、左から右へ、移動する。"
-                                               //-----------------
-                                               this._パネル全体のY軸回転オフセット += オフセットの加減算速度;
-
-                                               // 1列分移動した
-                                               if( _パネルのY軸回転単位 <= this._パネル全体のY軸回転オフセット )
-                                               {
-                                                       this._パネル全体のY軸回転オフセット -= _パネルのY軸回転単位;  // 0 付近に戻る
-                                                       this._カーソル位置.X++;
-                                               }
-                                               //-----------------
-                                               #endregion
+                                               this._パネル全体のY軸回転オフセット -= _パネルのY軸回転単位;  // 0 付近に戻る
+                                               this._カーソル位置.X++;
                                        }
-                                       else if( ( 4 < this._カーソル位置.X ) ||
-                                                  ( ( 4 == this._カーソル位置.X ) && ( 0 < this._パネル全体のY軸回転オフセット ) ) )
+                                       //-----------------
+                                       #endregion
+                               }
+                               else if( ( 4 < this._カーソル位置.X ) ||
+                                          ( ( 4 == this._カーソル位置.X ) && ( 0 < this._パネル全体のY軸回転オフセット ) ) )
+                               {
+                                       #region " (B) パネルは、右から左へ、移動する。"
+                                       //-----------------
+                                       this._パネル全体のY軸回転オフセット -= オフセットの加減算速度;
+
+                                       // 1列分移動した
+                                       if( -( _パネルのY軸回転単位 ) >= this._パネル全体のY軸回転オフセット )
                                        {
-                                               #region " (B) パネルは、右から左へ、移動する。"
-                                               //-----------------
-                                               this._パネル全体のY軸回転オフセット -= オフセットの加減算速度;
-
-                                               // 1列分移動した
-                                               if( -( _パネルのY軸回転単位 ) >= this._パネル全体のY軸回転オフセット )
-                                               {
-                                                       this._パネル全体のY軸回転オフセット += _パネルのY軸回転単位;  // 0 付近に戻る
-                                                       this._カーソル位置.X--;
-                                               }
-                                               //-----------------
-                                               #endregion
+                                               this._パネル全体のY軸回転オフセット += _パネルのY軸回転単位;  // 0 付近に戻る
+                                               this._カーソル位置.X--;
                                        }
+                                       //-----------------
+                                       #endregion
+                               }
 
-                               } );
-                               //----------------
-                               #endregion
-                       }
-               }
+                       } );
+                       //----------------
+                       #endregion
 
-               public void 描画する( グラフィックデバイス gd )
-               {
-                       if( this._活性化した直後である )
-                               return;         // まだ進行処理が行われていない。
+                       // 描画
 
                        var カーソル位置の曲ノード = (Node) null;   // null 可
                        var 描画する曲ノード = App.ユーザ管理.選択されているユーザ.曲ツリー.フォーカスノード;
index df96012..fa1dcd3 100644 (file)
@@ -43,13 +43,7 @@ namespace SST.ステージ.選曲
                        FDKUtilities.解放する( ref this._三角用ブラシ );
                }
 
-               public void 進行する()
-               {
-                       if( this._活性化直後である )
-                               return; // まだ進行処理が行われていない。
-               }
-
-               public void 描画する( グラフィックデバイス gd )
+               public void 進行描画する( グラフィックデバイス gd )
                {
                        if( this._活性化直後である )
                        {
index 72be15d..08da8b2 100644 (file)
@@ -54,40 +54,46 @@ namespace SST.ステージ.選曲
 
                public override void 高速進行する()
                {
-                       Debug.Assert( this.活性化している );
-
-                       if( this.現在のフェーズ == フェーズ.キャンセル ||
-                               this.現在のフェーズ == フェーズ.曲決定 )
+                       switch( this.現在のフェーズ )
                        {
-                               return;
+                               case フェーズ.開始:
+
+                                       break;
                        }
+               }
+
+               public override void 進行描画する( グラフィックデバイス gd )
+               {
+                       Debug.Assert( this.活性化している );
 
                        if( this._活性化した直後である )
                        {
-                               this._活性化した直後である = false;
                                this._背景動画.再生を開始する( 開始位置sec: 0.0, ループ再生する: true );
+                               this._活性化した直後である = false;
                        }
 
                        switch( this.現在のフェーズ )
                        {
                                case フェーズ.キャンセル:
                                case フェーズ.曲決定:
-                                       break;
+                                       return;
 
                                case フェーズ.曲決定アニメ:
                                        // なんかデザインがマッチしてないので保留。
-                                       //this._ドラムセット.進行する();
-                                       //this._曲決定アニメ.進行する();
-                                       //if( this._曲決定アニメ.アニメが完了した )
-                                               this.現在のフェーズ = フェーズ.曲決定;
+                                       this.現在のフェーズ = フェーズ.曲決定;
                                        break;
 
                                case フェーズ.開始:
-                                       this._曲パネルビュー.進行する();
-                                       this._ドラムセット.進行する();
+                                       // 描画
+                                       this._背景動画.描画する( gd, new SharpDX.RectangleF( 0f, 0f, gd.設計画面サイズ.Width, gd.設計画面サイズ.Height ) );
+                                       this._曲パネルビュー.進行描画する( gd );
+                                       this._ステージ台.描画する( gd, 0, 0 );
+                                       this._ドラムセット.進行描画する( gd );
+                                       this._FPS.VPSをカウントする();
                                        this._FPS.FPSをカウントしプロパティを更新する();
+                                       this._FPS.描画する( gd, 0f, 0f );
 
-                                       // 入力
+                                       // 入力
 
                                        App.入力管理.すべての入力デバイスをポーリングする();
 
@@ -171,46 +177,6 @@ namespace SST.ステージ.選曲
                        }
                }
 
-               public override void 描画する( グラフィックデバイス gd )
-               {
-                       Debug.Assert( this.活性化している );
-                       Debug.Assert( null != gd );
-
-                       if( this.現在のフェーズ == フェーズ.キャンセル ||
-                               this.現在のフェーズ == フェーズ.曲決定 )
-                       {
-                               return;
-                       }
-
-                       if( this._活性化した直後である )
-                               return; // まだ進行処理が行われていない。
-
-                       switch( this.現在のフェーズ )
-                       {
-                               case フェーズ.キャンセル:
-                               case フェーズ.曲決定:
-                                       return;
-
-                               case フェーズ.曲決定アニメ:
-                                       // なんかデザインがマッチしてないので保留。
-                                       //this._背景動画.進行描画する( dr, new SharpDX.RectangleF( 0f, 0f, dr.設計画面サイズ.Width, dr.設計画面サイズ.Height ) );
-                                       //this._曲パネルビュー.進行描画する( dr );
-                                       //this._ステージ台.描画する( dr, 0, 0 );
-                                       //this._ドラムセット.描画する( dr );
-                                       //this._曲決定アニメ.描画する( dr );
-                                       break;
-
-                               case フェーズ.開始:
-                                       this._背景動画.描画する( gd, new SharpDX.RectangleF( 0f, 0f, gd.設計画面サイズ.Width, gd.設計画面サイズ.Height ) );
-                                       this._曲パネルビュー.描画する( gd );
-                                       this._ステージ台.描画する( gd, 0, 0 );
-                                       this._ドラムセット.描画する( gd );
-                                       this._FPS.VPSをカウントする();
-                                       this._FPS.描画する( gd, 0f, 0f );
-                                       break;
-                       }
-               }
-
                private bool _活性化した直後である = false;
 
                private 画像 _ステージ台 = null;