OSDN Git Service

CAct演奏Combo共通.cs について、可読性向上のリファクタリングを実施。
authorfrom <from@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Tue, 28 Jun 2011 11:42:52 +0000 (11:42 +0000)
committerfrom <from@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Tue, 28 Jun 2011 11:42:52 +0000 (11:42 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@216 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXManiaプロジェクト/コード/ステージ/07.演奏/CAct演奏Combo共通.cs

index 1211313..1452ce5 100644 (file)
@@ -13,7 +13,6 @@ namespace DTXMania
                // プロパティ\r
 \r
                public STCOMBO n現在のコンボ数;\r
-               [StructLayout( LayoutKind.Sequential )]\r
                public struct STCOMBO\r
                {\r
                        public CAct演奏Combo共通 act;\r
@@ -113,29 +112,18 @@ namespace DTXMania
                        private int guitar;\r
                        private int bass;\r
                }\r
-               \r
-               protected enum EEvent\r
-               {\r
-                       非表示,\r
-                       数値更新,\r
-                       同一数値,\r
-                       ミス通知\r
-               }\r
-               protected enum EMode\r
-               {\r
-                       非表示中,\r
-                       進行表示中,\r
-                       残像表示中\r
-               }\r
-               protected const int nギターコンボのCOMBO文字の高さ = 0x10;\r
-               protected const int nギターコンボのCOMBO文字の幅 = 0x2d;\r
-               protected const int nギターコンボの高さ = 0x23;\r
-               protected const int nギターコンボの幅 = 0x17;\r
+\r
+               protected enum EEvent { 非表示, 数値更新, 同一数値, ミス通知 }\r
+               protected enum EMode { 非表示中, 進行表示中, 残像表示中 }\r
+               protected const int nギターコンボのCOMBO文字の高さ = 16;\r
+               protected const int nギターコンボのCOMBO文字の幅 = 45;\r
+               protected const int nギターコンボの高さ = 35;\r
+               protected const int nギターコンボの幅 = 23;\r
                protected const int nギターコンボの文字間隔 = 1;\r
-               protected const int nドラムコンボのCOMBO文字の高さ = 0x20;\r
+               protected const int nドラムコンボのCOMBO文字の高さ = 32;\r
                protected const int nドラムコンボのCOMBO文字の幅 = 90;\r
                protected const int nドラムコンボの高さ = 70;\r
-               protected const int nドラムコンボの幅 = 0x2d;\r
+               protected const int nドラムコンボの幅 = 45;\r
                protected const int nドラムコンボの文字間隔 = 2;\r
                protected int[] nジャンプ差分値 = new int[ 180 ];\r
                protected CSTATUS status;\r
@@ -204,11 +192,11 @@ namespace DTXMania
 \r
                public CAct演奏Combo共通()\r
                {\r
-                       base.b活性化してない = true;\r
+                       this.b活性化してない = true;\r
+\r
+                       // 180度分のジャンプY座標差分を取得。(0度: 0 → 90度:-15 → 180度: 0)\r
                        for( int i = 0; i < 180; i++ )\r
-                       {\r
-                               this.nジャンプ差分値[ i ] = (int) ( -15.0 * Math.Sin( ( 3.1415926535897931 * i ) / 180.0 ) );\r
-                       }\r
+                               this.nジャンプ差分値[ i ] = (int) ( -15.0 * Math.Sin( ( Math.PI * i ) / 180.0 ) );\r
                }\r
 \r
 \r
@@ -216,81 +204,102 @@ namespace DTXMania
 \r
                protected virtual void tコンボ表示・ドラム( int nCombo値, int nジャンプインデックス )\r
                {\r
-                       if( CDTXMania.ConfigIni.ドラムコンボ文字の表示位置 != Eドラムコンボ文字の表示位置.OFF )\r
+                       #region [ 事前チェック。]\r
+                       //-----------------\r
+                       if( CDTXMania.ConfigIni.ドラムコンボ文字の表示位置 == Eドラムコンボ文字の表示位置.OFF )\r
+                               return;         // 表示OFF。\r
+\r
+                       if( nCombo値 == 0 )\r
+                               return;         // コンボゼロは表示しない。\r
+                       //-----------------\r
+                       #endregion\r
+\r
+                       int[] n位の数 = new int[ 10 ];       // 表示は10桁もあれば足りるだろう\r
+\r
+                       #region [ nCombo値を桁数ごとに n位の数[] に格納する。(例:nCombo値=125 のとき n位の数 = { 5,2,1,0,0,0,0,0,0,0 } ) ]\r
+                       //-----------------\r
+                       int n = nCombo値;\r
+                       int n桁数 = 0;\r
+                       while( ( n > 0 ) && ( n桁数 < 10 ) )\r
+                       {\r
+                               n位の数[ n桁数 ] = n % 10;         // 1の位を格納\r
+                               n = ( n - ( n % 10 ) ) / 10;    // 右へシフト(例: 12345 → 1234 )\r
+                               n桁数++;\r
+                       }\r
+                       //-----------------\r
+                       #endregion\r
+\r
+                       bool guitar = CDTXMania.DTX.bチップがある.Guitar;\r
+                       bool bass = CDTXMania.DTX.bチップがある.Bass;\r
+                       var e表示位置 = CDTXMania.ConfigIni.ドラムコンボ文字の表示位置;\r
+\r
+                       #region [ e表示位置 の調整 ]\r
+                       //-----------------\r
+                       if( CDTXMania.ConfigIni.bGuitar有効 )\r
                        {\r
-                               int[] numArray = new int[ 10 ];\r
-                               int num2 = nCombo値;\r
-                               int index = 0;\r
-                               while( ( num2 > 0 ) && ( index < 10 ) )\r
+                               if( bass )\r
                                {\r
-                                       numArray[ index ] = num2 % 10;\r
-                                       num2 = ( num2 - ( num2 % 10 ) ) / 10;\r
-                                       index++;\r
+                                       // ベースがあるときは問答無用で LEFT 表示のみ。\r
+                                       e表示位置 = Eドラムコンボ文字の表示位置.LEFT;\r
                                }\r
-                               if( index != 0 )\r
+                               else if( guitar && ( e表示位置 == Eドラムコンボ文字の表示位置.RIGHT ) )\r
                                {\r
-                                       int num3;\r
-                                       bool guitar = CDTXMania.DTX.bチップがある.Guitar;\r
-                                       bool bass = CDTXMania.DTX.bチップがある.Bass;\r
-                                       Eドラムコンボ文字の表示位置 lEFT = CDTXMania.ConfigIni.ドラムコンボ文字の表示位置;\r
-                                       if( CDTXMania.ConfigIni.bGuitar有効 )\r
-                                       {\r
-                                               if( bass )\r
-                                               {\r
-                                                       lEFT = Eドラムコンボ文字の表示位置.LEFT;\r
-                                               }\r
-                                               else if( guitar && ( lEFT == Eドラムコンボ文字の表示位置.RIGHT ) )\r
-                                               {\r
-                                                       lEFT = Eドラムコンボ文字の表示位置.CENTER;\r
-                                               }\r
-                                       }\r
-                                       switch( lEFT )\r
-                                       {\r
-                                               case Eドラムコンボ文字の表示位置.LEFT:\r
-                                                       num3 = 0xbb;\r
-                                                       break;\r
+                                       // ベースがなくてもギターがあるなら、RIGHT は CENTER に強制変更。\r
+                                       e表示位置 = Eドラムコンボ文字の表示位置.CENTER;\r
+                               }\r
+                       }\r
+                       //-----------------\r
+                       #endregion\r
 \r
-                                               case Eドラムコンボ文字の表示位置.CENTER:\r
-                                                       num3 = 320;\r
-                                                       break;\r
+                       #region [ n位の数[] を、"COMBO" → 1の位 → 10の位 … の順に、右から左へ向かって順番に表示する。]\r
+                       //-----------------\r
+                       const int n1桁ごとのジャンプの遅れ = 50;     // 1桁につき 50 インデックス遅れる\r
 \r
-                                               case Eドラムコンボ文字の表示位置.RIGHT:\r
-                                                       num3 = 0x1e5;\r
-                                                       break;\r
+                       int nX中央位置px = 187;\r
+                       switch( e表示位置 )\r
+                       {\r
+                               case Eドラムコンボ文字の表示位置.LEFT:\r
+                                       nX中央位置px = 187;\r
+                                       break;\r
 \r
-                                               default:\r
-                                                       num3 = 0xbb;\r
-                                                       break;\r
-                                       }\r
-                                       int num4 = CDTXMania.ConfigIni.bReverse.Drums ? 350 : 60;\r
-                                       int num5 = ( 0x2f * index ) + 90;\r
-                                       int x = ( num3 + ( num5 / 2 ) ) - 90;\r
-                                       int y = ( num4 + 70 ) - 0x20;\r
-                                       int num8 = nジャンプインデックス - ( index * 50 );\r
-                                       if( ( num8 >= 0 ) && ( num8 < 180 ) )\r
-                                       {\r
-                                               y += this.nジャンプ差分値[ num8 ];\r
-                                       }\r
-                                       if( this.txCOMBOドラム != null )\r
-                                       {\r
-                                               this.txCOMBOドラム.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 140, 90, 0x20 ) );\r
-                                       }\r
-                                       for( int i = 0; i < index; i++ )\r
-                                       {\r
-                                               x -= 0x2f;\r
-                                               y = num4;\r
-                                               num8 = nジャンプインデックス - ( ( ( index - i ) - 1 ) * 50 );\r
-                                               if( ( num8 >= 0 ) && ( num8 < 180 ) )\r
-                                               {\r
-                                                       y += this.nジャンプ差分値[ num8 ];\r
-                                               }\r
-                                               if( this.txCOMBOドラム != null )\r
-                                               {\r
-                                                       this.txCOMBOドラム.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( ( numArray[ i ] % 5 ) * 0x2d, ( numArray[ i ] / 5 ) * 70, 0x2d, 70 ) );\r
-                                               }\r
-                                       }\r
+                               case Eドラムコンボ文字の表示位置.CENTER:\r
+                                       nX中央位置px = 320;\r
+                                       break;\r
+\r
+                               case Eドラムコンボ文字の表示位置.RIGHT:\r
+                                       nX中央位置px = 485;\r
+                                       break;\r
+                       }\r
+                       int nY上辺位置px = CDTXMania.ConfigIni.bReverse.Drums ? 350 : 60;\r
+                       int n数字とCOMBOを合わせた画像の全長px = ( ( nドラムコンボの幅 + nドラムコンボの文字間隔 ) * n桁数 ) + nドラムコンボのCOMBO文字の幅;\r
+                       int x = ( nX中央位置px + ( n数字とCOMBOを合わせた画像の全長px / 2 ) ) - nドラムコンボのCOMBO文字の幅;\r
+                       int y = ( nY上辺位置px + nドラムコンボの高さ ) - nドラムコンボのCOMBO文字の高さ;\r
+                       int nJump = nジャンプインデックス - ( n桁数 * n1桁ごとのジャンプの遅れ );\r
+                       if( ( nJump >= 0 ) && ( nJump < 180 ) )\r
+                               y += this.nジャンプ差分値[ nJump ];\r
+\r
+                       if( this.txCOMBOドラム != null )\r
+                               this.txCOMBOドラム.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 140, 90, 32 ) ); // "COMBO" を表示。\r
+\r
+                       // COMBO値を1の位から順に表示。\r
+\r
+                       for( int i = 0; i < n桁数; i++ )\r
+                       {\r
+                               x -= nドラムコンボの幅 + nドラムコンボの文字間隔;\r
+                               y = nY上辺位置px;\r
+\r
+                               nJump = nジャンプインデックス - ( ( ( n桁数 - i ) - 1 ) * n1桁ごとのジャンプの遅れ );\r
+                               if( ( nJump >= 0 ) && ( nJump < 180 ) )\r
+                                       y += this.nジャンプ差分値[ nJump ];\r
+\r
+                               if( this.txCOMBOドラム != null )\r
+                               {\r
+                                       this.txCOMBOドラム.t2D描画( CDTXMania.app.Device, x, y,\r
+                                               new Rectangle( ( n位の数[ i ] % 5 ) * nドラムコンボの幅, ( n位の数[ i ] / 5 ) * nドラムコンボの高さ, nドラムコンボの幅, nドラムコンボの高さ ) );\r
                                }\r
                        }\r
