2 using System.Collections.Generic;
\r
5 using System.Threading.Tasks;
\r
8 using System.Drawing;
\r
10 using System.Diagnostics;
\r
11 using System.Drawing.Imaging;
\r
15 internal partial class CStage演奏画面共通 : CStage
\r
17 void SudHidInvChip( EPart inst, ref CChip pChip )
\r
19 if (CDTXMania.Instance.ConfigIni.eSudHidInv[inst] == ESudHidInv.SemiInv ||
\r
20 CDTXMania.Instance.ConfigIni.eSudHidInv[inst] == ESudHidInv.FullInv)
\r
22 cInvisibleChip.SetInvisibleStatus(ref pChip);
\r
26 if (CDTXMania.Instance.ConfigIni.eSudHidInv[inst] == ESudHidInv.Sudden ||
\r
27 CDTXMania.Instance.ConfigIni.eSudHidInv[inst] == ESudHidInv.SudHid)
\r
29 if (pChip.nバーからの距離dot[inst] < CDTXMania.Instance.ConfigIni.nSuddenFrom[inst])
\r
34 else if (pChip.nバーからの距離dot[inst] < CDTXMania.Instance.ConfigIni.nSuddenFrom[inst] + 100)
\r
37 pChip.n透明度 = 0xff - (int)((pChip.nバーからの距離dot[inst] -
\r
38 CDTXMania.Instance.ConfigIni.nSuddenFrom[inst]) * 255.0 / 50.0);
\r
46 if (CDTXMania.Instance.ConfigIni.eSudHidInv[inst] == ESudHidInv.Hidden ||
\r
47 CDTXMania.Instance.ConfigIni.eSudHidInv[inst] == ESudHidInv.SudHid)
\r
49 if (pChip.nバーからの距離dot[inst] < CDTXMania.Instance.ConfigIni.nHiddenFrom[inst])
\r
53 else if (pChip.nバーからの距離dot[inst] < CDTXMania.Instance.ConfigIni.nHiddenFrom[inst] + 100)
\r
56 pChip.n透明度 = (int)((pChip.nバーからの距離dot[inst] -
\r
57 CDTXMania.Instance.ConfigIni.nHiddenFrom[inst]) * 255.0 / 50.0);
\r
67 /// <param name="configIni"></param>
\r
68 /// <param name="dTX"></param>
\r
69 /// <param name="pChip">描画するチップ</param>
\r
70 /// <param name="inst">楽器種別</param>
\r
71 protected void t進行描画_チップ_ギターベース(ref CChip pChip, EPart inst)
\r
73 if (CDTXMania.Instance.ConfigIni.bGuitar有効)
\r
75 SudHidInvChip(inst, ref pChip);
\r
77 bool bChipHasR = pChip.bGuitarBass_R;
\r
78 bool bChipHasG = pChip.bGuitarBass_G;
\r
79 bool bChipHasB = pChip.bGuitarBass_B;
\r
80 bool bChipHasW = pChip.bGuitarBass_Wailing;
\r
81 bool bChipIsO = pChip.bGuitarBass_Open;
\r
84 if (!pChip.bHit && pChip.b可視)
\r
86 if (this.txチップGB != null)
\r
88 this.txチップGB.n透明度 = pChip.n透明度;
\r
91 int barY = C演奏判定ライン座標共通.n判定ラインY座標(inst);
\r
92 int y = CDTXMania.Instance.ConfigIni.bReverse[inst] ?
\r
93 barY - pChip.nバーからの距離dot[inst] :
\r
94 barY + pChip.nバーからの距離dot[inst];
\r
96 int showRangeY0 = 0;
\r
97 int showRangeY1 = SampleFramework.GameWindowSize.Height;
\r
99 if ((showRangeY0 < y) && (y < showRangeY1))
\r
101 if (this.txチップGB != null)
\r
103 int nアニメカウンタ現在の値 = this.ctチップ模様アニメ[inst].n現在の値;
\r
104 #region [ OPENチップの描画 ]
\r
105 if (pChip[(inst == EPart.Guitar) ? EChannel.Guitar_Open : EChannel.Bass_Open])
\r
107 int xo = CDTXMania.Instance.ConfigIni.cdInstX[inst][CDTXMania.Instance.ConfigIni.eActiveInst];
\r
108 this.txチップGB.t2D描画(CDTXMania.Instance.Device, xo,
\r
109 y - CDTXMania.Instance.Coordinates.ImgGtChipOpen.H / 2,
\r
110 CDTXMania.Instance.Coordinates.ImgGtChipOpen.ApplyCounterY(nアニメカウンタ現在の値 % CDTXMania.Instance.Coordinates.ImgGtCountOpenChip, 2));
\r
112 Rectangle rect = CDTXMania.Instance.Coordinates.ImgGtRGBButton.ApplyCounterY(nアニメカウンタ現在の値 % CDTXMania.Instance.Coordinates.ImgGtCountRGBChip, 2);
\r
114 #region [ RGBチップ描画 ]
\r
117 this.txチップGB.t2D描画(CDTXMania.Instance.Device,
\r
118 CDTXMania.Instance.ConfigIni.GetLaneX(inst == EPart.Guitar ? ELane.GtR : ELane.BsR) +
\r
119 (CDTXMania.Instance.ConfigIni.GetLaneW(inst == EPart.Guitar ? ELane.GtR : ELane.BsR) - CDTXMania.Instance.Coordinates.ImgGtRGBButton.W) / 2,
\r
120 y - rect.Height / 2, rect);
\r
122 rect.X += rect.Width;
\r
125 this.txチップGB.t2D描画(CDTXMania.Instance.Device,
\r
126 CDTXMania.Instance.ConfigIni.GetLaneX(inst == EPart.Guitar ? ELane.GtG : ELane.BsG) +
\r
127 (CDTXMania.Instance.ConfigIni.GetLaneW(inst == EPart.Guitar ? ELane.GtG : ELane.BsG) - CDTXMania.Instance.Coordinates.ImgGtRGBButton.W) / 2,
\r
128 y - rect.Height / 2, rect);
\r
130 rect.X += rect.Width;
\r
133 this.txチップGB.t2D描画(CDTXMania.Instance.Device,
\r
134 CDTXMania.Instance.ConfigIni.GetLaneX(inst == EPart.Guitar ? ELane.GtB : ELane.BsB) +
\r
135 (CDTXMania.Instance.ConfigIni.GetLaneW(inst == EPart.Guitar ? ELane.GtB : ELane.BsB) - CDTXMania.Instance.Coordinates.ImgGtRGBButton.W) / 2,
\r
136 y - rect.Height / 2, rect);
\r
144 // #35411 2015.08.20 chnmr0 modified
\r
145 // 従来のAUTO処理に加えてプレーヤーゴーストの再生機能を追加
\r
146 bool autoPlayCondition = (!pChip.bHit) && (pChip.nバーからの距離dot[inst] < 0);
\r
147 if (autoPlayCondition)
\r
149 cInvisibleChip.StartSemiInvisible(inst);
\r
152 bool autoPick = (inst == EPart.Guitar) ?
\r
153 CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick :
\r
154 CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick;
\r
156 autoPlayCondition = !pChip.bHit && autoPick;
\r
158 bool bUsePerfectGhost = true;
\r
160 if ((pChip.e楽器パート == EPart.Guitar || pChip.e楽器パート == EPart.Bass) &&
\r
161 CDTXMania.Instance.ConfigIni.eAutoGhost[pChip.e楽器パート] != EAutoGhostData.Perfect &&
\r
162 CDTXMania.Instance.DTX.listAutoGhostLag[pChip.e楽器パート] != null &&
\r
163 0 <= pChip.n楽器パートでの出現順 &&
\r
164 pChip.n楽器パートでの出現順 < CDTXMania.Instance.DTX.listAutoGhostLag[pChip.e楽器パート].Count)
\r
166 // #35411 (mod) Ghost data が有効なので 従来のAUTOではなくゴーストのラグを利用
\r
167 // 発生時刻と現在時刻からこのタイミングで演奏するかどうかを決定
\r
168 ghostLag = CDTXMania.Instance.DTX.listAutoGhostLag[pChip.e楽器パート][pChip.n楽器パートでの出現順];
\r
169 bool resetCombo = ghostLag > 255;
\r
170 ghostLag = (ghostLag & 255) - 128;
\r
171 ghostLag -= (pChip.e楽器パート == EPart.Guitar ?
\r
172 CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar :
\r
173 CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass);
\r
174 autoPlayCondition &= (pChip.n発声時刻ms + ghostLag <= CSound管理.rc演奏用タイマ.n現在時刻ms);
\r
175 if (resetCombo && autoPlayCondition)
\r
177 this.actCombo.dgbコンボ数[pChip.e楽器パート].ResetCombo();
\r
179 bUsePerfectGhost = false;
\r
182 if (bUsePerfectGhost)
\r
185 autoPlayCondition &= (pChip.nバーからの距離dot[inst] < 0);
\r
188 if (autoPlayCondition)
\r
191 int lo = (inst == EPart.Guitar) ? 0 : 3;
\r
192 bool autoR = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtR : CDTXMania.Instance.ConfigIni.bAutoPlay.BsR;
\r
193 bool autoG = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtG : CDTXMania.Instance.ConfigIni.bAutoPlay.BsG;
\r
194 bool autoB = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtB : CDTXMania.Instance.ConfigIni.bAutoPlay.BsB;
\r
195 bool pushingR = CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtR : EPad.BsR);
\r
196 bool pushingG = CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtG : EPad.BsG);
\r
197 bool pushingB = CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtB : EPad.BsB);
\r
199 #region [ Chip Fire effects (auto時用) ]
\r
200 // autoPickでない時の処理は、 t入力処理・ギターベース(E楽器パート) で行う
\r
201 bool bSuccessOPEN = bChipIsO && (autoR || !pushingR) && (autoG || !pushingG) && (autoB || !pushingB);
\r
203 if ((bChipHasR && (autoR || pushingR)) || bSuccessOPEN)
\r
205 this.actChipFireGB.Start(0 + lo);
\r
207 if ((bChipHasG && (autoG || pushingG)) || bSuccessOPEN)
\r
209 this.actChipFireGB.Start(1 + lo);
\r
211 if ((bChipHasB && (autoB || pushingB)) || bSuccessOPEN)
\r
213 this.actChipFireGB.Start(2 + lo);
\r
217 #region [ autopick ]
\r
220 if (bChipHasR == autoR && bChipHasG == autoG && bChipHasB == autoB) // autoレーンとチップレーン一致時はOK
\r
221 { // この条件を加えないと、同時に非autoレーンを押下している時にNGとなってしまう。
\r
224 else if ((autoR || (bChipHasR == pushingR)) && (autoG || (bChipHasG == pushingG)) && (autoB || (bChipHasB == pushingB)))
\r
225 // ( bChipHasR == ( pushingR | autoR ) ) && ( bChipHasG == ( pushingG | autoG ) ) && ( bChipHasB == ( pushingB | autoB ) ) )
\r
229 else if (((bChipIsO == true) && (!pushingR | autoR) && (!pushingG | autoG) && (!pushingB | autoB))) // OPEN時
\r
234 this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms + ghostLag,
\r
235 inst, CDTXMania.Instance.DTX.nモニタを考慮した音量(inst), false, bMiss);
\r
236 this.r次にくるギターChip = null;
\r
239 this.tチップのヒット処理(pChip.n発声時刻ms + ghostLag, pChip);
\r
243 pChip.nLag = 0; // tチップのヒット処理()の引数最後がfalseの時はpChip.nLagを計算しないため、ここでAutoPickかつMissのLag=0を代入
\r
244 this.tチップのヒット処理(pChip.n発声時刻ms + ghostLag, pChip, false);
\r
246 EChannel chWailingChip = (inst == EPart.Guitar) ? EChannel.Guitar_Wailing : EChannel.Bass_Wailing;
\r
247 CChip item = this.r指定時刻に一番近い未ヒットChip(pChip.n発声時刻ms + ghostLag, chWailingChip, CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[inst], 140);
\r
248 if (item != null && !bMiss)
\r
250 this.queWailing[inst].Enqueue(item);
\r
254 // #35411 modify end
\r
256 SetGhostTargetOnGraph(inst);
\r
258 } // end of "if configIni.bGuitar有効"
\r
261 // Guitar/Bass無効の場合は、自動演奏する
\r
262 if ((!pChip.bHit && (pChip.nバーからの距離dot[inst] < 0)))
\r
265 this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, inst, CDTXMania.Instance.DTX.nモニタを考慮した音量(inst));
\r
270 private void SetGhostTargetOnGraph(EPart inst)
\r
272 if (inst != EPart.Unknown)
\r
274 // #35411 2015.08.21 chnmr0 add
\r
275 // 目標値グラフにゴーストの達成率を渡す
\r
276 if (CDTXMania.Instance.ConfigIni.eTargetGhost[inst] != ETargetGhostData.None &&
\r
277 CDTXMania.Instance.DTX.listTargetGhsotLag[inst] != null)
\r
280 if (CDTXMania.Instance.ConfigIni.eTargetGhost[inst] == ETargetGhostData.Online)
\r
282 if (CDTXMania.Instance.DTX.n可視チップ数[inst] > 0)
\r
284 // Online Stats の計算式
\r
286 (this.nヒット数_TargetGhost[inst].Perfect * 17 +
\r
287 this.nヒット数_TargetGhost[inst].Great * 7 +
\r
288 this.n最大コンボ数_TargetGhost[inst] * 3) / (20.0 * CDTXMania.Instance.DTX.n可視チップ数[inst]);
\r
293 val = CScoreIni.t演奏型スキルを計算して返す(
\r
294 CDTXMania.Instance.DTX.n可視チップ数[inst],
\r
295 this.nヒット数_TargetGhost[inst].Perfect,
\r
296 this.nヒット数_TargetGhost[inst].Great,
\r
297 this.nヒット数_TargetGhost[inst].Good,
\r
298 this.nヒット数_TargetGhost[inst].Poor,
\r
299 this.nヒット数_TargetGhost[inst].Miss,
\r
300 EPart.Drums, false);
\r
310 this.actGraph.dbTarget[inst] = val;
\r
316 protected void t進行描画_チップ_小節線_拍線(ref CChip pChip)
\r
318 int n小節番号plus1 = pChip.n発声位置 / 384;
\r
319 if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
\r
322 this.actPlayInfo.n小節番号 = n小節番号plus1 - 1;
\r
323 if (CDTXMania.Instance.ConfigIni.bWaveAdjust && (bIsDirectSound || CDTXMania.Instance.ConfigIni.bUseOSTimer))
\r
325 CDTXMania.Instance.DTX.tWave再生位置自動補正();
\r
327 // dTX.tWaveBGM再生位置表示(); //デバッグ用
\r
330 EPart ePhraseNumberDisplayInst = EPart.Drums;
\r
331 if (!CDTXMania.Instance.DTX.bチップがある.Drums)
\r
333 ePhraseNumberDisplayInst = EPart.Guitar;
\r
334 if (!CDTXMania.Instance.DTX.bチップがある.Guitar)
\r
336 ePhraseNumberDisplayInst = EPart.Bass;
\r
340 for (EPart inst = EPart.Drums; inst <= EPart.Bass; ++inst)
\r
342 if (CDTXMania.Instance.ConfigIni.b楽器有効(inst) && CDTXMania.Instance.DTX.bチップがある[inst])
\r
344 if ((inst == EPart.Guitar || inst == EPart.Bass) && pChip[EChannel.BeatLine])
\r
348 this.txチップ.n透明度 = 255;
\r
350 int y = C演奏判定ライン座標共通.n判定ラインY座標(inst);
\r
352 int ymax = SampleFramework.GameWindowSize.Height;
\r
355 Rectangle rc = pChip[EChannel.BeatLine] ?
\r
356 CDTXMania.Instance.Coordinates.ImgBeatLine :
\r
357 CDTXMania.Instance.Coordinates.ImgBarLine;
\r
360 (inst == EPart.Drums && !CDTXMania.Instance.ConfigIni.bReverse.Drums) ||
\r
361 (inst != EPart.Drums && CDTXMania.Instance.ConfigIni.bReverse[inst])
\r
365 y = y - (int)(pChip.nバーからの距離dot[inst]) - rc.Height / 2;
\r
369 (inst == EPart.Drums && CDTXMania.Instance.ConfigIni.bReverse.Drums) ||
\r
370 (inst != EPart.Drums && !CDTXMania.Instance.ConfigIni.bReverse[inst])
\r
374 y = y + (int)(pChip.nバーからの距離dot[inst]) - rc.Height / 2;
\r
377 // Reverse時の小節線消失位置を、RGBボタンの真ん中程度に。
\r
378 // 非Reverse時の消失処理は、従来通りt進行描画・チップ()にお任せ。
\r
379 // int n小節線消失距離dot = C演奏判定ライン座標共通.n判定ラインY座標(inst, false, true) - dy;
\r
381 if ((CDTXMania.Instance.DTX.bチップがある[(int)inst]) && (ymin < y) && (y < ymax) &&
\r
382 (CDTXMania.Instance.ConfigIni.eDark == EDark.Off ||
\r
383 (CDTXMania.Instance.ConfigIni.eDark == EDark.Half && ( pChip[EChannel.BarLine] || pChip[EChannel.BeatLine] ))))
\r
384 /*&& (pChip.nバーからの距離dot[(int)inst] >= n小節線消失距離dot)*/
\r
386 int jx = CDTXMania.Instance.ConfigIni.cdInstX[inst][CDTXMania.Instance.ConfigIni.eActiveInst].Value;
\r
387 int jy = CDTXMania.Instance.ConfigIni.cdJudgeLineY[inst];
\r
388 int jw = CDTXMania.Instance.Coordinates.Instrument[inst].W;
\r
392 for ( int offsetX = 0; offsetX < jw; offsetX += rc.Width )
\r
394 int x = jx + offsetX;
\r
395 if ( offsetX + rc.Width > jw )
\r
397 rc.Width = jw - offsetX;
\r
399 this.txチップ.t2D描画( CDTXMania.Instance.Device, x, y, rc );
\r
403 pChip[EChannel.BarLine] &&
\r
404 CDTXMania.Instance.ConfigIni.bDebugInfo &&
\r
405 (CDTXMania.Instance.ConfigIni.eDark == EDark.Off) &&
\r
406 inst == ePhraseNumberDisplayInst)
\r
409 int n小節番号 = n小節番号plus1 - 1;
\r
410 int x = jx + jw + CDTXMania.Instance.Coordinates.ImgConsoleFont.W;
\r
411 CDTXMania.Instance.act文字コンソール.tPrint(x, y - CDTXMania.Instance.Coordinates.ImgConsoleFont.H / 2,
\r
412 C文字コンソール.Eフォント種別.白, n小節番号.ToString()
\r
420 private void t進行描画_判定ライン()
\r
422 if (CDTXMania.Instance.ConfigIni.eDark != EDark.Full)
\r
424 for (EPart inst = EPart.Drums; inst <= EPart.Bass; ++inst)
\r
426 if (CDTXMania.Instance.ConfigIni.b楽器有効(inst) && CDTXMania.Instance.DTX.bチップがある[inst])
\r
428 // #31602 2016.2.11 yyagi 描画遅延対策として、判定ラインの表示位置をオフセット調整できるようにする
\r
429 int y = C演奏判定ライン座標共通.n判定ラインY座標(inst, false, true);
\r
430 if (this.txヒットバー != null)
\r
432 int lineLength = CDTXMania.Instance.Coordinates.Instrument[inst].W;
\r
433 Rectangle rc = CDTXMania.Instance.Coordinates.ImgJudgeLine;
\r
434 int barHeight = rc.Height;
\r
435 for (int tmpW = 0; tmpW < lineLength; tmpW += rc.Width)
\r
437 if (tmpW + rc.Width > lineLength)
\r
439 rc.Width = lineLength - tmpW;
\r
441 this.txヒットバー.t2D描画(CDTXMania.Instance.Device,
\r
442 CDTXMania.Instance.ConfigIni.cdInstX[ inst ][ CDTXMania.Instance.ConfigIni.eActiveInst ] + tmpW, y - barHeight / 2, rc );
\r
450 private void t背景テクスチャの生成()
\r
452 string bgfilename = null;
\r
454 if ((CDTXMania.Instance.ConfigIni.b楽器有効(EPart.Drums) == false) && (CDTXMania.Instance.DTX.BACKGROUND_GR != null) && (CDTXMania.Instance.DTX.BACKGROUND_GR.Length > 0))
\r
456 bgfilename = CDTXMania.Instance.DTX.BACKGROUND_GR;
\r
458 else if ((CDTXMania.Instance.DTX.BACKGROUND != null) && (CDTXMania.Instance.DTX.BACKGROUND.Length > 0))
\r
460 bgfilename = CDTXMania.Instance.DTX.BACKGROUND;
\r
463 if (bgfilename != null && bgfilename.Length > 0)
\r
465 bgfilename = CDTXMania.Instance.DTX.strフォルダ名 + bgfilename;
\r
468 using (Bitmap bgbitmap = new Bitmap(SampleFramework.GameWindowSize.Width, SampleFramework.GameWindowSize.Height))
\r
470 if (bgfilename != null && File.Exists(bgfilename))
\r
472 using (Bitmap originalBackground = new Bitmap(bgfilename))
\r
474 float W = originalBackground.Width;
\r
475 float H = originalBackground.Height;
\r
479 if (W > 0 && H > 0)
\r
481 float mx = SampleFramework.GameWindowSize.Width / W;
\r
482 float my = SampleFramework.GameWindowSize.Height / H;
\r
484 mag = Math.Min(mx, my);
\r
487 using (Graphics graphic2 = Graphics.FromImage(bgbitmap))
\r
489 float x = (SampleFramework.GameWindowSize.Width - W * mag) / 2;
\r
490 float y = (SampleFramework.GameWindowSize.Height - H * mag) / 2;
\r
491 graphic2.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
\r
492 graphic2.DrawImage(originalBackground, x, y, W * mag, H * mag);
\r
497 using (Bitmap image = new Bitmap(CSkin.Path(@"Graphics\ScreenPlayDrums-background-center.png")))
\r
500 using (Graphics graphics3 = Graphics.FromImage(image))
\r
502 graphics3.DrawImage(bgbitmap, new Rectangle(0, 0, image.Width, image.Height));
\r
504 #region [ BGA領域黒抜き・テクスチャ変換・Full再生透明度 ]
\r
505 if ((CDTXMania.Instance.DTX.listBMP.Count > 0) || (CDTXMania.Instance.DTX.listBMPTEX.Count > 0) || CDTXMania.Instance.DTX.listAVI.Count > 0)
\r
507 graphics3.FillRectangle(Brushes.Black,
\r
509 CDTXMania.Instance.ConfigIni.cdMovieX[CDTXMania.Instance.ConfigIni.eActiveInst],
\r
510 CDTXMania.Instance.ConfigIni.cdMovieY[CDTXMania.Instance.ConfigIni.eActiveInst],
\r
511 CDTXMania.Instance.Coordinates.Movie.W, CDTXMania.Instance.Coordinates.Movie.H));
\r
515 TextureFactory.tテクスチャの解放(ref this.tx背景);
\r
516 this.tx背景 = TextureFactory.tテクスチャの生成(image, true);
\r
521 private void t進行描画_チップ_ドラムス(ref CChip pChip)
\r
523 if (CDTXMania.Instance.ConfigIni.bDrums有効)
\r
525 SudHidInvChip(EPart.Drums, ref pChip);
\r
527 if (!pChip.bHit && pChip.b可視)
\r
529 if (this.txチップ != null)
\r
531 this.txチップ.n透明度 = pChip.n透明度;
\r
533 int jy = C演奏判定ライン座標共通.n判定ラインY座標(EPart.Drums);
\r
534 int y = CDTXMania.Instance.ConfigIni.bReverse.Drums ? (int)(jy + pChip.nバーからの距離dot.Drums) : (int)(jy - pChip.nバーからの距離dot.Drums);
\r
536 if (this.txチップ != null)
\r
538 this.txチップ.vc拡大縮小倍率 = new Vector3((float)(pChip.dbチップサイズ倍率), (float)pChip.dbチップサイズ倍率, 1f);
\r
541 int num9 = this.ctチップ模様アニメ.Drums.n現在の値 % CDTXMania.Instance.Coordinates.ImgDrCountChip;
\r
542 int x = CDTXMania.Instance.ConfigIni.GetLaneX(EnumConverter.LaneFromChannel(pChip.eチャンネル番号)) +
\r
543 (int)((CDTXMania.Instance.ConfigIni.GetLaneW(EnumConverter.LaneFromChannel(pChip.eチャンネル番号))
\r
544 - (CDTXMania.Instance.Coordinates.ImgDrChip[EnumConverter.PadFromChannel(pChip.eチャンネル番号)].W * (pChip.dbチップサイズ倍率))) / 2.0);
\r
545 if (this.txチップ != null)
\r
547 this.txチップ.t2D描画(CDTXMania.Instance.Device, x,
\r
548 y - CDTXMania.Instance.Coordinates.ImgDrChip[EnumConverter.PadFromChannel(pChip.eチャンネル番号)].H / 2,
\r
549 CDTXMania.Instance.Coordinates.ImgDrChip[EnumConverter.PadFromChannel(pChip.eチャンネル番号)].ApplyCounterY(num9, 2));
\r
553 switch (pChip.eチャンネル番号)
\r
555 case EChannel.Cymbal:
\r
556 if (this.txチップ != null)
\r
558 this.txチップ.t2D描画(CDTXMania.Instance.Device, x,
\r
559 y - CDTXMania.Instance.Coordinates.ImgDrChipCYDeco.H / 2, CDTXMania.Instance.Coordinates.ImgDrChipCYDeco);
\r
563 case EChannel.HiHatOpen:
\r
564 if (this.txチップ != null)
\r
566 this.txチップ.t2D描画(CDTXMania.Instance.Device, x, y - CDTXMania.Instance.Coordinates.ImgDrChipHHODeco.H / 2, CDTXMania.Instance.Coordinates.ImgDrChipHHODeco);
\r
570 case EChannel.RideCymbal:
\r
571 if (this.txチップ != null)
\r
573 this.txチップ.t2D描画(CDTXMania.Instance.Device, x, y - CDTXMania.Instance.Coordinates.ImgDrChipHHODeco.H / 2, CDTXMania.Instance.Coordinates.ImgDrChipHHODeco);
\r
577 case EChannel.LeftCymbal:
\r
578 if (this.txチップ != null)
\r
580 this.txチップ.t2D描画(CDTXMania.Instance.Device, x, y - CDTXMania.Instance.Coordinates.ImgDrChipCYDeco.H / 2, CDTXMania.Instance.Coordinates.ImgDrChipCYDeco);
\r
584 if (this.txチップ != null)
\r
586 this.txチップ.vc拡大縮小倍率 = new Vector3(1f, 1f, 1f);
\r
587 this.txチップ.n透明度 = 0xff;
\r
591 // #35411 chnmr0 modified
\r
592 bool autoPlayCondition = (CDTXMania.Instance.ConfigIni.bAutoPlay[EnumConverter.PadFromChannel(pChip.eチャンネル番号)] && !pChip.bHit);
\r
593 bool UsePerfectGhost = true;
\r
596 if (CDTXMania.Instance.ConfigIni.eAutoGhost.Drums != EAutoGhostData.Perfect &&
\r
597 CDTXMania.Instance.DTX.listAutoGhostLag.Drums != null &&
\r
598 0 <= pChip.n楽器パートでの出現順 && pChip.n楽器パートでの出現順 < CDTXMania.Instance.DTX.listAutoGhostLag.Drums.Count)
\r
600 // ゴーストデータが有効 : ラグに合わせて判定
\r
601 ghostLag = CDTXMania.Instance.DTX.listAutoGhostLag.Drums[pChip.n楽器パートでの出現順];
\r
602 ghostLag = (ghostLag & 255) - 128;
\r
603 ghostLag -= CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums;
\r
604 autoPlayCondition &= !pChip.bHit && (ghostLag + pChip.n発声時刻ms <= CSound管理.rc演奏用タイマ.n現在時刻ms);
\r
605 UsePerfectGhost = false;
\r
607 if (UsePerfectGhost)
\r
609 // 従来の AUTO : バー下で判定
\r
610 autoPlayCondition &= (pChip.nバーからの距離dot.Drums < 0);
\r
613 if (autoPlayCondition)
\r
616 this.actLaneFlushD.Start(EnumConverter.LaneFromChannel(pChip.eチャンネル番号), ((float)CInput管理.n通常音量) / 127f);
\r
617 bool flag = this.bフィルイン中;
\r
618 bool flag2 = this.bフィルイン中 && this.bフィルイン区間の最後のChipである(pChip);
\r
619 //bool flag3 = flag2;
\r
620 // #31602 2013.6.24 yyagi 判定ラインの表示位置をずらしたら、チップのヒットエフェクトの表示もずらすために、nJudgeLine..を追加
\r
621 this.actChipFireD.Start(EnumConverter.LaneFromChannel(pChip.eチャンネル番号), flag, flag2, flag2);
\r
622 this.actPad.Hit(EnumConverter.PadFromChannel(pChip.eチャンネル番号));
\r
623 this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms + ghostLag, EPart.Drums, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Drums));
\r
624 this.tチップのヒット処理(pChip.n発声時刻ms + ghostLag, pChip);
\r
625 cInvisibleChip.StartSemiInvisible(EPart.Drums);
\r
627 // #35411 modify end
\r
629 SetGhostTargetOnGraph(EPart.Drums);
\r
634 if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))
\r
636 this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, EPart.Drums, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Drums));
\r