+ #region [ (A) ヒットしていればヒット処理して次の inputEvent へ ]\r
+ //-----------------------------\r
+ switch (ePad)\r
+ {\r
+ case EPad.HH:\r
+ #region [ HHとLC(groupingしている場合) のヒット処理 ]\r
+ //-----------------------------\r
+ {\r
+ if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.HH)\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+\r
+ CChip chipHC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatClose, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1); // HiHat Close\r
+ CChip chipHO = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatOpen, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1); // HiHat Open\r
+ CChip chipLC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LeftCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1); // LC\r
+ EJudge e判定HC = (chipHC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHC, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定HO = (chipHO != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHO, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定LC = (chipLC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLC, nInputAdjustTime) : EJudge.Miss;\r
+ switch (eHHGroup)\r
+ {\r
+ case EHHGroup.HO_HC:\r
+ #region [ HCとLCのヒット処理 ]\r
+ //-----------------------------\r
+ if ((e判定HC != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+ {\r
+ if (chipHC.n発声位置 < chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ }\r
+ else if (chipHC.n発声位置 > chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if (e判定HC != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ else if (e判定LC != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EHHGroup.LC_HH:\r
+ #region [ HCとHOのヒット処理 ]\r
+ //-----------------------------\r
+ if ((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss))\r
+ {\r
+ if (chipHC.n発声位置 < chipHO.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ }\r
+ else if (chipHC.n発声位置 > chipHO.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if (e判定HC != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ else if (e判定HO != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EHHGroup.Group:\r
+ #region [ HC,HO,LCのヒット処理 ]\r
+ //-----------------------------\r
+ if (((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss)) && (e判定LC != EJudge.Miss))\r
+ {\r
+ CChip chip;\r
+ CChip[] chipArray = new CChip[] { chipHC, chipHO, chipLC };\r
+ // ここから、chipArrayをn発生位置の小さい順に並び替える\r
+ if (chipArray[1].n発声位置 > chipArray[2].n発声位置)\r
+ {\r
+ chip = chipArray[1];\r
+ chipArray[1] = chipArray[2];\r
+ chipArray[2] = chip;\r
+ }\r
+ if (chipArray[0].n発声位置 > chipArray[1].n発声位置)\r
+ {\r
+ chip = chipArray[0];\r
+ chipArray[0] = chipArray[1];\r
+ chipArray[1] = chip;\r
+ }\r
+ if (chipArray[1].n発声位置 > chipArray[2].n発声位置)\r
+ {\r
+ chip = chipArray[1];\r
+ chipArray[1] = chipArray[2];\r
+ chipArray[2] = chip;\r
+ }\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipArray[0], inputEvent.nVelocity);\r
+ if (chipArray[0].n発声位置 == chipArray[1].n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipArray[1], inputEvent.nVelocity);\r
+ }\r
+ if (chipArray[0].n発声位置 == chipArray[2].n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipArray[2], inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if ((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss))\r
+ {\r
+ if (chipHC.n発声位置 < chipHO.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ }\r
+ else if (chipHC.n発声位置 > chipHO.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if ((e判定HC != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+ {\r
+ if (chipHC.n発声位置 < chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ }\r
+ else if (chipHC.n発声位置 > chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if ((e判定HO != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+ {\r
+ if (chipHO.n発声位置 < chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+ }\r
+ else if (chipHO.n発声位置 > chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if (e判定HC != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ else if (e判定HO != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHO, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ else if (e判定LC != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipLC, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ default:\r
+ #region [ 全部打ち分け時のヒット処理 ]\r
+ //-----------------------------\r
+ if (e判定HC != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HH, chipHC, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EPad.SD:\r
+ #region [ SDのヒット処理 ]\r
+ //-----------------------------\r
+ if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.SD) // #23857 2010.12.12 yyagi: to support VelocityMin\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+ if (!this.tドラムヒット処理(nTime, EPad.SD, this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.Snare, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1), inputEvent.nVelocity))\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EPad.BD:\r
+ #region [ BDのヒット処理 ]\r
+ //-----------------------------\r
+ if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.BD) // #23857 2010.12.12 yyagi: to support VelocityMin\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+ if (!this.tドラムヒット処理(nTime, EPad.BD, this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.BassDrum, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1), inputEvent.nVelocity))\r
+ break;\r
+ continue;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EPad.HT:\r
+ #region [ HTのヒット処理 ]\r
+ //-----------------------------\r
+ if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.HT) // #23857 2010.12.12 yyagi: to support VelocityMin\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+ if (this.tドラムヒット処理(nTime, EPad.HT, this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HighTom, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1), inputEvent.nVelocity))\r
+ continue;\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EPad.LT:\r
+ #region [ LTとFT(groupingしている場合)のヒット処理 ]\r
+ //-----------------------------\r
+ {\r
+ if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.LT) // #23857 2010.12.12 yyagi: to support VelocityMin\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+ CChip chipLT = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LowTom, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+ CChip chipFT = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.FloorTom, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+ EJudge e判定LT = (chipLT != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLT, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定FT = (chipFT != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipFT, nInputAdjustTime) : EJudge.Miss;\r
+ switch (eFTGroup)\r
+ {\r
+ case EFTGroup.None:\r
+ #region [ LTのヒット処理 ]\r
+ //-----------------------------\r
+ if (e判定LT != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.LT, chipLT, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EFTGroup.Group:\r
+ #region [ LTとFTのヒット処理 ]\r
+ //-----------------------------\r
+ if ((e判定LT != EJudge.Miss) && (e判定FT != EJudge.Miss))\r
+ {\r
+ if (chipLT.n発声位置 < chipFT.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.LT, chipLT, inputEvent.nVelocity);\r
+ }\r
+ else if (chipLT.n発声位置 > chipFT.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.LT, chipFT, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.LT, chipLT, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.LT, chipFT, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if (e判定LT != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.LT, chipLT, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ else if (e判定FT != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.LT, chipFT, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ break;\r
+ //-----------------------------\r
+ #endregion\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EPad.FT:\r
+ #region [ FTとLT(groupingしている場合)のヒット処理 ]\r
+ //-----------------------------\r
+ {\r
+ if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.FT) // #23857 2010.12.12 yyagi: to support VelocityMin\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+ CChip chipLT = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LowTom, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+ CChip chipFT = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.FloorTom, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+ EJudge e判定LT = (chipLT != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLT, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定FT = (chipFT != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipFT, nInputAdjustTime) : EJudge.Miss;\r
+ switch (eFTGroup)\r
+ {\r
+ case EFTGroup.None:\r
+ #region [ FTのヒット処理 ]\r
+ //-----------------------------\r
+ if (e判定FT != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.FT, chipFT, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+\r
+ case EFTGroup.Group:\r
+ #region [ FTとLTのヒット処理 ]\r
+ //-----------------------------\r
+ if ((e判定LT != EJudge.Miss) && (e判定FT != EJudge.Miss))\r
+ {\r
+ if (chipLT.n発声位置 < chipFT.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.FT, chipLT, inputEvent.nVelocity);\r
+ }\r
+ else if (chipLT.n発声位置 > chipFT.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.FT, chipFT, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.FT, chipLT, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.FT, chipFT, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if (e判定LT != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.FT, chipLT, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ else if (e判定FT != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.FT, chipFT, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ break;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EPad.CY:\r
+ #region [ CY(とLCとRD:groupingしている場合)のヒット処理 ]\r
+ //-----------------------------\r
+ {\r
+ if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.CY) // #23857 2010.12.12 yyagi: to support VelocityMin\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+ CChip chipCY = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.Cymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+ CChip chipRD = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.RideCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+ CChip chipLC = CDTXMania.Instance.ConfigIni.bCymbalFree ? this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LeftCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1) : null;\r
+ EJudge e判定CY = (chipCY != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipCY, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定RD = (chipRD != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipRD, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定LC = (chipLC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLC, nInputAdjustTime) : EJudge.Miss;\r
+ CChip[] chipArray = new CChip[] { chipCY, chipRD, chipLC };\r
+ EJudge[] e判定Array = new EJudge[] { e判定CY, e判定RD, e判定LC };\r
+ const int NumOfChips = 3; // chipArray.GetLength(0)\r
+\r
+ // CY/RD/LC群を, n発生位置の小さい順に並べる + nullを大きい方に退かす\r
+ SortChipsByNTime(chipArray, e判定Array, NumOfChips);\r
+ switch (eCYGroup)\r
+ {\r
+ case ECYGroup.None:\r
+ if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
+ {\r
+ if (e判定CY != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.CY, chipCY, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ for (int i = 0; i < NumOfChips; i++)\r
+ {\r
+ if ((e判定Array[i] != EJudge.Miss) && ((chipArray[i] == chipCY) || (chipArray[i] == chipLC)))\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.CY, chipArray[i], inputEvent.nVelocity);\r
+ bHitted = true;\r
+ break;\r
+ }\r
+ //num10++;\r
+ }\r
+ if (e判定CY != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.CY, chipCY, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+\r
+ case ECYGroup.Group:\r
+ if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
+ {\r
+ for (int i = 0; i < NumOfChips; i++)\r
+ {\r
+ if ((e判定Array[i] != EJudge.Miss) && ((chipArray[i] == chipCY) || (chipArray[i] == chipRD)))\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.CY, chipArray[i], inputEvent.nVelocity);\r
+ bHitted = true;\r
+ break;\r
+ }\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ for (int i = 0; i < NumOfChips; i++)\r
+ {\r
+ if (e判定Array[i] != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.CY, chipArray[i], inputEvent.nVelocity);\r
+ bHitted = true;\r
+ break;\r
+ }\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EPad.HHO:\r
+ #region [ HO(とHCとLC:groupingしている場合)のヒット処理 ]\r
+ //-----------------------------\r
+ {\r
+ if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.HH)\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+\r
+ CChip chipHC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatClose, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+ CChip chipHO = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatOpen, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+ CChip chipLC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LeftCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+ EJudge e判定HC = (chipHC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHC, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定HO = (chipHO != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHO, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定LC = (chipLC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLC, nInputAdjustTime) : EJudge.Miss;\r
+ switch (eHHGroup)\r
+ {\r
+ case EHHGroup.None:\r
+ if (e判定HO != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+\r
+ case EHHGroup.HO_HC:\r
+ if ((e判定HO != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+ {\r
+ if (chipHO.n発声位置 < chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ }\r
+ else if (chipHO.n発声位置 > chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if (e判定HO != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ else if (e判定LC != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+\r
+ case EHHGroup.LC_HH:\r
+ if ((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss))\r
+ {\r
+ if (chipHC.n発声位置 < chipHO.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+ }\r
+ else if (chipHC.n発声位置 > chipHO.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if (e判定HC != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ else if (e判定HO != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+\r
+ case EHHGroup.Group:\r
+ if (((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss)) && (e判定LC != EJudge.Miss))\r
+ {\r
+ CChip chip;\r
+ CChip[] chipArray = new CChip[] { chipHC, chipHO, chipLC };\r
+ // ここから、chipArrayをn発生位置の小さい順に並び替える\r
+ if (chipArray[1].n発声位置 > chipArray[2].n発声位置)\r
+ {\r
+ chip = chipArray[1];\r
+ chipArray[1] = chipArray[2];\r
+ chipArray[2] = chip;\r
+ }\r
+ if (chipArray[0].n発声位置 > chipArray[1].n発声位置)\r
+ {\r
+ chip = chipArray[0];\r
+ chipArray[0] = chipArray[1];\r
+ chipArray[1] = chip;\r
+ }\r
+ if (chipArray[1].n発声位置 > chipArray[2].n発声位置)\r
+ {\r
+ chip = chipArray[1];\r
+ chipArray[1] = chipArray[2];\r
+ chipArray[2] = chip;\r
+ }\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipArray[0], inputEvent.nVelocity);\r
+ if (chipArray[0].n発声位置 == chipArray[1].n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipArray[1], inputEvent.nVelocity);\r
+ }\r
+ if (chipArray[0].n発声位置 == chipArray[2].n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipArray[2], inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if ((e判定HC != EJudge.Miss) && (e判定HO != EJudge.Miss))\r
+ {\r
+ if (chipHC.n発声位置 < chipHO.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+ }\r
+ else if (chipHC.n発声位置 > chipHO.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if ((e判定HC != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+ {\r
+ if (chipHC.n発声位置 < chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+ }\r
+ else if (chipHC.n発声位置 > chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if ((e判定HO != EJudge.Miss) && (e判定LC != EJudge.Miss))\r
+ {\r
+ if (chipHO.n発声位置 < chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ }\r
+ else if (chipHO.n発声位置 > chipLC.n発声位置)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+ }\r
+ else\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+ }\r
+ bHitted = true;\r
+ }\r
+ else if (e判定HC != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHC, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ else if (e判定HO != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ else if (e判定LC != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.HHO, chipLC, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EPad.RD:\r
+ #region [ RD(とCYとLC:groupingしている場合)のヒット処理 ]\r
+ //-----------------------------\r
+ {\r
+ if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.RD) // #23857 2010.12.12 yyagi: to support VelocityMin\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+ CChip chipCY = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.Cymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+ CChip chipRD = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.RideCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1);\r
+ CChip chipLC = CDTXMania.Instance.ConfigIni.bCymbalFree ? this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LeftCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1) : null;\r
+ EJudge e判定CY = (chipCY != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipCY, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定RD = (chipRD != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipRD, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定LC = (chipLC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLC, nInputAdjustTime) : EJudge.Miss;\r
+ CChip[] chipArray = new CChip[] { chipCY, chipRD, chipLC };\r
+ EJudge[] e判定Array = new EJudge[] { e判定CY, e判定RD, e判定LC };\r
+ const int NumOfChips = 3; // chipArray.GetLength(0)\r
+\r
+ // HH/CY群を, n発生位置の小さい順に並べる + nullを大きい方に退かす\r
+ SortChipsByNTime(chipArray, e判定Array, NumOfChips);\r
+ switch (eCYGroup)\r
+ {\r
+ case ECYGroup.None:\r
+ if (e判定RD != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.RD, chipRD, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ break;\r
+\r
+ case ECYGroup.Group:\r
+ if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
+ {\r
+ for (int i = 0; i < NumOfChips; i++)\r
+ {\r
+ if ((e判定Array[i] != EJudge.Miss) && ((chipArray[i] == chipCY) || (chipArray[i] == chipRD)))\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.CY, chipArray[i], inputEvent.nVelocity);\r
+ bHitted = true;\r
+ break;\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ for (int i = 0; i < NumOfChips; i++)\r
+ {\r
+ if (e判定Array[i] != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.CY, chipArray[i], inputEvent.nVelocity);\r
+ bHitted = true;\r
+ break;\r
+ }\r
+ }\r
+ break;\r
+ }\r
+ if (bHitted)\r
+ {\r
+ continue;\r
+ }\r
+ break;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EPad.LC:\r
+ #region [ LC(とHC/HOとCYと:groupingしている場合)のヒット処理 ]\r
+ //-----------------------------\r
+ {\r
+ if (inputEvent.nVelocity <= CDTXMania.Instance.ConfigIni.nVelocityMin.LC) // #23857 2010.12.12 yyagi: to support VelocityMin\r
+ continue; // 電子ドラムによる意図的なクロストークを無効にする\r
+ CChip chipHC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatClose, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1); // HC\r
+ CChip chipHO = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.HiHatOpen, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1); // HO\r
+ CChip chipLC = this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.LeftCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1); // LC\r
+ CChip chipCY = CDTXMania.Instance.ConfigIni.bCymbalFree ? this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.Cymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1) : null;\r
+ CChip chipRD = CDTXMania.Instance.ConfigIni.bCymbalFree ? this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.RideCymbal, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1) : null;\r
+ EJudge e判定HC = (chipHC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHC, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定HO = (chipHO != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipHO, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定LC = (chipLC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLC, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定CY = (chipCY != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipCY, nInputAdjustTime) : EJudge.Miss;\r
+ EJudge e判定RD = (chipRD != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipRD, nInputAdjustTime) : EJudge.Miss;\r
+ CChip[] chipArray = new CChip[] { chipHC, chipHO, chipLC, chipCY, chipRD };\r
+ EJudge[] e判定Array = new EJudge[] { e判定HC, e判定HO, e判定LC, e判定CY, e判定RD };\r
+ const int NumOfChips = 5; // chipArray.GetLength(0)\r
+\r
+ // HH/CY群を, n発生位置の小さい順に並べる + nullを大きい方に退かす\r
+ SortChipsByNTime(chipArray, e判定Array, NumOfChips);\r
+ switch (eHHGroup)\r
+ {\r
+ case EHHGroup.None:\r
+ case EHHGroup.LC_HH:\r
+ if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
+ {\r
+ if (e判定LC != EJudge.Miss)\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.LC, chipLC, inputEvent.nVelocity);\r
+ bHitted = true;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ for (int i = 0; i < NumOfChips; i++)\r
+ {\r
+ if ((e判定Array[i] != EJudge.Miss) && (((chipArray[i] == chipLC) || (chipArray[i] == chipCY)) || ((chipArray[i] == chipRD) && (CDTXMania.Instance.ConfigIni.eCYGroup == ECYGroup.Group))))\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.LC, chipArray[i], inputEvent.nVelocity);\r
+ bHitted = true;\r
+ break;\r
+ }\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+\r
+ case EHHGroup.HO_HC:\r
+ case EHHGroup.Group:\r
+ if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
+ {\r
+ for (int i = 0; i < NumOfChips; i++)\r
+ {\r
+ if ((e判定Array[i] != EJudge.Miss) && (((chipArray[i] == chipLC) || (chipArray[i] == chipHC)) || (chipArray[i] == chipHO)))\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.LC, chipArray[i], inputEvent.nVelocity);\r
+ bHitted = true;\r
+ break;\r
+ }\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ for (int i = 0; i < NumOfChips; i++)\r
+ {\r
+ if ((e判定Array[i] != EJudge.Miss) && ((chipArray[i] != chipRD) || (CDTXMania.Instance.ConfigIni.eCYGroup == ECYGroup.Group)))\r
+ {\r
+ this.tドラムヒット処理(nTime, EPad.LC, chipArray[i], inputEvent.nVelocity);\r
+ bHitted = true;\r
+ break;\r
+ }\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+ continue;\r
+ }\r
+ if (!bHitted)\r
+ break;\r
+\r
+ break;\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+\r
+ case EPad.HP: // #27029 2012.1.4 from\r
+ #region [ HPのヒット処理 ]\r
+ //-----------------\r
+ if (CDTXMania.Instance.ConfigIni.eBDGroup == EBDGroup.Group)\r
+ {\r
+ #region [ BDとみなしてヒット処理 ]\r
+ //-----------------\r
+ if (!this.tドラムヒット処理(nTime, EPad.BD, this.r指定時刻に一番近い未ヒットChip(nTime, EChannel.BassDrum, nInputAdjustTime, CDTXMania.Instance.nPoor範囲ms + 1), inputEvent.nVelocity))\r
+ break;\r
+ continue;\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ else\r
+ {\r
+ #region [ HPのヒット処理 ]\r
+ //-----------------\r
+ continue; // 何もしない。この入力を完全に無視するので、break しないこと。\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ //-----------------------------\r
+ #endregion\r
+ #region [ (B) ヒットしてなかった場合は、レーンフラッシュ、パッドアニメ、空打ち音再生を実行 ]\r
+ //-----------------------------\r
+ EPad pad = ePad; // 以下、nPad の代わりに pad を用いる。(成りすまし用)\r
+\r
+ if (ePad == EPad.HP)\r
+ {\r
+ // #27029 2012.1.4 from: HP&BD 時の HiHatPedal の場合は BD に成りすます。\r
+ pad = EPad.BD;\r
+ //( HP|BD 時のHP入力はここまでこないので無視。)\r
+ }\r
+\r
+ // レーンフラッシュ\r
+ this.actLaneFlushD.Start(EnumConverter.LaneFromPad(pad), ((float)inputEvent.nVelocity) / 127f);\r
+\r
+ // パッド画像のヒット処理用\r
+\r
+ // パッドアニメ\r
+ this.actPad.Hit(pad);\r
+\r
+ // 空打ち音\r
+ if (CDTXMania.Instance.ConfigIni.bDrumsHitSound)\r
+ {\r
+ CChip rChip = this.r空うちChip(EPart.Drums, pad);\r
+ if (rChip != null)\r
+ {\r
+ // (B1) 空打ち音が譜面で指定されているのでそれを再生する。\r
+ this.tサウンド再生(rChip, CSound管理.rc演奏用タイマ.nシステム時刻, EPart.Drums, CDTXMania.Instance.ConfigIni.nChipVolume, CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);\r
+ }\r
+ else\r
+ {\r
+ #region [ (B2) 空打ち音が指定されていないので一番近いチップを探して再生する。]\r
+ switch (pad)\r
+ {\r
+ case EPad.HH:\r
+ {\r
+ CChip chipHC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatClose, nInputAdjustTime);\r
+ CChip chipHO = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatOpen, nInputAdjustTime);\r
+ CChip chipLC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LeftCymbal, nInputAdjustTime);\r
+ switch (CDTXMania.Instance.ConfigIni.eHHGroup.Value)\r
+ {\r
+ case EHHGroup.HO_HC:\r
+ rChip = (chipHC != null) ? chipHC : chipLC;\r
+ break;\r
+\r
+ case EHHGroup.LC_HH:\r
+ rChip = (chipHC != null) ? chipHC : chipHO;\r
+ break;\r
+\r
+ case EHHGroup.Group:\r
+ if (chipHC != null)\r
+ {\r
+ rChip = chipHC;\r
+ }\r
+ else if (chipHO == null)\r
+ {\r
+ rChip = chipLC;\r
+ }\r
+ else if (chipLC == null)\r
+ {\r
+ rChip = chipHO;\r
+ }\r
+ else if (chipHO.n発声位置 < chipLC.n発声位置)\r
+ {\r
+ rChip = chipHO;\r
+ }\r
+ else\r
+ {\r
+ rChip = chipLC;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ rChip = chipHC;\r
+ break;\r
+ }\r
+ }\r
+ break;\r
+\r
+ case EPad.LT:\r
+ {\r
+ CChip chipLT = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LowTom, nInputAdjustTime);\r
+ CChip chipFT = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.FloorTom, nInputAdjustTime);\r
+ if (CDTXMania.Instance.ConfigIni.eFTGroup != EFTGroup.None)\r
+ rChip = (chipLT != null) ? chipLT : chipFT;\r
+ else\r
+ rChip = chipLT;\r
+ }\r
+ break;\r
+\r
+ case EPad.FT:\r
+ {\r
+ CChip chipLT = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LowTom, nInputAdjustTime);\r
+ CChip chipFT = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.FloorTom, nInputAdjustTime);\r
+ if (CDTXMania.Instance.ConfigIni.eFTGroup != EFTGroup.None)\r
+ rChip = (chipFT != null) ? chipFT : chipLT;\r
+ else\r
+ rChip = chipFT;\r
+ }\r
+ break;\r
+\r
+ case EPad.CY:\r
+ {\r
+ CChip chipCY = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.Cymbal, nInputAdjustTime);\r
+ CChip chipRD = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.RideCymbal, nInputAdjustTime);\r
+ if (CDTXMania.Instance.ConfigIni.eCYGroup != ECYGroup.None)\r
+ rChip = (chipCY != null) ? chipCY : chipRD;\r
+ else\r
+ rChip = chipCY;\r
+ }\r
+ break;\r
+\r
+ case EPad.HHO:\r
+ {\r
+ CChip chipHC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatClose, nInputAdjustTime);\r
+ CChip chipHO = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatOpen, nInputAdjustTime);\r
+ CChip chipLC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LeftCymbal, nInputAdjustTime);\r
+ switch (CDTXMania.Instance.ConfigIni.eHHGroup.Value)\r
+ {\r
+ case EHHGroup.None:\r
+ rChip = chipHO;\r
+ break;\r
+\r
+ case EHHGroup.HO_HC:\r
+ rChip = (chipHO != null) ? chipHO : chipLC;\r
+ break;\r
+\r
+ case EHHGroup.LC_HH:\r
+ rChip = (chipHO != null) ? chipHO : chipHC;\r
+ break;\r
+\r
+ case EHHGroup.Group:\r
+ if (chipHO != null)\r
+ {\r
+ rChip = chipHO;\r
+ }\r
+ else if (chipHC == null)\r
+ {\r
+ rChip = chipLC;\r
+ }\r
+ else if (chipLC == null)\r
+ {\r
+ rChip = chipHC;\r
+ }\r
+ else if (chipHC.n発声位置 < chipLC.n発声位置)\r
+ {\r
+ rChip = chipHC;\r
+ }\r
+ else\r
+ {\r
+ rChip = chipLC;\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ break;\r
+\r
+ case EPad.RD:\r
+ {\r
+ CChip chipCY = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.Cymbal, nInputAdjustTime);\r
+ CChip chipRD = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.RideCymbal, nInputAdjustTime);\r
+ if (CDTXMania.Instance.ConfigIni.eCYGroup != ECYGroup.None)\r
+ rChip = (chipRD != null) ? chipRD : chipCY;\r
+ else\r
+ rChip = chipRD;\r
+ }\r
+ break;\r
+\r
+ case EPad.LC:\r
+ {\r
+ CChip chipHC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatClose, nInputAdjustTime);\r
+ CChip chipHO = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.HiHatOpen, nInputAdjustTime);\r
+ CChip chipLC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LeftCymbal, nInputAdjustTime);\r
+ switch (CDTXMania.Instance.ConfigIni.eHHGroup.Value)\r
+ {\r
+ case EHHGroup.None:\r
+ case EHHGroup.LC_HH:\r
+ rChip = chipLC;\r
+ break;\r
+\r
+ case EHHGroup.HO_HC:\r
+ case EHHGroup.Group:\r
+ if (chipLC != null)\r
+ {\r
+ rChip = chipLC;\r
+ }\r
+ else if (chipHC == null)\r
+ {\r
+ rChip = chipHO;\r
+ }\r
+ else if (chipHO == null)\r
+ {\r
+ rChip = chipHC;\r
+ }\r
+ else if (chipHC.n発声位置 < chipHO.n発声位置)\r
+ {\r
+ rChip = chipHC;\r
+ }\r
+ else\r
+ {\r
+ rChip = chipHO;\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ break;\r
+\r
+ default:\r
+ rChip = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EnumConverter.ChannelFromPad(pad), nInputAdjustTime);\r
+ break;\r
+ }\r
+ if (rChip != null)\r
+ {\r
+ // 空打ち音が見つかったので再生する。\r
+ this.tサウンド再生(rChip, CSound管理.rc演奏用タイマ.nシステム時刻, EPart.Drums, CDTXMania.Instance.ConfigIni.nChipVolume, CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);\r
+ }\r
+ //-----------------\r
+ #endregion\r
+ }\r
+ }\r
+\r
+ // BAD or TIGHT 時の処理。\r
+ if (CDTXMania.Instance.ConfigIni.bTight)\r
+ this.tチップのヒット処理_BadならびにTight時のMiss(EPart.Drums, EnumConverter.LaneFromPad(pad));//nパッド0Atoレーン07[(int)pad]\r
+ //-----------------------------\r
+ #endregion\r
+ }\r