// プロパティ\r
\r
public STCOMBO n現在のコンボ数;\r
- [StructLayout( LayoutKind.Sequential )]\r
public struct STCOMBO\r
{\r
public CAct演奏Combo共通 act;\r
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
\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
\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
}\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
\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
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
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