+                       //-----------------\r
+                       #endregion\r
                }\r
                protected virtual void tコンボ表示・ギター( int nCombo値, int nジャンプインデックス )\r
                {\r
@@ -300,112 +309,160 @@ namespace DTXMania
                }\r
                protected void tコンボ表示・ギター( int nCombo値, int n表示中央X, int n表示中央Y, int nジャンプインデックス )\r
                {\r
-                       if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) != E判定文字表示位置.表示OFF )\r
+                       #region [ 事前チェック。]\r
+                       //-----------------\r
+                       if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Guitar ) == E判定文字表示位置.表示OFF )\r
+                               return;         // 表示OFF。\r
+\r
+                       if( nCombo値 == 0 )\r
+                               return;         // コンボゼロは表示しない。\r
+                       //-----------------\r
+                       #endregion\r
+\r
+                       int[] n位の数 = new int[ 10 ];       // 表示は10桁もあれば足りるだろう\r
+\r
+                       #region [ nCombo値を桁数ごとに n位の数[] に格納する。(例:nCombo値=125 のとき n位の数 = { 5,2,1,0,0,0,0,0,0,0 } ) ]\r
+                       //-----------------\r
+                       int n = nCombo値;\r
+                       int n桁数 = 0;\r
+                       while( ( n > 0 ) && ( n桁数 < 10 ) )\r
+                       {\r
+                               n位の数[ n桁数 ] = n % 10;         // 1の位を格納\r
+                               n = ( n - ( n % 10 ) ) / 10;    // 右へシフト(例: 12345 → 1234 )\r
+                               n桁数++;\r
+                       }\r
+                       //-----------------\r
+                       #endregion\r
+\r
+                       int n全桁の合計幅 = nギターコンボの幅 * n桁数;\r
+\r
+                       #region [ "COMBO" の拡大率を設定。]\r
+                       //-----------------\r
+                       float f拡大率 = 1.0f;\r
+                       if( nジャンプインデックス >= 0 && nジャンプインデックス < 180 )\r
+                               f拡大率 = 1.0f - ( ( (float) this.nジャンプ差分値[ nジャンプインデックス ] ) / 45.0f );             // f拡大率 = 1.0 → 1.3333... → 1.0\r
+\r
+                       if( this.txCOMBOギター != null )\r
+                               this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率, 1.0f );\r
+                       //-----------------\r
+                       #endregion\r
+                       #region [ "COMBO" 文字を表示。]\r
+                       //-----------------\r
+                       int x = n表示中央X - ( (int) ( ( nギターコンボのCOMBO文字の幅 * f拡大率 ) / 2.0f ) );\r
+                       int y = n表示中央Y;\r
+                       \r
+                       if( this.txCOMBOギター != null )\r
+                               this.txCOMBOギター.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 70, 45, 16 ) );\r
+                       //-----------------\r
+                       #endregion\r
+\r
+                       x = n表示中央X + ( n全桁の合計幅 / 2 );\r
+                       for( int i = 0; i < n桁数; i++ )\r
                        {\r
-                               int[] numArray = new int[ 10 ];\r
-                               int num2 = nCombo値;\r
-                               int index = 0;\r
-                               while( ( num2 > 0 ) && ( index < 10 ) )\r
+                               #region [ 数字の拡大率を設定。]\r
+                               //-----------------\r
+                               f拡大率 = 1.0f;\r
+                               if( nジャンプインデックス >= 0 && nジャンプインデックス < 180 )\r
+                                       f拡大率 = 1.0f - ( ( (float) this.nジャンプ差分値[ nジャンプインデックス ] ) / 45f );               // f拡大率 = 1.0 → 1.3333... → 1.0\r
+\r
+                               if( this.txCOMBOギター != null )\r
+                                       this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率, 1.0f );\r
+                               //-----------------\r
+                               #endregion\r
+                               #region [ 数字を1桁表示。]\r
+                               //-----------------\r
+                               x -= nギターコンボの幅 + nギターコンボの文字間隔;\r
+                               y = n表示中央Y - nギターコンボの高さ;\r
+\r
+                               if( this.txCOMBOギター != null )\r
                                {\r
-                                       numArray[ index ] = num2 % 10;\r
-                                       num2 = ( num2 - ( num2 % 10 ) ) / 10;\r
-                                       index++;\r
-                               }\r
-                               if( index != 0 )\r
-                               {\r
-                                       int num3 = 0x17 * index;\r
-                                       int num4 = nジャンプインデックス;\r
-                                       float x = 1f;\r
-                                       if( ( num4 >= 0 ) && ( num4 < 180 ) )\r
-                                       {\r
-                                               x = 1f - ( ( (float) this.nジャンプ差分値[ num4 ] ) / 45f );\r
-                                       }\r
-                                       if( this.txCOMBOギター != null )\r
-                                       {\r
-                                               this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( x, x, 1f );\r
-                                       }\r
-                                       int num6 = n表示中央X - ( (int) ( ( 45f * x ) / 2f ) );\r
-                                       int y = n表示中央Y;\r
-                                       if( this.txCOMBOギター != null )\r
-                                       {\r
-                                               this.txCOMBOギター.t2D描画( CDTXMania.app.Device, num6, y, new Rectangle( 0, 70, 0x2d, 0x10 ) );\r
-                                       }\r
-                                       num6 = n表示中央X + ( num3 / 2 );\r
-                                       for( int i = 0; i < index; i++ )\r
-                                       {\r
-                                               num4 = nジャンプインデックス;\r
-                                               x = 1f;\r
-                                               if( ( num4 >= 0 ) && ( num4 < 180 ) )\r
-                                               {\r
-                                                       x = 1f - ( ( (float) this.nジャンプ差分値[ num4 ] ) / 45f );\r
-                                               }\r
-                                               if( this.txCOMBOギター != null )\r
-                                               {\r
-                                                       this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( x, x, 1f );\r
-                                               }\r
-                                               num6 -= 0x18;\r
-                                               y = n表示中央Y - 0x23;\r
-                                               if( this.txCOMBOギター != null )\r
-                                               {\r
-                                                       this.txCOMBOギター.t2D描画( CDTXMania.app.Device, num6 - ( (int) ( ( ( x - 1f ) * 23f ) / 2f ) ), y - ( (int) ( ( ( x - 1f ) * 35f ) / 2f ) ), new Rectangle( ( numArray[ i ] % 5 ) * 0x17, ( numArray[ i ] / 5 ) * 0x23, 0x17, 0x23 ) );\r
-                                               }\r
-                                       }\r
+                                       this.txCOMBOギター.t2D描画(\r
+                                               CDTXMania.app.Device,\r
+                                               x - ( (int) ( ( ( f拡大率 - 1.0f ) * nギターコンボの幅 ) / 2.0f ) ),\r
+                                               y - ( (int) ( ( ( f拡大率 - 1.0f ) * nギターコンボの高さ ) / 2.0f ) ),\r
+                                               new Rectangle( ( n位の数[ i ] % 5 ) * nギターコンボの幅, ( n位の数[ i ] / 5 ) * nギターコンボの高さ, nギターコンボの幅, nギターコンボの高さ ) );\r
                                }\r
