• R/O
  • SSH
  • HTTPS

dtxmania: コミット


コミットメタ情報

リビジョン430 (tree)
日時2012-06-25 23:24:23
作者yyagi

ログメッセージ

#28732 1本化wavで、チップが来てから100msは消音しないようなロジックを追加。
ただし、ここまでの修正内容は、求められている対応とは異なる内容であることが分かったため、本ブランチはこれ以降塩漬けとし、別ブランチで求められる対応を行うものとする。
また、#28732とは関係のない、いくつかのリファクタを追加。(#28732上でやるべきではなかった・・・)

変更サマリ

差分

--- branches/120619(DTXMania094 ith #28732)/DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs (revision 429)
+++ branches/120619(DTXMania094 ith #28732)/DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs (revision 430)
@@ -515,6 +515,7 @@
515515 }
516516 }
517517 public bool bIsAutoPlayed; // 2011.6.10 yyagi
518+ public bool bバーを通過した; // 2012.6.20 yyagi
518519
519520 public CChip()
520521 {
@@ -543,6 +544,7 @@
543544 this.nバーからの距離dot.Guitar = 0;
544545 this.nバーからの距離dot.Bass = 0;
545546 this.n総移動時間 = 0;
547+ this.bバーを通過した = false;
546548 }
547549 public override string ToString()
548550 {
@@ -4796,7 +4798,7 @@
47964798 {
47974799 chip.e楽器パート = E楽器パート.GUITAR;
47984800 }
4799- if( ( nチャンネル番号 >= 160 ) && ( nチャンネル番号 <= 0xA7 ) )
4801+ if( ( nチャンネル番号 >= 0xA0 ) && ( nチャンネル番号 <= 0xA7 ) )
48004802 {
48014803 chip.e楽器パート = E楽器パート.BASS;
48024804 }
--- branches/120619(DTXMania094 ith #28732)/DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs (revision 429)
+++ branches/120619(DTXMania094 ith #28732)/DTXManiaプロジェクト/コード/ステージ/07.演奏/CStage演奏画面共通.cs (revision 430)
@@ -226,34 +226,32 @@
226226 this.n最後に再生したHHのチャンネル番号 = 0;
227227 this.n最後に再生した実WAV番号.Guitar = -1;
228228 this.n最後に再生した実WAV番号.Bass = -1;
229- for ( int i = 0; i < 50; i++ )
229+ for ( int i = 0; i < this.n最後に再生したBGMの実WAV番号.Length; i++ )
230230 {
231231 this.n最後に再生したBGMの実WAV番号[ i ] = -1;
232232 }
233233 this.r次にくるギターChip = null;
234234 this.r次にくるベースChip = null;
235- for ( int j = 0; j < 10; j++ )
235+ for ( int i = 0; i < 10; i++ )
236236 {
237- this.r現在の空うちドラムChip[ j ] = null;
237+ this.r現在の空うちドラムChip[ i ] = null;
238238 }
239239 this.r現在の空うちギターChip = null;
240240 this.r現在の空うちベースChip = null;
241- for ( int k = 0; k < 3; k++ )
242- {
243- //for ( int n = 0; n < 5; n++ )
244- //{
245- this.nヒット数・Auto含まない[ k ] = new CHITCOUNTOFRANK();
246- this.nヒット数・Auto含む[ k ] = new CHITCOUNTOFRANK();
247- //}
248- this.queWailing[ k ] = new Queue<CDTX.CChip>();
249- this.r現在の歓声Chip[ k ] = null;
250- }
251241 for ( int i = 0; i < 3; i++ )
252242 {
243+ this.nヒット数・Auto含まない[ i ] = new CHITCOUNTOFRANK();
244+ this.nヒット数・Auto含む[ i ] = new CHITCOUNTOFRANK();
245+ this.queWailing[ i ] = new Queue<CDTX.CChip>();
246+ this.r現在の歓声Chip[ i ] = null;
247+
253248 this.b演奏にキーボードを使った[ i ] = false;
254249 this.b演奏にジョイパッドを使った[ i ] = false;
255250 this.b演奏にMIDI入力を使った[ i ] = false;
256251 this.b演奏にマウスを使った[ i ] = false;
252+
253+ this.n1本化Wav消音待ちの開始時刻[ i ] = -1; // #28732 2012.6.20 yyagi
254+ this.n1本化Wav消音継続時間[ i ] = 100; // #28732 2012.6.20 yyagi
257255 }
258256 this.bAUTOでないチップが1つでもバーを通過した = false;
259257 base.On活性化();
@@ -556,7 +554,10 @@
556554 // protected GCLatencyMode gclatencymode;
557555
558556 private STDGBVALUE<CDTX.CChip> r1本化WavChip; // #28732 2011.6.19 yyagi
557+ private STDGBVALUE<long> n1本化Wav消音待ちの開始時刻; // #28732 2012.6.20 yyagi
558+ private STDGBVALUE<long> n1本化Wav消音継続時間; // #28732 2012.6.20 yyagi
559559
560+
560561 protected E判定 e指定時刻からChipのJUDGEを返す( long nTime, CDTX.CChip pChip, int nInputAdjustTime )
561562 {
562563 if ( pChip != null )
@@ -851,13 +852,10 @@
851852 {
852853 nLane = (int) Eレーン.Bass;
853854 }
854- if ( this.r1本化WavChip[ nPart ] != null ) // 1本化WAVを使っていて、且つチップ音のファイル名指定無しなら、フラグを立てる
855+ bIsSingleMusicTrack = bIsPlayingSingleWavTrk( ref pChip, part );
856+ if ( part != E楽器パート.UNKNOWN ) // 1本化WAVの消音タイマ解除
855857 {
856- if ( !CDTXMania.DTX.listWAV.ContainsKey( pChip.n整数値・内部番号 ) )
857- {
858- bIsSingleMusicTrack = true;
859- pChip = this.r1本化WavChip[ nPart ];
860- }
858+ this.n1本化Wav消音待ちの開始時刻[ nPart ] = -1;
861859 }
862860 switch ( part )
863861 {
@@ -995,6 +993,20 @@
995993 }
996994 }
997995 }
996+
997+ private bool bIsPlayingSingleWavTrk( ref CDTX.CChip pChip, E楽器パート part)
998+ {
999+ int nPart = (int) part;
1000+ if ( this.r1本化WavChip[ nPart ] != null ) // 1本化WAVを使っていて、且つチップ音のファイル名指定無しなら、フラグを立てる
1001+ {
1002+ if ( !CDTXMania.DTX.listWAV.ContainsKey( pChip.n整数値・内部番号 ) )
1003+ {
1004+ pChip = this.r1本化WavChip[ nPart ];
1005+ return true;
1006+ }
1007+ }
1008+ return false;
1009+ }
9981010 protected void tステータスパネルの選択()
9991011 {
10001012 if ( CDTXMania.bコンパクトモード )
@@ -1070,6 +1082,7 @@
10701082 // }
10711083 ////Trace.TraceInformation( "ch={0:x2}, flag={1}", pChip.nチャンネル番号, bPChipIsAutoPlay.ToString() );
10721084 #endregion
1085+
10731086 if ( pChip.e楽器パート == E楽器パート.UNKNOWN )
10741087 {
10751088 this.bAUTOでないチップが1つでもバーを通過した = true;
@@ -1627,10 +1640,10 @@
16271640 {
16281641 return true;
16291642 }
1630- if ( this.n現在のトップChip == -1 )
1631- {
1632- return true;
1633- }
1643+ //if ( this.n現在のトップChip == -1 ) // 1つ上のブロックで同じことをしているので省略
1644+ //{
1645+ // return true;
1646+ //}
16341647
16351648 //double speed = 264.0; // BPM150の時の1小節の長さ[dot]
16361649 const double speed = 234.0; // BPM150の時の1小節の長さ[dot]
@@ -1664,6 +1677,7 @@
16641677
16651678 int nInputAdjustTime = ( bPChipIsAutoPlay || (pChip.e楽器パート == E楽器パート.UNKNOWN) )? 0 : this.nInputAdjustTimeMs[ (int) pChip.e楽器パート ];
16661679
1680+ // 演奏しないで流れてMissになったチップを退場させる
16671681 if ( ( ( pChip.e楽器パート != E楽器パート.UNKNOWN ) && !pChip.bHit ) &&
16681682 ( ( pChip.nバーからの距離dot.Drums < 0 ) && ( this.e指定時刻からChipのJUDGEを返す( CDTXMania.Timer.n現在時刻, pChip, nInputAdjustTime ) == E判定.Miss ) ) )
16691683 {
@@ -2233,7 +2247,8 @@
22332247 bool pushingR = CDTXMania.Pad.b押されている( inst, Eパッド.R );
22342248 bool pushingG = CDTXMania.Pad.b押されている( inst, Eパッド.G );
22352249 bool pushingB = CDTXMania.Pad.b押されている( inst, Eパッド.B );
2236-
2250+ bool bバーを通過した = pChip.bバーを通過した; // 後でpChipを壊すので、ここで値をコピーしておく
2251+ pChip.bバーを通過した = true;
22372252 #region [ Chip Fire effects ]
22382253 bool bSuccessOPEN = bChipIsO && ( autoR || !pushingR ) && ( autoG || !pushingG ) && ( autoB || !pushingB );
22392254 if ( ( bChipHasR && ( autoR || pushingR ) && autoPick ) || bSuccessOPEN )
@@ -2249,6 +2264,7 @@
22492264 this.actChipFireGB.Start( 2 + lo );
22502265 }
22512266 #endregion
2267+ #region [ auto pick処理 ]
22522268 if ( autoPick )
22532269 {
22542270 bool bMiss = true;
@@ -2257,7 +2273,7 @@
22572273 bMiss = false;
22582274 }
22592275 else if ( ( autoR || ( bChipHasR == pushingR ) ) && ( autoG || ( bChipHasG == pushingG ) ) && ( autoB || ( bChipHasB == pushingB ) ) )
2260- // ( bChipHasR == ( pushingR | autoR ) ) && ( bChipHasG == ( pushingG | autoG ) ) && ( bChipHasB == ( pushingB | autoB ) ) )
2276+ // ( bChipHasR == ( pushingR | autoR ) ) && ( bChipHasG == ( pushingG | autoG ) ) && ( bChipHasB == ( pushingB | autoB ) ) )
22612277 {
22622278 bMiss = false;
22632279 }
@@ -2284,6 +2300,31 @@
22842300 this.queWailing[ instIndex ].Enqueue( item );
22852301 }
22862302 }
2303+ #endregion
2304+ #region [ auto pickではないときの処理 (1WAV化したギター・ベース用の処理) ]
2305+ else
2306+ {
2307+ // もし空チップなら、以下を実行。
2308+ //   今のシステム時刻を覚えてないなら、覚える。そして、1wavトラックがあれば消音する。
2309+ //   100ms経っていたら、複音する。
2310+ // (100ms経たないうちに次の空チップが来ても、消音開始時間を上書きしない(消音継続しない)。)
2311+
2312+ long n発声時刻ms = pChip.n発声時刻ms;
2313+ if ( bIsPlayingSingleWavTrk( ref pChip, inst ) ) // ここでpChipが1WAVなtrkのchipに化ける
2314+ {
2315+ int nInst = (int) inst;
2316+ if ( !bバーを通過した && n1本化Wav消音待ちの開始時刻[ nInst ] < 0 )
2317+ {
2318+ n1本化Wav消音待ちの開始時刻[ nInst ] = n発声時刻ms;
2319+ }
2320+ if ( n1本化Wav消音待ちの開始時刻[ nInst ] >= 0 && CDTXMania.Timer.n現在時刻 - n1本化Wav消音待ちの開始時刻[ nInst ] >= n1本化Wav消音継続時間[ nInst ] )
2321+ {
2322+ CDTXMania.DTX.t1本Wavの再生停止( this.r1本化WavChip[ nInst ] );
2323+ n1本化Wav消音待ちの開始時刻[ nInst ] = -1;
2324+ }
2325+ }
2326+ }
2327+ #endregion
22872328 }
22882329 return;
22892330 } // end of "if configIni.bGuitar有効"
@@ -2557,8 +2598,6 @@
25572598 {
25582599 t入力処理・ギターベース( E楽器パート.BASS );
25592600 }
2560-
2561-
25622601 protected virtual void t入力処理・ギターベース(E楽器パート inst)
25632602 {
25642603 int indexInst = (int) inst;
旧リポジトリブラウザで表示