OSDN Git Service

1f64b9c8d719a109b840dbabf30857d1e780dc73
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 07.演奏 / ギター画面 / CStage演奏ギター画面.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Runtime.InteropServices;\r
5 using System.Drawing;\r
6 using System.Drawing.Imaging;\r
7 using System.IO;\r
8 using System.Diagnostics;\r
9 using System.Threading;\r
10 using SlimDX.Direct3D9;\r
11 using FDK;\r
12 \r
13 namespace DTXMania\r
14 {\r
15         internal class CStage演奏ギター画面 : CStage演奏画面共通\r
16         {\r
17                 // コンストラクタ\r
18 \r
19                 public CStage演奏ギター画面()\r
20                 {\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
43                 }\r
44 \r
45 \r
46                 // メソッド\r
47 \r
48                 public void t演奏結果を格納する( out CScoreIni.C演奏記録 Drums, out CScoreIni.C演奏記録 Guitar, out CScoreIni.C演奏記録 Bass )\r
49                 {\r
50                         Drums = new CScoreIni.C演奏記録();\r
51 \r
52                         base.t演奏結果を格納する・ギター( out Guitar );\r
53                         base.t演奏結果を格納する・ベース( out Bass );\r
54 \r
55 //                      if ( CDTXMania.ConfigIni.bIsSwappedGuitarBass )         // #24063 2011.1.24 yyagi Gt/Bsを入れ替えていたなら、演奏結果も入れ替える\r
56 //                      {\r
57 //                              CScoreIni.C演奏記録 t;\r
58 //                              t = Guitar;\r
59 //                              Guitar = Bass;\r
60 //                              Bass = t;\r
61 //                      \r
62 //                              CDTXMania.DTX.SwapGuitarBassInfos();                    // 譜面情報も元に戻す\r
63 //                      }\r
64                 }\r
65                 \r
66 \r
67                 // CStage 実装\r
68 \r
69                 public override void On活性化()\r
70                 {\r
71                         dtLastQueueOperation = DateTime.MinValue;\r
72                         base.On活性化();\r
73                 }\r
74                 public override void OnManagedリソースの作成()\r
75                 {\r
76                         if( !base.b活性化してない )\r
77                         {\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
83                         }\r
84                 }\r
85                 public override void OnManagedリソースの解放()\r
86                 {\r
87                         if( !base.b活性化してない )\r
88                         {\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
94                         }\r
95                 }\r
96                 public override int On進行描画()\r
97                 {\r
98                         if( !base.b活性化してない )\r
99                         {\r
100                                 bool bIsFinishedPlaying = false;\r
101                                 bool bIsFinishedFadeout = false;\r
102 \r
103                                 if( base.b初めての進行描画 )\r
104                                 {\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
113 \r
114                                         if ( CDTXMania.DTXVmode.Enabled )                       // DTXVモードなら\r
115                                         {\r
116                                                 #region [ DTXV用の再生設定にする(全AUTOなど) ]\r
117                                                 tDTXV用の設定();\r
118                                                 #endregion\r
119                                                 t演奏位置の変更( CDTXMania.DTXVmode.nStartBar );\r
120                                         }\r
121 \r
122                                         CDTXMania.Sound管理.tDisableUpdateBufferAutomatically();\r
123                                         base.b初めての進行描画 = false;\r
124                                 }\r
125                                 if( CDTXMania.ConfigIni.bSTAGEFAILED有効 && ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 ) )\r
126                                 {\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
133                                         {\r
134                                                 this.actStageFailed.Start();\r
135                                                 CDTXMania.DTX.t全チップの再生停止();\r
136                                                 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED;\r
137                                         }\r
138                                 }\r
139                                 this.t進行描画・背景();\r
140                                 this.t進行描画・MIDIBGM();\r
141                                 this.t進行描画・パネル文字列();\r
142                                 this.t進行描画・スコア();\r
143                                 this.t進行描画・AVI();\r
144                                 this.t進行描画・BGA();\r
145                                 this.t進行描画・ステータスパネル();\r
146                                 this.t進行描画・レーンフラッシュGB();\r
147                                 this.t進行描画・ギターベース判定ライン();\r
148                                 this.t進行描画・ゲージ();\r
149                                 this.t進行描画・DANGER();\r
150                                 this.t進行描画・RGBボタン();\r
151                                 if ( this.e判定表示優先度 == E判定表示優先度.Chipより下 )\r
152                                 {\r
153                                         this.t進行描画・判定文字列();\r
154                                         this.t進行描画・コンボ();\r
155                                 }\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
161                                 {\r
162                                         this.t進行描画・判定文字列();\r
163                                         this.t進行描画・コンボ();\r
164                                 }\r
165                                 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
171                                 {\r
172                                         if ( CDTXMania.DTXVmode.Enabled )\r
173                                         {\r
174                                                 if ( CDTXMania.Timer.b停止していない )\r
175                                                 {\r
176                                                         this.actPanel.Stop();                           // PANEL表示停止\r
177                                                         CDTXMania.Timer.t一時停止();                // 再生時刻カウンタ停止\r
178                                                 }\r
179                                                 Thread.Sleep( 5 );\r
180                                                 // DTXCからの次のメッセージを待ち続ける\r
181                                         }\r
182                                         else\r
183                                         {\r
184                                                 this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージクリア;\r
185                                                 base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト;\r
186                                                 this.actFOClear.tフェードアウト開始();\r
187                                         } \r
188                                 }\r
189                                 if ( this.eフェードアウト完了時の戻り値 == E演奏画面の戻り値.再読込・再演奏 )\r
190                                 {\r
191                                         bIsFinishedFadeout = true;\r
192                                 }\r
193                                 if ( bIsFinishedFadeout )\r
194                                 {\r
195                                         return (int) this.eフェードアウト完了時の戻り値;\r
196                                 }\r
197 \r
198                                 ManageMixerQueue();\r
199 \r
200                                 // キー入力\r
201 \r
202                                 if( CDTXMania.act現在入力を占有中のプラグイン == null )\r
203                                 {\r
204                                         this.tキー入力();\r
205                                 }\r
206                         }\r
207                         return 0;\r
208                 }\r
209 \r
210 \r
211                 // その他\r
212 \r
213                 #region [ private ]\r
214                 //-----------------\r
215                 protected override E判定 tチップのヒット処理( long nHitTime, CDTX.CChip pChip, bool bCorrectLane )\r
216                 {\r
217                         E判定 eJudgeResult = tチップのヒット処理( nHitTime, pChip, E楽器パート.GUITAR, bCorrectLane );\r
218                         return eJudgeResult;\r
219                 }\r
220                 protected override void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part )\r
221                 {\r
222                         this.tチップのヒット処理・BadならびにTight時のMiss( part, 0, E楽器パート.GUITAR );\r
223                 }\r
224                 protected override void tチップのヒット処理・BadならびにTight時のMiss( E楽器パート part, int nLane )\r
225                 {\r
226                         this.tチップのヒット処理・BadならびにTight時のMiss( part, nLane, E楽器パート.GUITAR );\r
227                 }\r
228 \r
229                 protected override void t進行描画・AVI()\r
230                 {\r
231                     base.t進行描画・AVI( 0xb5, 50 );\r
232                 }\r
233                 protected override void t進行描画・BGA()\r
234                 {\r
235                     base.t進行描画・BGA( 0xb5, 50 );\r
236                 }\r
237                 protected override void t進行描画・DANGER()                        // #23631 2011.4.19 yyagi\r
238                 {\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
241                 }\r
242 \r
243                 protected override void t進行描画・Wailing枠()\r
244                 {\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
248                                 yG,\r
249                                 yB\r
250                                 //CDTXMania.ConfigIni.bReverse.Guitar ? 340 : 11,\r
251                                 //CDTXMania.ConfigIni.bReverse.Bass ?   340 : 11\r
252                         );\r
253                 }\r
254                 private void t進行描画・ギターベース判定ライン()        // yyagi: ドラム画面とは座標が違うだけですが、まとめづらかったのでそのまま放置してます。\r
255                 {\r
256                         if ( ( CDTXMania.ConfigIni.eDark != Eダークモード.FULL ) && CDTXMania.ConfigIni.bGuitar有効 )\r
257                         {\r
258                                 if ( CDTXMania.DTX.bチップがある.Guitar )\r
259                                 {\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
263                                         {\r
264                                                 for ( int i = 0; i < 4; i++ )\r
265                                                 {\r
266                                                         this.txヒットバー.t2D描画( CDTXMania.app.Device, 23 + ( 28 * i ), y, new Rectangle( 0, i * 8, 28, 8 ) );\r
267                                                 }\r
268                                         }\r
269                                 }\r
270                                 if ( CDTXMania.DTX.bチップがある.Bass )\r
271                                 {\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
275                                         {\r
276                                                 for ( int j = 0; j < 4; j++ )\r
277                                                 {\r
278                                                         this.txヒットバー.t2D描画( CDTXMania.app.Device, 477 + ( 28 * j ), y, new Rectangle( 0, j * 8, 28, 8 ) );\r
279                                                 }\r
280                                         }\r
281                                 }\r
282                         }\r
283                 }\r
284 \r
285                 protected override void t進行描画・パネル文字列()\r
286                 {\r
287                         base.t進行描画・パネル文字列( 0xb5, 430 );\r
288                 }\r
289 \r
290                 protected override void t進行描画・演奏情報()\r
291                 {\r
292                         base.t進行描画・演奏情報( 0xb5, 50 );\r
293                 }\r
294 \r
295                 protected override void ドラムスクロール速度アップ()\r
296                 {\r
297                         // ギタレボモードでは何もしない\r
298                 }\r
299                 protected override void ドラムスクロール速度ダウン()\r
300                 {\r
301                         // ギタレボモードでは何もしない\r
302                 }\r
303 \r
304                 protected override void t入力処理・ドラム()\r
305                 {\r
306                         // ギタレボモードでは何もしない\r
307                 }\r
308 \r
309                 protected override void t背景テクスチャの生成()\r
310                 {\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
316                         {\r
317                                 BACKGROUND = CDTXMania.DTX.BACKGROUND_GR;\r
318                         }\r
319                         else if ( ( CDTXMania.DTX.BACKGROUND != null ) && ( CDTXMania.DTX.BACKGROUND.Length > 0 ) )\r
320                         {\r
321                                 BACKGROUND = CDTXMania.DTX.BACKGROUND;\r
322                         }\r
323                         if ( ( BACKGROUND != null ) && ( BACKGROUND.Length > 0 ) )\r
324                         {\r
325                                 BgFilename = CDTXMania.DTX.strフォルダ名 + BACKGROUND;\r
326                         }\r
327                         base.t背景テクスチャの生成( DefaultBgFilename, bgrect, BgFilename );\r
328                 }\r
329 \r
330                 protected override void t進行描画・チップ・ドラムス( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )\r
331                 {\r
332                         // int indexSevenLanes = this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ];\r
333                         if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
334                         {\r
335                                 pChip.bHit = true;\r
336                                 this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.DRUMS, dTX.nモニタを考慮した音量( E楽器パート.DRUMS ) );\r
337                         }\r
338                 }\r
339                 protected override void t進行描画・チップ・ギターベース( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip, E楽器パート inst )\r
340                 {\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
344                                 0, 409, 26, 480,\r
345                                 0, 192, 103, 8,         // オープンチップの x, y, w, h\r
346                                 32, 26, 98, 480, 552, 36, 32\r
347                         );\r
348                 }\r
349 #if false\r
350                 protected override void t進行描画・チップ・ギターベース( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip, E楽器パート inst )\r
351                 {\r
352                         int instIndex = (int) inst;\r
353                         if ( configIni.bGuitar有効 )\r
354                         {\r
355                                 if ( configIni.bSudden[instIndex ] )\r
356                                 {\r
357                                         pChip.b可視 = pChip.nバーからの距離dot[ instIndex ] < 200;\r
358                                 }\r
359                                 if ( configIni.bHidden[ instIndex ] && ( pChip.nバーからの距離dot[ instIndex ] < 100 ) )\r
360                                 {\r
361                                         pChip.b可視 = false;\r
362                                 }\r
363 \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
369 \r
370                                 int OPEN = ( inst == E楽器パート.GUITAR ) ? 0x20 : 0xA0;\r
371                                 if ( !pChip.bHit && pChip.b可視 )\r
372                                 {\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
375                                         {\r
376                                                 if ( this.txチップ != null )\r
377                                                 {\r
378                                                         int nアニメカウンタ現在の値 = this.ctチップ模様アニメ[ instIndex ].n現在の値;\r
379                                                         if ( pChip.nチャンネル番号 == OPEN )\r
380                                                         {\r
381                                                                 {\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
384                                                                 }\r
385                                                         }\r
386                                                         Rectangle rc = new Rectangle( 0, nアニメカウンタ現在の値 * 8, 32, 8 );\r
387                                                         int x;\r
388                                                         if ( inst == E楽器パート.GUITAR )\r
389                                                         {\r
390                                                                 x = ( configIni.bLeft.Guitar ) ? 98 : 26;\r
391                                                         }\r
392                                                         else\r
393                                                         {\r
394                                                                 x = ( configIni.bLeft.Bass ) ? 552 : 480;\r
395                                                         }\r
396                                                         int deltaX = ( configIni.bLeft[ instIndex ] ) ? -36 : +36; \r
397                                                         if ( bChipHasR )\r
398                                                         {\r
399                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, x, y - 4, rc );\r
400                                                         }\r
401                                                         rc.X += 32;\r
402                                                         if ( bChipHasG )\r
403                                                         {\r
404                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, x, y - 4, rc );\r
405                                                         }\r
406                                                         rc.X += 32;\r
407                                                         if ( bChipHasB )\r
408                                                         {\r
409                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, x, y - 4, rc );\r
410                                                         }\r
411                                                 }\r
412                                         }\r
413                                 }\r
414                                 // if ( ( configIni.bAutoPlay.Guitar && !pChip.bHit ) && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
415                                 if ( ( !pChip.bHit ) && ( pChip.nバーからの距離dot[ instIndex ] < 0 ) )\r
416                                 {\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
422                                         {\r
423                                                 this.actChipFireGB.Start( 0 + lo );\r
424                                         }\r
425                                         if ( ( bChipHasG || bChipIsO ) && autoG )\r
426                                         {\r
427                                                 this.actChipFireGB.Start( 1 + lo );\r
428                                         }\r
429                                         if ( ( bChipHasB || bChipIsO ) && autoB )\r
430                                         {\r
431                                                 this.actChipFireGB.Start( 2 + lo );\r
432                                         }\r
433                                         if ( ( inst == E楽器パート.GUITAR && bIsAutoPlay.GtPick ) || ( inst == E楽器パート.BASS && bIsAutoPlay.BsPick ) )\r
434                                         {\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
438                                                 bool bMiss = true;\r
439                                                 if ( ( ( bChipIsO == true ) && ( !pushingR | autoR ) && ( !pushingG | autoG ) && ( !pushingB | autoB ) ) ||\r
440                                                         ( ( bChipHasR == ( pushingR | autoR ) ) && ( bChipHasG == ( pushingG | autoG ) ) && ( bChipHasB == ( pushingB | autoB ) ) )\r
441                                                 )\r
442                                                 {\r
443                                                         bMiss = false;\r
444                                                 }\r
445                                                 pChip.bHit = true;\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
449                                         }\r
450                                 }\r
451                                 // break;\r
452                                 return;\r
453                         }\r
454                         if ( !pChip.bHit && ( pChip.nバーからの距離dot[ instIndex ] < 0 ) )\r
455                         {\r
456                                 pChip.bHit = true;\r
457                                 this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, inst, dTX.nモニタを考慮した音量( inst ) );\r
458                         }\r
459                 }\r
460 #endif\r
461                 protected override void t進行描画・チップ・ギター・ウェイリング( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )\r
462                 {\r
463                         if ( configIni.bGuitar有効 )\r
464                         {\r
465                                 //if ( configIni.bSudden.Guitar )\r
466                                 //{\r
467                                 //    pChip.b可視 = pChip.nバーからの距離dot.Guitar < 200;\r
468                                 //}\r
469                                 //if ( configIni.bHidden.Guitar && ( pChip.nバーからの距離dot.Guitar < 100 ) )\r
470                                 //{\r
471                                 //    pChip.b可視 = false;\r
472                                 //}\r
473 \r
474                                 //\r
475                                 // 後日、以下の部分を何とかCStage演奏画面共通.csに移したい。\r
476                                 //\r
477                                 if ( !pChip.bHit && pChip.b可視 )\r
478                                 {\r
479                                         if ( this.txチップ != null )\r
480                                         {\r
481                                                 this.txチップ.n透明度 = pChip.n透明度;\r
482                                         }\r
483                                         int[] y_base = {\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
488 \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
494 \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
501                                         {\r
502                                                 int c = this.ctWailingチップ模様アニメ.n現在の値;\r
503                                                 Rectangle rect = new Rectangle( baseTextureOffsetX + ( c * WailingWidth ), baseTextureOffsetY, WailingWidth, WailingHeight );\r
504                                                 if ( numB < numA )\r
505                                                 {\r
506                                                         rect.Y += numA - numB;\r
507                                                         rect.Height -= numA - numB;\r
508                                                         numC = numA - numB;\r
509                                                 }\r
510                                                 if ( numB > ( numD - numA ) )\r
511                                                 {\r
512                                                         rect.Height -= numB - ( numD - numA );\r
513                                                 }\r
514                                                 if ( ( rect.Bottom > rect.Top ) && ( this.txチップ != null ) )\r
515                                                 {\r
516                                                         this.txチップ.t2D描画( CDTXMania.app.Device, drawX, ( y - numA ) + numC, rect );\r
517                                                 }\r
518                                         }\r
519                                 }\r
520                                 //    if( !pChip.bHit && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
521                                 //    {\r
522                                 //        pChip.bHit = true;\r
523                                 //        if( configIni.bAutoPlay.Guitar )\r
524                                 //        {\r
525                                 //            this.actWailingBonus.Start( E楽器パート.GUITAR, this.r現在の歓声Chip.Guitar );\r
526                                 //        }\r
527                                 //    }\r
528                                 //    return;\r
529                                 //}\r
530                                 //pChip.bHit = true;\r
531                         }\r
532                         base.t進行描画・チップ・ギター・ウェイリング( configIni, ref dTX, ref pChip );\r
533                 }\r
534                 protected override void t進行描画・チップ・フィルイン( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )\r
535                 {\r
536                         if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
537                         {\r
538                                 pChip.bHit = true;\r
539                         }\r
540 #if TEST_NOTEOFFMODE    // 2011.1.1 yyagi TEST\r
541                         switch ( pChip.n整数値 )\r
542                         {\r
543                                 case 0x04:      // HH消音あり(従来同等)\r
544                                         CDTXMania.DTX.b演奏で直前の音を消音する.HH = true;\r
545                                         break;\r
546                                 case 0x05:      // HH消音無し\r
547                                         CDTXMania.DTX.b演奏で直前の音を消音する.HH = false;\r
548                                         break;\r
549                                 case 0x06:      // ギター消音あり(従来同等)\r
550                                         CDTXMania.DTX.b演奏で直前の音を消音する.Guitar = true;\r
551                                         break;\r
552                                 case 0x07:      // ギター消音無し\r
553                                         CDTXMania.DTX.b演奏で直前の音を消音する.Guitar = false;\r
554                                         break;\r
555                                 case 0x08:      // ベース消音あり(従来同等)\r
556                                         CDTXMania.DTX.b演奏で直前の音を消音する.Bass = true;\r
557                                         break;\r
558                                 case 0x09:      // ベース消音無し\r
559                                         CDTXMania.DTX.b演奏で直前の音を消音する.Bass = false;\r
560                                         break;\r
561                         }\r
562 #endif\r
563 \r
564                 }\r
565 #if false\r
566                 protected override void t進行描画・チップ・ベース( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )\r
567                 {\r
568                         if ( configIni.bGuitar有効 )\r
569                         {\r
570                                 if ( configIni.bSudden.Bass )\r
571                                 {\r
572                                         pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;\r
573                                 }\r
574                                 if ( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )\r
575                                 {\r
576                                         pChip.b可視 = false;\r
577                                 }\r
578                                 if ( !pChip.bHit && pChip.b可視 )\r
579                                 {\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
582                                         {\r
583                                                 int num9 = this.ctチップ模様アニメ.Bass.n現在の値;\r
584                                                 if ( pChip.nチャンネル番号 == 160 )\r
585                                                 {\r
586                                                         if ( this.txチップ != null )\r
587                                                         {\r
588                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, new Rectangle( 0, 0xc0 + ( ( num9 % 5 ) * 8 ), 0x67, 8 ) );\r
589                                                         }\r
590                                                 }\r
591                                                 else if ( !configIni.bLeft.Bass )\r
592                                                 {\r
593                                                         Rectangle rectangle3 = new Rectangle( 0, num9 * 8, 0x20, 8 );\r
594                                                         if ( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
595                                                         {\r
596                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle3 );\r
597                                                         }\r
598                                                         rectangle3.X += 0x20;\r
599                                                         if ( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
600                                                         {\r
601                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle3 );\r
602                                                         }\r
603                                                         rectangle3.X += 0x20;\r
604                                                         if ( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
605                                                         {\r
606                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle3 );\r
607                                                         }\r
608                                                 }\r
609                                                 else\r
610                                                 {\r
611                                                         Rectangle rectangle4 = new Rectangle( 0, num9 * 8, 0x20, 8 );\r
612                                                         if ( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) && ( this.txチップ != null ) )\r
613                                                         {\r
614                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, 0x228, num8 - 4, rectangle4 );\r
615                                                         }\r
616                                                         rectangle4.X += 0x20;\r
617                                                         if ( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) && ( this.txチップ != null ) )\r
618                                                         {\r
619                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, 0x204, num8 - 4, rectangle4 );\r
620                                                         }\r
621                                                         rectangle4.X += 0x20;\r
622                                                         if ( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) && ( this.txチップ != null ) )\r
623                                                         {\r
624                                                                 this.txチップ.t2D描画( CDTXMania.app.Device, 480, num8 - 4, rectangle4 );\r
625                                                         }\r
626                                                 }\r
627                                         }\r
628                                 }\r
629                                 if ( ( configIni.bAutoPlay.Bass && !pChip.bHit ) && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
630                                 {\r
631                                         pChip.bHit = true;\r
632                                         if ( ( ( pChip.nチャンネル番号 & 4 ) != 0 ) || ( pChip.nチャンネル番号 == 0xA0 ) )\r
633                                         {\r
634                                                 this.actChipFireGB.Start( 3 );\r
635                                         }\r
636                                         if ( ( ( pChip.nチャンネル番号 & 2 ) != 0 ) || ( pChip.nチャンネル番号 == 0xA0 ) )\r
637                                         {\r
638                                                 this.actChipFireGB.Start( 4 );\r
639                                         }\r
640                                         if ( ( ( pChip.nチャンネル番号 & 1 ) != 0 ) || ( pChip.nチャンネル番号 == 0xA0 ) )\r
641                                         {\r
642                                                 this.actChipFireGB.Start( 5 );\r
643                                         }\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
647                                 }\r
648                                 return;\r
649                         }\r
650                         if ( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
651                         {\r
652                                 pChip.bHit = true;\r
653                                 this.tサウンド再生( pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, E楽器パート.BASS, dTX.nモニタを考慮した音量( E楽器パート.BASS ) );\r
654                         }\r
655                 }\r
656 #endif\r
657                 protected override void t進行描画・チップ・ベース・ウェイリング( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )\r
658                 {\r
659                         if ( configIni.bGuitar有効 )\r
660                         {\r
661                                 //if ( configIni.bSudden.Bass )\r
662                                 //{\r
663                                 //    pChip.b可視 = pChip.nバーからの距離dot.Bass < 200;\r
664                                 //}\r
665                                 //if ( configIni.bHidden.Bass && ( pChip.nバーからの距離dot.Bass < 100 ) )\r
666                                 //{\r
667                                 //    pChip.b可視 = false;\r
668                                 //}\r
669 \r
670                                 //\r
671                                 // 後日、以下の部分を何とかCStage演奏画面共通.csに移したい。\r
672                                 //\r
673                                 if ( !pChip.bHit && pChip.b可視 )\r
674                                 {\r
675                                         if ( this.txチップ != null )\r
676                                         {\r
677                                                 this.txチップ.n透明度 = pChip.n透明度;\r
678                                         }\r
679                                         int[] y_base = {\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
684 \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
690 \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
697                                         {\r
698                                                 int c = this.ctWailingチップ模様アニメ.n現在の値;\r
699                                                 Rectangle rect = new Rectangle( baseTextureOffsetX + ( c * WailingWidth ), baseTextureOffsetY, WailingWidth, WailingHeight );\r
700                                                 if ( numB < numA )\r
701                                                 {\r
702                                                         rect.Y += numA - numB;\r
703                                                         rect.Height -= numA - numB;\r
704                                                         numC = numA - numB;\r
705                                                 }\r
706                                                 if ( numB > ( numD - numA ) )\r
707                                                 {\r
708                                                         rect.Height -= numB - ( numD - numA );\r
709                                                 }\r
710                                                 if ( ( rect.Bottom > rect.Top ) && ( this.txチップ != null ) )\r
711                                                 {\r
712                                                         this.txチップ.t2D描画( CDTXMania.app.Device, drawX, ( y - numA ) + numC, rect );\r
713                                                 }\r
714                                         }\r
715                                 }\r
716                                 //    if ( !pChip.bHit && ( pChip.nバーからの距離dot.Bass < 0 ) )\r
717                                 //    {\r
718                                 //        pChip.bHit = true;\r
719                                 //        if ( configIni.bAutoPlay.Bass )\r
720                                 //        {\r
721                                 //            this.actWailingBonus.Start( E楽器パート.BASS, this.r現在の歓声Chip.Bass );\r
722                                 //        }\r
723                                 //    }\r
724                                 //    return;\r
725                                 //}\r
726                                 //pChip.bHit = true;\r
727                                 base.t進行描画・チップ・ベース・ウェイリング( configIni, ref dTX, ref pChip );\r
728                         }\r
729                 }\r
730                 protected override void t進行描画・チップ・空打ち音設定・ドラム( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )\r
731                 {\r
732                         if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
733                         {\r
734                                 pChip.bHit = true;\r
735                         }\r
736                 }\r
737                 protected override void t進行描画・チップ・小節線( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip )\r
738                 {\r
739                         int n小節番号plus1 = pChip.n発声位置 / 0x180;\r
740                         if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
741                         {\r
742                                 pChip.bHit = true;\r
743                                 this.actPlayInfo.n小節番号 = n小節番号plus1 - 1;\r
744                                 if ( configIni.bWave再生位置自動調整機能有効 && ( bIsDirectSound || bUseOSTimer ) )\r
745                                 {\r
746                                         dTX.tWave再生位置自動補正();\r
747                                 }\r
748                         }\r
749                         if ( ( pChip.b可視 && configIni.bGuitar有効 ) && ( configIni.eDark != Eダークモード.FULL ) && ( this.txチップ != null ) )\r
750                         {\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
755                                 {\r
756                                         y = y - pChip.nバーからの距離dot.Guitar - 1;\r
757                                 }\r
758                                 else\r
759                                 {\r
760                                         y = y + pChip.nバーからの距離dot.Guitar - 1;\r
761                                 }\r
762                                 if ( ( dTX.bチップがある.Guitar && ( y > 0 ) ) && ( ( y < 0x199 ) ) )\r
763                                 {\r
764                                         this.txチップ.t2D描画( CDTXMania.app.Device, 0x1a, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );\r
765                                 }\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
769                                 {\r
770                                         y = y - pChip.nバーからの距離dot.Bass - 1;\r
771                                 }\r
772                                 else\r
773                                 {\r
774                                         y = y + pChip.nバーからの距離dot.Bass - 1;\r
775                                 }\r
776 \r
777                                 if ( ( dTX.bチップがある.Bass && ( y > 0 ) ) && ( ( y < 0x199 ) ) )\r
778                                 {\r
779                                         this.txチップ.t2D描画( CDTXMania.app.Device, 480, y, new Rectangle( 0, 0xeb, 0x68, 1 ) );\r
780                                 }\r
781                         }\r
782 \r
783                 }\r
784 \r
785                 #endregion\r
786         }\r
787 }\r