2 using System.Collections.Generic;
\r
4 using System.Runtime.InteropServices;
\r
5 using System.Drawing;
\r
6 using System.Drawing.Imaging;
\r
8 using System.Diagnostics;
\r
9 using System.Threading;
\r
10 using SlimDX.Direct3D9;
\r
15 internal class CStage演奏ギター画面 : CStage演奏画面共通
\r
19 public CStage演奏ギター画面()
\r
21 base.eステージID = CStage.Eステージ.演奏;
\r
22 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
23 base.b活性化してない = true;
\r
24 base.list子Activities.Add( this.actStageFailed = new CAct演奏ステージ失敗() );
\r
25 base.list子Activities.Add( this.actDANGER = new CAct演奏GuitarDanger() );
\r
26 base.list子Activities.Add( this.actAVI = new CAct演奏AVI() );
\r
27 base.list子Activities.Add( this.actBGA = new CAct演奏BGA() );
\r
28 base.list子Activities.Add( this.actPanel = new CAct演奏パネル文字列() );
\r
29 base.list子Activities.Add( this.act譜面スクロール速度 = new CAct演奏スクロール速度() );
\r
30 base.list子Activities.Add( this.actStatusPanels = new CAct演奏Guitarステータスパネル() );
\r
31 base.list子Activities.Add( this.actWailingBonus = new CAct演奏GuitarWailingBonus() );
\r
32 base.list子Activities.Add( this.actScore = new CAct演奏Guitarスコア() );
\r
33 base.list子Activities.Add( this.actRGB = new CAct演奏GuitarRGB() );
\r
34 base.list子Activities.Add( this.actLaneFlushGB = new CAct演奏GuitarレーンフラッシュGB() );
\r
35 base.list子Activities.Add( this.actJudgeString = new CAct演奏Guitar判定文字列() );
\r
36 base.list子Activities.Add( this.actGauge = new CAct演奏Guitarゲージ() );
\r
37 base.list子Activities.Add( this.actCombo = new CAct演奏Guitarコンボ() );
\r
38 base.list子Activities.Add( this.actChipFireGB = new CAct演奏Guitarチップファイア() );
\r
39 base.list子Activities.Add( this.actPlayInfo = new CAct演奏演奏情報() );
\r
40 base.list子Activities.Add( this.actFI = new CActFIFOBlack() );
\r
41 base.list子Activities.Add( this.actFO = new CActFIFOBlack() );
\r
42 base.list子Activities.Add( this.actFOClear = new CActFIFOWhite() );
\r
48 public void t演奏結果を格納する( out CScoreIni.C演奏記録 Drums, out CScoreIni.C演奏記録 Guitar, out CScoreIni.C演奏記録 Bass )
\r
50 Drums = new CScoreIni.C演奏記録();
\r
52 base.t演奏結果を格納する・ギター( out Guitar );
\r
53 base.t演奏結果を格納する・ベース( out Bass );
\r
55 // if ( CDTXMania.ConfigIni.bIsSwappedGuitarBass ) // #24063 2011.1.24 yyagi Gt/Bsを入れ替えていたなら、演奏結果も入れ替える
\r
57 // CScoreIni.C演奏記録 t;
\r
62 // CDTXMania.DTX.SwapGuitarBassInfos(); // 譜面情報も元に戻す
\r
69 public override void On活性化()
\r
71 dtLastQueueOperation = DateTime.MinValue;
\r
74 public override void OnManagedリソースの作成()
\r
76 if( !base.b活性化してない )
\r
78 //this.t背景テクスチャの生成();
\r
79 this.txチップ = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayGuitar chips.png" ) );
\r
80 this.txヒットバー = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlayGuitar hit-bar.png" ) );
\r
81 //this.txWailing枠 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenPlay wailing cursor.png" ) );
\r
82 base.OnManagedリソースの作成();
\r
85 public override void OnManagedリソースの解放()
\r
87 if( !base.b活性化してない )
\r
89 //CDTXMania.tテクスチャの解放( ref this.tx背景 );
\r
90 CDTXMania.tテクスチャの解放( ref this.txチップ );
\r
91 CDTXMania.tテクスチャの解放( ref this.txヒットバー );
\r
92 //CDTXMania.tテクスチャの解放( ref this.txWailing枠 );
\r
93 base.OnManagedリソースの解放();
\r
96 public override int On進行描画()
\r
98 if( !base.b活性化してない )
\r
100 bool bIsFinishedPlaying = false;
\r
101 bool bIsFinishedFadeout = false;
\r
103 if( base.b初めての進行描画 )
\r
105 CSound管理.rc演奏用タイマ.tリセット();
\r
106 CDTXMania.Timer.tリセット();
\r
107 this.ctチップ模様アニメ.Guitar = new CCounter( 0, 0x17, 20, CDTXMania.Timer );
\r
108 this.ctチップ模様アニメ.Bass = new CCounter( 0, 0x17, 20, CDTXMania.Timer );
\r
109 this.ctチップ模様アニメ[ 0 ] = null;
\r
110 this.ctWailingチップ模様アニメ = new CCounter( 0, 4, 50, CDTXMania.Timer );
\r
111 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;
\r
112 this.actFI.tフェードイン開始();
\r
114 if ( CDTXMania.DTXVmode.Enabled ) // DTXVモードなら
\r
116 #region [ DTXV用の再生設定にする(全AUTOなど) ]
\r
119 t演奏位置の変更( CDTXMania.DTXVmode.nStartBar );
\r
122 CDTXMania.Sound管理.tDisableUpdateBufferAutomatically();
\r
123 base.b初めての進行描画 = false;
\r
125 if( CDTXMania.ConfigIni.bSTAGEFAILED有効 && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )
\r
127 // bool flag3 = ( CDTXMania.ConfigIni.bAutoPlay.Guitar || !CDTXMania.DTX.bチップがある.Guitar ) || ( this.actGauge.db現在のゲージ値.Guitar <= -0.1 ); // #23630
\r
128 // bool flag4 = ( CDTXMania.ConfigIni.bAutoPlay.Bass || !CDTXMania.DTX.bチップがある.Bass ) || ( this.actGauge.db現在のゲージ値.Bass <= -0.1 ); // #23630
\r
129 bool bFailedGuitar = this.actGauge.IsFailed( E楽器パート.GUITAR ); // #23630 2011.11.12 yyagi: deleted AutoPlay condition: not to be failed at once
\r
130 bool bFailedBass = this.actGauge.IsFailed( E楽器パート.BASS ); // #23630
\r
131 bool bFailedNoChips = (!CDTXMania.DTX.bチップがある.Guitar && !CDTXMania.DTX.bチップがある.Bass); // #25216 2011.5.21 yyagi add condition
\r
132 if ( bFailedGuitar || bFailedBass || bFailedNoChips ) // #25216 2011.5.21 yyagi: changed codition: && -> ||
\r
134 this.actStageFailed.Start();
\r
135 CDTXMania.DTX.t全チップの再生停止();
\r
136 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED;
\r
140 this.t進行描画・MIDIBGM();
\r
141 this.t進行描画・パネル文字列();
\r
145 this.t進行描画・ステータスパネル();
\r
146 this.t進行描画・レーンフラッシュGB();
\r
147 this.t進行描画・ギターベース判定ライン();
\r
149 this.t進行描画・DANGER();
\r
150 this.t進行描画・RGBボタン();
\r
151 if ( this.e判定表示優先度 == E判定表示優先度.Chipより下 )
\r
153 this.t進行描画・判定文字列();
\r
156 this.t進行描画・WailingBonus();
\r
157 this.t進行描画・譜面スクロール速度();
\r
158 this.t進行描画・チップアニメ();
\r
159 bIsFinishedPlaying = this.t進行描画・チップ(E楽器パート.GUITAR);
\r
160 if ( this.e判定表示優先度 == E判定表示優先度.Chipより上 )
\r
162 this.t進行描画・判定文字列();
\r
166 this.t進行描画・Wailing枠();
\r
167 this.t進行描画・チップファイアGB();
\r
168 this.t進行描画・STAGEFAILED();
\r
169 bIsFinishedFadeout = this.t進行描画・フェードイン・アウト();
\r
170 if( bIsFinishedPlaying && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )
\r
172 if ( CDTXMania.DTXVmode.Enabled )
\r
174 if ( CDTXMania.Timer.b停止していない )
\r
176 this.actPanel.Stop(); // PANEL表示停止
\r
177 CDTXMania.Timer.t一時停止(); // 再生時刻カウンタ停止
\r
180 // DTXCからの次のメッセージを待ち続ける
\r
184 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージクリア;
\r
185 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト;
\r
186 this.actFOClear.tフェードアウト開始();
\r
189 if ( this.eフェードアウト完了時の戻り値 == E演奏画面の戻り値.再読込・再演奏 )
\r
191 bIsFinishedFadeout = true;
\r
193 if ( bIsFinishedFadeout )
\r
195 return (int) this.eフェードアウト完了時の戻り値;
\r
198 ManageMixerQueue();
\r
202 if( CDTXMania.act現在入力を占有中のプラグイン == null )
\r
213 #region [ private ]
\r
214 //-----------------
\r
215 protected override E判定 tチップのヒット処理( long nHitTime, CDTX.CChip pChip, bool bCorrectLane )
\r
217 E判定 eJudgeResult = tチップのヒット処理( nHitTime, pChip, E楽器パート.GUITAR, bCorrectLane );
\r
218 return eJudgeResult;
\r
220 protected override void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part )
\r
222 this.tチップのヒット処理・BadならびにTight時のMiss( part, 0, E楽器パート.GUITAR );
\r
224 protected override void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part, int nLane )
\r
226 this.tチップのヒット処理・BadならびにTight時のMiss( part, nLane, E楽器パート.GUITAR );
\r
229 protected override void t進行描画・AVI()
\r
231 base.t進行描画・AVI( 0xb5, 50 );
\r
233 protected override void t進行描画・BGA()
\r
235 base.t進行描画・BGA( 0xb5, 50 );
\r
237 protected override void t進行描画・DANGER() // #23631 2011.4.19 yyagi
\r
239 //this.actDANGER.t進行描画( false, this.actGauge.db現在のゲージ値.Guitar < 0.3, this.actGauge.db現在のゲージ値.Bass < 0.3 );
\r
240 this.actDANGER.t進行描画( false, this.actGauge.IsDanger(E楽器パート.GUITAR), this.actGauge.IsDanger(E楽器パート.BASS) );
\r
243 protected override void t進行描画・Wailing枠()
\r
245 int yG = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, true, bReverse[ (int) E楽器パート.GUITAR ], true );
\r
246 int yB = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, true, bReverse[ (int) E楽器パート.BASS ], true );
\r
247 base.t進行描画・Wailing枠( 0x8b, 0x251,
\r
250 //CDTXMania.ConfigIni.bReverse.Guitar ? 340 : 11,
\r
251 //CDTXMania.ConfigIni.bReverse.Bass ? 340 : 11
\r
254 private void t進行描画・ギターベース判定ライン() // yyagi: ドラム画面とは座標が違うだけですが、まとめづらかったのでそのまま放置してます。
\r
256 if ( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )
\r
258 if ( CDTXMania.DTX.bチップがある.Guitar )
\r
260 int y = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, true, bReverse[ (int) E楽器パート.GUITAR ] ) - 3;
\r
261 // #31602 2013.6.23 yyagi 描画遅延対策として、判定ラインの表示位置をオフセット調整できるようにする
\r
262 if ( this.txヒットバー != null )
\r
264 for ( int i = 0; i < 4; i++ )
\r
266 this.txヒットバー.t2D描画( CDTXMania.app.Device, 23 + ( 28 * i ), y, new Rectangle( 0, i * 8, 28, 8 ) );
\r
270 if ( CDTXMania.DTX.bチップがある.Bass )
\r
272 int y = this.演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, true, bReverse[ (int) E楽器パート.BASS ] ) - 3;
\r
273 // #31602 2013.6.23 yyagi 描画遅延対策として、判定ラインの表示位置をオフセット調整できるようにする
\r
274 if ( this.txヒットバー != null )
\r
276 for ( int j = 0; j < 4; j++ )
\r
278 this.txヒットバー.t2D描画( CDTXMania.app.Device, 477 + ( 28 * j ), y, new Rectangle( 0, j * 8, 28, 8 ) );
\r
285 protected override void t進行描画・パネル文字列()
\r
287 base.t進行描画・パネル文字列( 0xb5, 430 );
\r
290 protected override void t進行描画・演奏情報()
\r
292 base.t進行描画・演奏情報( 0xb5, 50 );
\r
295 protected override void ドラムスクロール速度アップ()
\r
299 protected override void ドラムスクロール速度ダウン()
\r
304 protected override void t入力処理・ドラム()
\r
309 protected override void t背景テクスチャの生成()
\r
311 Rectangle bgrect = new Rectangle( 181, 50, 278, 355 );
\r
312 string DefaultBgFilename = @"Graphics\ScreenPlayGuitar background.jpg";
\r
313 string BgFilename = "";
\r
314 string BACKGROUND = null;
\r
315 if ( ( CDTXMania.DTX.BACKGROUND_GR != null ) && ( CDTXMania.DTX.BACKGROUND_GR.Length > 0 ) )
\r
317 BACKGROUND = CDTXMania.DTX.BACKGROUND_GR;
\r
319 else if ( ( CDTXMania.DTX.BACKGROUND != null ) && ( CDTXMania.DTX.BACKGROUND.Length > 0 ) )
\r
321 BACKGROUND = CDTXMania.DTX.BACKGROUND;
\r
323 if ( ( BACKGROUND != null ) && ( BACKGROUND.Length > 0 ) )
\r
325 BgFilename = CDTXMania.DTX.strフォルダ名 + BACKGROUND;
\r
327 base.t背景テクスチャの生成( DefaultBgFilename, bgrect, BgFilename );
\r
330 protected override void t進行描画・チップ・ドラムス( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )
\r
332 // int indexSevenLanes = this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ];
\r
333 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
336 this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );
\r
339 protected override void t進行描画・チップ・ギターベース( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip, E楽器パート inst )
\r
341 base.t進行描画・チップ・ギターベース( configIni, ref dTX, ref pChip, inst,
\r
342 演奏判定ライン座標.n判定ラインY座標( inst, true, false ), // 40
\r
343 演奏判定ライン座標.n判定ラインY座標( inst, true, true ), // 369
\r
345 0, 192, 103, 8, // オープンチップの x, y, w, h
\r
346 32, 26, 98, 480, 552, 36, 32
\r
350 protected override void t進行描画・チップ・ギターベース( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip, E楽器パート inst )
\r
352 int instIndex = (int) inst;
\r
353 if ( configIni.bGuitar有効 )
\r
355 if ( configIni.bSudden[instIndex ] )
\r
357 pChip.b可視 = pChip.nバーからの距離dot[ instIndex ] < 200;
\r
359 if ( configIni.bHidden[ instIndex ] && ( pChip.nバーからの距離dot[ instIndex ] < 100 ) )
\r
364 bool bChipHasR = ( ( pChip.nチャンネル番号 & 4 ) > 0 );
\r
365 bool bChipHasG = ( ( pChip.nチャンネル番号 & 2 ) > 0 );
\r
366 bool bChipHasB = ( ( pChip.nチャンネル番号 & 1 ) > 0 );
\r
367 bool bChipHasW = ( ( pChip.nチャンネル番号 & 0x0F ) == 0x08 );
\r
368 bool bChipIsO = ( ( pChip.nチャンネル番号 & 0x0F ) == 0x00 );
\r
370 int OPEN = ( inst == E楽器パート.GUITAR ) ? 0x20 : 0xA0;
\r
371 if ( !pChip.bHit && pChip.b可視 )
\r
373 int y = configIni.bReverse[ instIndex ] ? ( 369 - pChip.nバーからの距離dot[ instIndex ]) : ( 40 + pChip.nバーからの距離dot[ instIndex ] );
\r
374 if ( ( y > 0 ) && ( y < 409 ) )
\r
376 if ( this.txチップ != null )
\r
378 int nアニメカウンタ現在の値 = this.ctチップ模様アニメ[ instIndex ].n現在の値;
\r
379 if ( pChip.nチャンネル番号 == OPEN )
\r
382 int xo = ( inst == E楽器パート.GUITAR ) ? 26 : 480;
\r
383 this.txチップ.t2D描画( CDTXMania.app.Device, xo, y - 4, new Rectangle( 0, 192 + ( ( nアニメカウンタ現在の値 % 5 ) * 8 ), 103, 8 ) );
\r
386 Rectangle rc = new Rectangle( 0, nアニメカウンタ現在の値 * 8, 32, 8 );
\r
388 if ( inst == E楽器パート.GUITAR )
\r
390 x = ( configIni.bLeft.Guitar ) ? 98 : 26;
\r
394 x = ( configIni.bLeft.Bass ) ? 552 : 480;
\r
396 int deltaX = ( configIni.bLeft[ instIndex ] ) ? -36 : +36;
\r
399 this.txチップ.t2D描画( CDTXMania.app.Device, x, y - 4, rc );
\r
404 this.txチップ.t2D描画( CDTXMania.app.Device, x, y - 4, rc );
\r
409 this.txチップ.t2D描画( CDTXMania.app.Device, x, y - 4, rc );
\r
414 // if ( ( configIni.bAutoPlay.Guitar && !pChip.bHit ) && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
415 if ( ( !pChip.bHit ) && ( pChip.nバーからの距離dot[ instIndex ] < 0 ) )
\r
417 int lo = ( inst == E楽器パート.GUITAR ) ? 0 : 3; // lane offset
\r
418 bool autoR = ( inst == E楽器パート.GUITAR ) ? bIsAutoPlay.GtR : bIsAutoPlay.BsR;
\r
419 bool autoG = ( inst == E楽器パート.GUITAR ) ? bIsAutoPlay.GtG : bIsAutoPlay.BsG;
\r
420 bool autoB = ( inst == E楽器パート.GUITAR ) ? bIsAutoPlay.GtB : bIsAutoPlay.BsB;
\r
421 if ( ( bChipHasR || bChipIsO ) && autoR )
\r
423 this.actChipFireGB.Start( 0 + lo );
\r
425 if ( ( bChipHasG || bChipIsO ) && autoG )
\r
427 this.actChipFireGB.Start( 1 + lo );
\r
429 if ( ( bChipHasB || bChipIsO ) && autoB )
\r
431 this.actChipFireGB.Start( 2 + lo );
\r
433 if ( ( inst == E楽器パート.GUITAR && bIsAutoPlay.GtPick ) || ( inst == E楽器パート.BASS && bIsAutoPlay.BsPick ) )
\r
435 bool pushingR = CDTXMania.Pad.b押されている( inst, Eパッド.R );
\r
436 bool pushingG = CDTXMania.Pad.b押されている( inst, Eパッド.G );
\r
437 bool pushingB = CDTXMania.Pad.b押されている( inst, Eパッド.B );
\r
439 if ( ( ( bChipIsO == true ) && ( !pushingR | autoR ) && ( !pushingG | autoG ) && ( !pushingB | autoB ) ) ||
\r
440 ( ( bChipHasR == ( pushingR | autoR ) ) && ( bChipHasG == ( pushingG | autoG ) ) && ( bChipHasB == ( pushingB | autoB ) ) )
\r
446 this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, inst, dTX.nモニタを考慮した音量( inst ) );
\r
447 this.r次にくるギターChip = null;
\r
448 this.tチップのヒット処理( pChip.n発声時刻ms, pChip );
\r
454 if ( !pChip.bHit && ( pChip.nバーからの距離dot[ instIndex ] < 0 ) )
\r
457 this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, inst, dTX.nモニタを考慮した音量( inst ) );
\r
461 protected override void t進行描画・チップ・ギター・ウェイリング( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )
\r
463 if ( configIni.bGuitar有効 )
\r
465 //if ( configIni.bSudden.Guitar )
\r
467 // pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;
\r
469 //if ( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )
\r
471 // pChip.b可視 = false;
\r
475 // 後日、以下の部分を何とかCStage演奏画面共通.csに移したい。
\r
477 if ( !pChip.bHit && pChip.b可視 )
\r
479 if ( this.txチップ != null )
\r
481 this.txチップ.n透明度 = pChip.n透明度;
\r
484 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, true, false ), // 40
\r
485 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, true, true ) // 369
\r
486 }; // ドラム画面かギター画面かで変わる値
\r
487 int offset = 0; // ドラム画面かギター画面かで変わる値
\r
489 const int WailingWidth = 20; // 4種全て同じ値
\r
490 const int WailingHeight = 50; // 4種全て同じ値
\r
491 const int baseTextureOffsetX = 96; // ドラム画面かギター画面かで変わる値
\r
492 const int baseTextureOffsetY = 0; // ドラム画面かギター画面かで変わる値
\r
493 const int drawX = 139; // 4種全て異なる値
\r
495 const int numA = 25; // 4種全て同じ値;
\r
496 int y = configIni.bReverse.Guitar ? ( y_base[ 1 ] - pChip.nバーからの距離dot.Guitar ) : ( y_base[ 0 ] + pChip.nバーからの距離dot.Guitar );
\r
497 int numB = y - offset; // 4種全て同じ定義
\r
498 int numC = 0; // 4種全て同じ初期値
\r
499 const int numD = 409; // ドラム画面かギター画面かで変わる値
\r
500 if ( ( numB < ( numD + numA ) ) && ( numB > -numA ) ) // 以下のロジックは4種全て同じ
\r
502 int c = this.ctWailingチップ模様アニメ.n現在の値;
\r
503 Rectangle rect = new Rectangle( baseTextureOffsetX + ( c * WailingWidth ), baseTextureOffsetY, WailingWidth, WailingHeight );
\r
506 rect.Y += numA - numB;
\r
507 rect.Height -= numA - numB;
\r
508 numC = numA - numB;
\r
510 if ( numB > ( numD - numA ) )
\r
512 rect.Height -= numB - ( numD - numA );
\r
514 if ( ( rect.Bottom > rect.Top ) && ( this.txチップ != null ) )
\r
516 this.txチップ.t2D描画( CDTXMania.app.Device, drawX, ( y - numA ) + numC, rect );
\r
520 // if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )
\r
522 // pChip.bHit = true;
\r
523 // if( configIni.bAutoPlay.Guitar )
\r
525 // this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );
\r
530 //pChip.bHit = true;
\r
532 base.t進行描画・チップ・ギター・ウェイリング( configIni, ref dTX, ref pChip );
\r
534 protected override void t進行描画・チップ・フィルイン( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )
\r
536 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
540 #if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST
\r
541 switch ( pChip.n整数値 )
\r
543 case 0x04: // HH消音あり(従来同等)
\r
544 CDTXMania.DTX.b演奏で直前の音を消音する.HH = true;
\r
546 case 0x05: // HH消音無し
\r
547 CDTXMania.DTX.b演奏で直前の音を消音する.HH = false;
\r
549 case 0x06: // ギター消音あり(従来同等)
\r
550 CDTXMania.DTX.b演奏で直前の音を消音する.Guitar = true;
\r
552 case 0x07: // ギター消音無し
\r
553 CDTXMania.DTX.b演奏で直前の音を消音する.Guitar = false;
\r
555 case 0x08: // ベース消音あり(従来同等)
\r
556 CDTXMania.DTX.b演奏で直前の音を消音する.Bass = true;
\r
558 case 0x09: // ベース消音無し
\r
559 CDTXMania.DTX.b演奏で直前の音を消音する.Bass = false;
\r
566 protected override void t進行描画・チップ・ベース( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )
\r
568 if ( configIni.bGuitar有効 )
\r
570 if ( configIni.bSudden.Bass )
\r
572 pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;
\r
574 if ( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )
\r
578 if ( !pChip.bHit && pChip.b可視 )
\r
580 int num8 = configIni.bReverse.Bass ? ( 0x171 - pChip.nバーからの距離dot.Bass ) : ( 40 + pChip.nバーからの距離dot.Bass );
\r
581 if ( ( num8 > 0 ) && ( num8 < 0x199 ) )
\r
583 int num9 = this.ctチップ模様アニメ.Bass.n現在の値;
\r
584 if ( pChip.nチャンネル番号 == 160 )
\r
586 if ( this.txチップ != null )
\r
588 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, new Rectangle( 0, 0xc0 + ( ( num9 % 5 ) * 8 ), 0x67, 8 ) );
\r
591 else if ( !configIni.bLeft.Bass )
\r
593 Rectangle rectangle3 = new Rectangle( 0, num9 * 8, 0x20, 8 );
\r
594 if ( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )
\r
596 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle3 );
\r
598 rectangle3.X += 0x20;
\r
599 if ( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )
\r
601 this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle3 );
\r
603 rectangle3.X += 0x20;
\r
604 if ( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )
\r
606 this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle3 );
\r
611 Rectangle rectangle4 = new Rectangle( 0, num9 * 8, 0x20, 8 );
\r
612 if ( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )
\r
614 this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle4 );
\r
616 rectangle4.X += 0x20;
\r
617 if ( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )
\r
619 this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle4 );
\r
621 rectangle4.X += 0x20;
\r
622 if ( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )
\r
624 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle4 );
\r
629 if ( ( configIni.bAutoPlay.Bass && !pChip.bHit ) && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
632 if ( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 0xA0 ) )
\r
634 this.actChipFireGB.Start( 3 );
\r
636 if ( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 0xA0 ) )
\r
638 this.actChipFireGB.Start( 4 );
\r
640 if ( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 0xA0 ) )
\r
642 this.actChipFireGB.Start( 5 );
\r
644 this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );
\r
645 this.r次にくるベースChip = null;
\r
646 this.tチップのヒット処理( pChip.n発声時刻ms, pChip );
\r
650 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
653 this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );
\r
657 protected override void t進行描画・チップ・ベース・ウェイリング( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )
\r
659 if ( configIni.bGuitar有効 )
\r
661 //if ( configIni.bSudden.Bass )
\r
663 // pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;
\r
665 //if ( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )
\r
667 // pChip.b可視 = false;
\r
671 // 後日、以下の部分を何とかCStage演奏画面共通.csに移したい。
\r
673 if ( !pChip.bHit && pChip.b可視 )
\r
675 if ( this.txチップ != null )
\r
677 this.txチップ.n透明度 = pChip.n透明度;
\r
680 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, true, false ), // 40
\r
681 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, true, true ) // 369
\r
682 }; // ドラム画面かギター画面かで変わる値
\r
683 int offset = 0; // ドラム画面かギター画面かで変わる値
\r
685 const int WailingWidth = 20; // 4種全て同じ値
\r
686 const int WailingHeight = 50; // 4種全て同じ値
\r
687 const int baseTextureOffsetX = 96; // ドラム画面かギター画面かで変わる値
\r
688 const int baseTextureOffsetY = 0; // ドラム画面かギター画面かで変わる値
\r
689 const int drawX = 593; // 4種全て異なる値
\r
691 const int numA = 25; // 4種全て同じ値
\r
692 int y = configIni.bReverse.Bass ? ( y_base[ 1 ] - pChip.nバーからの距離dot.Bass ) : ( y_base[ 0 ] + pChip.nバーからの距離dot.Bass );
\r
693 int numB = y - offset; // 4種全て同じ定義
\r
694 int numC = 0; // 4種全て同じ初期値
\r
695 const int numD = 409; // ドラム画面かギター画面かで変わる値
\r
696 if ( ( numB < ( numD + numA ) ) && ( numB > -numA ) ) // 以下のロジックは4種全て同じ
\r
698 int c = this.ctWailingチップ模様アニメ.n現在の値;
\r
699 Rectangle rect = new Rectangle( baseTextureOffsetX + ( c * WailingWidth ), baseTextureOffsetY, WailingWidth, WailingHeight );
\r
702 rect.Y += numA - numB;
\r
703 rect.Height -= numA - numB;
\r
704 numC = numA - numB;
\r
706 if ( numB > ( numD - numA ) )
\r
708 rect.Height -= numB - ( numD - numA );
\r
710 if ( ( rect.Bottom > rect.Top ) && ( this.txチップ != null ) )
\r
712 this.txチップ.t2D描画( CDTXMania.app.Device, drawX, ( y - numA ) + numC, rect );
\r
716 // if ( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )
\r
718 // pChip.bHit = true;
\r
719 // if ( configIni.bAutoPlay.Bass )
\r
721 // this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );
\r
726 //pChip.bHit = true;
\r
727 base.t進行描画・チップ・ベース・ウェイリング( configIni, ref dTX, ref pChip );
\r
730 protected override void t進行描画・チップ・空打ち音設定・ドラム( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )
\r
732 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
737 protected override void t進行描画・チップ・小節線( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )
\r
739 int n小節番号plus1 = pChip.n発声位置 / 0x180;
\r
740 if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )
\r
743 this.actPlayInfo.n小節番号 = n小節番号plus1 - 1;
\r
744 if ( configIni.bWave再生位置自動調整機能有効 && ( bIsDirectSound || bUseOSTimer ) )
\r
746 dTX.tWave再生位置自動補正();
\r
749 if ( ( pChip.b可視 && configIni.bGuitar有効 ) && ( configIni.eDark != Eダークモード.FULL ) && ( this.txチップ != null ) )
\r
751 this.txチップ.n透明度 = 255;
\r
752 //int y = configIni.bReverse.Guitar ? ( ( 0x171 - pChip.nバーからの距離dot.Guitar ) - 1 ) : ( ( 40 + pChip.nバーからの距離dot.Guitar ) - 1 );
\r
753 int y = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.GUITAR, false, configIni.bReverse.Guitar );
\r
754 if ( configIni.bReverse.Guitar )
\r
756 y = y - pChip.nバーからの距離dot.Guitar - 1;
\r
760 y = y + pChip.nバーからの距離dot.Guitar - 1;
\r
762 if ( ( dTX.bチップがある.Guitar && ( y > 0 ) ) && ( ( y < 0x199 ) ) )
\r
764 this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );
\r
766 //y = configIni.bReverse.Bass ? ( ( 0x171 - pChip.nバーからの距離dot.Bass ) - 1 ) : ( ( 40 + pChip.nバーからの距離dot.Bass ) - 1 );
\r
767 y = 演奏判定ライン座標.n判定ラインY座標( E楽器パート.BASS, false, configIni.bReverse.Bass );
\r
768 if ( configIni.bReverse.Bass )
\r
770 y = y - pChip.nバーからの距離dot.Bass - 1;
\r
774 y = y + pChip.nバーからの距離dot.Bass - 1;
\r
777 if ( ( dTX.bチップがある.Bass && ( y > 0 ) ) && ( ( y < 0x199 ) ) )
\r
779 this.txチップ.t2D描画( CDTXMania.app.Device, 480, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );
\r