+                               //-----------------\r
+                               #endregion\r
                        }\r
                }\r
                protected void tコンボ表示・ベース( int nCombo値, int n表示中央X, int n表示中央Y, int nジャンプインデックス )\r
                {\r
-                       if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) != E判定文字表示位置.表示OFF )\r
+                       #region [ 事前チェック。]\r
+                       //-----------------\r
+                       if( ( (E判定文字表示位置) CDTXMania.ConfigIni.判定文字表示位置.Bass ) == E判定文字表示位置.表示OFF )\r
+                               return;         // 表示OFF。\r
+\r
+                       if( nCombo値 == 0 )\r
+                               return;         // コンボゼロは表示しない。\r
+                       //-----------------\r
+                       #endregion\r
+\r
+                       int[] n位の数 = new int[ 10 ];       // 表示は10桁もあれば足りるだろう\r
+\r
+                       #region [ nCombo値を桁数ごとに n位の数[] に格納する。(例:nCombo値=125 のとき n位の数 = { 5,2,1,0,0,0,0,0,0,0 } ) ]\r
+                       //-----------------\r
+                       int n = nCombo値;\r
+                       int n桁数 = 0;\r
+                       while( ( n > 0 ) && ( n桁数 < 10 ) )\r
                        {\r
-                               int[] numArray = new int[ 10 ];\r
-                               int num2 = nCombo値;\r
-                               int index = 0;\r
-                               while( ( num2 > 0 ) && ( index < 10 ) )\r
-                               {\r
-                                       numArray[ index ] = num2 % 10;\r
-                                       num2 = ( num2 - ( num2 % 10 ) ) / 10;\r
-                                       index++;\r
-                               }\r
-                               if( index != 0 )\r
+                               n位の数[ n桁数 ] = n % 10;         // 1の位を格納\r
+                               n = ( n - ( n % 10 ) ) / 10;    // 右へシフト(例: 12345 → 1234 )\r
+                               n桁数++;\r
+                       }\r
+                       //-----------------\r
+                       #endregion\r
+\r
+                       int n全桁の合計幅 = nギターコンボの幅 * n桁数;\r
+\r
+                       #region [ "COMBO" の拡大率を設定。]\r
+                       //-----------------\r
+                       float f拡大率 = 1.0f;\r
+                       if( nジャンプインデックス >= 0 && nジャンプインデックス < 180 )\r
+                               f拡大率 = 1.0f - ( ( (float) this.nジャンプ差分値[ nジャンプインデックス ] ) / 45.0f );             // f拡大率 = 1.0 → 1.3333... → 1.0\r
+\r
+                       if( this.txCOMBOギター != null )\r
+                               this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率, 1.0f );\r
+                       //-----------------\r
+                       #endregion\r
+                       #region [ "COMBO" 文字を表示。]\r
+                       //-----------------\r
+                       int x = n表示中央X - ( (int) ( ( nギターコンボのCOMBO文字の幅 * f拡大率 ) / 2.0f ) );\r
+                       int y = n表示中央Y;\r
+                       \r
+                       if( this.txCOMBOギター != null )\r
+                               this.txCOMBOギター.t2D描画( CDTXMania.app.Device, x, y, new Rectangle( 0, 70, 45, 16) );\r
+                       //-----------------\r
+                       #endregion\r
+\r
+                       x = n表示中央X + ( n全桁の合計幅 / 2 );\r
+                       for( int i = 0; i < n桁数; i++ )\r
+                       {\r
+                               #region [ 数字の拡大率を設定。]\r
+                               //-----------------\r
+                               f拡大率 = 1.0f;\r
+                               if( nジャンプインデックス >= 0 && nジャンプインデックス < 180 )\r
+                                       f拡大率 = 1.0f - ( ( (float) this.nジャンプ差分値[ nジャンプインデックス ] ) / 45f );               // f拡大率 = 1.0 → 1.3333... → 1.0\r
+\r
+                               if( this.txCOMBOギター != null )\r
+                                       this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( f拡大率, f拡大率, 1.0f );\r
+                               //-----------------\r
+                               #endregion\r
+                               #region [ 数字を1桁表示。]\r
+                               //-----------------\r
+                               x -= nギターコンボの幅 + nギターコンボの文字間隔;\r
+                               y = n表示中央Y - nギターコンボの高さ;\r
+\r
+                               if( this.txCOMBOギター != null )\r
                                {\r
-                                       int num3 = 0x17 * index;\r
-                                       int num4 = nジャンプインデックス;\r
-                                       float x = 1f;\r
-                                       if( ( num4 >= 0 ) && ( num4 < 180 ) )\r
-                                       {\r
-                                               x = 1f - ( ( (float) this.nジャンプ差分値[ num4 ] ) / 45f );\r
-                                       }\r
-                                       if( this.txCOMBOギター != null )\r
-                                       {\r
-                                               this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( x, x, 1f );\r
-                                       }\r
-                                       int num6 = n表示中央X - ( (int) ( ( 45f * x ) / 2f ) );\r
-                                       int y = n表示中央Y;\r
-                                       if( this.txCOMBOギター != null )\r
-                                       {\r
-                                               this.txCOMBOギター.t2D描画( CDTXMania.app.Device, num6, y, new Rectangle( 0, 70, 0x2d, 0x10 ) );\r
-                                       }\r
-                                       num6 = n表示中央X + ( num3 / 2 );\r
-                                       for( int i = 0; i < index; i++ )\r
-                                       {\r
-                                               num4 = nジャンプインデックス;\r
-                                               x = 1f;\r
-                                               if( ( num4 >= 0 ) && ( num4 < 180 ) )\r
-                                               {\r
-                                                       x = 1f - ( ( (float) this.nジャンプ差分値[ num4 ] ) / 45f );\r
-                                               }\r
-                                               if( this.txCOMBOギター != null )\r
-                                               {\r
-                                                       this.txCOMBOギター.vc拡大縮小倍率 = new Vector3( x, x, 1f );\r
-                                               }\r
-                                               num6 -= 0x18;\r
-                                               y = n表示中央Y - 0x23;\r
-                                               if( this.txCOMBOギター != null )\r
-                                               {\r
-                                                       this.txCOMBOギター.t2D描画( CDTXMania.app.Device, num6 - ( (int) ( ( ( x - 1f ) * 23f ) / 2f ) ), y - ( (int) ( ( ( x - 1f ) * 35f ) / 2f ) ), new Rectangle( ( numArray[ i ] % 5 ) * 0x17, ( numArray[ i ] / 5 ) * 0x23, 0x17, 0x23 ) );\r
-                                               }\r
-                                       }\r
+                                       this.txCOMBOギター.t2D描画( \r
+                                               CDTXMania.app.Device,\r
+                                               x - ( (int) ( ( ( f拡大率 - 1.0f ) * nギターコンボの幅 ) / 2.0f ) ),\r
+                                               y - ( (int) ( ( ( f拡大率 - 1.0f ) * nギターコンボの高さ ) / 2.0f ) ),\r
+                                               new Rectangle( ( n位の数[ i ] % 5 ) * nギターコンボの幅, ( n位の数[ i ] / 5 ) * nギターコンボの高さ, nギターコンボの幅, nギターコンボの高さ ) );\r
                                }\r
+                               //-----------------\r
+                               #endregion\r
                        }\r
                }\r
 \r
@@ -414,9 +471,7 @@ namespace DTXMania
 \r
                public override void On活性化()\r
                {\r
-                       STCOMBO stcombo = new STCOMBO();\r
-                       stcombo.act = this;\r
-                       this.n現在のコンボ数 = stcombo;\r
+                       this.n現在のコンボ数 = new STCOMBO() { act = this };\r
                        this.status = new CSTATUS();\r
                        for( int i = 0; i < 3; i++ )\r
                        {\r
@@ -425,7 +480,7 @@ namespace DTXMania
                                this.status[ i ].n最高COMBO値 = 0;\r
                                this.status[ i ].n現在表示中のCOMBO値 = 0;\r
                                this.status[ i ].n残像表示中のCOMBO値 = 0;\r
-                               this.status[ i ].nジャンプインデックス値 = 0x1869f;\r
+                               this.status[ i ].nジャンプインデックス値 = 99999;\r
                                this.status[ i ].n前回の時刻・ジャンプ用 = -1;\r
                                this.status[ i ].nコンボが切れた時刻 = -1;\r
                        }\r
@@ -434,139 +489,162 @@ namespace DTXMania
                public override void On非活性化()\r
                {\r
                        if( this.status != null )\r
-                       {\r
                                this.status = null;\r
-                       }\r
+\r
                        base.On非活性化();\r
                }\r
                public override void OnManagedリソースの作成()\r
                {\r
-                       if( !base.b活性化してない )\r
-                       {\r
-                               this.txCOMBOドラム = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums combo drums.png" ) );\r
-                               this.txCOMBOギター = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums combo guitar.png" ) );\r
-                               base.OnManagedリソースの作成();\r
-                       }\r
+                       if( this.b活性化してない )\r
+                               return;\r
+\r
+                       this.txCOMBOドラム = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums combo drums.png" ) );\r
+                       this.txCOMBOギター = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayDrums combo guitar.png" ) );\r
+\r
+                       base.OnManagedリソースの作成();\r
                }\r
                public override void OnManagedリソースの解放()\r
                {\r
-                       if( !base.b活性化してない )\r
-                       {\r
-                               CDTXMania.tテクスチャの解放( ref this.txCOMBOドラム );\r
-                               CDTXMania.tテクスチャの解放( ref this.txCOMBOギター );\r
-                               base.OnManagedリソースの解放();\r
-                       }\r
+                       if( this.b活性化してない )\r
+                               return;\r
+\r
+                       CDTXMania.tテクスチャの解放( ref this.txCOMBOドラム );\r
+                       CDTXMania.tテクスチャの解放( ref this.txCOMBOギター );\r
+\r
+                       base.OnManagedリソースの解放();\r
                }\r
                public override int On進行描画()\r
                {\r
-                       if( !base.b活性化してない )\r
+                       if( this.b活性化してない )\r
+                               return 0;\r
+\r
+                       for( int i = 2; i >= 0; i-- )\r
                        {\r
-                               for( int i = 2; i >= 0; i-- )\r
+                               EEvent e今回の状態遷移イベント;\r
+\r
+                               #region [ 前回と今回の COMBO 値から、e今回の状態遷移イベントを決定する。]\r
+                               //-----------------\r
+                               if( this.status[ i ].n現在表示中のCOMBO値 == this.status[ i ].nCOMBO値 )\r
                                {\r
-                                       EEvent event2;\r
-                                       if( this.status[ i ].n現在表示中のCOMBO値 == this.status[ i ].nCOMBO値 )\r
-                                       {\r
-                                               event2 = EEvent.同一数値;\r
-                                       }\r
-                                       else if( this.status[ i ].n現在表示中のCOMBO値 > this.status[ i ].nCOMBO値 )\r
-                                       {\r
-                                               event2 = EEvent.ミス通知;\r
-                                       }\r
-                                       else if( ( this.status[ i ].n現在表示中のCOMBO値 < CDTXMania.ConfigIni.n表示可能な最小コンボ数[ i ] ) && ( this.status[ i ].nCOMBO値 < CDTXMania.ConfigIni.n表示可能な最小コンボ数[ i ] ) )\r
-                                       {\r
-                                               event2 = EEvent.非表示;\r
-                                       }\r
-                                       else\r
+                                       e今回の状態遷移イベント = EEvent.同一数値;\r
+                               }\r
+                               else if( this.status[ i ].n現在表示中のCOMBO値 > this.status[ i ].nCOMBO値 )\r
+                               {\r
+                                       e今回の状態遷移イベント = EEvent.ミス通知;\r
+                               }\r
+                               else if( ( this.status[ i ].n現在表示中のCOMBO値 < CDTXMania.ConfigIni.n表示可能な最小コンボ数[ i ] ) && ( this.status[ i ].nCOMBO値 < CDTXMania.ConfigIni.n表示可能な最小コンボ数[ i ] ) )\r
+                               {\r
+                                       e今回の状態遷移イベント = EEvent.非表示;\r
+                               }\r
+                               else\r
+                               {\r
+                                       e今回の状態遷移イベント = EEvent.数値更新;\r
+                               }\r
+                               //-----------------\r
+                               #endregion\r
+\r
+                               #region [ nジャンプインデックス値 の進行。]\r
+                               //-----------------\r
+                               if( this.status[ i ].nジャンプインデックス値 < 360 )\r
+                               {\r
+                                       if( ( this.status[ i ].n前回の時刻・ジャンプ用 == -1 ) || ( CDTXMania.Timer.n現在時刻 < this.status[ i ].n前回の時刻・ジャンプ用 ) )\r
+                                               this.status[ i ].n前回の時刻・ジャンプ用 = CDTXMania.Timer.n現在時刻;\r
+\r
+                                       const long INTERVAL = 2;\r
+                                       while( ( CDTXMania.Timer.n現在時刻 - this.status[ i ].n前回の時刻・ジャンプ用 ) >= INTERVAL )\r
                                        {\r
-                                               event2 = EEvent.数値更新;\r
+                                               if( this.status[ i ].nジャンプインデックス値 < 2000 )\r
+                                                       this.status[ i ].nジャンプインデックス値 += 3;\r
+\r
+                                               this.status[ i ].n前回の時刻・ジャンプ用 += INTERVAL;\r
                                        }\r
-                                       if( this.status[ i ].nジャンプインデックス値 < 360 )\r
-                                       {\r
-                                               if( ( this.status[ i ].n前回の時刻・ジャンプ用 == -1 ) || ( CDTXMania.Timer.n現在時刻 < this.status[ i ].n前回の時刻・ジャンプ用 ) )\r
-                                               {\r
-                                                       this.status[ i ].n前回の時刻・ジャンプ用 = CDTXMania.Timer.n現在時刻;\r
-                                               }\r
-                                               while( ( CDTXMania.Timer.n現在時刻 - this.status[ i ].n前回の時刻・ジャンプ用 ) >= 2 )\r
+                               }\r
+                       //-----------------\r
+                               #endregion\r
+\r
+\r
+                       Retry:  // モードが変化した場合はここからリトライする。\r
+\r
+                               switch( this.status[ i ].e現在のモード )\r
+                               {\r
+                                       case EMode.非表示中:\r
+                                               #region [ *** ]\r
+                                               //-----------------\r
+\r
+                                               if( e今回の状態遷移イベント == EEvent.数値更新 )\r
                                                {\r
-                                                       if( this.status[ i ].nジャンプインデックス値 < 0x7d0 )\r
-                                                       {\r
-                                                               CSTATUS.CSTAT cstat1 = this.status[ i ];\r
-                                                               cstat1.nジャンプインデックス値 += 3;\r
-                                                       }\r
-                                                       CSTATUS.CSTAT cstat2 = this.status[ i ];\r
-                                                       cstat2.n前回の時刻・ジャンプ用 += 2;\r
-                                               }\r
-                                       }\r
-                               Label_017F:\r
-                                       switch( this.status[ i ].e現在のモード )\r
-                                       {\r
-                                               case EMode.非表示中:\r
-                                                       if( event2 != EEvent.数値更新 )\r
-                                                       {\r
-                                                               break;\r
-                                                       }\r
+                                                       // モード変更\r
                                                        this.status[ i ].e現在のモード = EMode.進行表示中;\r
                                                        this.status[ i ].nジャンプインデックス値 = 0;\r
                                                        this.status[ i ].n前回の時刻・ジャンプ用 = CDTXMania.Timer.n現在時刻;\r
-                                                       goto Label_017F;\r
+                                                       goto Retry;\r
+                                               }\r
+\r
+                                               this.status[ i ].n現在表示中のCOMBO値 = this.status[ i ].nCOMBO値;\r
+                                               break;\r
+                                       //-----------------\r
+                                               #endregion\r
 \r
-                                               case EMode.進行表示中:\r
-                                                       if( ( event2 != EEvent.非表示 ) && ( event2 != EEvent.ミス通知 ) )\r
-                                                       {\r
-                                                               goto Label_026F;\r
-                                                       }\r
+                                       case EMode.進行表示中:\r
+                                               #region [ *** ]\r
+                                               //-----------------\r
+\r
+                                               if( ( e今回の状態遷移イベント == EEvent.非表示 ) || ( e今回の状態遷移イベント == EEvent.ミス通知 ) )\r
+                                               {\r
+                                                       // モード変更\r
                                                        this.status[ i ].e現在のモード = EMode.残像表示中;\r
                                                        this.status[ i ].n残像表示中のCOMBO値 = this.status[ i ].n現在表示中のCOMBO値;\r
                                                        this.status[ i ].nコンボが切れた時刻 = CDTXMania.Timer.n現在時刻;\r
-                                                       goto Label_017F;\r
-\r
-                                               case EMode.残像表示中:\r
-                                                       if( event2 != EEvent.数値更新 )\r
-                                                       {\r
-                                                               goto Label_037A;\r
-                                                       }\r
-                                                       this.status[ i ].e現在のモード = EMode.進行表示中;\r
-                                                       goto Label_017F;\r
+                                                       goto Retry;\r
+                                               }\r
 \r
-                                               default:\r
-                                                       goto Label_03D6;\r
-                                       }\r
-                                       this.status[ i ].n現在表示中のCOMBO値 = this.status[ i ].nCOMBO値;\r
-                                       goto Label_03D6;\r
-                               Label_026F:\r
-                                       if( event2 == EEvent.数値更新 )\r
-                                       {\r
-                                               this.status[ i ].nジャンプインデックス値 = 0;\r
-                                               this.status[ i ].n前回の時刻・ジャンプ用 = CDTXMania.Timer.n現在時刻;\r
-                                       }\r
-                                       this.status[ i ].n現在表示中のCOMBO値 = this.status[ i ].nCOMBO値;\r
-                                       switch( i )\r
-                                       {\r
-                                               case 0:\r
-                                                       this.tコンボ表示・ドラム( this.status[ i ].nCOMBO値, this.status[ i ].nジャンプインデックス値 );\r
-                                                       goto Label_03D6;\r
+                                               if( e今回の状態遷移イベント == EEvent.数値更新 )\r
+                                               {\r
+                                                       this.status[ i ].nジャンプインデックス値 = 0;\r
+                                                       this.status[ i ].n前回の時刻・ジャンプ用 = CDTXMania.Timer.n現在時刻;\r
+                                               }\r
 \r
-                                               case 1:\r
-                                                       this.tコンボ表示・ギター( this.status[ i ].nCOMBO値, this.status[ i ].nジャンプインデックス値 );\r
-                                                       goto Label_03D6;\r
+                                               this.status[ i ].n現在表示中のCOMBO値 = this.status[ i ].nCOMBO値;\r
+                                               switch( i )\r
+                                               {\r
+                                                       case 0:\r
+                                                               this.tコンボ表示・ドラム( this.status[ i ].nCOMBO値, this.status[ i ].nジャンプインデックス値 );\r
+                                                               break;\r
 \r
-                                               case 2:\r
-                                                       this.tコンボ表示・ベース( this.status[ i ].nCOMBO値, this.status[ i ].nジャンプインデックス値 );\r
-                                                       goto Label_03D6;\r
+                                                       case 1:\r
+                                                               this.tコンボ表示・ギター( this.status[ i ].nCOMBO値, this.status[ i ].nジャンプインデックス値 );\r
+                                                               break;\r
 \r
-                                               default:\r
-                                                       goto Label_03D6;\r
-                                       }\r
-                               Label_037A:\r
-                                       if( ( CDTXMania.Timer.n現在時刻 - this.status[ i ].nコンボが切れた時刻 ) > 0x3e8 )\r
-                                       {\r
-                                               this.status[ i ].e現在のモード = EMode.非表示中;\r
-                                               goto Label_017F;\r
-                                       }\r
-                                       this.status[ i ].n現在表示中のCOMBO値 = this.status[ i ].nCOMBO値;\r
-                               Label_03D6: ;\r
+                                                       case 2:\r
+                                                               this.tコンボ表示・ベース( this.status[ i ].nCOMBO値, this.status[ i ].nジャンプインデックス値 );\r
+                                                               break;\r
+                                               }\r
+                                               break;\r
+                                       //-----------------\r
+                                               #endregion\r
+\r
+                                       case EMode.残像表示中:\r
+                                               #region [ *** ]\r
+                                               //-----------------\r
+                                               if( e今回の状態遷移イベント == EEvent.数値更新 )\r
+                                               {\r
+                                                       // モード変更1\r
+                                                       this.status[ i ].e現在のモード = EMode.進行表示中;\r
+                                                       goto Retry;\r
+                                               }\r
+                                               if( ( CDTXMania.Timer.n現在時刻 - this.status[ i ].nコンボが切れた時刻 ) > 1000 )\r
+                                               {\r
+                                                       // モード変更2\r
+                                                       this.status[ i ].e現在のモード = EMode.非表示中;\r
+                                                       goto Retry;\r
+                                               }\r
+                                               this.status[ i ].n現在表示中のCOMBO値 = this.status[ i ].nCOMBO値;\r
+                                               break;\r
+                                               //-----------------\r
+                                               #endregion\r
                                }\r
                        }\r
+\r
                        return 0;\r
                }\r
        }\r