/// <summary>\r
/// 演奏画面の共通クラス (ドラム演奏画面, ギター演奏画面の継承元)\r
/// </summary>\r
- internal abstract class CStage演奏画面共通 : CStage\r
+ internal partial class CStage演奏画面共通 : CStage\r
{\r
- protected CStage演奏画面共通()\r
- {\r
- }\r
- // メソッド\r
+ #region [Member_Activities]\r
+ CAct演奏AVI actAVI;\r
+ CAct演奏BGA actBGA;\r
+ CAct演奏チップファイアGB actChipFireGB;\r
+ CAct演奏Combo共通 actCombo;\r
+ CAct演奏Danger共通 actDANGER;\r
+ CActFIFOBlack actFI;\r
+ CActFIFOBlack actFO;\r
+ CActFIFOWhite actFOClear;\r
+ CAct演奏ゲージ共通 actGauge;\r
+ CAct演奏判定文字列共通 actJudgeString;\r
+ CAct演奏DrumsレーンフラッシュD actLaneFlushD;\r
+ CAct演奏レーンフラッシュGB共通 actLaneFlushGB;\r
+ CActオプションパネル actOptionPanel;\r
+ CAct演奏パネル文字列 actPanel;\r
+ CAct演奏演奏情報 actPlayInfo;\r
+ CAct演奏RGB共通 actRGB;\r
+ CAct演奏スコア共通 actScore;\r
+ CAct演奏ステージ失敗 actStageFailed;\r
+ CAct演奏WailingBonus共通 actWailingBonus;\r
+ CAct演奏スクロール速度 act譜面スクロール速度;\r
+ CAct演奏DrumsチップファイアD actChipFireD;\r
+ // #24074 2011.01.23 add ikanick\r
+ CAct演奏グラフ actGraph;\r
+ CAct演奏Drumsパッド actPad;\r
+ CAct演奏Lane actLane;\r
+ #endregion\r
\r
- #region [ t演奏結果を格納する_ドラム() ]\r
- public void t演奏結果を格納する_ドラム(out CScoreIni.C演奏記録 Drums)\r
- {\r
- Drums = new CScoreIni.C演奏記録();\r
-\r
- if (CDTXMania.app.DTX.bチップがある.Drums && !CDTXMania.app.ConfigIni.bギタレボモード)\r
- {\r
- Drums.nスコア = (long)this.actScore.Get(E楽器パート.DRUMS);\r
- Drums.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す(CDTXMania.app.DTX.LEVEL.Drums, CDTXMania.app.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.actCombo.n現在のコンボ数.Drums最高値, E楽器パート.DRUMS, bIsAutoPlay);\r
- Drums.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.app.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.nヒット数_Auto含まない.Drums.Good, this.nヒット数_Auto含まない.Drums.Poor, this.nヒット数_Auto含まない.Drums.Miss, E楽器パート.DRUMS, bIsAutoPlay);\r
- Drums.nPerfect数 = CDTXMania.app.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数_Auto含む.Drums.Perfect : this.nヒット数_Auto含まない.Drums.Perfect;\r
- Drums.nGreat数 = CDTXMania.app.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数_Auto含む.Drums.Great : this.nヒット数_Auto含まない.Drums.Great;\r
- Drums.nGood数 = CDTXMania.app.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数_Auto含む.Drums.Good : this.nヒット数_Auto含まない.Drums.Good;\r
- Drums.nPoor数 = CDTXMania.app.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数_Auto含む.Drums.Poor : this.nヒット数_Auto含まない.Drums.Poor;\r
- Drums.nMiss数 = CDTXMania.app.ConfigIni.bドラムが全部オートプレイである ? this.nヒット数_Auto含む.Drums.Miss : this.nヒット数_Auto含まない.Drums.Miss;\r
+ bool bPAUSE;\r
+ STDGBSValue<bool> b演奏にMIDI入力を使った;\r
+ STDGBSValue<bool> b演奏にキーボードを使った;\r
+ STDGBSValue<bool> b演奏にジョイパッドを使った;\r
+ STDGBSValue<bool> b演奏にマウスを使った;\r
+\r
+ CCounter ctWailingチップ模様アニメ;\r
+ STDGBSValue<CCounter> ctチップ模様アニメ;\r
+\r
+ E演奏画面の戻り値 eフェードアウト完了時の戻り値;\r
+\r
+ STDGBSValue<CHitCountOfRank> nヒット数_Auto含まない;\r
+ STDGBSValue<CHitCountOfRank> nヒット数_Auto含む;\r
+ // #35411 2015.08.21 chnmr0 add\r
+ STDGBSValue<CHitCountOfRank> nヒット数_TargetGhost;\r
+ STDGBSValue<int> nコンボ数_TargetGhost;\r
+ STDGBSValue<int> n最大コンボ数_TargetGhost;\r
+ int n現在のトップChip = -1;\r
+ int[] n最後に再生したBGMの実WAV番号 = new int[50];\r
+ EChannel e最後に再生したHHのチャンネル番号;\r
+ // #23921 2011.1.4 yyagi: change "int" to "List<int>", for recording multiple wav No.\r
+ List<int> L最後に再生したHHの実WAV番号;\r
+ // #26388 2011.11.8 yyagi: change "n最後に再生した実WAV番号.GUITAR" and "n最後に再生した実WAV番号.BASS"\r
+ STPadValue<int> n最後に再生した実WAV番号;\r
+ // #24820 2013.1.21 yyagi まずは単純にAdd/Removeを1個のキューでまとめて管理するやり方で設計する\r
+ volatile Queue<STMixer> queueMixerSound;\r
+ DateTime dtLastQueueOperation;\r
+ bool bIsDirectSound;\r
+ double db再生速度;\r
+ bool bValidScore;\r
+ bool bフィルイン中; // drums only\r
+\r
+ STDGBSValue<Queue<CChip>> queWailing;\r
+ STDGBSValue<CChip> r現在の歓声Chip;\r
+ STPadValue<CChip> r空打ちドラムチップ = new STPadValue<CChip>();\r
+ CChip r現在の空うちギターChip;\r
+ ST空打ち r現在の空うちドラムChip;\r
+ CChip r現在の空うちベースChip;\r
+ CChip r次にくるギターChip;\r
+ CChip r次にくるベースChip;\r
+\r
+ CTexture txWailing枠;\r
+ CTexture txチップ;\r
+ CTexture txチップGB;\r
+ CTexture txヒットバー;\r
+ CTexture txヒットバーGB;\r
+ CTexture tx背景;\r
+\r
+ CInvisibleChip cInvisibleChip;\r
+ CWailingChip共通[] cWailingChip;\r
+\r
+ STDGBSValue<CScoreIni.C演奏記録> record;\r
+\r
+ public CStage演奏画面共通()\r
+ {\r
+ base.eステージID = CStage.Eステージ.演奏;\r
+ base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
+ base.b活性化してない = true;\r
+ base.list子Activities.Add(this.actPad = new CAct演奏Drumsパッド());\r
+ base.list子Activities.Add(this.actChipFireD = new CAct演奏DrumsチップファイアD());\r
+ base.list子Activities.Add(this.actChipFireGB = new CAct演奏チップファイアGB());\r
+ base.list子Activities.Add(this.actStageFailed = new CAct演奏ステージ失敗());\r
+ base.list子Activities.Add(this.actDANGER = new CAct演奏Danger共通());\r
+ base.list子Activities.Add(this.actAVI = new CAct演奏AVI());\r
+ base.list子Activities.Add(this.actBGA = new CAct演奏BGA());\r
+ base.list子Activities.Add(this.actPanel = new CAct演奏パネル文字列());\r
+ base.list子Activities.Add(this.act譜面スクロール速度 = new CAct演奏スクロール速度());\r
+ base.list子Activities.Add(this.actWailingBonus = new CAct演奏WailingBonus共通());\r
+ base.list子Activities.Add(this.actScore = new CAct演奏スコア共通());\r
+ base.list子Activities.Add(this.actRGB = new CAct演奏RGB共通());\r
+ base.list子Activities.Add(this.actLaneFlushD = new CAct演奏DrumsレーンフラッシュD());\r
+ base.list子Activities.Add(this.actLaneFlushGB = new CAct演奏レーンフラッシュGB共通());\r
+ base.list子Activities.Add(this.actJudgeString = new CAct演奏判定文字列共通());\r
+ base.list子Activities.Add(this.actGauge = new CAct演奏ゲージ共通());\r
+ base.list子Activities.Add(this.actGraph = new CAct演奏グラフ());\r
+ base.list子Activities.Add(this.actCombo = new CAct演奏Combo共通());\r
+ base.list子Activities.Add(this.actPlayInfo = new CAct演奏演奏情報());\r
+ base.list子Activities.Add(this.actFI = new CActFIFOBlack());\r
+ base.list子Activities.Add(this.actFO = new CActFIFOBlack());\r
+ base.list子Activities.Add(this.actFOClear = new CActFIFOWhite());\r
+ base.list子Activities.Add(this.actLane = new CAct演奏Lane());\r
+ list子Activities.Add(actOptionPanel = new CActオプションパネル(EOptionPanelDirection.Vertical));\r
+ }\r
+\r
+ #region [ PlayRecordSave ]\r
+ private void t演奏結果を格納する_ドラム()\r
+ {\r
+ record.Drums = new CScoreIni.C演奏記録();\r
+ CScoreIni.C演奏記録 Drums = Record.Drums;\r
+ bool allauto = CDTXMania.Instance.ConfigIni.bIsAutoPlay(EPart.Drums);\r
+ if (CDTXMania.Instance.DTX.bチップがある.Drums && CDTXMania.Instance.ConfigIni.bDrums有効)\r
+ {\r
+ Drums.nスコア = (long)this.actScore.Get(EPart.Drums);\r
+ Drums.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す(CDTXMania.Instance.DTX.LEVEL.Drums, CDTXMania.Instance.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect,\r
+ this.actCombo.dgbコンボ数.Drums.n最高値,\r
+ EPart.Drums);\r
+ Drums.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.Instance.DTX.n可視チップ数.Drums, this.nヒット数_Auto含まない.Drums.Perfect, this.nヒット数_Auto含まない.Drums.Great, this.nヒット数_Auto含まない.Drums.Good, this.nヒット数_Auto含まない.Drums.Poor, this.nヒット数_Auto含まない.Drums.Miss, EPart.Drums, true);\r
+ Drums.nPerfect数 = allauto ? this.nヒット数_Auto含む.Drums.Perfect : this.nヒット数_Auto含まない.Drums.Perfect;\r
+ Drums.nGreat数 = allauto ? this.nヒット数_Auto含む.Drums.Great : this.nヒット数_Auto含まない.Drums.Great;\r
+ Drums.nGood数 = allauto ? this.nヒット数_Auto含む.Drums.Good : this.nヒット数_Auto含まない.Drums.Good;\r
+ Drums.nPoor数 = allauto ? this.nヒット数_Auto含む.Drums.Poor : this.nヒット数_Auto含まない.Drums.Poor;\r
+ Drums.nMiss数 = allauto ? this.nヒット数_Auto含む.Drums.Miss : this.nヒット数_Auto含まない.Drums.Miss;\r
Drums.nPerfect数_Auto含まない = this.nヒット数_Auto含まない.Drums.Perfect;\r
Drums.nGreat数_Auto含まない = this.nヒット数_Auto含まない.Drums.Great;\r
Drums.nGood数_Auto含まない = this.nヒット数_Auto含まない.Drums.Good;\r
Drums.nPoor数_Auto含まない = this.nヒット数_Auto含まない.Drums.Poor;\r
Drums.nMiss数_Auto含まない = this.nヒット数_Auto含まない.Drums.Miss;\r
- Drums.n最大コンボ数 = this.actCombo.n現在のコンボ数.Drums最高値;\r
- Drums.n全チップ数 = CDTXMania.app.DTX.n可視チップ数.Drums;\r
- for (int i = 0; i < (int)Eレーン.MAX; i++)\r
- {\r
- Drums.bAutoPlay[i] = bIsAutoPlay[i];\r
- }\r
- Drums.bTight = CDTXMania.app.ConfigIni.bTight;\r
- for (int i = 0; i < 3; i++)\r
- {\r
- Drums.bSudden[i] = CDTXMania.app.ConfigIni.bSudden[i];\r
- Drums.bHidden[i] = CDTXMania.app.ConfigIni.bHidden[i];\r
- Drums.eInvisible[i] = CDTXMania.app.ConfigIni.eInvisible[i];\r
- Drums.bReverse[i] = CDTXMania.app.ConfigIni.bReverse[i];\r
- Drums.eRandom[i] = CDTXMania.app.ConfigIni.eRandom[i];\r
- Drums.bLight[i] = CDTXMania.app.ConfigIni.bLight[i];\r
- Drums.bLeft[i] = CDTXMania.app.ConfigIni.bLeft[i];\r
- Drums.f譜面スクロール速度[i] = ((float)(CDTXMania.app.ConfigIni.n譜面スクロール速度[i] + 1)) * 0.5f;\r
- }\r
- Drums.eDark = CDTXMania.app.ConfigIni.eDark;\r
- Drums.n演奏速度分子 = CDTXMania.app.ConfigIni.n演奏速度;\r
+ Drums.n最大コンボ数 = this.actCombo.dgbコンボ数.Drums.n最高値;\r
+ Drums.n全チップ数 = CDTXMania.Instance.DTX.n可視チップ数.Drums;\r
+ for (EPad i = EPad.Min; i < EPad.Max; i++)\r
+ {\r
+ Drums.bAutoPlay[i] = CDTXMania.Instance.ConfigIni.bAutoPlay[i];\r
+ }\r
+ Drums.bTight = CDTXMania.Instance.ConfigIni.bTight;\r
+ for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
+ {\r
+ Drums.eSudHidInv[i] = CDTXMania.Instance.ConfigIni.eSudHidInv[i];\r
+ Drums.bReverse[i] = CDTXMania.Instance.ConfigIni.bReverse[i];\r
+ Drums.eRandom[i] = CDTXMania.Instance.ConfigIni.eRandom[i];\r
+ Drums.bLight[i] = CDTXMania.Instance.ConfigIni.bLight[i];\r
+ Drums.f譜面スクロール速度[i] = ((float)(CDTXMania.Instance.ConfigIni.nScrollSpeed[i] + 1)) * 0.5f;\r
+ }\r
+ Drums.eDark = CDTXMania.Instance.ConfigIni.eDark;\r
+ Drums.n演奏速度分子 = CDTXMania.Instance.ConfigIni.nPlaySpeed;\r
Drums.n演奏速度分母 = 20;\r
- Drums.eHHGroup = CDTXMania.app.ConfigIni.eHHGroup;\r
- Drums.eFTGroup = CDTXMania.app.ConfigIni.eFTGroup;\r
- Drums.eCYGroup = CDTXMania.app.ConfigIni.eCYGroup;\r
- Drums.eHitSoundPriorityHH = CDTXMania.app.ConfigIni.eHitSoundPriorityHH;\r
- Drums.eHitSoundPriorityFT = CDTXMania.app.ConfigIni.eHitSoundPriorityFT;\r
- Drums.eHitSoundPriorityCY = CDTXMania.app.ConfigIni.eHitSoundPriorityCY;\r
- Drums.bGuitar有効 = CDTXMania.app.ConfigIni.bGuitar有効;\r
- Drums.bDrums有効 = CDTXMania.app.ConfigIni.bDrums有効;\r
- Drums.bSTAGEFAILED有効 = CDTXMania.app.ConfigIni.bSTAGEFAILED有効;\r
- Drums.eダメージレベル = CDTXMania.app.ConfigIni.eダメージレベル;\r
+ Drums.e譜面レーンタイプ.Drums = CDTXMania.Instance.DTX.n使用レーン数.Drums;\r
+ Drums.e譜面レーンタイプ.Guitar= CDTXMania.Instance.DTX.n使用レーン数.Guitar;\r
+ Drums.e譜面レーンタイプ.Bass = CDTXMania.Instance.DTX.n使用レーン数.Bass;\r
+ Drums.eHHGroup = CDTXMania.Instance.ConfigIni.eHHGroup.Value;\r
+ Drums.eFTGroup = CDTXMania.Instance.ConfigIni.eFTGroup.Value;\r
+ Drums.eCYGroup = CDTXMania.Instance.ConfigIni.eCYGroup.Value;\r
+ Drums.eHitSoundPriorityHH = CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH.Value;\r
+ Drums.eHitSoundPriorityFT = CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT.Value;\r
+ Drums.eHitSoundPriorityCY = CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY.Value;\r
+ Drums.bGuitar有効 = CDTXMania.Instance.ConfigIni.bGuitar有効;\r
+ Drums.bDrums有効 = CDTXMania.Instance.ConfigIni.bDrums有効;\r
+ Drums.bSTAGEFAILED有効 = CDTXMania.Instance.ConfigIni.bStageFailed;\r
+ Drums.eダメージレベル = CDTXMania.Instance.ConfigIni.eDamageLevel;\r
+ Drums.eMetronome = CDTXMania.Instance.ConfigIni.eClickType;\r
Drums.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Drums;\r
Drums.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Drums;\r
Drums.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Drums;\r
Drums.b演奏にマウスを使用した = this.b演奏にマウスを使った.Drums;\r
- Drums.nPerfectになる範囲ms = CDTXMania.app.nPerfect範囲ms;\r
- Drums.nGreatになる範囲ms = CDTXMania.app.nGreat範囲ms;\r
- Drums.nGoodになる範囲ms = CDTXMania.app.nGood範囲ms;\r
- Drums.nPoorになる範囲ms = CDTXMania.app.nPoor範囲ms;\r
+ Drums.nPerfectになる範囲ms = CDTXMania.Instance.nPerfect範囲ms;\r
+ Drums.nGreatになる範囲ms = CDTXMania.Instance.nGreat範囲ms;\r
+ Drums.nGoodになる範囲ms = CDTXMania.Instance.nGood範囲ms;\r
+ Drums.nPoorになる範囲ms = CDTXMania.Instance.nPoor範囲ms;\r
Drums.strDTXManiaのバージョン = CDTXMania.VERSION;\r
Drums.最終更新日時 = DateTime.Now.ToString();\r
- Drums.Hash = CScoreIni.t演奏セクションのMD5を求めて返す(Drums);\r
- Drums.nRisky = CDTXMania.app.ConfigIni.nRisky; // #35461 chnmr0 add\r
- Drums.bギターとベースを入れ替えた = CDTXMania.app.ConfigIni.bIsSwappedGuitarBass; // #35417 chnmr0 add\r
- }\r
- }\r
- #endregion\r
- #region [ t演奏結果を格納する_ギター() ]\r
- public void t演奏結果を格納する_ギター(out CScoreIni.C演奏記録 Guitar)\r
- {\r
- Guitar = new CScoreIni.C演奏記録();\r
-\r
- if (CDTXMania.app.DTX.bチップがある.Guitar)\r
- {\r
- Guitar.nスコア = (long)this.actScore.Get(E楽器パート.GUITAR);\r
- Guitar.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す(CDTXMania.app.DTX.LEVEL.Guitar, CDTXMania.app.DTX.n可視チップ数.Guitar, this.nヒット数_Auto含まない.Guitar.Perfect, this.actCombo.n現在のコンボ数.Guitar最高値, E楽器パート.GUITAR, bIsAutoPlay);\r
- Guitar.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.app.DTX.n可視チップ数.Guitar, this.nヒット数_Auto含まない.Guitar.Perfect, this.nヒット数_Auto含まない.Guitar.Great, this.nヒット数_Auto含まない.Guitar.Good, this.nヒット数_Auto含まない.Guitar.Poor, this.nヒット数_Auto含まない.Guitar.Miss, E楽器パート.GUITAR, bIsAutoPlay);\r
- Guitar.nPerfect数 = CDTXMania.app.ConfigIni.bギターが全部オートプレイである ? this.nヒット数_Auto含む.Guitar.Perfect : this.nヒット数_Auto含まない.Guitar.Perfect;\r
- Guitar.nGreat数 = CDTXMania.app.ConfigIni.bギターが全部オートプレイである ? this.nヒット数_Auto含む.Guitar.Great : this.nヒット数_Auto含まない.Guitar.Great;\r
- Guitar.nGood数 = CDTXMania.app.ConfigIni.bギターが全部オートプレイである ? this.nヒット数_Auto含む.Guitar.Good : this.nヒット数_Auto含まない.Guitar.Good;\r
- Guitar.nPoor数 = CDTXMania.app.ConfigIni.bギターが全部オートプレイである ? this.nヒット数_Auto含む.Guitar.Poor : this.nヒット数_Auto含まない.Guitar.Poor;\r
- Guitar.nMiss数 = CDTXMania.app.ConfigIni.bギターが全部オートプレイである ? this.nヒット数_Auto含む.Guitar.Miss : this.nヒット数_Auto含まない.Guitar.Miss;\r
+ // #35461 chnmr0 add\r
+ Drums.nRisky = CDTXMania.Instance.ConfigIni.nRisky;\r
+ // #35417 chnmr0 add\r
+ Drums.bギターとベースを入れ替えた = CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass;\r
+ }\r
+ }\r
+ private void t演奏結果を格納する_ギター()\r
+ {\r
+ record.Guitar = new CScoreIni.C演奏記録();\r
+ CScoreIni.C演奏記録 Guitar = Record.Guitar;\r
+ bool allauto = CDTXMania.Instance.ConfigIni.bIsAutoPlay(EPart.Guitar);\r
+ if (CDTXMania.Instance.DTX.bチップがある.Guitar)\r
+ {\r
+ Guitar.nスコア = (long)this.actScore.Get(EPart.Guitar);\r
+ Guitar.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す(CDTXMania.Instance.DTX.LEVEL.Guitar, CDTXMania.Instance.DTX.n可視チップ数.Guitar, this.nヒット数_Auto含まない.Guitar.Perfect, this.actCombo.dgbコンボ数.Guitar.n最高値, EPart.Guitar);\r
+ Guitar.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.Instance.DTX.n可視チップ数.Guitar, this.nヒット数_Auto含まない.Guitar.Perfect, this.nヒット数_Auto含まない.Guitar.Great, this.nヒット数_Auto含まない.Guitar.Good, this.nヒット数_Auto含まない.Guitar.Poor, this.nヒット数_Auto含まない.Guitar.Miss, EPart.Guitar, true);\r
+ Guitar.nPerfect数 = allauto ? this.nヒット数_Auto含む.Guitar.Perfect : this.nヒット数_Auto含まない.Guitar.Perfect;\r
+ Guitar.nGreat数 = allauto ? this.nヒット数_Auto含む.Guitar.Great : this.nヒット数_Auto含まない.Guitar.Great;\r
+ Guitar.nGood数 = allauto ? this.nヒット数_Auto含む.Guitar.Good : this.nヒット数_Auto含まない.Guitar.Good;\r
+ Guitar.nPoor数 = allauto ? this.nヒット数_Auto含む.Guitar.Poor : this.nヒット数_Auto含まない.Guitar.Poor;\r
+ Guitar.nMiss数 = allauto ? this.nヒット数_Auto含む.Guitar.Miss : this.nヒット数_Auto含まない.Guitar.Miss;\r
Guitar.nPerfect数_Auto含まない = this.nヒット数_Auto含まない.Guitar.Perfect;\r
Guitar.nGreat数_Auto含まない = this.nヒット数_Auto含まない.Guitar.Great;\r
Guitar.nGood数_Auto含まない = this.nヒット数_Auto含まない.Guitar.Good;\r
Guitar.nPoor数_Auto含まない = this.nヒット数_Auto含まない.Guitar.Poor;\r
Guitar.nMiss数_Auto含まない = this.nヒット数_Auto含まない.Guitar.Miss;\r
- Guitar.n最大コンボ数 = this.actCombo.n現在のコンボ数.Guitar最高値;\r
- Guitar.n全チップ数 = CDTXMania.app.DTX.n可視チップ数.Guitar;\r
- for (int i = 0; i < (int)Eレーン.MAX; i++)\r
- {\r
- Guitar.bAutoPlay[i] = bIsAutoPlay[i];\r
- }\r
- Guitar.bTight = CDTXMania.app.ConfigIni.bTight;\r
- for (int i = 0; i < 3; i++)\r
- {\r
- Guitar.bSudden[i] = CDTXMania.app.ConfigIni.bSudden[i];\r
- Guitar.bHidden[i] = CDTXMania.app.ConfigIni.bHidden[i];\r
- Guitar.eInvisible[i] = CDTXMania.app.ConfigIni.eInvisible[i];\r
- Guitar.bReverse[i] = CDTXMania.app.ConfigIni.bReverse[i];\r
- Guitar.eRandom[i] = CDTXMania.app.ConfigIni.eRandom[i];\r
- Guitar.bLight[i] = CDTXMania.app.ConfigIni.bLight[i];\r
- Guitar.bLeft[i] = CDTXMania.app.ConfigIni.bLeft[i];\r
- Guitar.f譜面スクロール速度[i] = ((float)(CDTXMania.app.ConfigIni.n譜面スクロール速度[i] + 1)) * 0.5f;\r
- }\r
- Guitar.eDark = CDTXMania.app.ConfigIni.eDark;\r
- Guitar.n演奏速度分子 = CDTXMania.app.ConfigIni.n演奏速度;\r
+ Guitar.n最大コンボ数 = this.actCombo.dgbコンボ数.Guitar.n最高値;\r
+ Guitar.n全チップ数 = CDTXMania.Instance.DTX.n可視チップ数.Guitar;\r
+ for (EPad i = EPad.Min; i < EPad.Max; i++)\r
+ {\r
+ Guitar.bAutoPlay[i] = CDTXMania.Instance.ConfigIni.bAutoPlay[i];\r
+ }\r
+ Guitar.bTight = CDTXMania.Instance.ConfigIni.bTight;\r
+ for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
+ {\r
+ Guitar.eSudHidInv[i] = CDTXMania.Instance.ConfigIni.eSudHidInv[i];\r
+ Guitar.bReverse[i] = CDTXMania.Instance.ConfigIni.bReverse[i];\r
+ Guitar.eRandom[i] = CDTXMania.Instance.ConfigIni.eRandom[i];\r
+ Guitar.bLight[i] = CDTXMania.Instance.ConfigIni.bLight[i];\r
+ Guitar.f譜面スクロール速度[i] = ((float)(CDTXMania.Instance.ConfigIni.nScrollSpeed[i] + 1)) * 0.5f;\r
+ }\r
+ Guitar.eDark = CDTXMania.Instance.ConfigIni.eDark;\r
+ Guitar.n演奏速度分子 = CDTXMania.Instance.ConfigIni.nPlaySpeed;\r
Guitar.n演奏速度分母 = 20;\r
- Guitar.eHHGroup = CDTXMania.app.ConfigIni.eHHGroup;\r
- Guitar.eFTGroup = CDTXMania.app.ConfigIni.eFTGroup;\r
- Guitar.eCYGroup = CDTXMania.app.ConfigIni.eCYGroup;\r
- Guitar.eHitSoundPriorityHH = CDTXMania.app.ConfigIni.eHitSoundPriorityHH;\r
- Guitar.eHitSoundPriorityFT = CDTXMania.app.ConfigIni.eHitSoundPriorityFT;\r
- Guitar.eHitSoundPriorityCY = CDTXMania.app.ConfigIni.eHitSoundPriorityCY;\r
- Guitar.bGuitar有効 = CDTXMania.app.ConfigIni.bGuitar有効;\r
- Guitar.bDrums有効 = CDTXMania.app.ConfigIni.bDrums有効;\r
- Guitar.bSTAGEFAILED有効 = CDTXMania.app.ConfigIni.bSTAGEFAILED有効;\r
- Guitar.eダメージレベル = CDTXMania.app.ConfigIni.eダメージレベル;\r
+ Guitar.eHHGroup = CDTXMania.Instance.ConfigIni.eHHGroup;\r
+ Guitar.eFTGroup = CDTXMania.Instance.ConfigIni.eFTGroup;\r
+ Guitar.eCYGroup = CDTXMania.Instance.ConfigIni.eCYGroup;\r
+ Guitar.e譜面レーンタイプ.Drums = CDTXMania.Instance.DTX.n使用レーン数.Drums;\r
+ Guitar.e譜面レーンタイプ.Guitar = CDTXMania.Instance.DTX.n使用レーン数.Guitar;\r
+ Guitar.e譜面レーンタイプ.Bass = CDTXMania.Instance.DTX.n使用レーン数.Bass;\r
+ Guitar.eHitSoundPriorityHH = CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH;\r
+ Guitar.eHitSoundPriorityFT = CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT;\r
+ Guitar.eHitSoundPriorityCY = CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY;\r
+ Guitar.bGuitar有効 = CDTXMania.Instance.ConfigIni.bGuitar有効;\r
+ Guitar.bDrums有効 = CDTXMania.Instance.ConfigIni.bDrums有効;\r
+ Guitar.bSTAGEFAILED有効 = CDTXMania.Instance.ConfigIni.bStageFailed;\r
+ Guitar.eダメージレベル = CDTXMania.Instance.ConfigIni.eDamageLevel;\r
+ Guitar.eMetronome = CDTXMania.Instance.ConfigIni.eClickType;\r
Guitar.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Guitar;\r
Guitar.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Guitar;\r
Guitar.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Guitar;\r
Guitar.b演奏にマウスを使用した = this.b演奏にマウスを使った.Guitar;\r
- Guitar.nPerfectになる範囲ms = CDTXMania.app.nPerfect範囲ms;\r
- Guitar.nGreatになる範囲ms = CDTXMania.app.nGreat範囲ms;\r
- Guitar.nGoodになる範囲ms = CDTXMania.app.nGood範囲ms;\r
- Guitar.nPoorになる範囲ms = CDTXMania.app.nPoor範囲ms;\r
+ Guitar.nPerfectになる範囲ms = CDTXMania.Instance.nPerfect範囲ms;\r
+ Guitar.nGreatになる範囲ms = CDTXMania.Instance.nGreat範囲ms;\r
+ Guitar.nGoodになる範囲ms = CDTXMania.Instance.nGood範囲ms;\r
+ Guitar.nPoorになる範囲ms = CDTXMania.Instance.nPoor範囲ms;\r
Guitar.strDTXManiaのバージョン = CDTXMania.VERSION;\r
Guitar.最終更新日時 = DateTime.Now.ToString();\r
- Guitar.Hash = CScoreIni.t演奏セクションのMD5を求めて返す(Guitar);\r
- Guitar.bギターとベースを入れ替えた = CDTXMania.app.ConfigIni.bIsSwappedGuitarBass; // #35417 chnmr0 add\r
+ // #35417 chnmr0 add\r
+ Guitar.bギターとベースを入れ替えた = CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass;\r
}\r
}\r
- #endregion\r
- #region [ t演奏結果を格納する_ベース() ]\r
- public void t演奏結果を格納する_ベース(out CScoreIni.C演奏記録 Bass)\r
+ private void t演奏結果を格納する_ベース()\r
{\r
- Bass = new CScoreIni.C演奏記録();\r
-\r
- if (CDTXMania.app.DTX.bチップがある.Bass)\r
- {\r
- Bass.nスコア = (long)this.actScore.Get(E楽器パート.BASS);\r
- Bass.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す(CDTXMania.app.DTX.LEVEL.Bass, CDTXMania.app.DTX.n可視チップ数.Bass, this.nヒット数_Auto含まない.Bass.Perfect, this.actCombo.n現在のコンボ数.Bass最高値, E楽器パート.BASS, bIsAutoPlay);\r
- Bass.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.app.DTX.n可視チップ数.Bass, this.nヒット数_Auto含まない.Bass.Perfect, this.nヒット数_Auto含まない.Bass.Great, this.nヒット数_Auto含まない.Bass.Good, this.nヒット数_Auto含まない.Bass.Poor, this.nヒット数_Auto含まない.Bass.Miss, E楽器パート.BASS, bIsAutoPlay);\r
- Bass.nPerfect数 = CDTXMania.app.ConfigIni.bベースが全部オートプレイである ? this.nヒット数_Auto含む.Bass.Perfect : this.nヒット数_Auto含まない.Bass.Perfect;\r
- Bass.nGreat数 = CDTXMania.app.ConfigIni.bベースが全部オートプレイである ? this.nヒット数_Auto含む.Bass.Great : this.nヒット数_Auto含まない.Bass.Great;\r
- Bass.nGood数 = CDTXMania.app.ConfigIni.bベースが全部オートプレイである ? this.nヒット数_Auto含む.Bass.Good : this.nヒット数_Auto含まない.Bass.Good;\r
- Bass.nPoor数 = CDTXMania.app.ConfigIni.bベースが全部オートプレイである ? this.nヒット数_Auto含む.Bass.Poor : this.nヒット数_Auto含まない.Bass.Poor;\r
- Bass.nMiss数 = CDTXMania.app.ConfigIni.bベースが全部オートプレイである ? this.nヒット数_Auto含む.Bass.Miss : this.nヒット数_Auto含まない.Bass.Miss;\r
+ record.Bass = new CScoreIni.C演奏記録();\r
+ CScoreIni.C演奏記録 Bass = Record.Bass;\r
+ bool allauto = CDTXMania.Instance.ConfigIni.bIsAutoPlay(EPart.Bass);\r
+ if (CDTXMania.Instance.DTX.bチップがある.Bass)\r
+ {\r
+ Bass.nスコア = (long)this.actScore.Get(EPart.Bass);\r
+ Bass.dbゲーム型スキル値 = CScoreIni.tゲーム型スキルを計算して返す(CDTXMania.Instance.DTX.LEVEL.Bass, CDTXMania.Instance.DTX.n可視チップ数.Bass, this.nヒット数_Auto含まない.Bass.Perfect, this.actCombo.dgbコンボ数.Bass.n最高値, EPart.Bass);\r
+ Bass.db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す(CDTXMania.Instance.DTX.n可視チップ数.Bass, this.nヒット数_Auto含まない.Bass.Perfect, this.nヒット数_Auto含まない.Bass.Great, this.nヒット数_Auto含まない.Bass.Good, this.nヒット数_Auto含まない.Bass.Poor, this.nヒット数_Auto含まない.Bass.Miss, EPart.Bass, true);\r
+ Bass.nPerfect数 = allauto ? this.nヒット数_Auto含む.Bass.Perfect : this.nヒット数_Auto含まない.Bass.Perfect;\r
+ Bass.nGreat数 = allauto ? this.nヒット数_Auto含む.Bass.Great : this.nヒット数_Auto含まない.Bass.Great;\r
+ Bass.nGood数 = allauto ? this.nヒット数_Auto含む.Bass.Good : this.nヒット数_Auto含まない.Bass.Good;\r
+ Bass.nPoor数 = allauto ? this.nヒット数_Auto含む.Bass.Poor : this.nヒット数_Auto含まない.Bass.Poor;\r
+ Bass.nMiss数 = allauto ? this.nヒット数_Auto含む.Bass.Miss : this.nヒット数_Auto含まない.Bass.Miss;\r
Bass.nPerfect数_Auto含まない = this.nヒット数_Auto含まない.Bass.Perfect;\r
Bass.nGreat数_Auto含まない = this.nヒット数_Auto含まない.Bass.Great;\r
Bass.nGood数_Auto含まない = this.nヒット数_Auto含まない.Bass.Good;\r
Bass.nPoor数_Auto含まない = this.nヒット数_Auto含まない.Bass.Poor;\r
Bass.nMiss数_Auto含まない = this.nヒット数_Auto含まない.Bass.Miss;\r
- Bass.n最大コンボ数 = this.actCombo.n現在のコンボ数.Bass最高値;\r
- Bass.n全チップ数 = CDTXMania.app.DTX.n可視チップ数.Bass;\r
- for (int i = 0; i < (int)Eレーン.MAX; i++)\r
- {\r
- Bass.bAutoPlay[i] = bIsAutoPlay[i];\r
- }\r
- Bass.bTight = CDTXMania.app.ConfigIni.bTight;\r
- for (int i = 0; i < 3; i++)\r
- {\r
- Bass.bSudden[i] = CDTXMania.app.ConfigIni.bSudden[i];\r
- Bass.bHidden[i] = CDTXMania.app.ConfigIni.bHidden[i];\r
- Bass.eInvisible[i] = CDTXMania.app.ConfigIni.eInvisible[i];\r
- Bass.bReverse[i] = CDTXMania.app.ConfigIni.bReverse[i];\r
- Bass.eRandom[i] = CDTXMania.app.ConfigIni.eRandom[i];\r
- Bass.bLight[i] = CDTXMania.app.ConfigIni.bLight[i];\r
- Bass.bLeft[i] = CDTXMania.app.ConfigIni.bLeft[i];\r
- Bass.f譜面スクロール速度[i] = ((float)(CDTXMania.app.ConfigIni.n譜面スクロール速度[i] + 1)) * 0.5f;\r
- }\r
- Bass.eDark = CDTXMania.app.ConfigIni.eDark;\r
- Bass.n演奏速度分子 = CDTXMania.app.ConfigIni.n演奏速度;\r
+ Bass.n最大コンボ数 = this.actCombo.dgbコンボ数.Bass.n最高値;\r
+ Bass.n全チップ数 = CDTXMania.Instance.DTX.n可視チップ数.Bass;\r
+ for (EPad i = EPad.Min; i < EPad.Max; i++)\r
+ {\r
+ Bass.bAutoPlay[i] = CDTXMania.Instance.ConfigIni.bAutoPlay[i];\r
+ }\r
+ Bass.bTight = CDTXMania.Instance.ConfigIni.bTight;\r
+ for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
+ {\r
+ Bass.eSudHidInv[i] = CDTXMania.Instance.ConfigIni.eSudHidInv[i];\r
+ Bass.bReverse[i] = CDTXMania.Instance.ConfigIni.bReverse[i];\r
+ Bass.eRandom[i] = CDTXMania.Instance.ConfigIni.eRandom[i];\r
+ Bass.bLight[i] = CDTXMania.Instance.ConfigIni.bLight[i];\r
+ Bass.f譜面スクロール速度[i] = ((float)(CDTXMania.Instance.ConfigIni.nScrollSpeed[i] + 1)) * 0.5f;\r
+ }\r
+ Bass.eDark = CDTXMania.Instance.ConfigIni.eDark;\r
+ Bass.n演奏速度分子 = CDTXMania.Instance.ConfigIni.nPlaySpeed;\r
Bass.n演奏速度分母 = 20;\r
- Bass.eHHGroup = CDTXMania.app.ConfigIni.eHHGroup;\r
- Bass.eFTGroup = CDTXMania.app.ConfigIni.eFTGroup;\r
- Bass.eCYGroup = CDTXMania.app.ConfigIni.eCYGroup;\r
- Bass.eHitSoundPriorityHH = CDTXMania.app.ConfigIni.eHitSoundPriorityHH;\r
- Bass.eHitSoundPriorityFT = CDTXMania.app.ConfigIni.eHitSoundPriorityFT;\r
- Bass.eHitSoundPriorityCY = CDTXMania.app.ConfigIni.eHitSoundPriorityCY;\r
- Bass.bGuitar有効 = CDTXMania.app.ConfigIni.bGuitar有効;\r
- Bass.bDrums有効 = CDTXMania.app.ConfigIni.bDrums有効;\r
- Bass.bSTAGEFAILED有効 = CDTXMania.app.ConfigIni.bSTAGEFAILED有効;\r
- Bass.eダメージレベル = CDTXMania.app.ConfigIni.eダメージレベル;\r
- Bass.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Bass; // #24280 2011.1.29 yyagi\r
- Bass.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Bass; //\r
- Bass.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Bass; //\r
- Bass.b演奏にマウスを使用した = this.b演奏にマウスを使った.Bass; //\r
- Bass.nPerfectになる範囲ms = CDTXMania.app.nPerfect範囲ms;\r
- Bass.nGreatになる範囲ms = CDTXMania.app.nGreat範囲ms;\r
- Bass.nGoodになる範囲ms = CDTXMania.app.nGood範囲ms;\r
- Bass.nPoorになる範囲ms = CDTXMania.app.nPoor範囲ms;\r
+ Bass.eHHGroup = CDTXMania.Instance.ConfigIni.eHHGroup;\r
+ Bass.eFTGroup = CDTXMania.Instance.ConfigIni.eFTGroup;\r
+ Bass.eCYGroup = CDTXMania.Instance.ConfigIni.eCYGroup;\r
+ Bass.e譜面レーンタイプ.Drums = CDTXMania.Instance.DTX.n使用レーン数.Drums;\r
+ Bass.e譜面レーンタイプ.Guitar = CDTXMania.Instance.DTX.n使用レーン数.Guitar;\r
+ Bass.e譜面レーンタイプ.Bass = CDTXMania.Instance.DTX.n使用レーン数.Bass;\r
+ Bass.eHitSoundPriorityHH = CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH;\r
+ Bass.eHitSoundPriorityFT = CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT;\r
+ Bass.eHitSoundPriorityCY = CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY;\r
+ Bass.bGuitar有効 = CDTXMania.Instance.ConfigIni.bGuitar有効;\r
+ Bass.bDrums有効 = CDTXMania.Instance.ConfigIni.bDrums有効;\r
+ Bass.bSTAGEFAILED有効 = CDTXMania.Instance.ConfigIni.bStageFailed;\r
+ Bass.eダメージレベル = CDTXMania.Instance.ConfigIni.eDamageLevel;\r
+ // #24280 2011.1.29 yyagi\r
+ Bass.eMetronome = CDTXMania.Instance.ConfigIni.eClickType;\r
+ Bass.b演奏にキーボードを使用した = this.b演奏にキーボードを使った.Bass;\r
+ Bass.b演奏にMIDI入力を使用した = this.b演奏にMIDI入力を使った.Bass;\r
+ Bass.b演奏にジョイパッドを使用した = this.b演奏にジョイパッドを使った.Bass;\r
+ Bass.b演奏にマウスを使用した = this.b演奏にマウスを使った.Bass;\r
+ Bass.nPerfectになる範囲ms = CDTXMania.Instance.nPerfect範囲ms;\r
+ Bass.nGreatになる範囲ms = CDTXMania.Instance.nGreat範囲ms;\r
+ Bass.nGoodになる範囲ms = CDTXMania.Instance.nGood範囲ms;\r
+ Bass.nPoorになる範囲ms = CDTXMania.Instance.nPoor範囲ms;\r
Bass.strDTXManiaのバージョン = CDTXMania.VERSION;\r
Bass.最終更新日時 = DateTime.Now.ToString();\r
- Bass.Hash = CScoreIni.t演奏セクションのMD5を求めて返す(Bass);\r
- Bass.bギターとベースを入れ替えた = CDTXMania.app.ConfigIni.bIsSwappedGuitarBass; // #35417 chnmr0 add\r
+ // #35417 chnmr0 add\r
+ Bass.bギターとベースを入れ替えた = CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass;\r
}\r
}\r
#endregion\r
\r
// CStage 実装\r
-\r
public override void On活性化()\r
{\r
- listChip = CDTXMania.app.DTX.listChip;\r
- listWAV = CDTXMania.app.DTX.listWAV;\r
-\r
- this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.継続;\r
- this.n現在のトップChip = (listChip.Count > 0) ? 0 : -1;\r
- this.L最後に再生したHHの実WAV番号 = new List<int>(16);\r
- this.e最後に再生したHHのチャンネル番号 = 0;\r
- this.n最後に再生した実WAV番号.Guitar = -1;\r
- this.n最後に再生した実WAV番号.Bass = -1;\r
- for (int i = 0; i < 50; i++)\r
+ if (base.b活性化してない)\r
{\r
- this.n最後に再生したBGMの実WAV番号[i] = -1;\r
- }\r
- this.r次にくるギターChip = null;\r
- this.r次にくるベースChip = null;\r
- for (int j = 0; j < 10; j++)\r
- {\r
- this.r現在の空うちドラムChip[j] = null;\r
- }\r
- this.r現在の空うちギターChip = null;\r
- this.r現在の空うちベースChip = null;\r
- cInvisibleChip = new CInvisibleChip(CDTXMania.app.ConfigIni.nChipDisplayTimeMs, CDTXMania.app.ConfigIni.nChipFadeoutTimeMs);\r
- this.演奏判定ライン座標 = new C演奏判定ライン座標共通();\r
- this.n最大コンボ数_TargetGhost = new STDGBVALUE<int>(); // #35411 2015.08.21 chnmr0 add\r
- for (int k = 0; k < 3; k++)\r
- {\r
- //for ( int n = 0; n < 5; n++ )\r
- //{\r
- this.nヒット数_Auto含まない[k] = new CHITCOUNTOFRANK();\r
- this.nヒット数_Auto含む[k] = new CHITCOUNTOFRANK();\r
- this.nヒット数_TargetGhost[k] = new CHITCOUNTOFRANK(); // #35411 2015.08.21 chnmr0 add\r
- //}\r
- this.queWailing[k] = new Queue<CChip>();\r
- this.r現在の歓声Chip[k] = null;\r
- cInvisibleChip.eInvisibleMode[k] = CDTXMania.app.ConfigIni.eInvisible[k];\r
- if (CDTXMania.app.DTXVmode.Enabled)\r
+ this.bフィルイン中 = false;\r
+ this.dtLastQueueOperation = DateTime.MinValue;\r
+ this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.継続;\r
+ this.n現在のトップChip = (CDTXMania.Instance.DTX.listChip.Count > 0) ? 0 : -1;\r
+ n最後に再生した実WAV番号 = new STPadValue<int>();\r
+ this.L最後に再生したHHの実WAV番号 = new List<int>(16);\r
+ this.e最後に再生したHHのチャンネル番号 = 0;\r
+ this.n最後に再生した実WAV番号.GtPick = -1;\r
+ this.n最後に再生した実WAV番号.BsPick = -1;\r
+ for (int i = 0; i < 50; i++)\r
{\r
- CDTXMania.app.ConfigIni.n譜面スクロール速度[k] = CDTXMania.app.ConfigIni.nViewerScrollSpeed[k];\r
+ this.n最後に再生したBGMの実WAV番号[i] = -1;\r
}\r
+ this.r次にくるギターChip = null;\r
+ this.r次にくるベースChip = null;\r
+ for (int j = 0; j < 10; j++)\r
+ {\r
+ this.r現在の空うちドラムChip[j] = null;\r
+ }\r
+ this.r現在の空うちギターChip = null;\r
+ this.r現在の空うちベースChip = null;\r
+ cInvisibleChip = new CInvisibleChip(CDTXMania.Instance.ConfigIni.nChipDisplayTimeMs, CDTXMania.Instance.ConfigIni.nChipFadeoutTimeMs);\r
+ this.n最大コンボ数_TargetGhost = new STDGBSValue<int>();\r
\r
- this.nInputAdjustTimeMs[k] = CDTXMania.app.ConfigIni.nInputAdjustTimeMs[k]; // #23580 2011.1.3 yyagi\r
- // 2011.1.7 ikanick 修正\r
- //this.nJudgeLinePosY_delta[ k ] = CDTXMania.app.ConfigIni.nJudgeLinePosOffset[ k ]; // #31602 2013.6.23 yyagi\r
+ for (EPart k = EPart.Drums; k <= EPart.Bass; k++)\r
+ {\r
+ this.nヒット数_Auto含まない[k] = new CHitCountOfRank();\r
+ this.nヒット数_Auto含む[k] = new CHitCountOfRank();\r
+ this.nヒット数_TargetGhost[k] = new CHitCountOfRank();\r
+ this.queWailing[k] = new Queue<CChip>();\r
+ this.r現在の歓声Chip[k] = null;\r
+ if (CDTXMania.Instance.DTXVmode.Enabled)\r
+ {\r
+ CDTXMania.Instance.ConfigIni.nScrollSpeed[k] = CDTXMania.Instance.ConfigIni.nViewerScrollSpeed[k];\r
+ }\r
\r
- this.演奏判定ライン座標.n判定位置[k] = CDTXMania.app.ConfigIni.e判定位置[k];\r
- this.演奏判定ライン座標.nJudgeLinePosY_delta[k] = CDTXMania.app.ConfigIni.nJudgeLinePosOffset[k];\r
- this.bReverse[k] = CDTXMania.app.ConfigIni.bReverse[k]; //\r
+ this.b演奏にキーボードを使った[k] = false;\r
+ this.b演奏にジョイパッドを使った[k] = false;\r
+ this.b演奏にMIDI入力を使った[k] = false;\r
+ this.b演奏にマウスを使った[k] = false;\r
+ }\r
\r
- }\r
- actCombo.演奏判定ライン座標 = 演奏判定ライン座標;\r
- for (int i = 0; i < 3; i++)\r
- {\r
- this.b演奏にキーボードを使った[i] = false;\r
- this.b演奏にジョイパッドを使った[i] = false;\r
- this.b演奏にMIDI入力を使った[i] = false;\r
- this.b演奏にマウスを使った[i] = false;\r
- }\r
- cInvisibleChip.Reset();\r
- base.On活性化();\r
- this.tステータスパネルの選択();\r
- this.tパネル文字列の設定();\r
- //this.演奏判定ライン座標();\r
+ cInvisibleChip.Reset();\r
+ actGauge.Init(CDTXMania.Instance.ConfigIni.nRisky);\r
+ // 効果音のストリームをミキサーから解除しておく\r
+ CDTXMania.Instance.Skin.tRemoveMixerAll();\r
+ queueMixerSound = new Queue<STMixer>(64);\r
+ bIsDirectSound = (CDTXMania.Instance.Sound管理.GetCurrentSoundDeviceType() == "DirectSound");\r
+ this.bPAUSE = false;\r
\r
- this.bIsAutoPlay = CDTXMania.app.ConfigIni.bAutoPlay; // #24239 2011.1.23 yyagi\r
+ if (CDTXMania.Instance.DTXVmode.Enabled)\r
+ {\r
+ db再生速度 = CDTXMania.Instance.DTX.dbDTXVPlaySpeed;\r
+ CDTXMania.Instance.ConfigIni.nPlaySpeed.Value = (int)(CDTXMania.Instance.DTX.dbDTXVPlaySpeed * 20 + 0.5);\r
+ }\r
+ else\r
+ {\r
+ db再生速度 = ((double)CDTXMania.Instance.ConfigIni.nPlaySpeed) / 20.0;\r
+ }\r
\r
+ bValidScore = (CDTXMania.Instance.DTXVmode.Enabled) ? false : true;\r
\r
- //this.bIsAutoPlay.Guitar = CDTXMania.app.ConfigIni.bギターが全部オートプレイである;\r
- //this.bIsAutoPlay.Bass = CDTXMania.app.ConfigIni.bベースが全部オートプレイである;\r
- // this.nRisky = CDTXMania.app.ConfigIni.nRisky; // #23559 2011.7.28 yyagi\r
- actGauge.Init(CDTXMania.app.ConfigIni.nRisky); // #23559 2011.7.28 yyagi\r
- this.nPolyphonicSounds = CDTXMania.app.ConfigIni.nPoliphonicSounds;\r
- e判定表示優先度 = CDTXMania.app.ConfigIni.e判定表示優先度;\r
+ cWailingChip = new CWailingChip共通[3];\r
+ // 0:未使用, 1:Gutiar, 2:Bass\r
+ cWailingChip[1] = new CWailingChip共通();\r
+ cWailingChip[2] = new CWailingChip共通();\r
\r
- CDTXMania.app.Skin.tRemoveMixerAll(); // 効果音のストリームをミキサーから解除しておく\r
+ #region [ 演奏開始前にmixer登録しておくべきサウンド(開幕してすぐに鳴らすことになるチップ音)を登録しておく ]\r
+ foreach (CChip pChip in CDTXMania.Instance.DTX.listChip)\r
+ {\r
+ // Debug.WriteLine( "CH=" + pChip.nチャンネル番号.ToString( "x2" ) + ", 整数値=" + pChip.n整数値 + ", time=" + pChip.n発声時刻ms );\r
+ if (pChip.n発声時刻ms <= 0)\r
+ {\r
+ if (pChip.eチャンネル番号 == EChannel.MixerAdd)\r
+ {\r
+ pChip.bHit = true;\r
+ // Trace.TraceInformation( "first [DA] BAR=" + pChip.n発声位置 / 384 + " ch=" + pChip.nチャンネル番号.ToString( "x2" ) + ", wav=" + pChip.n整数値 + ", time=" + pChip.n発声時刻ms );\r
+ if (CDTXMania.Instance.DTX.listWAV.ContainsKey(pChip.n整数値_内部番号))\r
+ {\r
+ CDTX.CWAV wc = CDTXMania.Instance.DTX.listWAV[pChip.n整数値_内部番号];\r
+ for (int i = 0; i < CDTXMania.Instance.ConfigIni.nPolyphonicSounds; i++)\r
+ {\r
+ if (wc.rSound[i] != null)\r
+ {\r
+ CDTXMania.Instance.Sound管理.AddMixer(wc.rSound[i], db再生速度, pChip.b演奏終了後も再生が続くチップである);\r
+ //AddMixer( wc.rSound[ i ] ); // 最初はqueueを介さず直接ミキサー登録する\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ break;\r
+ }\r
+ }\r
+ #endregion\r
\r
- queueMixerSound = new Queue<stmixer>(64);\r
- bIsDirectSound = (CDTXMania.app.Sound管理.GetCurrentSoundDeviceType() == "DirectSound");\r
- bUseOSTimer = CDTXMania.app.ConfigIni.bUseOSTimer;\r
- this.bPAUSE = false;\r
- if (CDTXMania.app.DTXVmode.Enabled)\r
- {\r
- db再生速度 = CDTXMania.app.DTX.dbDTXVPlaySpeed;\r
- CDTXMania.app.ConfigIni.n演奏速度 = (int)(CDTXMania.app.DTX.dbDTXVPlaySpeed * 20 + 0.5);\r
- }\r
- else\r
- {\r
- db再生速度 = ((double)CDTXMania.app.ConfigIni.n演奏速度) / 20.0;\r
- }\r
- bValidScore = (CDTXMania.app.DTXVmode.Enabled) ? false : true;\r
+ if (CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass) // #24063 2011.1.24 yyagi Gt/Bsの譜面情報入れ替え\r
+ {\r
+ CDTXMania.Instance.DTX.SwapGuitarBassInfos();\r
+ }\r
\r
- cWailingChip = new CWailingChip共通[3]; // 0:未使用, 1:Gutiar, 2:Bass\r
- if (CDTXMania.app.ConfigIni.bDrums有効)\r
- {\r
- cWailingChip[1] = new CWailngChip_Guitar_Drum画面(ref 演奏判定ライン座標);\r
- cWailingChip[2] = new CWailngChip_Bass_Drum画面(ref 演奏判定ライン座標);\r
- }\r
- else\r
- {\r
- cWailingChip[1] = new CWailngChip_Guitar_GR画面(ref 演奏判定ライン座標);\r
- cWailingChip[2] = new CWailngChip_Bass_GR画面(ref 演奏判定ライン座標);\r
- }\r
\r
- #region [ 演奏開始前にmixer登録しておくべきサウンド(開幕してすぐに鳴らすことになるチップ音)を登録しておく ]\r
- foreach (CChip pChip in listChip)\r
- {\r
- // Debug.WriteLine( "CH=" + pChip.nチャンネル番号.ToString( "x2" ) + ", 整数値=" + pChip.n整数値 + ", time=" + pChip.n発声時刻ms );\r
- if (pChip.n発声時刻ms <= 0)\r
+ for (EPart inst = EPart.Drums; inst <= EPart.Bass; ++inst)\r
{\r
- if (pChip.eチャンネル番号 == Ech定義.MixerAdd)\r
+ // MODIFY_BEGIN #25398 2011.06.07 FROM\r
+ if (CDTXMania.Instance.bコンパクトモード)\r
{\r
- pChip.bHit = true;\r
- // Trace.TraceInformation( "first [DA] BAR=" + pChip.n発声位置 / 384 + " ch=" + pChip.nチャンネル番号.ToString( "x2" ) + ", wav=" + pChip.n整数値 + ", time=" + pChip.n発声時刻ms );\r
- if (listWAV.ContainsKey(pChip.n整数値_内部番号))\r
+ var score = new Cスコア();\r
+ CDTXMania.Instance.Songs管理.tScoreIniを読み込んで譜面情報を設定する(CDTXMania.Instance.strコンパクトモードファイル + ".score.ini", ref score);\r
+ this.actGraph.dbTarget[inst] = score.譜面情報.最大スキル[inst];\r
+ }\r
+ else\r
+ {\r
+ if (CDTXMania.Instance.ConfigIni.b楽器有効(inst))\r
{\r
- CDTX.CWAV wc = listWAV[pChip.n整数値_内部番号];\r
- for (int i = 0; i < nPolyphonicSounds; i++)\r
+ this.actGraph.dbTarget[inst] = CDTXMania.Instance.stage選曲.r確定されたスコア.譜面情報.最大スキル[inst]; // #24074 2011.01.23 add ikanick\r
+\r
+ // ゴースト利用可のなとき、0で初期化\r
+ if (CDTXMania.Instance.ConfigIni.eTargetGhost[inst] != ETargetGhostData.None)\r
{\r
- if (wc.rSound[i] != null)\r
+ if (CDTXMania.Instance.DTX.listTargetGhsotLag[inst] != null)\r
{\r
- CDTXMania.app.Sound管理.AddMixer(wc.rSound[i], db再生速度, pChip.b演奏終了後も再生が続くチップである);\r
- //AddMixer( wc.rSound[ i ] ); // 最初はqueueを介さず直接ミキサー登録する\r
+ this.actGraph.dbTarget[inst] = 0;\r
}\r
}\r
}\r
}\r
+ // MODIFY_END #25398\r
}\r
- else\r
+\r
+ for (EPart part = EPart.Drums; part <= EPart.Bass; ++part)\r
{\r
- break;\r
+ if (CDTXMania.Instance.ConfigIni.b楽器有効(part))\r
+ {\r
+ actOptionPanel.Pos[part] = new Coordinates.CXY(CDTXMania.Instance.ConfigIni.cdInstX[part][CDTXMania.Instance.ConfigIni.eActiveInst]\r
+ - CDTXMania.Instance.Coordinates.ImgOptionPanel.W, 0);\r
+ }\r
}\r
- }\r
- #endregion\r
\r
- if (CDTXMania.app.ConfigIni.bIsSwappedGuitarBass) // #24063 2011.1.24 yyagi Gt/Bsの譜面情報入れ替え\r
- {\r
- CDTXMania.app.DTX.SwapGuitarBassInfos();\r
+ base.On活性化();\r
+\r
+ // PANELの設定は、base.On活性化()の後に(actPanelの活性化の後)行うこと。\r
+ // さもないと、actPanelが活性化されていないため、パネル文字列の設定が機能しなくなる。\r
+ string strLabel = (CDTXMania.Instance.stage選曲.r確定された曲 == null)?\r
+ null : CDTXMania.Instance.stage選曲.r確定された曲.ar難易度ラベル[ CDTXMania.Instance.stage選曲.n確定された曲の難易度 ];\r
+ string strPanel = CDTXMania.Instance.DTX.TITLE;\r
+ //string strSETDEFlabel = CDTXMania.Instance.stage選曲.r確定された曲.strタイトル;\r
+ if ( !string.IsNullOrWhiteSpace( strLabel ) && !strPanel.ToLower().Contains(strLabel.ToLower() )\r
+ // && (strPanel == strSETDEFlabel)\r
+ )\r
+ {\r
+ strPanel += " (" + strLabel + ")";\r
+ }\r
+ this.actPanel.SetPanelString( strPanel );\r
}\r
- this.sw = new Stopwatch();\r
- this.sw2 = new Stopwatch();\r
- // this.gclatencymode = GCSettings.LatencyMode;\r
- // GCSettings.LatencyMode = GCLatencyMode.Batch; // 演奏画面中はGCを抑止する\r
}\r
public override void On非活性化()\r
{\r
- this.L最後に再生したHHの実WAV番号.Clear(); // #23921 2011.1.4 yyagi\r
- this.L最後に再生したHHの実WAV番号 = null; //\r
- for (int i = 0; i < 3; i++)\r
- {\r
- this.queWailing[i].Clear();\r
- this.queWailing[i] = null;\r
- }\r
- this.ctWailingチップ模様アニメ = null;\r
- this.ctチップ模様アニメ.Drums = null;\r
- this.ctチップ模様アニメ.Guitar = null;\r
- this.ctチップ模様アニメ.Bass = null;\r
- //listWAV.Clear();\r
- listWAV = null;\r
- listChip = null;\r
- queueMixerSound.Clear();\r
- queueMixerSound = null;\r
- cInvisibleChip.Dispose();\r
- cInvisibleChip = null;\r
- // GCSettings.LatencyMode = this.gclatencymode;\r
- base.On非活性化();\r
+ if (b活性化してる)\r
+ {\r
+ // #23921 2011.1.4 yyagi\r
+ L最後に再生したHHの実WAV番号.Clear();\r
+ L最後に再生したHHの実WAV番号 = null;\r
+ for (EPart i = 0; i <= EPart.Bass; i++)\r
+ {\r
+ queWailing[i].Clear();\r
+ queWailing[i] = null;\r
+ }\r
+ ctWailingチップ模様アニメ = null;\r
+ ctチップ模様アニメ.Drums = null;\r
+ ctチップ模様アニメ.Guitar = null;\r
+ ctチップ模様アニメ.Bass = null;\r
+ queueMixerSound.Clear();\r
+ queueMixerSound = null;\r
+ cInvisibleChip.Dispose();\r
+ cInvisibleChip = null;\r
+ base.On非活性化();\r
+ }\r
}\r
public override void OnManagedリソースの作成()\r
{\r
- if (!base.b活性化してない)\r
+ if (b活性化してる)\r
{\r
- this.t背景テクスチャの生成();\r
-\r
- this.txWailing枠 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlay wailing cursor.png"));\r
-\r
+ txチップ = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlayDrums chips.png"));\r
+ txチップGB = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlayGuitar chips.png"));\r
+ txヒットバー = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlayDrums hit-bar.png"));\r
+ txヒットバーGB = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlayDrums hit-bar guitar.png"));\r
+ txWailing枠 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlay wailing cursor.png"));\r
+ t背景テクスチャの生成();\r
base.OnManagedリソースの作成();\r
}\r
+\r
}\r
public override void OnManagedリソースの解放()\r
{\r
- if (!base.b活性化してない)\r
+ if (b活性化してる)\r
{\r
TextureFactory.tテクスチャの解放(ref this.tx背景);\r
-\r
TextureFactory.tテクスチャの解放(ref this.txWailing枠);\r
+ TextureFactory.tテクスチャの解放(ref this.txヒットバーGB);\r
+ TextureFactory.tテクスチャの解放(ref this.txヒットバー);\r
+ TextureFactory.tテクスチャの解放(ref this.txチップGB);\r
+ TextureFactory.tテクスチャの解放(ref this.txチップ);\r
base.OnManagedリソースの解放();\r
}\r
}\r
-\r
- // その他\r
-\r
- #region [ protected ]\r
- //-----------------\r
- protected class CHITCOUNTOFRANK\r
+ public override int On進行描画()\r
{\r
- // Fields\r
- public int Good;\r
- public int Great;\r
- public int Miss;\r
- public int Perfect;\r
- public int Poor;\r
-\r
- // Properties\r
- public int this[int index]\r
+ if (b活性化してる)\r
{\r
- get\r
+ bool bIsFinishedPlaying = false;\r
+ bool bIsFinishedFadeout = false;\r
+\r
+ if (b初めての進行描画)\r
{\r
- switch (index)\r
- {\r
- case 0:\r
- return this.Perfect;\r
+ PrepareAVITexture();\r
\r
- case 1:\r
- return this.Great;\r
+ CSound管理.rc演奏用タイマ.tリセット();\r
+ CDTXMania.Instance.Timer.tリセット();\r
+ if (CDTXMania.Instance.ConfigIni.bDrums有効)\r
+ {\r
+ ctチップ模様アニメ.Drums = new CCounter(0, 48, 10, CDTXMania.Instance.Timer);\r
+ }\r
+ if (CDTXMania.Instance.ConfigIni.bGuitar有効)\r
+ {\r
+ ctチップ模様アニメ.Guitar = new CCounter(0, 48, 20, CDTXMania.Instance.Timer);\r
+ ctチップ模様アニメ.Bass = new CCounter(0, 48, 20, CDTXMania.Instance.Timer);\r
+ ctWailingチップ模様アニメ = new CCounter(0, 4, 50, CDTXMania.Instance.Timer);\r
+ }\r
\r
- case 2:\r
- return this.Good;\r
+ // this.actChipFireD.Start( Eレーン.HH ); // #31554 2013.6.12 yyagi\r
+ // 初チップヒット時のもたつき回避。最初にactChipFireD.Start()するときにJITが掛かって?\r
+ // ものすごく待たされる(2回目以降と比べると2,3桁tick違う)。そこで最初の画面フェードインの間に\r
+ // 一発Start()を掛けてJITの結果を生成させておく。\r
\r
- case 3:\r
- return this.Poor;\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
+ actFI.tフェードイン開始();\r
\r
- case 4:\r
- return this.Miss;\r
+ if (CDTXMania.Instance.DTXVmode.Enabled)\r
+ {\r
+ #region [ DTXV用の再生設定にする(全AUTOなど) ]\r
+ tDTXV用の設定();\r
+ #endregion\r
+ t演奏位置の変更(CDTXMania.Instance.DTXVmode.nStartBar);\r
}\r
- throw new IndexOutOfRangeException();\r
+\r
+ CDTXMania.Instance.Sound管理.tDisableUpdateBufferAutomatically();\r
+ b初めての進行描画 = false;\r
}\r
- set\r
+\r
+ #region [ stage failed ]\r
+ if (CDTXMania.Instance.ConfigIni.bStageFailed && (base.eフェーズID == CStage.Eフェーズ.共通_通常状態))\r
{\r
- switch (index)\r
+ if (actGauge.IsFailed)\r
{\r
- case 0:\r
- this.Perfect = value;\r
- return;\r
-\r
- case 1:\r
- this.Great = value;\r
- return;\r
-\r
- case 2:\r
- this.Good = value;\r
- return;\r
-\r
- case 3:\r
- this.Poor = value;\r
- return;\r
-\r
- case 4:\r
- this.Miss = value;\r
- return;\r
+ actStageFailed.Start();\r
+ CDTXMania.Instance.DTX.t全チップの再生停止();\r
+ base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED;\r
}\r
- throw new IndexOutOfRangeException();\r
}\r
- }\r
- }\r
+ #endregion\r
\r
- [StructLayout(LayoutKind.Sequential)]\r
- protected struct STKARAUCHI\r
- {\r
- public CChip HH;\r
- public CChip SD;\r
- public CChip BD;\r
- public CChip HT;\r
- public CChip LT;\r
- public CChip FT;\r
- public CChip CY;\r
- public CChip HHO;\r
- public CChip RD;\r
- public CChip LC;\r
- public CChip this[int index]\r
- {\r
- get\r
+ // Background\r
+ if (CDTXMania.Instance.ConfigIni.eDark == EDark.Off)\r
{\r
- switch (index)\r
+ if (tx背景 != null)\r
{\r
- case 0:\r
- return this.HH;\r
-\r
- case 1:\r
- return this.SD;\r
-\r
- case 2:\r
- return this.BD;\r
-\r
- case 3:\r
- return this.HT;\r
-\r
- case 4:\r
- return this.LT;\r
-\r
- case 5:\r
- return this.FT;\r
-\r
- case 6:\r
- return this.CY;\r
-\r
- case 7:\r
- return this.HHO;\r
-\r
- case 8:\r
- return this.RD;\r
-\r
- case 9:\r
- return this.LC;\r
+ tx背景.t2D描画(CDTXMania.Instance.Device, 0, 0);\r
}\r
- throw new IndexOutOfRangeException();\r
}\r
- set\r
+\r
+ // AVI / BGA\r
+ if (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED &&\r
+ base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト)\r
{\r
- switch (index)\r
+ actAVI.t進行描画(\r
+ CDTXMania.Instance.ConfigIni.cdMovieX[CDTXMania.Instance.ConfigIni.eActiveInst],\r
+ CDTXMania.Instance.ConfigIni.cdMovieY[CDTXMania.Instance.ConfigIni.eActiveInst],\r
+ CDTXMania.Instance.Coordinates.Movie.W,\r
+ CDTXMania.Instance.Coordinates.Movie.H);\r
+ actBGA.On進行描画();\r
+ #region [MIDIBGM 処理?]\r
+ if (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED)\r
{\r
- case 0:\r
- this.HH = value;\r
- return;\r
+ CStage.Eフェーズ eフェーズid1 = base.eフェーズID;\r
+ }\r
+ #endregion\r
+ actLane.On進行描画();\r
+ actLaneFlushGB.On進行描画();\r
+ actPanel.On進行描画();\r
+ actScore.On進行描画();\r
+ actOptionPanel.On進行描画();\r
+ actGauge.On進行描画();\r
+ actGraph.On進行描画();\r
+ actLaneFlushD.On進行描画();\r
+ actDANGER.t進行描画(actGauge.IsDanger);\r
+ act譜面スクロール速度.On進行描画();\r
+ t進行描画_判定ライン();\r
+ actWailingBonus.On進行描画();\r
+\r
+ // RGB, Judge, Combo (Priority Under Chip)\r
+ if (CDTXMania.Instance.ConfigIni.eJudgePriority == EJudgeDisplayPriority.Under)\r
+ {\r
+ actRGB.On進行描画();\r
+ actJudgeString.On進行描画();\r
+ actCombo.On進行描画();\r
+ }\r
+ t進行描画_チップアニメ();\r
+ bIsFinishedPlaying = t進行描画_チップ();\r
+ actPad.On進行描画();\r
\r
- case 1:\r
- this.SD = value;\r
- return;\r
+ // RGB, Judge, Combo (Priority Over Chip)\r
+ if (CDTXMania.Instance.ConfigIni.eJudgePriority == EJudgeDisplayPriority.Over)\r
+ {\r
+ actRGB.On進行描画();\r
+ actJudgeString.On進行描画();\r
+ actCombo.On進行描画();\r
+ }\r
\r
- case 2:\r
- this.BD = value;\r
- return;\r
+ actChipFireD.On進行描画();\r
+ actChipFireGB.On進行描画();\r
+ actPlayInfo.On進行描画();\r
\r
- case 3:\r
- this.HT = value;\r
- return;\r
+ // Wailing\r
+ if ((CDTXMania.Instance.ConfigIni.eDark != EDark.Full) &&\r
+ CDTXMania.Instance.ConfigIni.bGuitar有効)\r
+ {\r
+ int GtWailingFrameX = CDTXMania.Instance.ConfigIni.GetLaneX(ELane.GtW) +\r
+ (CDTXMania.Instance.ConfigIni.GetLaneW(ELane.GtW) - CDTXMania.Instance.Coordinates.ImgGtWailingFrame.W) / 2;\r
+ int BsWailingFrameX = CDTXMania.Instance.ConfigIni.GetLaneX(ELane.BsW) +\r
+ (CDTXMania.Instance.ConfigIni.GetLaneW(ELane.BsW) - CDTXMania.Instance.Coordinates.ImgGtWailingFrame.W) / 2;\r
+ int GtWailingFrameY = C演奏判定ライン座標共通.n判定ラインY座標(EPart.Guitar, true, true);\r
+ int BsWailingFrameY = C演奏判定ライン座標共通.n判定ラインY座標(EPart.Bass, true, true);\r
+\r
+ if (txWailing枠 != null)\r
+ {\r
+ if (CDTXMania.Instance.DTX.bチップがある.Guitar)\r
+ {\r
+ txWailing枠.t2D描画(CDTXMania.Instance.Device, GtWailingFrameX, GtWailingFrameY);\r
+ }\r
+ if (CDTXMania.Instance.DTX.bチップがある.Bass)\r
+ {\r
+ txWailing枠.t2D描画(CDTXMania.Instance.Device, BsWailingFrameX, BsWailingFrameY);\r
+ }\r
+ }\r
+ }\r
+ }\r
\r
- case 4:\r
- this.LT = value;\r
- return;\r
+ // Stage Failed\r
+ if (((base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED) ||\r
+ (base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト)) &&\r
+ ((actStageFailed.On進行描画() != 0) &&\r
+ (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト)))\r
+ {\r
+ eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージ失敗;\r
+ base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト;\r
+ actFO.tフェードアウト開始();\r
+ }\r
\r
- case 5:\r
- this.FT = value;\r
- return;\r
+ bIsFinishedFadeout = this.t進行描画_フェードイン_アウト();\r
+ if (bIsFinishedPlaying && (base.eフェーズID == CStage.Eフェーズ.共通_通常状態))\r
+ {\r
+ if (CDTXMania.Instance.DTXVmode.Enabled)\r
+ {\r
+ if (CDTXMania.Instance.Timer.b停止していない)\r
+ {\r
+ actPanel.Stop();\r
+ CDTXMania.Instance.Timer.t一時停止();\r
+ }\r
+ Thread.Sleep(5);\r
+ // DTXCからの次のメッセージを待ち続ける\r
+ }\r
+ else\r
+ {\r
+ this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージクリア;\r
+ base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_CLEAR_フェードアウト;\r
+ this.actFOClear.tフェードアウト開始();\r
+ t演奏結果を格納する_ドラム();\r
+ t演奏結果を格納する_ギター();\r
+ t演奏結果を格納する_ベース();\r
+\r
+ if (CDTXMania.Instance.ConfigIni.bDrums有効)\r
+ {\r
+ for (EPad pad = EPad.DrumsPadMin; pad < EPad.DrumsPadMax; pad++)\r
+ {\r
+ r空打ちドラムチップ[pad] = r空うちChip(EPart.Drums, pad);\r
+ if (r空打ちドラムチップ[pad] == null)\r
+ {\r
+ r空打ちドラムチップ[pad] = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(\r
+ CSound管理.rc演奏用タイマ.n現在時刻,\r
+ EnumConverter.ChannelFromPad(pad),\r
+ CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums);\r
+ }\r
+ }\r
+ }\r
\r
- case 6:\r
- this.CY = value;\r
- return;\r
+ if (CDTXMania.Instance.ConfigIni.bIsSwappedGuitarBass) // #24063 2011.1.24 yyagi Gt/Bsを入れ替えていたなら、演奏結果も入れ替える\r
+ {\r
+ CScoreIni.C演奏記録 t;\r
+ t = record.Guitar;\r
+ record.Guitar = record.Bass;\r
+ record.Bass = t;\r
+\r
+ // 譜面情報も元に戻す\r
+ // #35417 2015.08.30 changed フラグにアクセスしている箇所が見つかったため有効化\r
+ // #35417 2015.8.18 yyagi: AUTO系のフラグ入れ替えは削除可能!?。以後AUTOフラグに全くアクセスしておらず、意味がないため。\r
+ // (直下でb全AUTOである にアクセスしているが、既に計算済みのクラスへのアクセスであり、ここでの交換対象ではない)\r
+ CDTXMania.Instance.DTX.SwapGuitarBassInfos();\r
+ // #24415 2011.2.27 yyagi\r
+ // リザルト集計時のみ、Auto系のフラグも元に戻す。\r
+ // これを戻すのは、リザルト集計後。\r
+ // "case CStage.Eステージ.結果:"のところ。\r
+ CDTXMania.Instance.ConfigIni.SwapGuitarBassInfos_AutoFlags();\r
+ }\r
+ }\r
+ }\r
+ if (this.eフェードアウト完了時の戻り値 == E演奏画面の戻り値.再読込_再演奏)\r
+ {\r
+ bIsFinishedFadeout = true;\r
+ }\r
+ if (bIsFinishedFadeout)\r
+ {\r
+ return (int)this.eフェードアウト完了時の戻り値;\r
+ }\r
\r
- case 7:\r
- this.HHO = value;\r
- return;\r
+ ManageMixerQueue();\r
\r
- case 8:\r
- this.RD = value;\r
- return;\r
+ // キー入力\r
\r
- case 9:\r
- this.LC = value;\r
- return;\r
- }\r
- throw new IndexOutOfRangeException();\r
+ if (CDTXMania.Instance.act現在入力を占有中のプラグイン == null)\r
+ {\r
+ this.tキー入力();\r
}\r
}\r
+ return 0;\r
}\r
\r
- protected struct stmixer\r
+ // その他\r
+ public STPadValue<CChip> GetNoChipDrums()\r
{\r
- internal bool bIsAdd;\r
- internal CSound csound;\r
- internal bool b演奏終了後も再生が続くチップである;\r
- };\r
-\r
- protected CAct演奏AVI actAVI;\r
- protected CAct演奏BGA actBGA;\r
-\r
- protected CAct演奏チップファイアGB actChipFireGB;\r
- protected CAct演奏Combo共通 actCombo;\r
- protected CAct演奏Danger共通 actDANGER;\r
- protected CActFIFOBlack actFI;\r
- protected CActFIFOBlack actFO;\r
- protected CActFIFOWhite actFOClear;\r
- protected CAct演奏ゲージ共通 actGauge;\r
-\r
- protected CAct演奏判定文字列共通 actJudgeString;\r
- protected CAct演奏DrumsレーンフラッシュD actLaneFlushD;\r
- protected CAct演奏レーンフラッシュGB共通 actLaneFlushGB;\r
- protected CAct演奏パネル文字列 actPanel;\r
- protected CAct演奏演奏情報 actPlayInfo;\r
- protected CAct演奏RGB共通 actRGB;\r
- protected CAct演奏スコア共通 actScore;\r
- protected CAct演奏ステージ失敗 actStageFailed;\r
- protected CAct演奏ステータスパネル共通 actStatusPanels;\r
- protected CAct演奏WailingBonus共通 actWailingBonus;\r
- protected CAct演奏スクロール速度 act譜面スクロール速度;\r
- public C演奏判定ライン座標共通 演奏判定ライン座標;\r
- protected bool bPAUSE;\r
- protected STDGBVALUE<bool> b演奏にMIDI入力を使った;\r
- protected STDGBVALUE<bool> b演奏にキーボードを使った;\r
- protected STDGBVALUE<bool> b演奏にジョイパッドを使った;\r
- protected STDGBVALUE<bool> b演奏にマウスを使った;\r
- protected CCounter ctWailingチップ模様アニメ;\r
- protected STDGBVALUE<CCounter> ctチップ模様アニメ;\r
-\r
- protected E演奏画面の戻り値 eフェードアウト完了時の戻り値;\r
- protected readonly Ech定義[,] nBGAスコープチャンネルマップ = new Ech定義[2, 8]\r
+ return r空打ちドラムチップ;\r
+ }\r
+ public STDGBSValue<CScoreIni.C演奏記録> Record\r
{\r
+ get\r
{\r
- Ech定義.BGALayer1_Swap,\r
- Ech定義.BGALayer2_Swap,\r
- Ech定義.BGALayer3_Swap,\r
- Ech定義.BGALayer4_Swap,\r
- Ech定義.BGALayer5_Swap,\r
- Ech定義.BGALayer6_Swap,\r
- Ech定義.BGALayer7_Swap,\r
- Ech定義.BGALayer8_Swap\r
- },\r
- {\r
- Ech定義.BGALayer1,\r
- Ech定義.BGALayer2,\r
- Ech定義.BGALayer3,\r
- Ech定義.BGALayer4,\r
- Ech定義.BGALayer5,\r
- Ech定義.BGALayer6,\r
- Ech定義.BGALayer7,\r
- Ech定義.BGALayer8\r
- }\r
- };\r
- public static readonly int[] nチャンネル0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 7, 0 };\r
- protected readonly int[] nチャンネル0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 8, 0 };\r
- protected readonly Ech定義[] nパッド0Atoチャンネル0A = new Ech定義[]\r
- {\r
- Ech定義.HiHatClose,\r
- Ech定義.Snare,\r
- Ech定義.BassDrum,\r
- Ech定義.HighTom,\r
- Ech定義.LowTom,\r
- Ech定義.FloorTom,\r
- Ech定義.Cymbal,\r
- Ech定義.HiHatOpen,\r
- Ech定義.RideCymbal,\r
- Ech定義.LeftCymbal\r
- };\r
- protected readonly int[] nパッド0Atoパッド08 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 8, 0 }; // パッド画像のヒット処理用\r
- protected readonly int[] nパッド0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 6, 7, 1, 7, 0 };\r
- protected STDGBVALUE<CHITCOUNTOFRANK> nヒット数_Auto含まない;\r
- protected STDGBVALUE<CHITCOUNTOFRANK> nヒット数_Auto含む;\r
- protected STDGBVALUE<CHITCOUNTOFRANK> nヒット数_TargetGhost; // #35411 2015.08.21 chnmr0 add\r
- protected STDGBVALUE<int> nコンボ数_TargetGhost;\r
- protected STDGBVALUE<int> n最大コンボ数_TargetGhost;\r
- protected int n現在のトップChip = -1;\r
- protected int[] n最後に再生したBGMの実WAV番号 = new int[50];\r
- protected Ech定義 e最後に再生したHHのチャンネル番号;\r
- protected List<int> L最後に再生したHHの実WAV番号; // #23921 2011.1.4 yyagi: change "int" to "List<int>", for recording multiple wav No.\r
- protected STLANEVALUE<int> n最後に再生した実WAV番号; // #26388 2011.11.8 yyagi: change "n最後に再生した実WAV番号.GUITAR" and "n最後に再生した実WAV番号.BASS"\r
- // into "n最後に再生した実WAV番号";\r
- // protected int n最後に再生した実WAV番号.GUITAR;\r
- // protected int n最後に再生した実WAV番号.BASS;\r
-\r
- protected volatile Queue<stmixer> queueMixerSound; // #24820 2013.1.21 yyagi まずは単純にAdd/Removeを1個のキューでまとめて管理するやり方で設計する\r
- protected DateTime dtLastQueueOperation; //\r
- protected bool bIsDirectSound; //\r
- protected double db再生速度;\r
- protected bool bValidScore;\r
- // protected bool bDTXVmode;\r
- // protected STDGBVALUE<int> nJudgeLinePosY_delta; // #31602 2013.6.23 yyagi 表示遅延対策として、判定ラインの表示位置をずらす機能を追加する\r
- protected STDGBVALUE<bool> bReverse;\r
-\r
- protected STDGBVALUE<Queue<CChip>> queWailing;\r
- protected STDGBVALUE<CChip> r現在の歓声Chip;\r
- protected CChip r現在の空うちギターChip;\r
- protected STKARAUCHI r現在の空うちドラムChip;\r
- protected CChip r現在の空うちベースChip;\r
- protected CChip r次にくるギターChip;\r
- protected CChip r次にくるベースChip;\r
- protected CTexture txWailing枠;\r
- protected CTexture txチップ;\r
- protected CTexture txヒットバー;\r
-\r
- protected CTexture tx背景;\r
-\r
- protected STDGBVALUE<int> nInputAdjustTimeMs; // #23580 2011.1.3 yyagi\r
- protected STAUTOPLAY bIsAutoPlay; // #24239 2011.1.23 yyagi\r
- // protected int nRisky_InitialVar, nRiskyTime; // #23559 2011.7.28 yyagi → CAct演奏ゲージ共通クラスに隠蔽\r
- protected int nPolyphonicSounds;\r
- protected List<CChip> listChip;\r
- protected Dictionary<int, CDTX.CWAV> listWAV;\r
- protected CInvisibleChip cInvisibleChip;\r
- protected bool bUseOSTimer;\r
- protected E判定表示優先度 e判定表示優先度;\r
- protected CWailingChip共通[] cWailingChip;\r
-\r
- protected Stopwatch sw; // 2011.6.13 最適化検討用のストップウォッチ\r
- protected Stopwatch sw2;\r
- // protected GCLatencyMode gclatencymode;\r
-\r
+ return record;\r
+ }\r
+ }\r
public void AddMixer(CSound cs, bool _b演奏終了後も再生が続くチップである)\r
{\r
- stmixer stm = new stmixer()\r
+ STMixer stm = new STMixer()\r
{\r
bIsAdd = true,\r
csound = cs,\r
}\r
public void RemoveMixer(CSound cs)\r
{\r
- stmixer stm = new stmixer()\r
+ STMixer stm = new STMixer()\r
{\r
bIsAdd = false,\r
csound = cs,\r
//Debug.WriteLine( "☆queueLength=" + queueMixerSound.Count );\r
DateTime dtnow = DateTime.Now;\r
TimeSpan ts = dtnow - dtLastQueueOperation;\r
- if (ts.Milliseconds > 7)\r
+ int nInterval = ( CDTXMania.Instance.ConfigIni.bVSyncWait ) ? 7 : 1;\r
+ int nMaxDequeueCount = ( CDTXMania.Instance.ConfigIni.bVSyncWait ) ? 2 : 1;\r
+ if (ts.Milliseconds > nInterval)\r
{\r
- for (int i = 0; i < 2 && queueMixerSound.Count > 0; i++)\r
+ for (int i = 0; i < nMaxDequeueCount && queueMixerSound.Count > 0; i++)\r
{\r
dtLastQueueOperation = dtnow;\r
- stmixer stm = queueMixerSound.Dequeue();\r
+ STMixer stm = queueMixerSound.Dequeue();\r
if (stm.bIsAdd)\r
{\r
- CDTXMania.app.Sound管理.AddMixer(stm.csound, db再生速度, stm.b演奏終了後も再生が続くチップである);\r
+ CDTXMania.Instance.Sound管理.AddMixer(stm.csound, db再生速度, stm.b演奏終了後も再生が続くチップである);\r
}\r
else\r
{\r
- CDTXMania.app.Sound管理.RemoveMixer(stm.csound);\r
+ CDTXMania.Instance.Sound管理.RemoveMixer(stm.csound);\r
}\r
}\r
}\r
/// </summary>\r
protected void PrepareAVITexture()\r
{\r
- if (CDTXMania.app.ConfigIni.bAVI有効)\r
+ if (CDTXMania.Instance.ConfigIni.bAVI)\r
{\r
- foreach (CChip pChip in listChip)\r
+ foreach (CChip pChip in CDTXMania.Instance.DTX.listChip)\r
{\r
- if (pChip.eチャンネル番号 == Ech定義.Movie || pChip.eチャンネル番号 == Ech定義.MovieFull)\r
+ if (pChip.eチャンネル番号 == EChannel.Movie || pChip.eチャンネル番号 == EChannel.MovieFull)\r
{\r
// 最初に再生するAVIチップに合わせて、テクスチャを準備しておく\r
if (pChip.rAVI != null)\r
}\r
}\r
\r
- protected E判定 e指定時刻からChipのJUDGEを返す(long nTime, CChip pChip, int nInputAdjustTime, bool saveLag = true)\r
+ protected EJudge e指定時刻からChipのJUDGEを返す(long nTime, CChip pChip, int nInputAdjustTime, bool saveLag = true)\r
{\r
if (pChip != null)\r
{\r
int lag = (int)(nTime + nInputAdjustTime - pChip.n発声時刻ms);\r
if (saveLag)\r
{\r
- pChip.nLag = lag; // #23580 2011.1.3 yyagi: add "nInputAdjustTime" to add input timing adjust feature\r
- if (pChip.e楽器パート != E楽器パート.UNKNOWN)\r
+ pChip.nLag = lag;\r
+ // #23580 2011.1.3 yyagi: add "nInputAdjustTime" to add input timing adjust feature\r
+ if (pChip.e楽器パート != EPart.Unknown)\r
{\r
- pChip.extendInfoForGhost = this.actCombo.n現在のコンボ数[(int)pChip.e楽器パート] > 0 ? true : false;\r
+ pChip.extendInfoForGhost = this.actCombo.dgbコンボ数[pChip.e楽器パート].n現在値 > 0 ? true : false;\r
}\r
}\r
// #35411 modify end\r
\r
int nDeltaTime = Math.Abs(lag);\r
//Debug.WriteLine("nAbsTime=" + (nTime - pChip.n発声時刻ms) + ", nDeltaTime=" + (nTime + nInputAdjustTime - pChip.n発声時刻ms));\r
- if (nDeltaTime <= CDTXMania.app.nPerfect範囲ms)\r
+ if (nDeltaTime <= CDTXMania.Instance.nPerfect範囲ms)\r
{\r
- return E判定.Perfect;\r
+ return EJudge.Perfect;\r
}\r
- if (nDeltaTime <= CDTXMania.app.nGreat範囲ms)\r
+ if (nDeltaTime <= CDTXMania.Instance.nGreat範囲ms)\r
{\r
- return E判定.Great;\r
+ return EJudge.Great;\r
}\r
- if (nDeltaTime <= CDTXMania.app.nGood範囲ms)\r
+ if (nDeltaTime <= CDTXMania.Instance.nGood範囲ms)\r
{\r
- return E判定.Good;\r
+ return EJudge.Good;\r
}\r
- if (nDeltaTime <= CDTXMania.app.nPoor範囲ms)\r
+ if (nDeltaTime <= CDTXMania.Instance.nPoor範囲ms)\r
{\r
- return E判定.Poor;\r
+ return EJudge.Poor;\r
}\r
}\r
- return E判定.Miss;\r
+ return EJudge.Miss;\r
}\r
- protected CChip r空うちChip(E楽器パート part, Eパッド pad)\r
+\r
+ protected CChip r空うちChip(EPart part, EPad pad)\r
{\r
switch (part)\r
{\r
- case E楽器パート.DRUMS:\r
+ case EPart.Drums:\r
switch (pad)\r
{\r
- case Eパッド.HH:\r
+ case EPad.HH:\r
if (this.r現在の空うちドラムChip.HH != null)\r
{\r
return this.r現在の空うちドラムChip.HH;\r
}\r
- if (CDTXMania.app.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける)\r
+ if (CDTXMania.Instance.ConfigIni.eHHGroup != EHHGroup.HO_HC)\r
{\r
- if (CDTXMania.app.ConfigIni.eHHGroup == EHHGroup.左シンバルのみ打ち分ける)\r
+ if (CDTXMania.Instance.ConfigIni.eHHGroup == EHHGroup.LC_HH)\r
{\r
return this.r現在の空うちドラムChip.HHO;\r
}\r
}\r
return this.r現在の空うちドラムChip.LC;\r
\r
- case Eパッド.SD:\r
+ case EPad.SD:\r
return this.r現在の空うちドラムChip.SD;\r
\r
- case Eパッド.BD:\r
+ case EPad.BD:\r
return this.r現在の空うちドラムChip.BD;\r
\r
- case Eパッド.HT:\r
+ case EPad.HT:\r
return this.r現在の空うちドラムChip.HT;\r
\r
- case Eパッド.LT:\r
+ case EPad.LT:\r
if (this.r現在の空うちドラムChip.LT != null)\r
{\r
return this.r現在の空うちドラムChip.LT;\r
}\r
- if (CDTXMania.app.ConfigIni.eFTGroup == EFTGroup.共通)\r
+ if (CDTXMania.Instance.ConfigIni.eFTGroup == EFTGroup.Group)\r
{\r
return this.r現在の空うちドラムChip.FT;\r
}\r
return null;\r
\r
- case Eパッド.FT:\r
+ case EPad.FT:\r
if (this.r現在の空うちドラムChip.FT != null)\r
{\r
return this.r現在の空うちドラムChip.FT;\r
}\r
- if (CDTXMania.app.ConfigIni.eFTGroup == EFTGroup.共通)\r
+ if (CDTXMania.Instance.ConfigIni.eFTGroup == EFTGroup.Group)\r
{\r
return this.r現在の空うちドラムChip.LT;\r
}\r
return null;\r
\r
- case Eパッド.CY:\r
+ case EPad.CY:\r
if (this.r現在の空うちドラムChip.CY != null)\r
{\r
return this.r現在の空うちドラムChip.CY;\r
}\r
- if (CDTXMania.app.ConfigIni.eCYGroup == ECYGroup.共通)\r
+ if (CDTXMania.Instance.ConfigIni.eCYGroup == ECYGroup.Group)\r
{\r
return this.r現在の空うちドラムChip.RD;\r
}\r
return null;\r
\r
- case Eパッド.HHO:\r
+ case EPad.HHO:\r
if (this.r現在の空うちドラムChip.HHO != null)\r
{\r
return this.r現在の空うちドラムChip.HHO;\r
}\r
- if (CDTXMania.app.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける)\r
+ if (CDTXMania.Instance.ConfigIni.eHHGroup != EHHGroup.HO_HC)\r
{\r
- if (CDTXMania.app.ConfigIni.eHHGroup == EHHGroup.左シンバルのみ打ち分ける)\r
+ if (CDTXMania.Instance.ConfigIni.eHHGroup == EHHGroup.LC_HH)\r
{\r
return this.r現在の空うちドラムChip.HH;\r
}\r
}\r
return this.r現在の空うちドラムChip.LC;\r
\r
- case Eパッド.RD:\r
+ case EPad.RD:\r
if (this.r現在の空うちドラムChip.RD != null)\r
{\r
return this.r現在の空うちドラムChip.RD;\r
}\r
- if (CDTXMania.app.ConfigIni.eCYGroup == ECYGroup.共通)\r
+ if (CDTXMania.Instance.ConfigIni.eCYGroup == ECYGroup.Group)\r
{\r
return this.r現在の空うちドラムChip.CY;\r
}\r
return null;\r
\r
- case Eパッド.LC:\r
+ case EPad.LC:\r
if (this.r現在の空うちドラムChip.LC != null)\r
{\r
return this.r現在の空うちドラムChip.LC;\r
}\r
- if ((CDTXMania.app.ConfigIni.eHHGroup != EHHGroup.ハイハットのみ打ち分ける) && (CDTXMania.app.ConfigIni.eHHGroup != EHHGroup.全部共通))\r
+ if ((CDTXMania.Instance.ConfigIni.eHHGroup != EHHGroup.HO_HC) && (CDTXMania.Instance.ConfigIni.eHHGroup != EHHGroup.Group))\r
{\r
return null;\r
}\r
}\r
break;\r
\r
- case E楽器パート.GUITAR:\r
+ case EPart.Guitar:\r
return this.r現在の空うちギターChip;\r
\r
- case E楽器パート.BASS:\r
+ case EPart.Bass:\r
return this.r現在の空うちベースChip;\r
}\r
return null;\r
}\r
- protected CChip r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(long nTime, Ech定義 eChannel, int nInputAdjustTime)\r
- {\r
- sw2.Start();\r
- //Trace.TraceInformation( "NTime={0}, nChannel={1:x2}", nTime, nChannel );\r
- nTime += nInputAdjustTime; // #24239 2011.1.23 yyagi InputAdjust\r
-\r
- int nIndex_InitialPositionSearchingToPast;\r
- if (this.n現在のトップChip == -1) // 演奏データとして1個もチップがない場合は\r
- {\r
- sw2.Stop();\r
- return null;\r
- }\r
- int count = listChip.Count;\r
- int nIndex_NearestChip_Future = nIndex_InitialPositionSearchingToPast = this.n現在のトップChip;\r
- if (this.n現在のトップChip >= count) // その時点で演奏すべきチップが既に全部無くなっていたら\r
- {\r
- nIndex_NearestChip_Future = nIndex_InitialPositionSearchingToPast = count - 1;\r
- }\r
- //int nIndex_NearestChip_Future; // = nIndex_InitialPositionSearchingToFuture;\r
- //while ( nIndex_NearestChip_Future < count ) // 未来方向への検索\r
- for (; nIndex_NearestChip_Future < count; nIndex_NearestChip_Future++)\r
- {\r
- CChip chip = listChip[nIndex_NearestChip_Future];\r
- if (chip.b空打ちチップである)\r
- {\r
- continue;\r
- }\r
- if (((Ech定義.HiHatClose <= eChannel) && (eChannel <= Ech定義.LeftCymbal)))\r
- {\r
- if ((chip.eチャンネル番号 == eChannel) || (chip.eチャンネル番号 == (eChannel + 0x20)))\r
- {\r
- if (chip.n発声時刻ms > nTime)\r
- {\r
- break;\r
- }\r
- nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
- }\r
- continue; // ほんの僅かながら高速化\r
- }\r
- else if (((eChannel == Ech定義.Guitar_WailingSound) && (chip.e楽器パート == E楽器パート.GUITAR)) ||\r
- (((Ech定義.Guitar_Open <= eChannel) && (eChannel <= Ech定義.Guitar_Wailing)) && (chip.eチャンネル番号 == eChannel)))\r
- {\r
- if (chip.n発声時刻ms > nTime)\r
- {\r
- break;\r
- }\r
- nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
- }\r
- else if (((eChannel == Ech定義.Bass_WailingSound) && (chip.e楽器パート == E楽器パート.BASS)) ||\r
- (((Ech定義.Bass_Open <= eChannel) && (eChannel <= Ech定義.Bass_Wailing)) && (chip.eチャンネル番号 == eChannel)))\r
- {\r
- if (chip.n発声時刻ms > nTime)\r
- {\r
- break;\r
- }\r
- nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
- }\r
- // nIndex_NearestChip_Future++;\r
- }\r
- int nIndex_NearestChip_Past = nIndex_InitialPositionSearchingToPast;\r
- //while ( nIndex_NearestChip_Past >= 0 ) // 過去方向への検索\r
- for (; nIndex_NearestChip_Past >= 0; nIndex_NearestChip_Past--)\r
- {\r
- CChip chip = listChip[nIndex_NearestChip_Past];\r
- if (chip.b空打ちチップである)\r
- {\r
- continue;\r
- }\r
- if ((Ech定義.HiHatClose <= eChannel) && (eChannel <= Ech定義.LeftCymbal))\r
- {\r
- if ((chip.eチャンネル番号 == eChannel) || (chip.eチャンネル番号 == (eChannel + 0x20)))\r
- {\r
- break;\r
- }\r
- }\r
- else if (((eChannel == Ech定義.Guitar_WailingSound) && (chip.e楽器パート == E楽器パート.GUITAR)) ||\r
- (((Ech定義.Guitar_Open <= eChannel) && (eChannel <= Ech定義.Guitar_Wailing)) && (chip.eチャンネル番号 == eChannel)))\r
- {\r
- if ((Ech定義.Guitar_Open <= chip.eチャンネル番号) && (chip.eチャンネル番号 <= Ech定義.Guitar_Wailing))\r
- {\r
- break;\r
- }\r
- }\r
- else if (((eChannel == Ech定義.Bass_WailingSound) && (chip.e楽器パート == E楽器パート.BASS)) ||\r
- (((Ech定義.Bass_Open <= eChannel) && (eChannel <= Ech定義.Bass_Wailing)) && (chip.eチャンネル番号 == eChannel)))\r
- {\r
- if ((Ech定義.Bass_Open <= chip.eチャンネル番号) && (chip.eチャンネル番号 <= Ech定義.Bass_Wailing))\r
- {\r
- break;\r
- }\r
- }\r
- // nIndex_NearestChip_Past--;\r
- }\r
\r
- if (nIndex_NearestChip_Future >= count)\r
- {\r
- if (nIndex_NearestChip_Past < 0) // 検索対象が過去未来どちらにも見つからなかった場合\r
- {\r
- return null;\r
- }\r
- else // 検索対象が未来方向には見つからなかった(しかし過去方向には見つかった)場合\r
- {\r
- sw2.Stop();\r
- return listChip[nIndex_NearestChip_Past];\r
- }\r
- }\r
- else if (nIndex_NearestChip_Past < 0) // 検索対象が過去方向には見つからなかった(しかし未来方向には見つかった)場合\r
- {\r
- sw2.Stop();\r
- return listChip[nIndex_NearestChip_Future];\r
- }\r
- // 検索対象が過去未来の双方に見つかったなら、より近い方を採用する\r
- CChip nearestChip_Future = listChip[nIndex_NearestChip_Future];\r
- CChip nearestChip_Past = listChip[nIndex_NearestChip_Past];\r
- int nDiffTime_Future = Math.Abs((int)(nTime - nearestChip_Future.n発声時刻ms));\r
- int nDiffTime_Past = Math.Abs((int)(nTime - nearestChip_Past.n発声時刻ms));\r
- if (nDiffTime_Future >= nDiffTime_Past)\r
- {\r
- sw2.Stop();\r
- return nearestChip_Past;\r
- }\r
- sw2.Stop();\r
- return nearestChip_Future;\r
- }\r
- protected void tサウンド再生(CChip rChip, long n再生開始システム時刻ms, E楽器パート part)\r
+ protected CChip r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(long nTime, EChannel eChannel, int nInputAdjustTime)\r
{\r
- this.tサウンド再生(rChip, n再生開始システム時刻ms, part, CDTXMania.app.ConfigIni.n手動再生音量, false, false);\r
+ return r指定時刻に一番近い未ヒットChip(nTime, eChannel, nInputAdjustTime, 0, HitState.DontCare);\r
}\r
- protected void tサウンド再生(CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量)\r
+\r
+ protected void tサウンド再生(CChip rChip, long n再生開始システム時刻ms, EPart part)\r
{\r
- this.tサウンド再生(rChip, n再生開始システム時刻ms, part, n音量, false, false);\r
+ this.tサウンド再生(rChip, n再生開始システム時刻ms, part, CDTXMania.Instance.ConfigIni.nChipVolume);\r
}\r
- protected void tサウンド再生(CChip rChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ)\r
- {\r
- this.tサウンド再生(rChip, n再生開始システム時刻ms, part, n音量, bモニタ, false);\r
- }\r
- protected void tサウンド再生(CChip pChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ, bool b音程をずらして再生)\r
+\r
+ protected void tサウンド再生(CChip pChip, long n再生開始システム時刻ms, EPart part, int n音量, bool bモニタ = false, bool b音程をずらして再生 = false)\r
{\r
// mute sound (auto)\r
// 4A: HH\r
bool overwrite = false;\r
switch (part)\r
{\r
- case E楽器パート.DRUMS:\r
+ case EPart.Drums:\r
#region [ DRUMS ]\r
{\r
- Ech定義 channel = pChip.eチャンネル番号;\r
int index = -1;\r
- if ((Ech定義.HiHatClose <= channel) && (channel <= Ech定義.LeftCymbal))\r
+ if (pChip.bDrums可視チップ_LP_LBD含まない)\r
{\r
- index = channel - Ech定義.HiHatClose;\r
+ index = pChip.nDrumsIndex;\r
}\r
- else if ((Ech定義.HiHatClose_Hidden <= channel) && (channel <= Ech定義.LeftCymbal_Hidden))\r
+ else if (pChip.bDrums不可視チップ_LP_LBD含まない)\r
{\r
- index = channel - Ech定義.HiHatClose_Hidden;\r
+ index = pChip.nDrumsIndexHidden;\r
}\r
// mute sound (auto)\r
// 4A: 84: HH (HO/HC)\r
// 4D: 87: LC\r
// 2A: 88: Gt\r
// AA: 89: Bs\r
- else if (Ech定義.SE24 == channel) // 仮に今だけ追加 HHは消音処理があるので overwriteフラグ系の処理は改めて不要\r
+ else if (EChannel.SE24 == pChip.eチャンネル番号) // 仮に今だけ追加 HHは消音処理があるので overwriteフラグ系の処理は改めて不要\r
{\r
index = 0;\r
}\r
- else if ((Ech定義.SE25 <= channel) && (channel <= Ech定義.SE27)) // 仮に今だけ追加\r
+ else if ((EChannel.SE25 <= pChip.eチャンネル番号) && (pChip.eチャンネル番号 <= EChannel.SE27)) // 仮に今だけ追加\r
{\r
- pChip.ConvertSE25_26_27ToCY_RCY_LCY();\r
- index = pChip.eチャンネル番号 - Ech定義.HiHatClose;\r
+ pChip.ConvertSE25_26_27toCY_RCY_LCY();\r
+ index = pChip.nDrumsIndex;\r
overwrite = true;\r
}\r
else\r
{\r
return;\r
}\r
- int nLane = CStage演奏画面共通.nチャンネル0Atoレーン07[index];\r
- if ((nLane == 1) && // 今回演奏するのがHC or HO\r
- (index == 0 || (\r
- index == 7 &&\r
- this.e最後に再生したHHのチャンネル番号 != Ech定義.HiHatOpen &&\r
- this.e最後に再生したHHのチャンネル番号 != Ech定義.HiHatOpen_Hidden))\r
- // HCを演奏するか、またはHO演奏&以前HO演奏でない&以前不可視HO演奏でない\r
+ EChannel actChannel = EChannel.HiHatClose + index;\r
+ ELane nLane = EnumConverter.LaneFromChannel(actChannel);\r
+ if ((nLane == ELane.HH) && // 今回演奏するのがHC or HO\r
+ (index == 0 || (index == 7 &&\r
+ this.e最後に再生したHHのチャンネル番号 != EChannel.HiHatOpen &&\r
+ this.e最後に再生したHHのチャンネル番号 != EChannel.HiHatOpen_Hidden))\r
+ // HCを演奏するか、またはHO演奏&以前HO演奏でない&以前不可視HO演奏でない\r
)\r
// #24772 2011.4.4 yyagi\r
// == HH mute condition == \r
// HO Yes No\r
{\r
// #23921 2011.1.4 yyagi: 2種類以上のオープンハイハットが発音済みだと、最後のHHOしか消せない問題に対応。\r
-#if TEST_NOTEOFFMODE // 2011.1.1 yyagi test\r
- if (CDTXMania.app.DTX.b演奏で直前の音を消音する.HH)\r
- {\r
-#endif\r
- for (int i = 0; i < this.L最後に再生したHHの実WAV番号.Count; i++) // #23921 2011.1.4 yyagi\r
+ for (int i = 0; i < this.L最後に再生したHHの実WAV番号.Count; i++) // #23921 2011.1.4 yyagi\r
{\r
- // CDTXMania.app.DTX.tWavの再生停止(this.L最後に再生したHHの実WAV番号);\r
- CDTXMania.app.DTX.tWavの再生停止(this.L最後に再生したHHの実WAV番号[i]); // #23921 yyagi ストック分全て消音する\r
+ CDTXMania.Instance.DTX.tWavの再生停止(this.L最後に再生したHHの実WAV番号[i]); // #23921 yyagi ストック分全て消音する\r
}\r
this.L最後に再生したHHの実WAV番号.Clear();\r
-#if TEST_NOTEOFFMODE // 2011.1.1 yyagi test\r
- }\r
-#endif\r
- //this.n最後に再生したHHの実WAV番号 = pChip.n整数値_内部番号;\r
this.e最後に再生したHHのチャンネル番号 = pChip.eチャンネル番号;\r
}\r
-#if TEST_NOTEOFFMODE // 2011.1.4 yyagi test\r
- if (CDTXMania.app.DTX.b演奏で直前の音を消音する.HH)\r
+ if (index == 0 || index == 7)\r
{\r
-#endif\r
- if (index == 0 || index == 7 || index == 0x20 || index == 0x27) // #23921 HOまたは不可視HO演奏時はそのチップ番号をストックしておく\r
- { // #24772 HC, 不可視HCも消音キューに追加\r
- if (this.L最後に再生したHHの実WAV番号.Count >= 16) // #23921 ただしストック数が16以上になるようなら、頭の1個を削って常に16未満に抑える\r
- { // (ストックが増えてList<>のrealloc()が発生するのを予防する)\r
+ // #23921 HOまたは不可視HO演奏時はそのチップ番号をストックしておく\r
+ // #24772 HC, 不可視HCも消音キューに追加\r
+ if (this.L最後に再生したHHの実WAV番号.Count >= 16)\r
+ {\r
+ // #23921 ただしストック数が16以上になるようなら、頭の1個を削って常に16未満に抑える\r
+ // (ストックが増えてList<>のrealloc()が発生するのを予防する)\r
this.L最後に再生したHHの実WAV番号.RemoveAt(0);\r
}\r
- if (!this.L最後に再生したHHの実WAV番号.Contains(pChip.n整数値_内部番号)) // チップ音がまだストックされてなければ\r
+ if (!this.L最後に再生したHHの実WAV番号.Contains(pChip.n整数値_内部番号))\r
{\r
- this.L最後に再生したHHの実WAV番号.Add(pChip.n整数値_内部番号); // ストックする\r
+ // チップ音がまだストックされてなければストックする \r
+ this.L最後に再生したHHの実WAV番号.Add(pChip.n整数値_内部番号);\r
}\r
}\r
-#if TEST_NOTEOFFMODE // 2011.1.4 yyagi test\r
- }\r
-#endif\r
if (overwrite)\r
{\r
- CDTXMania.app.DTX.tWavの再生停止(this.n最後に再生した実WAV番号[index]);\r
+\r
+ CDTXMania.Instance.DTX.tWavの再生停止(this.n最後に再生した実WAV番号[EnumConverter.PadFromChannel(actChannel)]);\r
}\r
- CDTXMania.app.DTX.tチップの再生(pChip, n再生開始システム時刻ms, nLane, n音量, bモニタ);\r
- this.n最後に再生した実WAV番号[nLane] = pChip.n整数値_内部番号; // nLaneでなくindexにすると、LC(1A-11=09)とギター(enumで09)がかぶってLC音が消されるので注意\r
+ CDTXMania.Instance.DTX.tチップの再生(pChip, n再生開始システム時刻ms, n音量, bモニタ);\r
+ this.n最後に再生した実WAV番号[EnumConverter.PadFromLane(nLane)] = pChip.n整数値_内部番号;\r
+ // nLaneでなくindexにすると、LC(1A-11=09)とギター(enumで09)がかぶってLC音が消されるので注意\r
return;\r
}\r
- #endregion\r
- case E楽器パート.GUITAR:\r
+ #endregion\r
+ case EPart.Guitar:\r
#region [ GUITAR ]\r
-#if TEST_NOTEOFFMODE // 2011.1.1 yyagi test\r
- if (CDTXMania.app.DTX.b演奏で直前の音を消音する.Guitar) {\r
-#endif\r
- CDTXMania.app.DTX.tWavの再生停止(this.n最後に再生した実WAV番号.Guitar);\r
-#if TEST_NOTEOFFMODE\r
- }\r
-#endif\r
- CDTXMania.app.DTX.tチップの再生(pChip, n再生開始システム時刻ms, (int)Eレーン.Guitar, n音量, bモニタ, b音程をずらして再生);\r
- this.n最後に再生した実WAV番号.Guitar = pChip.n整数値_内部番号;\r
+ CDTXMania.Instance.DTX.tWavの再生停止(this.n最後に再生した実WAV番号.GtPick);\r
+ CDTXMania.Instance.DTX.tチップの再生(pChip, n再生開始システム時刻ms, n音量, bモニタ, b音程をずらして再生);\r
+ this.n最後に再生した実WAV番号.GtPick = pChip.n整数値_内部番号;\r
return;\r
- #endregion\r
- case E楽器パート.BASS:\r
+ #endregion\r
+ case EPart.Bass:\r
#region [ BASS ]\r
-#if TEST_NOTEOFFMODE\r
- if (CDTXMania.app.DTX.b演奏で直前の音を消音する.Bass) {\r
-#endif\r
- CDTXMania.app.DTX.tWavの再生停止(this.n最後に再生した実WAV番号.Bass);\r
-#if TEST_NOTEOFFMODE\r
- }\r
-#endif\r
- CDTXMania.app.DTX.tチップの再生(pChip, n再生開始システム時刻ms, (int)Eレーン.Bass, n音量, bモニタ, b音程をずらして再生);\r
- this.n最後に再生した実WAV番号.Bass = pChip.n整数値_内部番号;\r
+ CDTXMania.Instance.DTX.tWavの再生停止(this.n最後に再生した実WAV番号.BsPick);\r
+ CDTXMania.Instance.DTX.tチップの再生(pChip, n再生開始システム時刻ms, n音量, bモニタ, b音程をずらして再生);\r
+ this.n最後に再生した実WAV番号.BsPick = pChip.n整数値_内部番号;\r
return;\r
- #endregion\r
+ #endregion\r
\r
default:\r
break;\r
}\r
}\r
}\r
- protected void tステータスパネルの選択()\r
- {\r
- if (CDTXMania.app.bコンパクトモード)\r
- {\r
- this.actStatusPanels.tラベル名からステータスパネルを決定する(null);\r
- }\r
- else if (CDTXMania.app.stage選曲.r確定された曲 != null)\r
- {\r
- this.actStatusPanels.tラベル名からステータスパネルを決定する(CDTXMania.app.stage選曲.r確定された曲.ar難易度ラベル[CDTXMania.app.stage選曲.n確定された曲の難易度]);\r
- }\r
- }\r
- protected E判定 tチップのヒット処理(long nHitTime, CChip pChip)\r
- {\r
- return tチップのヒット処理(nHitTime, pChip, true);\r
- }\r
- protected abstract E判定 tチップのヒット処理(long nHitTime, CChip pChip, bool bCorrectLane);\r
- protected E判定 tチップのヒット処理(long nHitTime, CChip pChip, E楽器パート screenmode) // E楽器パート screenmode\r
- {\r
- return tチップのヒット処理(nHitTime, pChip, screenmode, true);\r
- }\r
- protected E判定 tチップのヒット処理(long nHitTime, CChip pChip, E楽器パート screenmode, bool bCorrectLane)\r
+\r
+ protected EJudge tチップのヒット処理(long nHitTime, CChip pChip, bool bCorrectLane = true)\r
{\r
pChip.bHit = true;\r
- #region [メソッド化する前の記述(注釈化)]\r
- // bool bPChipIsAutoPlay = false;\r
- // bool bGtBsR = ( ( pChip.nチャンネル番号 & 4 ) > 0 );\r
- // bool bGtBsG = ( ( pChip.nチャンネル番号 & 2 ) > 0 );\r
- // bool bGtBsB = ( ( pChip.nチャンネル番号 & 1 ) > 0 );\r
- // bool bGtBsW = ( ( pChip.nチャンネル番号 & 0x0F ) == 0x08 );\r
- // bool bGtBsO = ( ( pChip.nチャンネル番号 & 0x0F ) == 0x00 );\r
- // if ( pChip.e楽器パート == E楽器パート.DRUMS )\r
- // {\r
- // if ( bIsAutoPlay[ this.nチャンネル0Atoレーン07[ pChip.nチャンネル番号 - 0x11 ] ] )\r
- // {\r
- // bPChipIsAutoPlay = true;\r
- // }\r
- // }\r
- // else if ( pChip.e楽器パート == E楽器パート.GUITAR )\r
- // {\r
- ////Trace.TraceInformation( "chip:{0}{1}{2} ", bGtBsR, bGtBsG, bGtBsB );\r
- ////Trace.TraceInformation( "auto:{0}{1}{2} ", bIsAutoPlay[ (int) Eレーン.GtR ], bIsAutoPlay[ (int) Eレーン.GtG ], bIsAutoPlay[ (int) Eレーン.GtB ]);\r
- // bPChipIsAutoPlay = true;\r
- // if ( !bIsAutoPlay[ (int) Eレーン.GtPick ] ) bPChipIsAutoPlay = false;\r
- // else\r
- // {\r
- // if ( bGtBsR && !bIsAutoPlay[ (int) Eレーン.GtR ] ) bPChipIsAutoPlay = false;\r
- // else if ( bGtBsG && !bIsAutoPlay[ (int) Eレーン.GtG ] ) bPChipIsAutoPlay = false;\r
- // else if ( bGtBsB && !bIsAutoPlay[ (int) Eレーン.GtB ] ) bPChipIsAutoPlay = false;\r
- // else if ( bGtBsW && !bIsAutoPlay[ (int) Eレーン.GtW ] ) bPChipIsAutoPlay = false;\r
- // else if ( bGtBsO &&\r
- // ( !bIsAutoPlay[ (int) Eレーン.GtR] || !bIsAutoPlay[ (int) Eレーン.GtG] || !bIsAutoPlay[ (int) Eレーン.GtB] ) )\r
- // bPChipIsAutoPlay = false;\r
- // }\r
- // }\r
- // else if ( pChip.e楽器パート == E楽器パート.BASS )\r
- // {\r
- // bPChipIsAutoPlay = true;\r
- // if ( !bIsAutoPlay[ (int) Eレーン.BsPick ] ) bPChipIsAutoPlay = false;\r
- // else\r
- // {\r
- // if ( bGtBsR && !bIsAutoPlay[ (int) Eレーン.BsR ] ) bPChipIsAutoPlay = false;\r
- // else if ( bGtBsG && bIsAutoPlay[ (int) Eレーン.BsG ] ) bPChipIsAutoPlay = false;\r
- // else if ( bGtBsB && bIsAutoPlay[ (int) Eレーン.BsB ] ) bPChipIsAutoPlay = false;\r
- // else if ( bGtBsW && bIsAutoPlay[ (int) Eレーン.BsW ] ) bPChipIsAutoPlay = false;\r
- // else if ( bGtBsO &&\r
- // ( !bIsAutoPlay[ (int) Eレーン.BsR ] || !bIsAutoPlay[ (int) Eレーン.BsG ] || !bIsAutoPlay[ (int) Eレーン.BsB ] ) )\r
- // bPChipIsAutoPlay = false;\r
- // }\r
- // }\r
- // else\r
- // {\r
- // this.bAUTOでないチップが1つでもバーを通過した = true;\r
- // }\r
- ////Trace.TraceInformation( "ch={0:x2}, flag={1}", pChip.nチャンネル番号, bPChipIsAutoPlay.ToString() );\r
- #endregion\r
- if (pChip.e楽器パート != E楽器パート.UNKNOWN)\r
+ if (pChip.e楽器パート != EPart.Unknown)\r
{\r
cInvisibleChip.StartSemiInvisible(pChip.e楽器パート);\r
}\r
- bool bPChipIsAutoPlay = pChip.bAssignAutoPlayState(bIsAutoPlay); // 2011.6.10 yyagi\r
- E判定 eJudgeResult = E判定.Auto;\r
+ bool bPChipIsAutoPlay = pChip.bAssignAutoPlayState();// 2011.6.10 yyagi\r
+ EJudge eJudgeResult = EJudge.Auto;\r
\r
- // #35411 2015.08.20 chnmr0 modified (begin)\r
- bool bIsPerfectGhost = CDTXMania.app.ConfigIni.eAutoGhost[(int)pChip.e楽器パート] == EAutoGhostData.PERFECT ||\r
- CDTXMania.app.DTX.listAutoGhostLag[(int)pChip.e楽器パート] == null;\r
- int nInputAdjustTime = bPChipIsAutoPlay && bIsPerfectGhost ? 0 : this.nInputAdjustTimeMs[(int)pChip.e楽器パート];\r
- eJudgeResult = (bCorrectLane) ? this.e指定時刻からChipのJUDGEを返す(nHitTime, pChip, nInputAdjustTime) : E判定.Miss;\r
+ // ゴースト処理 #35411 2015.08.20 chnmr0\r
+ bool bIsPerfectGhost = CDTXMania.Instance.ConfigIni.eAutoGhost[pChip.e楽器パート] == EAutoGhostData.Perfect ||\r
+ CDTXMania.Instance.DTX.listAutoGhostLag[pChip.e楽器パート] == null;\r
+ int nInputAdjustTime = bPChipIsAutoPlay && bIsPerfectGhost ? 0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[pChip.e楽器パート];\r
+ eJudgeResult = (bCorrectLane) ? this.e指定時刻からChipのJUDGEを返す(nHitTime, pChip, nInputAdjustTime) : EJudge.Miss;\r
\r
- if (pChip.e楽器パート != E楽器パート.UNKNOWN)\r
+ if (pChip.e楽器パート != EPart.Unknown)\r
{\r
- int nLane = -1;\r
+ ELane nLane = ELane.Max;\r
switch (pChip.e楽器パート)\r
{\r
- case E楽器パート.DRUMS:\r
- nLane = CStage演奏画面共通.nチャンネル0Atoレーン07[pChip.eチャンネル番号 - Ech定義.HiHatClose];\r
+ case EPart.Drums:\r
+ nLane = EnumConverter.LaneFromChannel(pChip.eチャンネル番号);\r
break;\r
- case E楽器パート.GUITAR:\r
- nLane = 10;\r
+ case EPart.Guitar:\r
+ nLane = ELane.GtR;\r
break;\r
- case E楽器パート.BASS:\r
- nLane = 11;\r
+ case EPart.Bass:\r
+ nLane = ELane.BsR;\r
break;\r
}\r
- this.actJudgeString.Start(nLane, bPChipIsAutoPlay && bIsPerfectGhost ? E判定.Auto : eJudgeResult, pChip.nLag);\r
+ this.actJudgeString.Start(nLane, bPChipIsAutoPlay && bIsPerfectGhost ? EJudge.Auto : eJudgeResult, pChip.nLag);\r
}\r
- // #35411 end\r
\r
- if (!bPChipIsAutoPlay && (pChip.e楽器パート != E楽器パート.UNKNOWN))\r
+ // ダメージ\r
+ if (!bPChipIsAutoPlay && (pChip.e楽器パート != EPart.Unknown))\r
{\r
- // this.t判定にあわせてゲージを増減する( screenmode, pChip.e楽器パート, eJudgeResult );\r
- actGauge.Damage(screenmode, pChip.e楽器パート, eJudgeResult);\r
+ actGauge.Damage(pChip.e楽器パート, eJudgeResult);\r
}\r
- if (eJudgeResult == E判定.Poor || eJudgeResult == E判定.Miss || eJudgeResult == E判定.Bad)\r
+\r
+ // インビジブル\r
+ if (eJudgeResult == EJudge.Poor || eJudgeResult == EJudge.Miss || eJudgeResult == EJudge.Bad)\r
{\r
cInvisibleChip.ShowChipTemporally(pChip.e楽器パート);\r
}\r
- switch (pChip.e楽器パート)\r
- {\r
- case E楽器パート.DRUMS:\r
- switch (eJudgeResult)\r
- {\r
- case E判定.Miss:\r
- case E判定.Bad:\r
- this.nヒット数_Auto含む.Drums.Miss++;\r
- if (!bPChipIsAutoPlay)\r
- {\r
- this.nヒット数_Auto含まない.Drums.Miss++;\r
- }\r
- break;\r
- default:\r
- this.nヒット数_Auto含む.Drums[(int)eJudgeResult]++;\r
- if (!bPChipIsAutoPlay)\r
- {\r
- this.nヒット数_Auto含まない.Drums[(int)eJudgeResult]++;\r
- }\r
- break;\r
- }\r
\r
- if (CDTXMania.app.ConfigIni.bドラムが全部オートプレイである || !bPChipIsAutoPlay)\r
- {\r
- switch (eJudgeResult)\r
+ // コンボ\r
+ if (pChip.e楽器パート != EPart.Unknown)\r
+ {\r
+ switch (eJudgeResult)\r
+ {\r
+ case EJudge.Miss:\r
+ case EJudge.Bad:\r
+ this.nヒット数_Auto含む[pChip.e楽器パート].Miss++;\r
+ if (!bPChipIsAutoPlay)\r
{\r
- case E判定.Perfect:\r
- case E判定.Great:\r
- case E判定.Good:\r
- this.actCombo.n現在のコンボ数.Drums++;\r
- break;\r
-\r
- default:\r
- this.actCombo.n現在のコンボ数.Drums = 0;\r
- break;\r
+ this.nヒット数_Auto含まない[pChip.e楽器パート].Miss++;\r
}\r
- }\r
- break;\r
+ break;\r
+ default:\r
+ // #24068 2011.1.10 ikanick changed (for Gt./Bs.)\r
+ // #24167 2011.1.16 yyagi changed (for Gt./Bs.)\r
+ this.nヒット数_Auto含む[pChip.e楽器パート][(int)eJudgeResult]++;\r
+ if (!bPChipIsAutoPlay)\r
+ {\r
+ this.nヒット数_Auto含まない[pChip.e楽器パート][(int)eJudgeResult]++;\r
+ }\r
+ break;\r
+ }\r
+\r
+ bool incrementCombo = false;\r
\r
- case E楽器パート.GUITAR:\r
- case E楽器パート.BASS:\r
- int indexInst = (int)pChip.e楽器パート;\r
- switch (eJudgeResult)\r
+ if (pChip.e楽器パート == EPart.Drums)\r
+ {\r
+ if (CDTXMania.Instance.ConfigIni.bIsAutoPlay(EPart.Drums) || !bPChipIsAutoPlay)\r
{\r
- case E判定.Miss:\r
- case E判定.Bad:\r
- this.nヒット数_Auto含む[indexInst].Miss++;\r
- if (!bPChipIsAutoPlay)\r
- {\r
- this.nヒット数_Auto含まない[indexInst].Miss++;\r
- }\r
- break;\r
- default: // #24068 2011.1.10 ikanick changed\r
- // #24167 2011.1.16 yyagi changed\r
- this.nヒット数_Auto含む[indexInst][(int)eJudgeResult]++;\r
- if (!bPChipIsAutoPlay)\r
- {\r
- this.nヒット数_Auto含まない[indexInst][(int)eJudgeResult]++;\r
- }\r
- break;\r
+ // Dr. : 演奏したレーンだけコンボを増やす\r
+ incrementCombo = true;\r
}\r
- switch (eJudgeResult)\r
- {\r
- case E判定.Perfect:\r
- case E判定.Great:\r
- case E判定.Good:\r
- this.actCombo.n現在のコンボ数[indexInst]++;\r
- break;\r
+ }\r
+ else if (pChip.e楽器パート == EPart.Guitar || pChip.e楽器パート == EPart.Bass)\r
+ {\r
+ incrementCombo = true;\r
+ }\r
\r
- default:\r
- this.actCombo.n現在のコンボ数[indexInst] = 0;\r
- break;\r
- }\r
- break;\r
+ if( incrementCombo == true )\r
+ {\r
+ switch (eJudgeResult)\r
+ {\r
+ case EJudge.Perfect:\r
+ case EJudge.Great:\r
+ case EJudge.Good:\r
+ this.actCombo.dgbコンボ数[pChip.e楽器パート].IncrementCombo();\r
+ break;\r
\r
- default:\r
- break;\r
+ default:\r
+ this.actCombo.dgbコンボ数[pChip.e楽器パート].ResetCombo();\r
+ break;\r
+ }\r
+ }\r
}\r
- if ((!bPChipIsAutoPlay && (pChip.e楽器パート != E楽器パート.UNKNOWN)) && (eJudgeResult != E判定.Miss) && (eJudgeResult != E判定.Bad))\r
+\r
+ // スコア\r
+ if ((!bPChipIsAutoPlay && (pChip.e楽器パート != EPart.Unknown)) && (eJudgeResult != EJudge.Miss) && (eJudgeResult != EJudge.Bad))\r
{\r
- int nCombos = this.actCombo.n現在のコンボ数[(int)pChip.e楽器パート];\r
+ int nCombos = this.actCombo.dgbコンボ数[pChip.e楽器パート].n現在値;\r
long nScoreDelta = 0;\r
long[] nComboScoreDelta = new long[] { 350L, 200L, 50L, 0L };\r
- if ((nCombos <= 500) || (eJudgeResult == E判定.Good))\r
+ if ((nCombos <= 500) || (eJudgeResult == EJudge.Good))\r
{\r
nScoreDelta = nComboScoreDelta[(int)eJudgeResult] * nCombos;\r
}\r
- else if ((eJudgeResult == E判定.Perfect) || (eJudgeResult == E判定.Great))\r
+ else if ((eJudgeResult == EJudge.Perfect) || (eJudgeResult == EJudge.Great))\r
{\r
nScoreDelta = nComboScoreDelta[(int)eJudgeResult] * 500L;\r
}\r
- this.actScore.Add(pChip.e楽器パート, bIsAutoPlay, nScoreDelta);\r
+ this.actScore.Add(pChip.e楽器パート, nScoreDelta);\r
+ }\r
+\r
+ // グラフ\r
+ if (pChip.e楽器パート != EPart.Unknown)\r
+ {\r
+ EPart inst = pChip.e楽器パート;\r
+ // #24074 2011.01.23 add ikanick\r
+ this.actGraph.dbCurrent[inst] =\r
+ CScoreIni.t演奏型スキルを計算して返す(\r
+ CDTXMania.Instance.DTX.n可視チップ数[inst],\r
+ this.nヒット数_Auto含まない[inst].Perfect,\r
+ this.nヒット数_Auto含まない[inst].Great,\r
+ this.nヒット数_Auto含まない[inst].Good,\r
+ this.nヒット数_Auto含まない[inst].Poor,\r
+ this.nヒット数_Auto含まない[inst].Miss,\r
+ inst, true);\r
+\r
+ // #35411 2015.09.07 add chnmr0\r
+ if (\r
+ CDTXMania.Instance.DTX.listTargetGhsotLag[inst] != null &&\r
+ CDTXMania.Instance.ConfigIni.eTargetGhost[inst] == ETargetGhostData.Online &&\r
+ CDTXMania.Instance.DTX.n可視チップ数[inst] > 0)\r
+ {\r
+ // Online Stats の計算式\r
+ this.actGraph.dbTarget[inst] = 100 *\r
+ (this.nヒット数_Auto含まない[inst].Perfect * 17 +\r
+ this.nヒット数_Auto含まない[inst].Great * 7 +\r
+ this.actCombo.dgbコンボ数[inst].n最高値 * 3) /\r
+ (20.0 * CDTXMania.Instance.DTX.n可視チップ数[inst]);\r
+ }\r
}\r
return eJudgeResult;\r
}\r
- protected abstract void tチップのヒット処理_BadならびにTight時のMiss(E楽器パート part);\r
- protected abstract void tチップのヒット処理_BadならびにTight時のMiss(E楽器パート part, int nLane);\r
- protected void tチップのヒット処理_BadならびにTight時のMiss(E楽器パート part, E楽器パート screenmode)\r
- {\r
- this.tチップのヒット処理_BadならびにTight時のMiss(part, 0, screenmode);\r
- }\r
- protected void tチップのヒット処理_BadならびにTight時のMiss(E楽器パート part, int nLane, E楽器パート screenmode)\r
+\r
+ private void tチップのヒット処理_BadならびにTight時のMiss(EPart part, ELane nLane = ELane.LC)\r
{\r
cInvisibleChip.StartSemiInvisible(part);\r
cInvisibleChip.ShowChipTemporally(part);\r
- //this.t判定にあわせてゲージを増減する( screenmode, part, E判定.Miss );\r
- actGauge.Damage(screenmode, part, E判定.Miss);\r
+ actGauge.Damage(part, EJudge.Miss);\r
switch (part)\r
{\r
- case E楽器パート.DRUMS:\r
- if ((nLane >= 0) && (nLane <= 7))\r
- {\r
- this.actJudgeString.Start(nLane, bIsAutoPlay[nLane] ? E判定.Auto : E判定.Miss, 999);\r
- }\r
- this.actCombo.n現在のコンボ数.Drums = 0;\r
+ case EPart.Drums:\r
+ this.actJudgeString.Start(nLane, CDTXMania.Instance.ConfigIni.bAutoPlay[EnumConverter.PadFromLane(nLane)] ?\r
+ EJudge.Auto : EJudge.Miss, 999);\r
+ this.actCombo.dgbコンボ数.Drums.ResetCombo();\r
return;\r
\r
- case E楽器パート.GUITAR:\r
- this.actJudgeString.Start(10, E判定.Bad, 999);\r
- this.actCombo.n現在のコンボ数.Guitar = 0;\r
+ case EPart.Guitar:\r
+ this.actJudgeString.Start(ELane.GtR, EJudge.Bad, 999);\r
+ this.actCombo.dgbコンボ数.Guitar.ResetCombo();\r
return;\r
\r
- case E楽器パート.BASS:\r
- this.actJudgeString.Start(11, E判定.Bad, 999);\r
- this.actCombo.n現在のコンボ数.Bass = 0;\r
+ case EPart.Bass:\r
+ this.actJudgeString.Start(ELane.BsR, EJudge.Bad, 999);\r
+ this.actCombo.dgbコンボ数.Bass.ResetCombo();\r
break;\r
\r
default:\r
}\r
}\r
\r
- protected CChip r指定時刻に一番近い未ヒットChip(long nTime, Ech定義 eChannelFlag, int nInputAdjustTime)\r
- {\r
- return this.r指定時刻に一番近い未ヒットChip(nTime, eChannelFlag, nInputAdjustTime, 0);\r
- }\r
- protected CChip r指定時刻に一番近い未ヒットChip(long nTime, Ech定義 eChannel, int nInputAdjustTime, int n検索範囲時間ms)\r
+ /// <summary>\r
+ /// 指定時刻に一番近いまだヒットしていないチップを返す。\r
+ /// </summary>\r
+ /// <param name="nTime">指定時刻</param>\r
+ /// <param name="search">検索するチャネル。Gt.WailingSound/Bs.WailingSoundを渡した場合、Open~RGBが検索対象になる。</param>\r
+ /// <param name="nInputAdjustTime"></param>\r
+ /// <param name="n検索範囲時間ms">指定時刻から検索する範囲ms</param>\r
+ /// <returns></returns>\r
+ protected CChip r指定時刻に一番近い未ヒットChip(long nTime, EChannel search, int nInputAdjustTime, int n検索範囲時間ms = 0, HitState hs = HitState.NotHit)\r
{\r
- sw2.Start();\r
- //Trace.TraceInformation( "nTime={0}, nChannel={1:x2}, 現在のTop={2}", nTime, nChannel,CDTXMania.app.DTX.listChip[ this.n現在のトップChip ].n発声時刻ms );\r
- nTime += nInputAdjustTime;\r
+ CChip ret = null;\r
\r
- int nIndex_InitialPositionSearchingToPast;\r
- int nTimeDiff;\r
- if (this.n現在のトップChip == -1) // 演奏データとして1個もチップがない場合は\r
- {\r
- sw2.Stop();\r
- return null;\r
- }\r
- int count = listChip.Count;\r
- int nIndex_NearestChip_Future = nIndex_InitialPositionSearchingToPast = this.n現在のトップChip;\r
- if (this.n現在のトップChip >= count) // その時点で演奏すべきチップが既に全部無くなっていたら\r
- {\r
- nIndex_NearestChip_Future = nIndex_InitialPositionSearchingToPast = count - 1;\r
- }\r
- // int nIndex_NearestChip_Future = nIndex_InitialPositionSearchingToFuture;\r
- // while ( nIndex_NearestChip_Future < count ) // 未来方向への検索\r
- for (; nIndex_NearestChip_Future < count; nIndex_NearestChip_Future++)\r
+ nTime += nInputAdjustTime;\r
+ if (this.n現在のトップChip >= 0 && this.n現在のトップChip <= CDTXMania.Instance.DTX.listChip.Count)\r
{\r
- CChip chip = listChip[nIndex_NearestChip_Future];\r
- if (!chip.bHit)\r
+ int idxFuture = -1;\r
+ int idxPast = -1;\r
+ int idxPastStart = CDTXMania.Instance.DTX.listChip.Count - 1;\r
+ Func<CChip, Func<CChip, bool>, bool> Found = (chip, futureOrPast) =>\r
+ {\r
+ return futureOrPast(chip) &&\r
+ ((hs == HitState.NotHit && !chip.bHit) || (hs == HitState.Hit && chip.bHit) || (hs == HitState.DontCare)) &&\r
+ !chip.b空打ちチップである &&\r
+ (\r
+ ((search == chip.eチャンネル番号 || search + 0x20 == chip.eチャンネル番号) && chip.bDrums可視チップ_LP_LBD含まない) ||\r
+ (search == chip.eチャンネル番号 && chip.bGuitar可視チップ_Wailing含む) ||\r
+ (search == chip.eチャンネル番号 && chip.bBass可視チップ_Wailing含む) ||\r
+ (search == EChannel.Guitar_WailingSound && chip.bGuitar可視チップ) ||\r
+ (search == EChannel.Bass_WailingSound && chip.bBass可視チップ)\r
+ );\r
+ };\r
+ Func<CChip, bool> Future = (chip) => { return chip.n発声時刻ms > nTime; };\r
+ Func<CChip, bool> Past = (chip) => { return chip.n発声時刻ms <= nTime; };\r
+ Func<CChip, bool> OutOfRange = (chip) => { return n検索範囲時間ms > 0 && Math.Abs(nTime - chip.n発声時刻ms) > n検索範囲時間ms; };\r
+\r
+ // // 未来方向への検索\r
+ for (int i = this.n現在のトップChip; i < CDTXMania.Instance.DTX.listChip.Count; ++i)\r
{\r
- if (chip.b空打ちチップである)\r
+ CChip chip = CDTXMania.Instance.DTX.listChip[i];\r
+ if (Future(chip) && OutOfRange(chip))\r
{\r
- continue;\r
+ //break;\r
}\r
- if ((Ech定義.HiHatClose <= eChannel) && (eChannel <= Ech定義.LeftCymbal))\r
+ if (Found(chip, Future))\r
{\r
- if ((chip.eチャンネル番号 == eChannel) || (chip.eチャンネル番号 == (eChannel + 0x20)))\r
- {\r
- if (chip.n発声時刻ms > nTime)\r
- {\r
- break;\r
- }\r
- nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
- }\r
- continue;\r
+ idxFuture = i;\r
+ idxPastStart = i;\r
+ break;\r
}\r
- else if ((((eChannel == Ech定義.Guitar_WailingSound) && (chip.e楽器パート == E楽器パート.GUITAR)) ||\r
- (((Ech定義.Guitar_Open <= eChannel) && (eChannel <= Ech定義.Guitar_Wailing)) && (chip.eチャンネル番号 == eChannel))))\r
+ }\r
+\r
+ // 過去方向への検索\r
+ for (int i = idxPastStart; i >= 0; i--)\r
+ {\r
+ CChip chip = CDTXMania.Instance.DTX.listChip[i];\r
+ if (Past(chip) && OutOfRange(chip))\r
{\r
- if (chip.n発声時刻ms > nTime)\r
- {\r
- break;\r
- }\r
- nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
+ //break;\r
}\r
- else if ((((eChannel == Ech定義.Bass_WailingSound) && (chip.e楽器パート == E楽器パート.BASS)) ||\r
- (((Ech定義.Bass_Open <= eChannel) && (eChannel <= Ech定義.Bass_Wailing)) && (chip.eチャンネル番号 == eChannel))))\r
+ if (Found(chip, Past))\r
{\r
- if (chip.n発声時刻ms > nTime)\r
- {\r
- break;\r
- }\r
- nIndex_InitialPositionSearchingToPast = nIndex_NearestChip_Future;\r
+ idxPast = i;\r
+ break;\r
}\r
}\r
- // nIndex_NearestChip_Future++;\r
- }\r
- int nIndex_NearestChip_Past = nIndex_InitialPositionSearchingToPast;\r
- // while ( nIndex_NearestChip_Past >= 0 ) // 過去方向への検索\r
- for (; nIndex_NearestChip_Past >= 0; nIndex_NearestChip_Past--)\r
- {\r
- CChip chip = listChip[nIndex_NearestChip_Past];\r
- if (chip.b空打ちチップである)\r
+\r
+ if (idxFuture < 0 && idxPast < 0)\r
{\r
- continue;\r
+ // 検索対象が過去未来どちらにも見つからなかった\r
}\r
- if ((!chip.bHit) &&\r
- (\r
- ((eChannel >= Ech定義.HiHatClose) && (eChannel <= Ech定義.LeftCymbal) &&\r
- ((chip.eチャンネル番号 == eChannel) || (chip.eチャンネル番号 == (eChannel + 0x20)))\r
- )\r
- ||\r
- (\r
- ((eChannel == Ech定義.Guitar_WailingSound) && (chip.e楽器パート == E楽器パート.GUITAR)) ||\r
- (((eChannel >= Ech定義.Guitar_Open) && (eChannel <= Ech定義.Guitar_Wailing)) && (chip.eチャンネル番号 == eChannel))\r
- )\r
- ||\r
- (\r
- ((eChannel == Ech定義.Bass_WailingSound) && (chip.e楽器パート == E楽器パート.BASS)) ||\r
- (((eChannel >= Ech定義.Bass_Open) && (eChannel <= Ech定義.Bass_Wailing)) && (chip.eチャンネル番号 == eChannel))\r
- )\r
- )\r
- )\r
+ else if (idxPast >= 0)\r
{\r
- break;\r
+ // 過去方向には見つかった\r
+ ret = CDTXMania.Instance.DTX.listChip[idxPast];\r
}\r
- // nIndex_NearestChip_Past--;\r
- }\r
- if ((nIndex_NearestChip_Future >= count) && (nIndex_NearestChip_Past < 0)) // 検索対象が過去未来どちらにも見つからなかった場合\r
- {\r
- sw2.Stop();\r
- return null;\r
- }\r
- CChip nearestChip; // = null; // 以下のifブロックのいずれかで必ずnearestChipには非nullが代入されるので、null初期化を削除\r
- if (nIndex_NearestChip_Future >= count) // 検索対象が未来方向には見つからなかった(しかし過去方向には見つかった)場合\r
- {\r
- nearestChip = listChip[nIndex_NearestChip_Past];\r
- // nTimeDiff = Math.Abs( (int) ( nTime - nearestChip.n発声時刻ms ) );\r
- }\r
- else if (nIndex_NearestChip_Past < 0) // 検索対象が過去方向には見つからなかった(しかし未来方向には見つかった)場合\r
- {\r
- nearestChip = listChip[nIndex_NearestChip_Future];\r
- // nTimeDiff = Math.Abs( (int) ( nTime - nearestChip.n発声時刻ms ) );\r
- }\r
- else\r
- {\r
- int nTimeDiff_Future = Math.Abs((int)(nTime - listChip[nIndex_NearestChip_Future].n発声時刻ms));\r
- int nTimeDiff_Past = Math.Abs((int)(nTime - listChip[nIndex_NearestChip_Past].n発声時刻ms));\r
- if (nTimeDiff_Future < nTimeDiff_Past)\r
+ else if (idxFuture >= 0)\r
{\r
- nearestChip = listChip[nIndex_NearestChip_Future];\r
- // nTimeDiff = Math.Abs( (int) ( nTime - nearestChip.n発声時刻ms ) );\r
+ // 未来方向には見つかった\r
+ ret = CDTXMania.Instance.DTX.listChip[idxFuture];\r
}\r
else\r
{\r
- nearestChip = listChip[nIndex_NearestChip_Past];\r
- // nTimeDiff = Math.Abs( (int) ( nTime - nearestChip.n発声時刻ms ) );\r
+ // どちらにも見つかった\r
+ long nTimeDiff_Future = Math.Abs(nTime - CDTXMania.Instance.DTX.listChip[idxFuture].n発声時刻ms);\r
+ long nTimeDiff_Past = Math.Abs(nTime - CDTXMania.Instance.DTX.listChip[idxPast].n発声時刻ms);\r
+ if (nTimeDiff_Future < nTimeDiff_Past)\r
+ {\r
+ ret = CDTXMania.Instance.DTX.listChip[idxFuture];\r
+ }\r
+ else\r
+ {\r
+ ret = CDTXMania.Instance.DTX.listChip[idxPast];\r
+ }\r
+ }\r
+\r
+ if (ret != null)\r
+ {\r
+ if (OutOfRange(ret))\r
+ {\r
+ // チップは見つかったが、検索範囲時間外だった場合\r
+ ret = null;\r
+ }\r
}\r
}\r
- nTimeDiff = Math.Abs((int)(nTime - nearestChip.n発声時刻ms));\r
- if ((n検索範囲時間ms > 0) && (nTimeDiff > n検索範囲時間ms)) // チップは見つかったが、検索範囲時間外だった場合\r
- {\r
- sw2.Stop();\r
- return null;\r
- }\r
- sw2.Stop();\r
- return nearestChip;\r
+ return ret;\r
}\r
\r
- protected CChip r次に来る指定楽器Chipを更新して返す(E楽器パート inst)\r
+ protected CChip r次に来る指定楽器Chipを更新して返す(EPart inst)\r
{\r
- switch ((int)inst)\r
+ CChip ret = null;\r
+ int nInputAdjustTime;\r
+ if (inst == EPart.Guitar)\r
{\r
- case (int)E楽器パート.GUITAR:\r
- return r次にくるギターChipを更新して返す();\r
- case (int)E楽器パート.BASS:\r
- return r次にくるベースChipを更新して返す();\r
- default:\r
- return null;\r
+ nInputAdjustTime = CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick ?\r
+ 0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar;\r
+ ret = this.r指定時刻に一番近い未ヒットChip(CSound管理.rc演奏用タイマ.n現在時刻, EChannel.Guitar_WailingSound, nInputAdjustTime, 500);\r
+ this.r次にくるギターChip = ret;\r
}\r
- }\r
- protected CChip r次にくるギターChipを更新して返す()\r
- {\r
- int nInputAdjustTime = this.bIsAutoPlay.GtPick ? 0 : this.nInputAdjustTimeMs.Guitar;\r
- this.r次にくるギターChip = this.r指定時刻に一番近い未ヒットChip(CSound管理.rc演奏用タイマ.n現在時刻, Ech定義.Guitar_WailingSound, nInputAdjustTime, 500);\r
- return this.r次にくるギターChip;\r
- }\r
- protected CChip r次にくるベースChipを更新して返す()\r
- {\r
- int nInputAdjustTime = this.bIsAutoPlay.BsPick ? 0 : this.nInputAdjustTimeMs.Bass;\r
- this.r次にくるベースChip = this.r指定時刻に一番近い未ヒットChip(CSound管理.rc演奏用タイマ.n現在時刻, Ech定義.Bass_WailingSound, nInputAdjustTime, 500);\r
- return this.r次にくるベースChip;\r
+ else if (inst == EPart.Bass)\r
+ {\r
+ nInputAdjustTime = CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick ?\r
+ 0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass;\r
+ ret = this.r指定時刻に一番近い未ヒットChip(CSound管理.rc演奏用タイマ.n現在時刻, EChannel.Bass_WailingSound, nInputAdjustTime, 500);\r
+ this.r次にくるベースChip = ret;\r
+ }\r
+ return ret;\r
}\r
\r
- protected void ChangeInputAdjustTimeInPlaying(IInputDevice keyboard, int plusminus) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
+ protected void ChangeInputAdjustTimeInPlaying(IInputDevice keyboard, int plusminus) // #23580 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
{\r
- int part, offset = plusminus;\r
- if (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift)) // Guitar InputAdjustTime\r
+ EPart part;\r
+ int offset = plusminus;\r
+ if (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift)) // Guitar InputAdjustTime\r
{\r
- part = (int)E楽器パート.GUITAR;\r
+ part = EPart.Guitar;\r
}\r
- else if (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftAlt) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightAlt)) // Bass InputAdjustTime\r
+ else if (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftAlt) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightAlt)) // Bass InputAdjustTime\r
{\r
- part = (int)E楽器パート.BASS;\r
+ part = EPart.Bass;\r
}\r
- else // Drums InputAdjustTime\r
+ else\r
{\r
- part = (int)E楽器パート.DRUMS;\r
+ // Drums InputAdjustTime\r
+ part = EPart.Drums;\r
}\r
if (!keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftControl) && !keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightControl))\r
{\r
offset *= 10;\r
}\r
\r
- this.nInputAdjustTimeMs[part] += offset;\r
- if (this.nInputAdjustTimeMs[part] > 99)\r
- {\r
- this.nInputAdjustTimeMs[part] = 99;\r
- }\r
- else if (this.nInputAdjustTimeMs[part] < -99)\r
- {\r
- this.nInputAdjustTimeMs[part] = -99;\r
- }\r
- CDTXMania.app.ConfigIni.nInputAdjustTimeMs[part] = this.nInputAdjustTimeMs[part];\r
+ CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[part].Value = CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[part] + offset;\r
}\r
\r
- protected abstract void t入力処理_ドラム();\r
- protected abstract void ドラムスクロール速度アップ();\r
- protected abstract void ドラムスクロール速度ダウン();\r
- private int nStartTime_ = 0;\r
- protected void tキー入力()\r
+ private void t入力処理_ドラム()\r
{\r
- IInputDevice keyboard = CDTXMania.app.Input管理.Keyboard;\r
- if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.F1) &&\r
- (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift)))\r
- { // shift+f1 (pause)\r
- this.bPAUSE = !this.bPAUSE;\r
- if (this.bPAUSE)\r
+ for (EPad ePad = EPad.DrumsPadMin; ePad < EPad.DrumsPadMax; ePad++) // #27029 2012.1.4 from: <10 to <=10; Eパッドの要素が1つ(HP)増えたため。\r
+ // 2012.1.5 yyagi: (int)Eパッド.MAX に変更。Eパッドの要素数への依存を無くすため。\r
+ {\r
+ List<STInputEvent> listInputEvent = CDTXMania.Instance.Pad.GetEvents(ePad);\r
+\r
+ if ((listInputEvent == null) || (listInputEvent.Count == 0))\r
{\r
- nStartTime_ = (int)CSound管理.rc演奏用タイマ.n現在時刻;\r
- CSound管理.rc演奏用タイマ.t一時停止();\r
- CDTXMania.app.Timer.t一時停止();\r
- CDTXMania.app.DTX.t全チップの再生一時停止();\r
- CDTXMania.app.DTX.t全AVIの一時停止();\r
+ continue;\r
}\r
- else\r
- {\r
- CDTXMania.app.DTX.t全AVIの再生再開();\r
- //CDTXMania.app.DTX.t全チップの再生再開();\r
- #region [ PAUSE連打でのBGMずれ対策 (AVIはずれたままになるが無視・・・) ]\r
- List<CSound> pausedCSound = new List<CSound>();\r
- for (int i = this.n現在のトップChip; i >= 0; i--)\r
- {\r
- CChip pChip = CDTXMania.app.DTX.listChip[i];\r
- int nDuration = pChip.GetDuration();\r
\r
- if ((pChip.n発声時刻ms + nDuration > 0) && (pChip.n発声時刻ms <= nStartTime_) && (nStartTime_ <= pChip.n発声時刻ms + nDuration))\r
- {\r
- if (pChip.bWAVを使うチャンネルである && !pChip.b空打ちチップである) // wav系チャンネル、且つ、空打ちチップではない\r
- {\r
- CDTX.CWAV wc;\r
- bool b = CDTXMania.app.DTX.listWAV.TryGetValue(pChip.n整数値_内部番号, out wc);\r
- if (!b) continue;\r
+ this.t入力メソッド記憶(EPart.Drums);\r
\r
- if ((wc.bIsBGMSound && CDTXMania.app.ConfigIni.bBGM音を発声する) || (!wc.bIsBGMSound))\r
- {\r
- CDTXMania.app.DTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, (int)Eレーン.BGM, CDTXMania.app.DTX.nモニタを考慮した音量(E楽器パート.UNKNOWN));\r
- #region [ PAUSEする ]\r
- int j = wc.n現在再生中のサウンド番号;\r
- if (wc.rSound[j] != null)\r
- {\r
- wc.rSound[j].t再生を一時停止する();\r
- wc.rSound[j].t再生位置を変更する(nStartTime_ - pChip.n発声時刻ms);\r
- pausedCSound.Add(wc.rSound[j]);\r
- }\r
- #endregion\r
- }\r
- }\r
- }\r
- }\r
- foreach (CSound cs in pausedCSound)\r
- {\r
- cs.tサウンドを再生する();\r
- }\r
- #endregion\r
- CDTXMania.app.Timer.t再開();\r
- CSound管理.rc演奏用タイマ.t再開();\r
+ #region [ 打ち分けグループ調整 ]\r
+ //-----------------------------\r
+ EHHGroup eHHGroup = CDTXMania.Instance.ConfigIni.eHHGroup;\r
+ EFTGroup eFTGroup = CDTXMania.Instance.ConfigIni.eFTGroup;\r
+ ECYGroup eCYGroup = CDTXMania.Instance.ConfigIni.eCYGroup;\r
\r
+ if (!CDTXMania.Instance.DTX.bチップがある.Ride && (eCYGroup == ECYGroup.None))\r
+ {\r
+ eCYGroup = ECYGroup.Group;\r
}\r
- }\r
- if ((!this.bPAUSE && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED)) && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト))\r
- {\r
- this.t入力処理_ドラム();\r
- this.t入力処理_ギターベース(E楽器パート.GUITAR);\r
- this.t入力処理_ギターベース(E楽器パート.BASS);\r
- if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.UpArrow) && (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift)))\r
- { // shift (+ctrl) + UpArrow (BGMAdjust)\r
- CDTXMania.app.DTX.t各自動再生音チップの再生時刻を変更する((keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftControl) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightControl)) ? 1 : 10);\r
- CDTXMania.app.DTX.tWave再生位置自動補正();\r
- }\r
- else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.DownArrow) && (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift)))\r
- { // shift + DownArrow (BGMAdjust)\r
- CDTXMania.app.DTX.t各自動再生音チップの再生時刻を変更する((keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftControl) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightControl)) ? -1 : -10);\r
- CDTXMania.app.DTX.tWave再生位置自動補正();\r
- }\r
- else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.UpArrow))\r
- { // UpArrow(scrollspeed up)\r
- ドラムスクロール速度アップ();\r
- }\r
- else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.DownArrow))\r
- { // DownArrow (scrollspeed down)\r
- ドラムスクロール速度ダウン();\r
- }\r
- else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.Delete))\r
- { // del (debug info)\r
- CDTXMania.app.ConfigIni.b演奏情報を表示する = !CDTXMania.app.ConfigIni.b演奏情報を表示する;\r
- }\r
- else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.LeftArrow)) // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
+ if (!CDTXMania.Instance.DTX.bチップがある.HHOpen && (eHHGroup == EHHGroup.None))\r
{\r
- ChangeInputAdjustTimeInPlaying(keyboard, -1);\r
+ eHHGroup = EHHGroup.LC_HH;\r
}\r
- else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.RightArrow)) // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
+ if (!CDTXMania.Instance.DTX.bチップがある.HHOpen && (eHHGroup == EHHGroup.HO_HC))\r
{\r
- ChangeInputAdjustTimeInPlaying(keyboard, +1);\r
+ eHHGroup = EHHGroup.Group;\r
}\r
- else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.F5))\r
+ if (!CDTXMania.Instance.DTX.bチップがある.LeftCymbal && (eHHGroup == EHHGroup.None))\r
{\r
- int n描画遅延ms = CDTXMania.app.ConfigIni.nJudgeLinePosOffset.Drums;\r
- n描画遅延ms = Math.Max(n描画遅延ms - 1, -99);\r
- CDTXMania.app.ConfigIni.nJudgeLinePosOffset.Drums =\r
- CDTXMania.app.ConfigIni.nJudgeLinePosOffset.Guitar =\r
- CDTXMania.app.ConfigIni.nJudgeLinePosOffset.Bass = n描画遅延ms;\r
- this.演奏判定ライン座標.nJudgeLinePosY_delta.Drums =\r
- this.演奏判定ライン座標.nJudgeLinePosY_delta.Guitar =\r
- this.演奏判定ライン座標.nJudgeLinePosY_delta.Bass = n描画遅延ms;\r
+ eHHGroup = EHHGroup.HO_HC;\r
}\r
- else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.F6))\r
+ if (!CDTXMania.Instance.DTX.bチップがある.LeftCymbal && (eHHGroup == EHHGroup.LC_HH))\r
{\r
- int n描画遅延ms = CDTXMania.app.ConfigIni.nJudgeLinePosOffset.Drums;\r
- n描画遅延ms = Math.Min(n描画遅延ms + 1, 99);\r
- CDTXMania.app.ConfigIni.nJudgeLinePosOffset.Drums =\r
- CDTXMania.app.ConfigIni.nJudgeLinePosOffset.Guitar =\r
- CDTXMania.app.ConfigIni.nJudgeLinePosOffset.Bass = n描画遅延ms;\r
- this.演奏判定ライン座標.nJudgeLinePosY_delta.Drums =\r
- this.演奏判定ライン座標.nJudgeLinePosY_delta.Guitar =\r
- this.演奏判定ライン座標.nJudgeLinePosY_delta.Bass = n描画遅延ms;\r
- }\r
- else if ((base.eフェーズID == CStage.Eフェーズ.共通_通常状態) && (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.Escape) || CDTXMania.app.Pad.b押されたGB(Eパッド.FT)))\r
- { // escape (exit)\r
- this.actFO.tフェードアウト開始();\r
- base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
- this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.演奏中断;\r
+ eHHGroup = EHHGroup.Group;\r
}\r
- }\r
- }\r
+ //-----------------------------\r
+ #endregion\r
\r
- protected void t入力メソッド記憶(E楽器パート part)\r
- {\r
- if (CDTXMania.app.Pad.st検知したデバイス.Keyboard)\r
- {\r
- this.b演奏にキーボードを使った[(int)part] = true;\r
- }\r
- if (CDTXMania.app.Pad.st検知したデバイス.Joypad)\r
- {\r
- this.b演奏にジョイパッドを使った[(int)part] = true;\r
- }\r
- if (CDTXMania.app.Pad.st検知したデバイス.MIDIIN)\r
- {\r
- this.b演奏にMIDI入力を使った[(int)part] = true;\r
- }\r
- if (CDTXMania.app.Pad.st検知したデバイス.Mouse)\r
- {\r
- this.b演奏にマウスを使った[(int)part] = true;\r
- }\r
- }\r
- protected abstract void t進行描画_AVI();\r
- protected void t進行描画_AVI(int x, int y)\r
- {\r
- if (((base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED) && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト)) && (!CDTXMania.app.ConfigIni.bストイックモード && CDTXMania.app.ConfigIni.bAVI有効))\r
- {\r
- this.actAVI.t進行描画(x, y, 556, 710);\r
- }\r
- }\r
- protected abstract void t進行描画_BGA();\r
- protected void t進行描画_BGA(int x, int y)\r
- {\r
- if (((base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED) && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト)) && (!CDTXMania.app.ConfigIni.bストイックモード && CDTXMania.app.ConfigIni.bBGA有効))\r
- {\r
- this.actBGA.t進行描画(x, y);\r
- }\r
- }\r
- protected abstract void t進行描画_DANGER();\r
- protected void t進行描画_MIDIBGM()\r
- {\r
- if (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED)\r
- {\r
- CStage.Eフェーズ eフェーズid1 = base.eフェーズID;\r
- }\r
- }\r
- protected void t進行描画_RGBボタン()\r
- {\r
- if (CDTXMania.app.ConfigIni.eDark != Eダークモード.FULL)\r
- {\r
- this.actRGB.t進行描画(演奏判定ライン座標);\r
+ foreach (STInputEvent inputEvent in listInputEvent)\r
+ {\r
+ if (!inputEvent.b押された)\r
+ continue;\r
+\r
+ long nTime = inputEvent.nTimeStamp - CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻;\r
+ EPad nPad09 = (ePad == EPad.HP) ? EPad.BD : ePad; // #27029 2012.1.5 yyagi\r
+ int nInputAdjustTime = CDTXMania.Instance.ConfigIni.bAutoPlay[nPad09] ? 0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums;\r
+ bool bHitted = false;\r
+\r
+ #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
}\r
}\r
- protected void t進行描画_STAGEFAILED()\r
+\r
+ private void ドラムスクロール速度アップ()\r
{\r
- if (((base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED) || (base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト)) && ((this.actStageFailed.On進行描画() != 0) && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト)))\r
+ int scrollSpeed = CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums;\r
+ CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums.Value = scrollSpeed + 1;\r
+ float f = (float)CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums / (scrollSpeed + 1);\r
+ if (scrollSpeed < CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums)\r
{\r
- this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.ステージ失敗;\r
- base.eフェーズID = CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト;\r
- this.actFO.tフェードアウト開始();\r
+ CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums.Value = ((int)(f * (CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums + 1) + 0.5));\r
}\r
}\r
- protected void t進行描画_WailingBonus()\r
+\r
+ private void ドラムスクロール速度ダウン()\r
{\r
- if ((base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED) && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト))\r
+ int scrollSpeed = CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums;\r
+ CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums.Value = (scrollSpeed - 1);\r
+ float f = (float)CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums / (scrollSpeed + 1);\r
+ if (scrollSpeed > CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums)\r
{\r
- this.actWailingBonus.On進行描画();\r
+ CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums.Value = ((int)(f * (CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums + 1) + 0.5));\r
}\r
}\r
- protected abstract void t進行描画_Wailing枠();\r
- protected void t進行描画_Wailing枠(int GtWailingFrameX, int BsWailingFrameX, int GtWailingFrameY, int BsWailingFrameY)\r
+\r
+ private int nStartTime_ = 0;\r
+\r
+ protected void tキー入力()\r
{\r
- if ((CDTXMania.app.ConfigIni.eDark != Eダークモード.FULL) && CDTXMania.app.ConfigIni.bGuitar有効)\r
- {\r
- if (this.txWailing枠 != null)\r
+ IInputDevice keyboard = CDTXMania.Instance.Input管理.Keyboard;\r
+ if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.F1) &&\r
+ (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift)))\r
+ { // shift+f1 (pause)\r
+ this.bPAUSE = !this.bPAUSE;\r
+ if (this.bPAUSE)\r
{\r
- if (CDTXMania.app.DTX.bチップがある.Guitar)\r
+ nStartTime_ = (int)CSound管理.rc演奏用タイマ.n現在時刻;\r
+ CSound管理.rc演奏用タイマ.t一時停止();\r
+ CDTXMania.Instance.Timer.t一時停止();\r
+ CDTXMania.Instance.DTX.t全チップの再生一時停止();\r
+ CDTXMania.Instance.DTX.t全AVIの一時停止();\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.Instance.DTX.t全AVIの再生再開();\r
+ // CDTXMania.Instance.DTX.t全チップの再生再開();\r
+ #region [ PAUSE連打でのBGMずれ対策 (AVIはずれたままになるが無視・・・) ]\r
+\r
+ List<CSound> pausedCSound = new List<CSound>();\r
+ for (int i = this.n現在のトップChip; i >= 0; i--)\r
{\r
- this.txWailing枠.t2D描画(CDTXMania.app.Device, GtWailingFrameX, GtWailingFrameY);\r
+ CChip pChip = CDTXMania.Instance.DTX.listChip[i];\r
+ int nDuration = pChip.GetDuration();\r
+\r
+ if ((pChip.n発声時刻ms + nDuration > 0) && (pChip.n発声時刻ms <= nStartTime_) && (nStartTime_ <= pChip.n発声時刻ms + nDuration))\r
+ {\r
+ if (pChip.bWAVを使うチャンネルである && !pChip.b空打ちチップである) // wav系チャンネル、且つ、空打ちチップではない\r
+ {\r
+ CDTX.CWAV wc;\r
+ bool b = CDTXMania.Instance.DTX.listWAV.TryGetValue(pChip.n整数値_内部番号, out wc);\r
+ if (!b) continue;\r
+\r
+ if ((wc.bIsBGMSound && CDTXMania.Instance.ConfigIni.bBGMPlay) || (!wc.bIsBGMSound))\r
+ {\r
+ CDTXMania.Instance.DTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Unknown));\r
+ #region [ PAUSEする ]\r
+ int j = wc.n現在再生中のサウンド番号;\r
+ if (wc.rSound[j] != null)\r
+ {\r
+ wc.rSound[j].t再生を一時停止する();\r
+ wc.rSound[j].t再生位置を変更する(nStartTime_ - pChip.n発声時刻ms);\r
+ pausedCSound.Add(wc.rSound[j]);\r
+ }\r
+ #endregion\r
+ }\r
+ }\r
+ }\r
}\r
- if (CDTXMania.app.DTX.bチップがある.Bass)\r
+ foreach (CSound cs in pausedCSound)\r
{\r
- this.txWailing枠.t2D描画(CDTXMania.app.Device, BsWailingFrameX, BsWailingFrameY);\r
+ cs.tサウンドを再生する();\r
}\r
+\r
+ #endregion\r
+ CDTXMania.Instance.Timer.t再開();\r
+ CSound管理.rc演奏用タイマ.t再開();\r
}\r
}\r
- }\r
-\r
-\r
- protected void t進行描画_チップファイアGB()\r
- {\r
- this.actChipFireGB.On進行描画();\r
- }\r
- protected abstract void t進行描画_パネル文字列();\r
- protected void t進行描画_パネル文字列(int x, int y)\r
- {\r
- if ((base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED) && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト))\r
+ if ((!this.bPAUSE && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED)) && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト))\r
{\r
- this.actPanel.t進行描画(x, y);\r
+ if (CDTXMania.Instance.ConfigIni.bDrums有効)\r
+ {\r
+ this.t入力処理_ドラム();\r
+ }\r
+ if (CDTXMania.Instance.ConfigIni.bGuitar有効)\r
+ {\r
+ this.t入力処理_ギターベース(EPart.Guitar);\r
+ this.t入力処理_ギターベース(EPart.Bass);\r
+ }\r
+\r
+ if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.UpArrow) && (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift)))\r
+ { // shift (+ctrl) + UpArrow (BGMAdjust)\r
+ CDTXMania.Instance.DTX.t各自動再生音チップの再生時刻を変更する((keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftControl) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightControl)) ? 1 : 10);\r
+ CDTXMania.Instance.DTX.tWave再生位置自動補正();\r
+ }\r
+ else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.DownArrow) && (keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightShift) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftShift)))\r
+ { // shift + DownArrow (BGMAdjust)\r
+ CDTXMania.Instance.DTX.t各自動再生音チップの再生時刻を変更する((keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.LeftControl) || keyboard.bキーが押されている((int)SlimDX.DirectInput.Key.RightControl)) ? -1 : -10);\r
+ CDTXMania.Instance.DTX.tWave再生位置自動補正();\r
+ }\r
+ else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.UpArrow))\r
+ { // UpArrow(scrollspeed up)\r
+ ドラムスクロール速度アップ();\r
+ }\r
+ else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.DownArrow))\r
+ { // DownArrow (scrollspeed down)\r
+ ドラムスクロール速度ダウン();\r
+ }\r
+ else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.Delete))\r
+ { // del (debug info)\r
+ CDTXMania.Instance.ConfigIni.bDebugInfo.Value = !CDTXMania.Instance.ConfigIni.bDebugInfo;\r
+ }\r
+ else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.LeftArrow)) // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
+ {\r
+ ChangeInputAdjustTimeInPlaying(keyboard, -1);\r
+ }\r
+ else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.RightArrow)) // #24243 2011.1.16 yyagi UI for InputAdjustTime in playing screen.\r
+ {\r
+ ChangeInputAdjustTimeInPlaying(keyboard, +1);\r
+ }\r
+ else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.F5))\r
+ {\r
+ int nVal = CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums - 1;\r
+ CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums.Value =\r
+ CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Guitar.Value =\r
+ CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Bass.Value = nVal;\r
+ }\r
+ else if (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.F6))\r
+ {\r
+ int nVal = CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums + 1;\r
+ CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Drums.Value =\r
+ CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Guitar.Value =\r
+ CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset.Bass.Value = nVal;\r
+ }\r
+ else if ((base.eフェーズID == CStage.Eフェーズ.共通_通常状態) &&\r
+ (keyboard.bキーが押された((int)SlimDX.DirectInput.Key.Escape) ||\r
+ CDTXMania.Instance.Pad.bCancelPadIsPressedGB()))\r
+ {\r
+ // escape (exit)\r
+ this.actFO.tフェードアウト開始();\r
+ base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
+ this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.演奏中断;\r
+ }\r
}\r
}\r
- protected void tパネル文字列の設定()\r
- {\r
- this.actPanel.SetPanelString(string.IsNullOrEmpty(CDTXMania.app.DTX.PANEL) ? CDTXMania.app.DTX.TITLE : CDTXMania.app.DTX.PANEL);\r
- }\r
-\r
\r
- protected void t進行描画_ゲージ()\r
+ protected void t入力メソッド記憶(EPart part)\r
{\r
- if (((CDTXMania.app.ConfigIni.eDark != Eダークモード.HALF) && (CDTXMania.app.ConfigIni.eDark != Eダークモード.FULL)) && ((base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED) && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト)))\r
+ if (CDTXMania.Instance.Pad.st検知したデバイス.Keyboard)\r
{\r
- this.actGauge.On進行描画();\r
+ this.b演奏にキーボードを使った[part] = true;\r
+ }\r
+ if (CDTXMania.Instance.Pad.st検知したデバイス.Joypad)\r
+ {\r
+ this.b演奏にジョイパッドを使った[part] = true;\r
+ }\r
+ if (CDTXMania.Instance.Pad.st検知したデバイス.MIDIIN)\r
+ {\r
+ this.b演奏にMIDI入力を使った[part] = true;\r
+ }\r
+ if (CDTXMania.Instance.Pad.st検知したデバイス.Mouse)\r
+ {\r
+ this.b演奏にマウスを使った[part] = true;\r
}\r
}\r
- protected void t進行描画_コンボ()\r
- {\r
- this.actCombo.On進行描画();\r
- }\r
- protected void t進行描画_スコア()\r
- {\r
- this.actScore.On進行描画();\r
- }\r
- protected void t進行描画_ステータスパネル()\r
- {\r
- this.actStatusPanels.On進行描画();\r
- }\r
- protected bool t進行描画_チップ(E楽器パート ePlayMode)\r
+\r
+ /// <summary>\r
+ /// チップに関連する処理を行う。\r
+ /// </summary>\r
+ /// <returns>演奏が終了したかどうかを示す値</returns>\r
+ protected bool t進行描画_チップ()\r
{\r
if ((base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED) || (base.eフェーズID == CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト))\r
{\r
return true;\r
}\r
- if ((this.n現在のトップChip == -1) || (this.n現在のトップChip >= listChip.Count))\r
+ if ((this.n現在のトップChip == -1) || (this.n現在のトップChip >= CDTXMania.Instance.DTX.listChip.Count))\r
{\r
return true;\r
}\r
return true;\r
}\r
\r
- CDTX dTX = CDTXMania.app.DTX;\r
- CConfigIni configIni = CDTXMania.app.ConfigIni;\r
- for (int nCurrentTopChip = this.n現在のトップChip; nCurrentTopChip < dTX.listChip.Count; nCurrentTopChip++)\r
+ //CDTX dTX = CDTXMania.Instance.DTX;\r
+ //CConfigIni configIni = CDTXMania.Instance.ConfigIni;\r
+ for (int nCurrentTopChip = this.n現在のトップChip; nCurrentTopChip < CDTXMania.Instance.DTX.listChip.Count; nCurrentTopChip++)\r
{\r
- CChip pChip = dTX.listChip[nCurrentTopChip];\r
+ CChip pChip = CDTXMania.Instance.DTX.listChip[nCurrentTopChip];\r
//Debug.WriteLine( "nCurrentTopChip=" + nCurrentTopChip + ", ch=" + pChip.nチャンネル番号.ToString("x2") + ", 発音位置=" + pChip.n発声位置 + ", 発声時刻ms=" + pChip.n発声時刻ms );\r
pChip.CalcDistanceFromBar(CSound管理.rc演奏用タイマ.n現在時刻, this.act譜面スクロール速度.db現在の譜面スクロール速度);\r
if (Math.Min(Math.Min(pChip.nバーからの距離dot.Drums, pChip.nバーからの距離dot.Guitar), pChip.nバーからの距離dot.Bass) > 450 * Scale.Y)\r
{\r
break;\r
}\r
- // if ( ( ( nCurrentTopChip == this.n現在のトップChip ) && ( pChip.nバーからの距離dot.Drums < -65 ) ) && pChip.bHit )\r
// #28026 2012.4.5 yyagi; 信心ワールドエンドの曲終了後リザルトになかなか行かない問題の修正\r
-\r
- if ((dTX.listChip[this.n現在のトップChip].nバーからの距離dot.Drums < -65 * Scale.Y) && // 小節線の消失処理などに影響するため、\r
- (dTX.listChip[this.n現在のトップChip].nバーからの距離dot.Guitar < -65 * Scale.Y) && // Drumsのスクロールスピードだけには依存させない。\r
- (dTX.listChip[this.n現在のトップChip].nバーからの距離dot.Bass < -65 * Scale.Y) &&\r
- dTX.listChip[this.n現在のトップChip].bHit)\r
+ if ((CDTXMania.Instance.DTX.listChip[this.n現在のトップChip].nバーからの距離dot.Drums < -65 * Scale.Y) && // 小節線の消失処理などに影響するため、\r
+ (CDTXMania.Instance.DTX.listChip[this.n現在のトップChip].nバーからの距離dot.Guitar < -65 * Scale.Y) && // Drumsのスクロールスピードだけには依存させない。\r
+ (CDTXMania.Instance.DTX.listChip[this.n現在のトップChip].nバーからの距離dot.Bass < -65 * Scale.Y) &&\r
+ CDTXMania.Instance.DTX.listChip[this.n現在のトップChip].bHit)\r
{\r
- // nCurrentTopChip = ++this.n現在のトップChip;\r
++this.n現在のトップChip;\r
continue;\r
}\r
+ bool bPChipIsAutoPlay = pChip.bAssignAutoPlayState();\r
\r
+ int nInputAdjustTime = (bPChipIsAutoPlay || (pChip.e楽器パート == EPart.Unknown)) ? 0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[pChip.e楽器パート];\r
\r
- bool bPChipIsAutoPlay = pChip.bAssignAutoPlayState(bIsAutoPlay);\r
- \r
- int nInputAdjustTime = (bPChipIsAutoPlay || (pChip.e楽器パート == E楽器パート.UNKNOWN)) ? 0 : this.nInputAdjustTimeMs[(int)pChip.e楽器パート];\r
-\r
- int instIndex = (int)pChip.e楽器パート;\r
- if (((pChip.e楽器パート != E楽器パート.UNKNOWN) && !pChip.bHit) &&\r
- ((pChip.nバーからの距離dot[instIndex] < -40 * Scale.Y) &&\r
- (this.e指定時刻からChipのJUDGEを返す(CSound管理.rc演奏用タイマ.n現在時刻, pChip, nInputAdjustTime) == E判定.Miss)))\r
+ EPart inst = pChip.e楽器パート;\r
+ if (((pChip.e楽器パート != EPart.Unknown) && !pChip.bHit) &&\r
+ ((pChip.nバーからの距離dot[inst] < -40 * Scale.Y) &&\r
+ (this.e指定時刻からChipのJUDGEを返す(CSound管理.rc演奏用タイマ.n現在時刻, pChip, nInputAdjustTime) == EJudge.Miss)))\r
{\r
- this.tチップのヒット処理(CSound管理.rc演奏用タイマ.n現在時刻, pChip); //チップ消失(Hitせずスルーした場合)\r
+ this.tチップのヒット処理(CSound管理.rc演奏用タイマ.n現在時刻, pChip); //チップ消失(Hitせずスルーした場合)\r
}\r
- if (((pChip.e楽器パート != E楽器パート.UNKNOWN) && !pChip.bHit) &&\r
- ((pChip.nバーからの距離dot[instIndex] + this.演奏判定ライン座標.nJudgeLinePosY_delta[instIndex] < 0)))\r
+ if (((pChip.e楽器パート != EPart.Unknown) && !pChip.bHit) &&\r
+ ((pChip.nバーからの距離dot[inst] + CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset[inst] < 0)))\r
{\r
//Debug.WriteLine( "透明度=" + pChip.n透明度 );\r
- pChip.n透明度 -= 12; // チップが判定バーを越えたら、徐々に透明にする。VSyncWaitの有無で加減が変わるが・・\r
+ pChip.n透明度 -= 12; // チップが判定バーを越えたら、徐々に透明にする。VSyncWaitの有無で加減が変わるが・・\r
if (pChip.n透明度 < 0)\r
{\r
pChip.n透明度 = 0;\r
}\r
\r
// #35411 chnmr0 add (ターゲットゴースト)\r
- if (CDTXMania.app.ConfigIni.eTargetGhost[instIndex] != ETargetGhostData.NONE &&\r
- CDTXMania.app.DTX.listTargetGhsotLag[instIndex] != null &&\r
- pChip.e楽器パート != E楽器パート.UNKNOWN &&\r
- pChip.nバーからの距離dot[instIndex] < 0)\r
+ if (CDTXMania.Instance.ConfigIni.eTargetGhost[inst] != ETargetGhostData.None &&\r
+ CDTXMania.Instance.DTX.listTargetGhsotLag[inst] != null &&\r
+ pChip.e楽器パート != EPart.Unknown &&\r
+ pChip.nバーからの距離dot[inst] < 0)\r
{\r
if (!pChip.bTargetGhost判定済み)\r
{\r
pChip.bTargetGhost判定済み = true;\r
\r
int ghostLag = 128;\r
- if (0 <= pChip.n楽器パートでの出現順 && pChip.n楽器パートでの出現順 < CDTXMania.app.DTX.listTargetGhsotLag[instIndex].Count)\r
+ if (0 <= pChip.n楽器パートでの出現順 && pChip.n楽器パートでの出現順 < CDTXMania.Instance.DTX.listTargetGhsotLag[inst].Count)\r
{\r
- ghostLag = CDTXMania.app.DTX.listTargetGhsotLag[instIndex][pChip.n楽器パートでの出現順];\r
+ ghostLag = CDTXMania.Instance.DTX.listTargetGhsotLag[inst][pChip.n楽器パートでの出現順];\r
// 上位8ビットが1ならコンボが途切れている(ギターBAD空打ちでコンボ数を再現するための措置)\r
if (ghostLag > 255)\r
{\r
- this.nコンボ数_TargetGhost[instIndex] = 0;\r
+ this.nコンボ数_TargetGhost[inst] = 0;\r
}\r
ghostLag = (ghostLag & 255) - 128;\r
}\r
- else if (CDTXMania.app.ConfigIni.eTargetGhost[instIndex] == ETargetGhostData.PERFECT)\r
+ else if (CDTXMania.Instance.ConfigIni.eTargetGhost[inst] == ETargetGhostData.Perfect)\r
{\r
ghostLag = 0;\r
}\r
\r
if (ghostLag <= 127)\r
{\r
- E判定 eJudge = this.e指定時刻からChipのJUDGEを返す(pChip.n発声時刻ms + ghostLag, pChip, 0, false);\r
- this.nヒット数_TargetGhost[instIndex][(int)eJudge]++;\r
- if (eJudge == E判定.Miss || eJudge == E判定.Poor)\r
+ EJudge eJudge = this.e指定時刻からChipのJUDGEを返す(pChip.n発声時刻ms + ghostLag, pChip, 0, false);\r
+ this.nヒット数_TargetGhost[inst][(int)eJudge]++;\r
+ if (eJudge == EJudge.Miss || eJudge == EJudge.Poor)\r
{\r
- this.n最大コンボ数_TargetGhost[instIndex] = Math.Max(this.n最大コンボ数_TargetGhost[instIndex], this.nコンボ数_TargetGhost[instIndex]);\r
- this.nコンボ数_TargetGhost[instIndex] = 0;\r
+ this.n最大コンボ数_TargetGhost[inst] = Math.Max(this.n最大コンボ数_TargetGhost[inst], this.nコンボ数_TargetGhost[inst]);\r
+ this.nコンボ数_TargetGhost[inst] = 0;\r
}\r
else\r
{\r
- this.nコンボ数_TargetGhost[instIndex]++;\r
+ this.nコンボ数_TargetGhost[inst]++;\r
}\r
}\r
}\r
- }\r
-\r
-\r
-\r
- switch (pChip.eチャンネル番号)\r
- {\r
- #region [ 01: BGM ]\r
- case Ech定義.BGM: // BGM\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
- {\r
- pChip.bHit = true;\r
- if (configIni.bBGM音を発声する)\r
- {\r
- //long t = CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms;\r
- //Trace.TraceInformation( "BGM再生開始: 演奏タイマのn前回リセットしたときのシステム時刻=" + CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + ", pChip.n発生時刻ms=" + pChip.n発声時刻ms + ", 合計=" + t );\r
- dTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, (int)Eレーン.BGM, dTX.nモニタを考慮した音量(E楽器パート.UNKNOWN));\r
- }\r
- }\r
- break;\r
- #endregion\r
- #region [ 03: BPM変更 ]\r
- case Ech定義.BPM: // BPM変更\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
- {\r
- pChip.bHit = true;\r
- this.actPlayInfo.dbBPM = (pChip.n整数値 * (((double)configIni.n演奏速度) / 20.0)) + dTX.BASEBPM;\r
- }\r
- break;\r
- #endregion\r
- #region [ 04, 07, 55, 56,57, 58, 59, 60:レイヤーBGA ]\r
- case Ech定義.BGALayer1: // レイヤーBGA\r
- case Ech定義.BGALayer2:\r
- case Ech定義.BGALayer3:\r
- case Ech定義.BGALayer4:\r
- case Ech定義.BGALayer5:\r
- case Ech定義.BGALayer6:\r
- case Ech定義.BGALayer7:\r
- case Ech定義.BGALayer8:\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
- {\r
- pChip.bHit = true;\r
- if (configIni.bBGA有効)\r
- {\r
- switch (pChip.eBGA種別)\r
- {\r
- case EBGA種別.BMPTEX:\r
- if (pChip.rBMPTEX != null)\r
- {\r
- this.actBGA.Start(pChip.eチャンネル番号, null, pChip.rBMPTEX, pChip.rBMPTEX.tx画像.sz画像サイズ.Width, pChip.rBMPTEX.tx画像.sz画像サイズ.Height, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\r
- }\r
- break;\r
-\r
- case EBGA種別.BGA:\r
- if ((pChip.rBGA != null) && ((pChip.rBMP != null) || (pChip.rBMPTEX != null)))\r
- {\r
- this.actBGA.Start(pChip.eチャンネル番号, pChip.rBMP, pChip.rBMPTEX, pChip.rBGA.pt画像側右下座標.X - pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側右下座標.Y - pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt表示座標.X, pChip.rBGA.pt表示座標.Y, 0, 0, 0);\r
- }\r
- break;\r
-\r
- case EBGA種別.BGAPAN:\r
- if ((pChip.rBGAPan != null) && ((pChip.rBMP != null) || (pChip.rBMPTEX != null)))\r
- {\r
- this.actBGA.Start(pChip.eチャンネル番号, pChip.rBMP, pChip.rBMPTEX, pChip.rBGAPan.sz開始サイズ.Width, pChip.rBGAPan.sz開始サイズ.Height, pChip.rBGAPan.sz終了サイズ.Width, pChip.rBGAPan.sz終了サイズ.Height, pChip.rBGAPan.pt画像側開始位置.X, pChip.rBGAPan.pt画像側開始位置.Y, pChip.rBGAPan.pt画像側終了位置.X, pChip.rBGAPan.pt画像側終了位置.Y, pChip.rBGAPan.pt表示側開始位置.X, pChip.rBGAPan.pt表示側開始位置.Y, pChip.rBGAPan.pt表示側終了位置.X, pChip.rBGAPan.pt表示側終了位置.Y, pChip.n総移動時間);\r
- }\r
- break;\r
-\r
- default:\r
- if (pChip.rBMP != null)\r
- {\r
- this.actBGA.Start(pChip.eチャンネル番号, pChip.rBMP, null, pChip.rBMP.n幅, pChip.rBMP.n高さ, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\r
- }\r
- break;\r
- }\r
- }\r
- }\r
- break;\r
- #endregion\r
- #region [ 08: BPM変更(拡張) ]\r
- case Ech定義.BPMEx: // BPM変更(拡張)\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
- {\r
- pChip.bHit = true;\r
- if (dTX.listBPM.ContainsKey(pChip.n整数値_内部番号))\r
- {\r
- this.actPlayInfo.dbBPM = (dTX.listBPM[pChip.n整数値_内部番号].dbBPM値 * (((double)configIni.n演奏速度) / 20.0)) + dTX.BASEBPM;\r
- }\r
- }\r
- break;\r
- #endregion\r
- #region [ 11-1a: ドラム演奏 ]\r
- case Ech定義.HiHatClose: // ドラム演奏\r
- case Ech定義.Snare:\r
- case Ech定義.BassDrum:\r
- case Ech定義.HighTom:\r
- case Ech定義.LowTom:\r
- case Ech定義.Cymbal:\r
- case Ech定義.FloorTom:\r
- case Ech定義.HiHatOpen:\r
- case Ech定義.RideCymbal:\r
- case Ech定義.LeftCymbal:\r
- if (pChip.b空打ちチップである)\r
- {\r
- this.t進行描画_チップ_空打ち音設定_ドラム(configIni, ref dTX, ref pChip);\r
- }\r
- else\r
- {\r
- this.t進行描画_チップ_ドラムス(configIni, ref dTX, ref pChip);\r
- }\r
- break;\r
- #endregion\r
- #region [ 1f: フィルインサウンド(ドラム) ]\r
- case Ech定義.DrumsFillin: // フィルインサウンド(ドラム)\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
- {\r
- pChip.bHit = true;\r
- this.r現在の歓声Chip.Drums = pChip;\r
- }\r
- break;\r
- #endregion\r
- #region [ 20-27: ギター演奏 ]\r
- case Ech定義.Guitar_Open: // ギター演奏\r
- case Ech定義.Guitar_xxB:\r
- case Ech定義.Guitar_xGx:\r
- case Ech定義.Guitar_xGB:\r
- case Ech定義.Guitar_Rxx:\r
- case Ech定義.Guitar_RxB:\r
- case Ech定義.Guitar_RGx:\r
- case Ech定義.Guitar_RGB:\r
- this.t進行描画_チップ_ギターベース(configIni, ref dTX, ref pChip, E楽器パート.GUITAR);\r
- break;\r
- #endregion\r
- #region [ 28: ウェイリング(ギター) ]\r
- case Ech定義.Guitar_Wailing: // ウェイリング(ギター)\r
- this.t進行描画_チップ_ギター_ウェイリング(configIni, ref dTX, ref pChip, !CDTXMania.app.ConfigIni.bDrums有効);\r
- break;\r
- #endregion\r
- #region [ 2f: ウェイリングサウンド(ギター) ]\r
- case Ech定義.Guitar_WailingSound: // ウェイリングサウンド(ギター)\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Guitar < 0))\r
- {\r
- pChip.bHit = true;\r
- this.r現在の歓声Chip.Guitar = pChip;\r
- }\r
- break;\r
- #endregion\r
- #region [ 31-3a: 不可視チップ配置(ドラム) ]\r
- case Ech定義.HiHatClose_Hidden: // 不可視チップ配置(ドラム)\r
- case Ech定義.Snare_Hidden:\r
- case Ech定義.BassDrum_Hidden:\r
- case Ech定義.HighTom_Hidden:\r
- case Ech定義.LowTom_Hidden:\r
- case Ech定義.Cymbal_Hidden:\r
- case Ech定義.FloorTom_Hidden:\r
- case Ech定義.HiHatOpen_Hidden:\r
- case Ech定義.RideCymbal_Hidden:\r
- case Ech定義.LeftCymbal_Hidden:\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
- {\r
- pChip.bHit = true;\r
- }\r
- break;\r
- #endregion\r
- #region [ 50: 小節線 ]\r
- case Ech定義.BarLine: // 小節線\r
- {\r
- this.t進行描画_チップ_小節線(configIni, ref dTX, ref pChip);\r
- break;\r
- }\r
- #endregion\r
- #region [ 51: 拍線 ]\r
- case Ech定義.BeatLine: // 拍線\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
- {\r
- pChip.bHit = true;\r
- }\r
- if ((ePlayMode == E楽器パート.DRUMS) && (configIni.eDark != Eダークモード.FULL) && pChip.b可視 && (this.txチップ != null))\r
- {\r
- this.txチップ.t2D描画(CDTXMania.app.Device,\r
- configIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left ?\r
- 105 : 619,\r
- configIni.bReverse.Drums ?\r
- //(int) ( ( ( 0x38 + pChip.nバーからの距離dot.Drums ) - 1 ) * Scale.Y ) :\r
- //(int) ( ( ( 0x1a6 - pChip.nバーからの距離dot.Drums ) - 1 ) * Scale.Y ),\r
- 124 + pChip.nバーからの距離dot.Drums : 947 - pChip.nバーからの距離dot.Drums,\r
- new Rectangle(\r
- 0,\r
- 1006,\r
- (configIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left) ? 888 : 682,\r
- 2\r
- )\r
- );\r
- }\r
- break;\r
- #endregion\r
- #region [ 52: MIDIコーラス ]\r
- case Ech定義.MIDIChorus: // MIDIコーラス\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
- {\r
- pChip.bHit = true;\r
- }\r
- break;\r
- #endregion\r
- #region [ 53: フィルイン ]\r
- case Ech定義.FillIn: // フィルイン\r
- this.t進行描画_チップ_フィルイン(configIni, ref dTX, ref pChip);\r
- break;\r
- #endregion\r
- #region [ 54: 動画再生(BGA領域), 5A: 動画再生(全画面) ]\r
- case Ech定義.Movie: // 動画再生 (BGA領域)\r
- case Ech定義.MovieFull: // 動画再生 (全画面)\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
- {\r
- pChip.bHit = true;\r
- if (configIni.bAVI有効)\r
- {\r
- if (CDTXMania.app.DTX.bチップがある.BGA)\r
- {\r
- this.actAVI.bHasBGA = true;\r
- }\r
- if (pChip.eチャンネル番号 == Ech定義.MovieFull || CDTXMania.app.ConfigIni.bForceAVIFullscreen)\r
- {\r
- this.actAVI.bFullScreenMovie = true;\r
- }\r
- switch (pChip.eAVI種別)\r
- {\r
- case EAVI種別.AVI:\r
- //if ( pChip.rAVI != null )\r
- {\r
- //int startWidth = ( CDTXMania.app.DTX.bチップがある.BGA ) ? 278 : SampleFramework.GameWindowSize.Width;\r
- //int startHeight = ( CDTXMania.app.DTX.bチップがある.BGA ) ? 355 : SampleFramework.GameWindowSize.Height;\r
- int startWidth = !this.actAVI.bFullScreenMovie ? 278 : SampleFramework.GameWindowSize.Width;\r
- int startHeight = !this.actAVI.bFullScreenMovie ? 355 : SampleFramework.GameWindowSize.Height;\r
- this.actAVI.Start(pChip.eチャンネル番号, pChip.rAVI, startWidth, startHeight, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pChip.n発声時刻ms);\r
- }\r
- break;\r
-\r
- case EAVI種別.AVIPAN:\r
- if (pChip.rAVIPan != null)\r
- {\r
- this.actAVI.Start(pChip.eチャンネル番号, pChip.rAVI, pChip.rAVIPan.sz開始サイズ.Width, pChip.rAVIPan.sz開始サイズ.Height, pChip.rAVIPan.sz終了サイズ.Width, pChip.rAVIPan.sz終了サイズ.Height, pChip.rAVIPan.pt動画側開始位置.X, pChip.rAVIPan.pt動画側開始位置.Y, pChip.rAVIPan.pt動画側終了位置.X, pChip.rAVIPan.pt動画側終了位置.Y, pChip.rAVIPan.pt表示側開始位置.X, pChip.rAVIPan.pt表示側開始位置.Y, pChip.rAVIPan.pt表示側終了位置.X, pChip.rAVIPan.pt表示側終了位置.Y, pChip.n総移動時間, pChip.n発声時刻ms);\r
- }\r
- break;\r
- }\r
- }\r
- }\r
- break;\r
- #endregion\r
- #region [ 61-92: 自動再生(BGM, SE) ]\r
- case Ech定義.SE01:\r
- case Ech定義.SE02:\r
- case Ech定義.SE03:\r
- case Ech定義.SE04: // 自動再生(BGM, SE)\r
- case Ech定義.SE05:\r
- case Ech定義.SE06:\r
- case Ech定義.SE07:\r
- case Ech定義.SE08:\r
- case Ech定義.SE09:\r
- case Ech定義.SE10:\r
- case Ech定義.SE11:\r
- case Ech定義.SE12:\r
- case Ech定義.SE13:\r
- case Ech定義.SE14:\r
- case Ech定義.SE15:\r
- case Ech定義.SE16:\r
- case Ech定義.SE17:\r
- case Ech定義.SE18:\r
- case Ech定義.SE19:\r
- case Ech定義.SE20:\r
- case Ech定義.SE21:\r
- case Ech定義.SE22:\r
- case Ech定義.SE23:\r
- case Ech定義.SE30:\r
- case Ech定義.SE31:\r
- case Ech定義.SE32:\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
- {\r
- pChip.bHit = true;\r
- if (configIni.bBGM音を発声する)\r
- {\r
- dTX.tWavの再生停止(this.n最後に再生したBGMの実WAV番号[pChip.eチャンネル番号 - Ech定義.SE01]);\r
- dTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, (int)Eレーン.BGM, dTX.nモニタを考慮した音量(E楽器パート.UNKNOWN));\r
- this.n最後に再生したBGMの実WAV番号[pChip.eチャンネル番号 - Ech定義.SE01] = pChip.n整数値_内部番号;\r
- }\r
- }\r
- break;\r
- #endregion\r
-\r
+ }\r
\r
- #region [ 84-89: 仮: override sound ] // #26338 2011.11.8 yyagi\r
- case Ech定義.SE24: // HH (HO/HC)\r
- case Ech定義.SE25: // CY\r
- case Ech定義.SE26: // RD\r
- case Ech定義.SE27: // LC\r
- case Ech定義.SE28: // Guitar\r
- case Ech定義.SE29: // Bass\r
- // mute sound (auto)\r
- // 4A: 84: HH (HO/HC)\r
- // 4B: 85: CY\r
- // 4C: 86: RD\r
- // 4D: 87: LC\r
- // 2A: 88: Gt\r
- // AA: 89: Bs\r
-\r
- // CDTXMania.app.DTX.tWavの再生停止( this.n最後に再生した実WAV番号.Guitar );\r
- // CDTXMania.app.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 8, n音量, bモニタ, b音程をずらして再生 );\r
- // this.n最後に再生した実WAV番号.Guitar = pChip.n整数値_内部番号;\r
-\r
- // protected void tサウンド再生( CDTX.CChip pChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ, bool b音程をずらして再生 )\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ if (pChip[EChannel.BGM] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ if (CDTXMania.Instance.ConfigIni.bBGMPlay)\r
+ {\r
+ //long t = CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms;\r
+ //Trace.TraceInformation( "BGM再生開始: 演奏タイマのn前回リセットしたときのシステム時刻=" + CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + ", pChip.n発生時刻ms=" + pChip.n発声時刻ms + ", 合計=" + t );\r
+ CDTXMania.Instance.DTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Unknown));\r
+ }\r
+ }\r
+ else if (pChip[EChannel.BPM] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ this.actPlayInfo.dbBPM = (pChip.n整数値 * (((double)CDTXMania.Instance.ConfigIni.nPlaySpeed) / 20.0)) + CDTXMania.Instance.DTX.BASEBPM;\r
+ }\r
+ else if (pChip.bBGALayer && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ if (CDTXMania.Instance.ConfigIni.bBGA)\r
+ {\r
+ switch (pChip.eBGA種別)\r
{\r
- pChip.bHit = true;\r
- E楽器パート[] p = { E楽器パート.DRUMS, E楽器パート.DRUMS, E楽器パート.DRUMS, E楽器パート.DRUMS, E楽器パート.GUITAR, E楽器パート.BASS };\r
+ case EBGAType.BMPTEX:\r
+ if (pChip.rBMPTEX != null)\r
+ {\r
+ this.actBGA.Start(pChip, null, pChip.rBMPTEX, pChip.rBMPTEX.tx画像.sz画像サイズ.Width, pChip.rBMPTEX.tx画像.sz画像サイズ.Height, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\r
+ }\r
+ break;\r
+\r
+ case EBGAType.BGA:\r
+ if ((pChip.rBGA != null) && ((pChip.rBMP != null) || (pChip.rBMPTEX != null)))\r
+ {\r
+ this.actBGA.Start(pChip, pChip.rBMP, pChip.rBMPTEX, pChip.rBGA.pt画像側右下座標.X - pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側右下座標.Y - pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt画像側左上座標.X, pChip.rBGA.pt画像側左上座標.Y, 0, 0, pChip.rBGA.pt表示座標.X, pChip.rBGA.pt表示座標.Y, 0, 0, 0);\r
+ }\r
+ break;\r
\r
- E楽器パート pp = p[pChip.eチャンネル番号 - Ech定義.SE24];\r
+ case EBGAType.BGAPAN:\r
+ if ((pChip.rBGAPan != null) && ((pChip.rBMP != null) || (pChip.rBMPTEX != null)))\r
+ {\r
+ this.actBGA.Start(pChip, pChip.rBMP, pChip.rBMPTEX, pChip.rBGAPan.sz開始サイズ.Width, pChip.rBGAPan.sz開始サイズ.Height, pChip.rBGAPan.sz終了サイズ.Width, pChip.rBGAPan.sz終了サイズ.Height, pChip.rBGAPan.pt画像側開始位置.X, pChip.rBGAPan.pt画像側開始位置.Y, pChip.rBGAPan.pt画像側終了位置.X, pChip.rBGAPan.pt画像側終了位置.Y, pChip.rBGAPan.pt表示側開始位置.X, pChip.rBGAPan.pt表示側開始位置.Y, pChip.rBGAPan.pt表示側終了位置.X, pChip.rBGAPan.pt表示側終了位置.Y, pChip.n総移動時間);\r
+ }\r
+ break;\r
\r
- // if ( pp == E楽器パート.DRUMS ) { // pChip.nチャンネル番号= ..... HHとか、ドラムの場合は変える。\r
- // // HC CY RD LC\r
- // int[] ch = { 0x11, 0x16, 0x19, 0x1A };\r
- // pChip.nチャンネル番号 = ch[ pChip.nチャンネル番号 - 0x84 ]; \r
- // }\r
- this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, pp, dTX.nモニタを考慮した音量(pp));\r
+ default:\r
+ if (pChip.rBMP != null)\r
+ {\r
+ this.actBGA.Start(pChip, pChip.rBMP, null, pChip.rBMP.n幅, pChip.rBMP.n高さ, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\r
+ }\r
+ break;\r
}\r
- break;\r
- #endregion\r
-\r
- #region [ a0-a7: ベース演奏 ]\r
- case Ech定義.Bass_Open: // ベース演奏\r
- case Ech定義.Bass_xxB:\r
- case Ech定義.Bass_xGx:\r
- case Ech定義.Bass_xGB:\r
- case Ech定義.Bass_Rxx:\r
- case Ech定義.Bass_RxB:\r
- case Ech定義.Bass_RGx:\r
- case Ech定義.Bass_RGB:\r
- this.t進行描画_チップ_ギターベース(configIni, ref dTX, ref pChip, E楽器パート.BASS);\r
- break;\r
- #endregion\r
- #region [ a8: ウェイリング(ベース) ]\r
- case Ech定義.Bass_Wailing: // ウェイリング(ベース)\r
- this.t進行描画_チップ_ベース_ウェイリング(configIni, ref dTX, ref pChip, !CDTXMania.app.ConfigIni.bDrums有効);\r
- break;\r
- #endregion\r
- #region [ af: ウェイリングサウンド(ベース) ]\r
- case Ech定義.Bass_WailingSound: // ウェイリングサウンド(ベース)\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Bass < 0))\r
+ }\r
+ }\r
+ else if (pChip[EChannel.BPMEx] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ if (CDTXMania.Instance.DTX.listBPM.ContainsKey(pChip.n整数値_内部番号))\r
+ {\r
+ this.actPlayInfo.dbBPM = (CDTXMania.Instance.DTX.listBPM[pChip.n整数値_内部番号].dbBPM値 *\r
+ (((double)CDTXMania.Instance.ConfigIni.nPlaySpeed) / 20.0)) +\r
+ CDTXMania.Instance.DTX.BASEBPM;\r
+ }\r
+ }\r
+ else if (pChip.bDrums可視チップ && pChip.b空打ちチップである)\r
+ {\r
+ if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ if (CDTXMania.Instance.ConfigIni.bDrums有効)\r
{\r
- pChip.bHit = true;\r
- this.r現在の歓声Chip.Bass = pChip;\r
+ this.r現在の空うちドラムChip[(int)(EnumConverter.PadFromChannel(pChip.eチャンネル番号) - EPad.DrumsPadMin)] = pChip;\r
}\r
- break;\r
- #endregion\r
- #region [ b1-b9, bc: 空打ち音設定(ドラム) ]\r
- case Ech定義.HiHatClose_NoChip: // 空打ち音設定(ドラム)\r
- case Ech定義.Snare_NoChip:\r
- case Ech定義.BassDrum_NoChip:\r
- case Ech定義.HighTom_NoChip:\r
- case Ech定義.LowTom_NoChip:\r
- case Ech定義.Cymbal_NoChip:\r
- case Ech定義.FloorTom_NoChip:\r
- case Ech定義.HiHatOpen_NoChip:\r
- case Ech定義.RideCymbal_NoChip:\r
- case Ech定義.LeftCymbal_NoChip:\r
- // ここには来なくなったはずだが、一応残しておく\r
- this.t進行描画_チップ_空打ち音設定_ドラム(configIni, ref dTX, ref pChip);\r
- break;\r
- #endregion\r
- #region [ ba: 空打ち音設定(ギター) ]\r
- case Ech定義.Guitar_NoChip: // 空打ち音設定(ギター)\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Guitar < 0))\r
+ }\r
+ }\r
+ else if (pChip.bDrums可視チップ_LP_LBD含まない)\r
+ {\r
+ this.t進行描画_チップ_ドラムス(ref pChip);\r
+ }\r
+ else if (pChip[EChannel.DrumsFillin] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の歓声Chip.Drums = pChip;\r
+ }\r
+ else if (pChip.bGuitar可視チップ)\r
+ {\r
+ this.t進行描画_チップ_ギターベース(ref pChip, EPart.Guitar);\r
+ }\r
+ else if (pChip[EChannel.Guitar_Wailing])\r
+ {\r
+ this.t進行描画_チップ_ウェイリング(ref pChip);\r
+ }\r
+ else if (pChip[EChannel.Guitar_WailingSound] && !pChip.bHit && (pChip.nバーからの距離dot.Guitar < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の歓声Chip.Guitar = pChip;\r
+ }\r
+ else if (pChip.bDrums不可視チップ && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ }\r
+ else if (pChip[EChannel.BarLine] || pChip[EChannel.BeatLine])// 小節線\r
+ {\r
+ this.t進行描画_チップ_小節線_拍線(ref pChip);\r
+ }\r
+ else if (pChip[EChannel.MIDIChorus] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ }\r
+ else if (pChip[EChannel.FillIn])\r
+ {\r
+ this.t進行描画_チップ_フィルイン(ref pChip);\r
+ }\r
+ else if (pChip.bMovie && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ if (CDTXMania.Instance.ConfigIni.bAVI)\r
+ {\r
+ if (CDTXMania.Instance.DTX.bチップがある.BGA)\r
{\r
- pChip.bHit = true;\r
- this.r現在の空うちギターChip = pChip;\r
- pChip.SetNoChipGuitarToOpen();\r
+ this.actAVI.bHasBGA = true;\r
}\r
- break;\r
- #endregion\r
- #region [ bb: 空打ち音設定(ベース) ]\r
- case Ech定義.Bass_NoChip: // 空打ち音設定(ベース)\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Bass < 0))\r
+ if (pChip.eチャンネル番号 == EChannel.MovieFull || CDTXMania.Instance.ConfigIni.bFullAVI)\r
{\r
- pChip.bHit = true;\r
- this.r現在の空うちベースChip = pChip;\r
- pChip.SetNoChipBassToOpen();\r
+ this.actAVI.bFullScreenMovie = true;\r
}\r
- break;\r
- #endregion\r
- #region [ c4, c7, d5-d9, e0: BGA画像入れ替え ]\r
- case Ech定義.BGALayer1_Swap:\r
- case Ech定義.BGALayer2_Swap:\r
- case Ech定義.BGALayer3_Swap:\r
- case Ech定義.BGALayer4_Swap: // BGA画像入れ替え\r
- case Ech定義.BGALayer5_Swap:\r
- case Ech定義.BGALayer6_Swap:\r
- case Ech定義.BGALayer7_Swap:\r
- case Ech定義.BGALayer8_Swap:\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ switch (pChip.eAVI種別)\r
{\r
- pChip.bHit = true;\r
- if ((configIni.bBGA有効 && (pChip.eBGA種別 == EBGA種別.BMP)) || (pChip.eBGA種別 == EBGA種別.BMPTEX))\r
- {\r
- for (int i = 0; i < 8; i++)\r
+ case EAVIType.AVI:\r
{\r
- if (this.nBGAスコープチャンネルマップ[0, i] == pChip.eチャンネル番号)\r
- {\r
- this.actBGA.ChangeScope(this.nBGAスコープチャンネルマップ[1, i], pChip.rBMP, pChip.rBMPTEX);\r
- }\r
+ int startWidth = !this.actAVI.bFullScreenMovie ? 278 : SampleFramework.GameWindowSize.Width;\r
+ int startHeight = !this.actAVI.bFullScreenMovie ? 355 : SampleFramework.GameWindowSize.Height;\r
+ this.actAVI.Start(pChip.eチャンネル番号, pChip.rAVI, startWidth, startHeight, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pChip.n発声時刻ms);\r
}\r
- }\r
- }\r
- break;\r
- #endregion\r
- #region [ da: ミキサーへチップ音追加 ]\r
- case Ech定義.MixerAdd:\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
- {\r
- //Debug.WriteLine( "[DA(AddMixer)] BAR=" + pChip.n発声位置 / 384 + " ch=" + pChip.nチャンネル番号.ToString( "x2" ) + ", wav=" + pChip.n整数値.ToString( "x2" ) + ", time=" + pChip.n発声時刻ms );\r
- pChip.bHit = true;\r
- if (listWAV.ContainsKey(pChip.n整数値_内部番号)) // 参照が遠いので後日最適化する\r
- {\r
- CDTX.CWAV wc = listWAV[pChip.n整数値_内部番号];\r
- //Debug.Write( "[AddMixer] BAR=" + pChip.n発声位置 / 384 + ", wav=" + Path.GetFileName( wc.strファイル名 ) + ", time=" + pChip.n発声時刻ms );\r
+ break;\r
\r
- for (int i = 0; i < nPolyphonicSounds; i++)\r
+ case EAVIType.AVIPAN:\r
+ if (pChip.rAVIPan != null)\r
{\r
- if (wc.rSound[i] != null)\r
- {\r
- //CDTXMania.app.Sound管理.AddMixer( wc.rSound[ i ] );\r
- AddMixer(wc.rSound[i], pChip.b演奏終了後も再生が続くチップである);\r
- }\r
- //else\r
- //{\r
- // Debug.WriteLine( ", nPoly=" + i + ", Mix=" + CDTXMania.app.Sound管理.GetMixingStreams() );\r
- // break;\r
- //}\r
- //if ( i == nPolyphonicSounds - 1 )\r
- //{\r
- // Debug.WriteLine( ", nPoly=" + nPolyphonicSounds + ", Mix=" + CDTXMania.app.Sound管理.GetMixingStreams() );\r
- //}\r
+ this.actAVI.Start(pChip.eチャンネル番号, pChip.rAVI, pChip.rAVIPan.sz開始サイズ.Width, pChip.rAVIPan.sz開始サイズ.Height, pChip.rAVIPan.sz終了サイズ.Width, pChip.rAVIPan.sz終了サイズ.Height, pChip.rAVIPan.pt動画側開始位置.X, pChip.rAVIPan.pt動画側開始位置.Y, pChip.rAVIPan.pt動画側終了位置.X, pChip.rAVIPan.pt動画側終了位置.Y, pChip.rAVIPan.pt表示側開始位置.X, pChip.rAVIPan.pt表示側開始位置.Y, pChip.rAVIPan.pt表示側終了位置.X, pChip.rAVIPan.pt表示側終了位置.Y, pChip.n総移動時間, pChip.n発声時刻ms);\r
}\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ else if (pChip.bSE && !pChip.bOverrideSE && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ if (CDTXMania.Instance.ConfigIni.bBGMPlay)\r
+ {\r
+ CDTXMania.Instance.DTX.tWavの再生停止(this.n最後に再生したBGMの実WAV番号[pChip.eチャンネル番号 - EChannel.SE01]);\r
+ CDTXMania.Instance.DTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Unknown));\r
+ this.n最後に再生したBGMの実WAV番号[pChip.eチャンネル番号 - EChannel.SE01] = pChip.n整数値_内部番号;\r
+ }\r
+ }\r
+ else if (pChip.bOverrideSE && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ // override sound\r
+ // mute sound (auto)\r
+ // 4A: 84: HH (HO/HC)\r
+ // 4B: 85: CY\r
+ // 4C: 86: RD\r
+ // 4D: 87: LC\r
+ // 2A: 88: Gt\r
+ // AA: 89: Bs\r
+\r
+ // CDTXMania.Instance.DTX.tWavの再生停止( this.n最後に再生した実WAV番号.Guitar );\r
+ // CDTXMania.Instance.DTX.tチップの再生( pChip, n再生開始システム時刻ms, 8, n音量, bモニタ, b音程をずらして再生 );\r
+ // this.n最後に再生した実WAV番号.Guitar = pChip.n整数値_内部番号;\r
+\r
+ // protected void tサウンド再生( CDTX.CChip pChip, long n再生開始システム時刻ms, E楽器パート part, int n音量, bool bモニタ, bool b音程をずらして再生 )\r
+ pChip.bHit = true;\r
+ EPart[] p = { EPart.Drums, EPart.Drums, EPart.Drums, EPart.Drums, EPart.Guitar, EPart.Bass };\r
+\r
+ EPart pp = p[pChip.eチャンネル番号 - EChannel.SE24];\r
+\r
+ // if ( pp == E楽器パート.DRUMS ) { // pChip.nチャンネル番号= ..... HHとか、ドラムの場合は変える。\r
+ // // HC CY RD LC\r
+ // int[] ch = { 0x11, 0x16, 0x19, 0x1A };\r
+ // pChip.nチャンネル番号 = ch[ pChip.nチャンネル番号 - 0x84 ]; \r
+ // }\r
+ this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, pp, CDTXMania.Instance.DTX.nモニタを考慮した音量(pp));\r
+ }\r
+\r
+ else if (pChip.bBass可視チップ)\r
+ {\r
+ this.t進行描画_チップ_ギターベース(ref pChip, EPart.Bass);\r
+ }\r
+ else if (pChip[EChannel.Bass_Wailing])\r
+ {\r
+ this.t進行描画_チップ_ウェイリング(ref pChip);\r
+ }\r
+ else if (pChip[EChannel.Bass_WailingSound] && !pChip.bHit && (pChip.nバーからの距離dot.Bass < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の歓声Chip.Bass = pChip;\r
+ }\r
+ else if (pChip[EChannel.Guitar_NoChip] && !pChip.bHit && (pChip.nバーからの距離dot.Guitar < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の空うちギターChip = pChip;\r
+ pChip.ConvertGBNoChip();\r
+ }\r
+ else if (pChip[EChannel.Bass_NoChip] && !pChip.bHit && (pChip.nバーからの距離dot.Bass < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ this.r現在の空うちベースChip = pChip;\r
+ pChip.ConvertGBNoChip();\r
+ }\r
+ else if (pChip.bBGALayerSwap && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+ if ((CDTXMania.Instance.ConfigIni.bBGA && (pChip.eBGA種別 == EBGAType.BMP)) || (pChip.eBGA種別 == EBGAType.BMPTEX))\r
+ {\r
+ this.actBGA.ChangeScope(pChip);\r
+ }\r
+ }\r
+ else if (pChip[EChannel.MixerAdd] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ //Debug.WriteLine( "[DA(AddMixer)] BAR=" + pChip.n発声位置 / 384 + " ch=" + pChip.nチャンネル番号.ToString( "x2" ) + ", wav=" + pChip.n整数値.ToString( "x2" ) + ", time=" + pChip.n発声時刻ms );\r
+ pChip.bHit = true;\r
+ if (CDTXMania.Instance.DTX.listWAV.ContainsKey(pChip.n整数値_内部番号)) // 参照が遠いので後日最適化する\r
+ {\r
+ CDTX.CWAV wc = CDTXMania.Instance.DTX.listWAV[pChip.n整数値_内部番号];\r
+ //Debug.Write( "[AddMixer] BAR=" + pChip.n発声位置 / 384 + ", wav=" + Path.GetFileName( wc.strファイル名 ) + ", time=" + pChip.n発声時刻ms );\r
+\r
+ for (int i = 0; i < CDTXMania.Instance.ConfigIni.nPolyphonicSounds; i++)\r
+ {\r
+ if (wc.rSound[i] != null)\r
+ {\r
+ //CDTXMania.Instance.Sound管理.AddMixer( wc.rSound[ i ] );\r
+ AddMixer(wc.rSound[i], pChip.b演奏終了後も再生が続くチップである);\r
}\r
+ //else\r
+ //{\r
+ // Debug.WriteLine( ", nPoly=" + i + ", Mix=" + CDTXMania.Instance.Sound管理.GetMixingStreams() );\r
+ // break;\r
+ //}\r
+ //if ( i == nPolyphonicSounds - 1 )\r
+ //{\r
+ // Debug.WriteLine( ", nPoly=" + nPolyphonicSounds + ", Mix=" + CDTXMania.Instance.Sound管理.GetMixingStreams() );\r
+ //}\r
}\r
- break;\r
- #endregion\r
- #region [ db: ミキサーからチップ音削除 ]\r
- case Ech定義.MixerRemove:\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ }\r
+ }\r
+ else if (pChip[EChannel.MixerRemove] && !pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ //Debug.WriteLine( "[DB(RemoveMixer)] BAR=" + pChip.n発声位置 / 384 + " ch=" + pChip.nチャンネル番号.ToString( "x2" ) + ", wav=" + pChip.n整数値.ToString( "x2" ) + ", time=" + pChip.n発声時刻ms );\r
+ pChip.bHit = true;\r
+ if (CDTXMania.Instance.DTX.listWAV.ContainsKey(pChip.n整数値_内部番号)) // 参照が遠いので後日最適化する\r
+ {\r
+ CDTX.CWAV wc = CDTXMania.Instance.DTX.listWAV[pChip.n整数値_内部番号];\r
+ //Debug.Write( "[DelMixer] BAR=" + pChip.n発声位置 / 384 + ", wav=" + Path.GetFileName( wc.strファイル名 ) + ", time=" + pChip.n発声時刻ms );\r
+ for (int i = 0; i < CDTXMania.Instance.ConfigIni.nPolyphonicSounds; i++)\r
{\r
- //Debug.WriteLine( "[DB(RemoveMixer)] BAR=" + pChip.n発声位置 / 384 + " ch=" + pChip.nチャンネル番号.ToString( "x2" ) + ", wav=" + pChip.n整数値.ToString( "x2" ) + ", time=" + pChip.n発声時刻ms );\r
- pChip.bHit = true;\r
- if (listWAV.ContainsKey(pChip.n整数値_内部番号)) // 参照が遠いので後日最適化する\r
+ if (wc.rSound[i] != null)\r
{\r
- CDTX.CWAV wc = listWAV[pChip.n整数値_内部番号];\r
- //Debug.Write( "[DelMixer] BAR=" + pChip.n発声位置 / 384 + ", wav=" + Path.GetFileName( wc.strファイル名 ) + ", time=" + pChip.n発声時刻ms );\r
- for (int i = 0; i < nPolyphonicSounds; i++)\r
- {\r
- if (wc.rSound[i] != null)\r
- {\r
- //CDTXMania.app.Sound管理.RemoveMixer( wc.rSound[ i ] );\r
- if (!wc.rSound[i].b演奏終了後も再生が続くチップである) // #32248 2013.10.16 yyagi\r
- { // DTX終了後も再生が続くチップの0xDB登録をなくすことはできず。\r
- RemoveMixer(wc.rSound[i]); // (ミキサー解除のタイミングが遅延する場合の対応が面倒なので。)\r
- } // そこで、代わりにフラグをチェックしてミキサー削除ロジックへの遷移をカットする。\r
- }\r
- //else\r
- //{\r
- // Debug.WriteLine( ", nPoly=" + i + ", Mix=" + CDTXMania.app.Sound管理.GetMixingStreams() );\r
- // break;\r
- //}\r
- //if ( i == nPolyphonicSounds - 1 )\r
- //{\r
- // Debug.WriteLine( ", nPoly=" + nPolyphonicSounds + ", Mix=" + CDTXMania.app.Sound管理.GetMixingStreams() );\r
- //}\r
- }\r
+ //CDTXMania.Instance.Sound管理.RemoveMixer( wc.rSound[ i ] );\r
+ if (!wc.rSound[i].b演奏終了後も再生が続くチップである) // #32248 2013.10.16 yyagi\r
+ { // DTX終了後も再生が続くチップの0xDB登録をなくすことはできず。\r
+ RemoveMixer(wc.rSound[i]); // (ミキサー解除のタイミングが遅延する場合の対応が面倒なので。)\r
+ } // そこで、代わりにフラグをチェックしてミキサー削除ロジックへの遷移をカットする。\r
}\r
+ //else\r
+ //{\r
+ // Debug.WriteLine( ", nPoly=" + i + ", Mix=" + CDTXMania.Instance.Sound管理.GetMixingStreams() );\r
+ // break;\r
+ //}\r
+ //if ( i == nPolyphonicSounds - 1 )\r
+ //{\r
+ // Debug.WriteLine( ", nPoly=" + nPolyphonicSounds + ", Mix=" + CDTXMania.Instance.Sound管理.GetMixingStreams() );\r
+ //}\r
}\r
- break;\r
- #endregion\r
- #region [ その他(未定義) ]\r
- default:\r
- if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ }\r
+ }\r
+ else if ( pChip[ EChannel.Click ] && !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ pChip.bHit = true;\r
+ if ( CDTXMania.Instance.ConfigIni.eClickType != EClickType.Off )\r
+ {\r
+ switch (pChip.n整数値)\r
{\r
- pChip.bHit = true;\r
+ case 1:\r
+ CDTXMania.Instance.Skin.soundClickHigh.t再生する();\r
+ break;\r
+ case 2:\r
+ CDTXMania.Instance.Skin.soundClickLow.t再生する();\r
+ break;\r
}\r
- break;\r
- #endregion\r
+ }\r
+ }\r
+ else if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
+ {\r
+ // other chips\r
+ pChip.bHit = true;\r
}\r
}\r
return false;\r
\r
public void t再読込()\r
{\r
- CDTXMania.app.DTX.t全チップの再生停止とミキサーからの削除();\r
+ CDTXMania.Instance.DTX.t全チップの再生停止とミキサーからの削除();\r
this.eフェードアウト完了時の戻り値 = E演奏画面の戻り値.再読込_再演奏;\r
base.eフェーズID = CStage.Eフェーズ.演奏_再読込;\r
this.bPAUSE = false;\r
\r
// #34048 2014.7.16 yyagi\r
#region [ 読み込み画面に遷移する前に、設定変更した可能性があるパラメータをConfigIniクラスに書き戻す ]\r
- for (int i = 0; i < 3; i++)\r
+ for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
{\r
- CDTXMania.app.ConfigIni.nViewerScrollSpeed[i] = CDTXMania.app.ConfigIni.n譜面スクロール速度[i];\r
+ CDTXMania.Instance.ConfigIni.nViewerScrollSpeed[i] = CDTXMania.Instance.ConfigIni.nScrollSpeed[i];\r
}\r
- CDTXMania.app.ConfigIni.b演奏情報を表示する = CDTXMania.app.ConfigIni.bViewerShowDebugStatus;\r
+ CDTXMania.Instance.ConfigIni.bDebugInfo = CDTXMania.Instance.ConfigIni.bViewerShowDebugStatus;\r
#endregion\r
}\r
\r
public void t停止()\r
{\r
- CDTXMania.app.DTX.t全チップの再生停止とミキサーからの削除();\r
+ CDTXMania.Instance.DTX.t全チップの再生停止とミキサーからの削除();\r
this.actAVI.Stop();\r
this.actBGA.Stop();\r
- this.actPanel.Stop(); // PANEL表示停止\r
- CDTXMania.app.Timer.t一時停止(); // 再生時刻カウンタ停止\r
+ this.actPanel.Stop(); // PANEL表示停止\r
+ CDTXMania.Instance.Timer.t一時停止(); // 再生時刻カウンタ停止\r
\r
- this.n現在のトップChip = CDTXMania.app.DTX.listChip.Count - 1; // 終端にシーク\r
+ this.n現在のトップChip = CDTXMania.Instance.DTX.listChip.Count - 1; // 終端にシーク\r
\r
// 自分自身のOn活性化()相当の処理もすべき。\r
}\r
public void t演奏位置の変更(int nStartBar)\r
{\r
// まず全サウンドオフにする\r
- CDTXMania.app.DTX.t全チップの再生停止();\r
+ CDTXMania.Instance.DTX.t全チップの再生停止();\r
this.actAVI.Stop();\r
this.actBGA.Stop();\r
\r
#region [ 再生開始小節の変更 ]\r
- nStartBar++; // +1が必要\r
+ // +1が必要\r
+ nStartBar++;\r
\r
#region [ 演奏済みフラグのついたChipをリセットする ]\r
- for (int i = 0; i < CDTXMania.app.DTX.listChip.Count; i++)\r
+ for (int i = 0; i < CDTXMania.Instance.DTX.listChip.Count; i++)\r
{\r
- CChip pChip = CDTXMania.app.DTX.listChip[i];\r
+ CChip pChip = CDTXMania.Instance.DTX.listChip[i];\r
if (pChip.bHit)\r
{\r
CChip p = (CChip)pChip.Clone();\r
p.bHit = false;\r
- CDTXMania.app.DTX.listChip[i] = p;\r
+ CDTXMania.Instance.DTX.listChip[i] = p;\r
}\r
}\r
#endregion\r
\r
#region [ 処理を開始するチップの特定 ]\r
- //for ( int i = this.n現在のトップChip; i < CDTXMania.app.DTX.listChip.Count; i++ )\r
+ //for ( int i = this.n現在のトップChip; i < CDTXMania.Instance.DTX.listChip.Count; i++ )\r
bool bSuccessSeek = false;\r
- for (int i = 0; i < CDTXMania.app.DTX.listChip.Count; i++)\r
+ for (int i = 0; i < CDTXMania.Instance.DTX.listChip.Count; i++)\r
{\r
- CChip pChip = CDTXMania.app.DTX.listChip[i];\r
+ CChip pChip = CDTXMania.Instance.DTX.listChip[i];\r
if (pChip.n発声位置 < 384 * nStartBar)\r
{\r
continue;\r
}\r
if (!bSuccessSeek)\r
{\r
- // this.n現在のトップChip = CDTXMania.app.DTX.listChip.Count - 1;\r
- this.n現在のトップChip = 0; // 対象小節が存在しないなら、最初から再生\r
+ // this.n現在のトップChip = CDTXMania.Instance.DTX.listChip.Count - 1;\r
+ this.n現在のトップChip = 0; // 対象小節が存在しないなら、最初から再生\r
}\r
#endregion\r
\r
#region [ 演奏開始の発声時刻msを取得し、タイマに設定 ]\r
- int nStartTime = CDTXMania.app.DTX.listChip[this.n現在のトップChip].n発声時刻ms;\r
+ int nStartTime = CDTXMania.Instance.DTX.listChip[this.n現在のトップChip].n発声時刻ms;\r
\r
- CSound管理.rc演奏用タイマ.tリセット(); // これでPAUSE解除されるので、次のPAUSEチェックは不要\r
- //if ( !this.bPAUSE )\r
- //{\r
+ CSound管理.rc演奏用タイマ.tリセット(); // これでPAUSE解除されるので、次のPAUSEチェックは不要\r
+ //if ( !this.bPAUSE )\r
+ //{\r
CSound管理.rc演奏用タイマ.t一時停止();\r
//}\r
CSound管理.rc演奏用タイマ.n現在時刻 = nStartTime;\r
#region [ BGMやギターなど、演奏開始のタイミングで再生がかかっているサウンドのの途中再生開始 ] // (CDTXのt入力・行解析・チップ配置()で小節番号が+1されているのを削っておくこと)\r
for (int i = this.n現在のトップChip; i >= 0; i--)\r
{\r
- CChip pChip = CDTXMania.app.DTX.listChip[i];\r
+ CChip pChip = CDTXMania.Instance.DTX.listChip[i];\r
int nDuration = pChip.GetDuration();\r
\r
if ((pChip.n発声時刻ms + nDuration > 0) && (pChip.n発声時刻ms <= nStartTime) && (nStartTime <= pChip.n発声時刻ms + nDuration))\r
{\r
- if (pChip.bWAVを使うチャンネルである && !pChip.b空打ちチップである) // wav系チャンネル、且つ、空打ちチップではない\r
+ if (pChip.bWAVを使うチャンネルである && !pChip.b空打ちチップである) // wav系チャンネル、且つ、空打ちチップではない\r
{\r
CDTX.CWAV wc;\r
- bool b = CDTXMania.app.DTX.listWAV.TryGetValue(pChip.n整数値_内部番号, out wc);\r
+ bool b = CDTXMania.Instance.DTX.listWAV.TryGetValue(pChip.n整数値_内部番号, out wc);\r
if (!b) continue;\r
\r
- if ((wc.bIsBGMSound && CDTXMania.app.ConfigIni.bBGM音を発声する) || (!wc.bIsBGMSound))\r
+ if ((wc.bIsBGMSound && CDTXMania.Instance.ConfigIni.bBGMPlay) || (!wc.bIsBGMSound))\r
{\r
- CDTXMania.app.DTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, (int)Eレーン.BGM, CDTXMania.app.DTX.nモニタを考慮した音量(E楽器パート.UNKNOWN));\r
+ CDTXMania.Instance.DTX.tチップの再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Unknown));\r
#region [ PAUSEする ]\r
int j = wc.n現在再生中のサウンド番号;\r
if (wc.rSound[j] != null)\r
#endregion\r
#region [ タイマを再開して、PAUSEから復帰する ]\r
CSound管理.rc演奏用タイマ.n現在時刻 = nStartTime;\r
- CDTXMania.app.Timer.tリセット(); // これでPAUSE解除されるので、3行先の再開()は不要\r
- CDTXMania.app.Timer.n現在時刻 = nStartTime; // Debug表示のTime: 表記を正しくするために必要\r
+ CDTXMania.Instance.Timer.tリセット(); // これでPAUSE解除されるので、3行先の再開()は不要\r
+ CDTXMania.Instance.Timer.n現在時刻 = nStartTime; // Debug表示のTime: 表記を正しくするために必要\r
CSound管理.rc演奏用タイマ.t再開();\r
- //CDTXMania.app.Timer.t再開();\r
- this.bPAUSE = false; // システムがPAUSE状態だったら、強制解除\r
+ //CDTXMania.Instance.Timer.t再開();\r
+ this.bPAUSE = false; // システムがPAUSE状態だったら、強制解除\r
this.actPanel.Start();\r
#endregion\r
#endregion\r
- }\r
-\r
-\r
- /// <summary>\r
- /// DTXV用の設定をする。(全AUTOなど)\r
- /// 元の設定のバックアップなどはしないので、あとでConfig.iniを上書き保存しないこと。\r
- /// </summary>\r
- protected void tDTXV用の設定()\r
- {\r
- CDTXMania.app.ConfigIni.bAutoPlay.HH = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.SD = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.BD = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.HT = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.LT = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.CY = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.FT = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.RD = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.LC = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.GtR = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.GtG = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.GtB = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.GtPick = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.GtW = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.BsR = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.BsG = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.BsB = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.BsPick = true;\r
- CDTXMania.app.ConfigIni.bAutoPlay.BsW = true;\r
-\r
- this.bIsAutoPlay = CDTXMania.app.ConfigIni.bAutoPlay;\r
-\r
- CDTXMania.app.ConfigIni.bAVI有効 = true;\r
- CDTXMania.app.ConfigIni.bBGA有効 = true;\r
- for (int i = 0; i < 3; i++)\r
- {\r
- CDTXMania.app.ConfigIni.bGraph[i] = false;\r
- CDTXMania.app.ConfigIni.bHidden[i] = false;\r
- CDTXMania.app.ConfigIni.bLeft[i] = false;\r
- CDTXMania.app.ConfigIni.bLight[i] = false;\r
- CDTXMania.app.ConfigIni.bReverse[i] = false;\r
- CDTXMania.app.ConfigIni.bSudden[i] = false;\r
- CDTXMania.app.ConfigIni.eInvisible[i] = EInvisible.OFF;\r
- CDTXMania.app.ConfigIni.eRandom[i] = Eランダムモード.OFF;\r
- CDTXMania.app.ConfigIni.n表示可能な最小コンボ数[i] = 65535;\r
- CDTXMania.app.ConfigIni.判定文字表示位置[i] = E判定文字表示位置.表示OFF;\r
- // CDTXMania.app.ConfigIni.n譜面スクロール速度[ i ] = CDTXMania.app.ConfigIni.nViewerScrollSpeed[ i ]; // これだけはOn活性化()で行うこと。\r
- // そうしないと、演奏開始直後にスクロール速度が変化して見苦しい。\r
- }\r
-\r
- CDTXMania.app.ConfigIni.eDark = Eダークモード.OFF;\r
-\r
- CDTXMania.app.ConfigIni.b演奏情報を表示する = CDTXMania.app.ConfigIni.bViewerShowDebugStatus;\r
- CDTXMania.app.ConfigIni.bフィルイン有効 = true;\r
- CDTXMania.app.ConfigIni.bScoreIniを出力する = false;\r
- CDTXMania.app.ConfigIni.bSTAGEFAILED有効 = false;\r
- CDTXMania.app.ConfigIni.bTight = false;\r
- CDTXMania.app.ConfigIni.bストイックモード = false;\r
- CDTXMania.app.ConfigIni.bドラム打音を発声する = true;\r
- CDTXMania.app.ConfigIni.bBGM音を発声する = true;\r
-\r
- CDTXMania.app.ConfigIni.nRisky = 0;\r
- CDTXMania.app.ConfigIni.nShowLagType = 0;\r
- CDTXMania.app.ConfigIni.ドラムコンボ文字の表示位置 = Eドラムコンボ文字の表示位置.OFF;\r
- }\r
-\r
-\r
-\r
- protected abstract void t進行描画_チップ_ドラムス(CConfigIni configIni, ref CDTX dTX, ref CChip pChip);\r
- //protected abstract void t進行描画_チップ_ギター( CConfigIni configIni, ref CDTX dTX, ref CDTX.CChip pChip );\r
- protected abstract void t進行描画_チップ_ギターベース(CConfigIni configIni, ref CDTX dTX, ref CChip pChip, E楽器パート inst);\r
- /// <summary>\r
- /// ギター・ベースのチップ表示\r
- /// </summary>\r
- /// <param name="configIni"></param>\r
- /// <param name="dTX"></param>\r
- /// <param name="pChip">描画するチップ</param>\r
- /// <param name="inst">楽器種別</param>\r
- /// <param name="barYNormal">Normal時判定ライン表示Y座標</param>\r
- /// <param name="barYReverse">Reverse時判定ライン表示Y座標</param>\r
- /// <param name="showRangeY0">チップ表示Y座標範囲(最小値)</param>\r
- /// <param name="showRangeY1">チップ表示Y座標範囲(最大値)</param>\r
- /// <param name="openXg">オープンチップの表示X座標(ギター用)</param>\r
- /// <param name="openXb">オープンチップの表示X座標(ベース用)</param>\r
- /// <param name="rectOpenOffsetX">テクスチャ内のオープンチップregionのx座標</param>\r
- /// <param name="rectOpenOffsetY">テクスチャ内のオープンチップregionのy座標</param>\r
- /// <param name="openChipWidth">テクスチャ内のオープンチップregionのwidth</param>\r
- /// <param name="chipHeight">テクスチャ内のチップのheight</param>\r
- /// <param name="chipWidth">テクスチャ内のチップのwidth</param>\r
- /// <param name="guitarNormalX">ギターチップ描画のx座標(Normal)</param>\r
- /// <param name="guitarLeftyX">ギターチップ描画のx座標(Lefty)</param>\r
- /// <param name="bassNormalX">ベースチップ描画のx座標(Normal)</param>\r
- /// <param name="bassLeftyX">ベースチップ描画のx座標(Lefty)</param>\r
- /// <param name="drawDeltaX">描画のX座標間隔(R,G,B...)</param>\r
- /// <param name="chipTexDeltaX">テクスチャののX座標間隔(R,G,B...)</param>\r
- protected void t進行描画_チップ_ギターベース(CConfigIni configIni, ref CDTX dTX, ref CChip pChip, E楽器パート inst,\r
- int barYNormal, int barYReverse,\r
- int showRangeY0, int showRangeY1, int openXg, int openXb,\r
- int rectOpenOffsetX, int rectOpenOffsetY, int openChipWidth, int chipHeight, int chipWidth,\r
- int guitarNormalX, int guitarLeftyX, int bassNormalX, int bassLeftyX, int drawDeltaX, int chipTexDeltaX)\r
- {\r
- int instIndex = (int)inst;\r
- if (configIni.bGuitar有効)\r
- {\r
- #region [ Invisible処理 ]\r
- if (configIni.eInvisible[instIndex] != EInvisible.OFF)\r
- {\r
- cInvisibleChip.SetInvisibleStatus(ref pChip);\r
- }\r
- #endregion\r
- else\r
- {\r
- #region [ Hidden/Sudden処理 ]\r
- if (configIni.bSudden[instIndex])\r
- {\r
- pChip.b可視 = (pChip.nバーからの距離dot[instIndex] < 200 * Scale.Y);\r
- }\r
- if (configIni.bHidden[instIndex] && (pChip.nバーからの距離dot[instIndex] < 100 * Scale.Y))\r
- {\r
- pChip.b可視 = false;\r
- }\r
- #endregion\r
- }\r
-\r
- bool bChipHasR = pChip.bGuitarBass_R;\r
- bool bChipHasG = pChip.bGuitarBass_G;\r
- bool bChipHasB = pChip.bGuitarBass_B;\r
- bool bChipHasW = pChip.bGuitarBass_Wailing;\r
- bool bChipIsO = pChip.bGuitarBass_Open;\r
-\r
- #region [ chip描画 ]\r
- Ech定義 OPEN = (inst == E楽器パート.GUITAR) ? Ech定義.Guitar_Open : Ech定義.Bass_Open;\r
- if (!pChip.bHit && pChip.b可視)\r
- {\r
- if (this.txチップ != null)\r
- {\r
- this.txチップ.n透明度 = pChip.n透明度;\r
- }\r
- int y = configIni.bReverse[instIndex] ?\r
- (int)(barYReverse - pChip.nバーからの距離dot[instIndex]) :\r
- (int)(barYNormal + pChip.nバーからの距離dot[instIndex]);\r
- int n小節線消失距離dot = configIni.bReverse[instIndex] ?\r
- (int)(-100 * Scale.Y) :\r
- (configIni.e判定位置[instIndex] == E判定位置.標準) ? (int)(-36 * Scale.Y) : (int)(-25 * Scale.Y);\r
- if (configIni.bReverse[instIndex])\r
- {\r
- //showRangeY1 = barYReverse - n小節線消失距離dot;\r
- }\r
- else\r
- {\r
- showRangeY0 = barYNormal + n小節線消失距離dot;\r
- }\r
- if ((showRangeY0 < y) && (y < showRangeY1))\r
- {\r
- if (this.txチップ != null)\r
- {\r
- int nアニメカウンタ現在の値 = this.ctチップ模様アニメ[instIndex].n現在の値;\r
- #region [ OPENチップの描画 ]\r
- if (pChip.eチャンネル番号 == OPEN)\r
- {\r
- int xo = (inst == E楽器パート.GUITAR) ? openXg : openXb;\r
- this.txチップ.t2D描画(CDTXMania.app.Device,\r
- xo * Scale.X,\r
- y - (2 * Scale.Y),\r
- new Rectangle(\r
- (int)(rectOpenOffsetX * Scale.X),\r
- (int)(rectOpenOffsetY * Scale.Y) + (int)(((nアニメカウンタ現在の値 % 5) * chipHeight * Scale.Y)),\r
- (int)(openChipWidth * Scale.X),\r
- (int)(chipHeight * Scale.Y)\r
- )\r
- );\r
- }\r
- #endregion\r
- Rectangle rc = new Rectangle(\r
- (int)(rectOpenOffsetX * Scale.X),\r
- (int)(nアニメカウンタ現在の値 * chipHeight * Scale.Y),\r
- (int)(chipWidth * Scale.X),\r
- (int)(chipHeight * Scale.Y)\r
- );\r
- #region [ RGBチップのX座標初期化 ]\r
- int x;\r
- if (inst == E楽器パート.GUITAR)\r
- {\r
- x = (configIni.bLeft.Guitar) ? guitarLeftyX : guitarNormalX;\r
- }\r
- else\r
- {\r
- x = (configIni.bLeft.Bass) ? bassLeftyX : bassNormalX;\r
- }\r
- int deltaX = (configIni.bLeft[instIndex]) ? -drawDeltaX : +drawDeltaX;\r
- #endregion\r
- //Trace.TraceInformation( "chip={0:x2}, E楽器パート={1}, x={2}", pChip.nチャンネル番号, inst, x );\r
- #region [ Rチップ描画 ]\r
- if (bChipHasR)\r
- {\r
- this.txチップ.t2D描画(CDTXMania.app.Device,\r
- x * Scale.X,\r
- y - (chipHeight / 2) * Scale.Y,\r
- rc\r
- );\r
- }\r
- #endregion\r
- #region [ Gチップ描画 ]\r
- rc.X += (int)(chipTexDeltaX * Scale.X);\r
- x += deltaX;\r
- if (bChipHasG)\r
- {\r
- this.txチップ.t2D描画(CDTXMania.app.Device,\r
- x * Scale.X,\r
- y - (chipHeight / 2) * Scale.Y,\r
- rc\r
- );\r
- }\r
- #endregion\r
- #region [ Bチップ描画 ]\r
- rc.X += (int)(chipTexDeltaX * Scale.X);\r
- x += deltaX;\r
- if (bChipHasB)\r
- {\r
- this.txチップ.t2D描画(CDTXMania.app.Device,\r
- x * Scale.X,\r
- y - (chipHeight / 2) * Scale.Y,\r
- rc\r
- );\r
- }\r
- #endregion\r
- }\r
- }\r
- }\r
- #endregion\r
- //if ( ( configIni.bAutoPlay.Guitar && !pChip.bHit ) && ( pChip.nバーからの距離dot.Guitar < 0 ) )\r
-\r
-\r
- // #35411 2015.08.20 chnmr0 modified\r
- // 従来のAUTO処理に加えてプレーヤーゴーストの再生機能を追加\r
- bool autoPlayCondition = (!pChip.bHit) && (pChip.nバーからの距離dot[instIndex] < 0);\r
- if (autoPlayCondition)\r
- {\r
- cInvisibleChip.StartSemiInvisible(inst);\r
- }\r
-\r
- bool autoPick = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtPick : bIsAutoPlay.BsPick;\r
- autoPlayCondition = !pChip.bHit && autoPick;\r
- long ghostLag = 0;\r
- bool bUsePerfectGhost = true;\r
-\r
- if ((pChip.e楽器パート == E楽器パート.GUITAR || pChip.e楽器パート == E楽器パート.BASS) &&\r
- CDTXMania.app.ConfigIni.eAutoGhost[(int)(pChip.e楽器パート)] != EAutoGhostData.PERFECT &&\r
- CDTXMania.app.DTX.listAutoGhostLag[(int)pChip.e楽器パート] != null &&\r
- 0 <= pChip.n楽器パートでの出現順 &&\r
- pChip.n楽器パートでの出現順 < CDTXMania.app.DTX.listAutoGhostLag[(int)pChip.e楽器パート].Count)\r
- {\r
- // #35411 (mod) Ghost data が有効なので 従来のAUTOではなくゴーストのラグを利用\r
- // 発生時刻と現在時刻からこのタイミングで演奏するかどうかを決定\r
- ghostLag = CDTXMania.app.DTX.listAutoGhostLag[(int)pChip.e楽器パート][pChip.n楽器パートでの出現順];\r
- bool resetCombo = ghostLag > 255;\r
- ghostLag = (ghostLag & 255) - 128;\r
- ghostLag -= (pChip.e楽器パート == E楽器パート.GUITAR ? nInputAdjustTimeMs.Guitar : nInputAdjustTimeMs.Bass);\r
- autoPlayCondition &= (pChip.n発声時刻ms + ghostLag <= CSound管理.rc演奏用タイマ.n現在時刻ms);\r
- if (resetCombo && autoPlayCondition)\r
- {\r
- this.actCombo.n現在のコンボ数[(int)pChip.e楽器パート] = 0;\r
- }\r
- bUsePerfectGhost = false;\r
- }\r
-\r
- if (bUsePerfectGhost)\r
- {\r
- // 従来のAUTOを使用する場合\r
- autoPlayCondition &= (pChip.nバーからの距離dot[instIndex] < 0);\r
- }\r
-\r
- if (autoPlayCondition)\r
- {\r
- int lo = (inst == E楽器パート.GUITAR) ? 0 : 3; // lane offset\r
- bool autoR = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtR : bIsAutoPlay.BsR;\r
- bool autoG = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtG : bIsAutoPlay.BsG;\r
- bool autoB = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtB : bIsAutoPlay.BsB;\r
- bool pushingR = CDTXMania.app.Pad.b押されている(inst, Eパッド.R);\r
- bool pushingG = CDTXMania.app.Pad.b押されている(inst, Eパッド.G);\r
- bool pushingB = CDTXMania.app.Pad.b押されている(inst, Eパッド.B);\r
-\r
- #region [ Chip Fire effects (auto時用) ]\r
- // autoPickでない時の処理は、 t入力処理・ギターベース(E楽器パート) で行う\r
- bool bSuccessOPEN = bChipIsO && (autoR || !pushingR) && (autoG || !pushingG) && (autoB || !pushingB);\r
- {\r
- if ((bChipHasR && (autoR || pushingR)) || bSuccessOPEN)\r
- {\r
- this.actChipFireGB.Start(0 + lo, 演奏判定ライン座標);\r
- }\r
- if ((bChipHasG && (autoG || pushingG)) || bSuccessOPEN)\r
- {\r
- this.actChipFireGB.Start(1 + lo, 演奏判定ライン座標);\r
- }\r
- if ((bChipHasB && (autoB || pushingB)) || bSuccessOPEN)\r
- {\r
- this.actChipFireGB.Start(2 + lo, 演奏判定ライン座標);\r
- }\r
- }\r
- #endregion\r
- #region [ autopick ]\r
- {\r
- bool bMiss = true;\r
- if (bChipHasR == autoR && bChipHasG == autoG && bChipHasB == autoB) // autoレーンとチップレーン一致時はOK\r
- { // この条件を加えないと、同時に非autoレーンを押下している時にNGとなってしまう。\r
- bMiss = false;\r
- }\r
- else if ((autoR || (bChipHasR == pushingR)) && (autoG || (bChipHasG == pushingG)) && (autoB || (bChipHasB == pushingB)))\r
- // ( bChipHasR == ( pushingR | autoR ) ) && ( bChipHasG == ( pushingG | autoG ) ) && ( bChipHasB == ( pushingB | autoB ) ) )\r
- {\r
- bMiss = false;\r
- }\r
- else if (((bChipIsO == true) && (!pushingR | autoR) && (!pushingG | autoG) && (!pushingB | autoB))) // OPEN時\r
- {\r
- bMiss = false;\r
- }\r
- pChip.bHit = true;\r
- this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms + ghostLag, inst, dTX.nモニタを考慮した音量(inst), false, bMiss);\r
- this.r次にくるギターChip = null;\r
- if (!bMiss)\r
- {\r
- this.tチップのヒット処理(pChip.n発声時刻ms + ghostLag, pChip);\r
- }\r
- else\r
- {\r
- pChip.nLag = 0; // tチップのヒット処理()の引数最後がfalseの時はpChip.nLagを計算しないため、ここでAutoPickかつMissのLag=0を代入\r
- this.tチップのヒット処理(pChip.n発声時刻ms + ghostLag, pChip, false);\r
- }\r
- Ech定義 chWailingChip = (inst == E楽器パート.GUITAR) ? Ech定義.Guitar_Wailing : Ech定義.Bass_Wailing;\r
- CChip item = this.r指定時刻に一番近い未ヒットChip(pChip.n発声時刻ms + ghostLag, chWailingChip, this.nInputAdjustTimeMs[instIndex], 140);\r
- if (item != null && !bMiss)\r
- {\r
- this.queWailing[instIndex].Enqueue(item);\r
- }\r
- }\r
- #endregion\r
- // #35411 modify end\r
- }\r
- return;\r
- } // end of "if configIni.bGuitar有効"\r
- if (!pChip.bHit && (pChip.nバーからの距離dot[instIndex] < 0)) // Guitar/Bass無効の場合は、自動演奏する\r
+ }\r
+\r
+\r
+ /// <summary>\r
+ /// DTXV用の設定をする。(全AUTOなど)\r
+ /// 元の設定のバックアップなどはしないので、あとでConfig.iniを上書き保存しないこと。\r
+ /// </summary>\r
+ protected void tDTXV用の設定()\r
+ {\r
+ for (EPad i = EPad.Min; i < EPad.Max; ++i)\r
{\r
- pChip.bHit = true;\r
- this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻 + pChip.n発声時刻ms, inst, dTX.nモニタを考慮した音量(inst));\r
+ CDTXMania.Instance.ConfigIni.bAutoPlay[i].Value = true;\r
+ }\r
+ CDTXMania.Instance.ConfigIni.bAVI.Value = true;\r
+ CDTXMania.Instance.ConfigIni.bBGA.Value = true;\r
+ for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
+ {\r
+ CDTXMania.Instance.ConfigIni.bGraph[i].Value = false;\r
+ CDTXMania.Instance.ConfigIni.eSudHidInv[i].Value = ESudHidInv.Off;\r
+ CDTXMania.Instance.ConfigIni.bLight[i].Value = false;\r
+ CDTXMania.Instance.ConfigIni.bReverse[i].Value = false;\r
+ CDTXMania.Instance.ConfigIni.eRandom[i].Value = ERandom.Off;\r
+ CDTXMania.Instance.ConfigIni.nMinComboDisp[i].Value = 65535;\r
+ CDTXMania.Instance.ConfigIni.bDisplayJudge[i].Value = false;\r
+ CDTXMania.Instance.ConfigIni.bDisplayCombo[i].Value = false;\r
}\r
+ CDTXMania.Instance.ConfigIni.eDark.Value = EDark.Off;\r
+ CDTXMania.Instance.ConfigIni.bDebugInfo.Value = CDTXMania.Instance.ConfigIni.bViewerShowDebugStatus;\r
+ CDTXMania.Instance.ConfigIni.bFillin.Value = true;\r
+ CDTXMania.Instance.ConfigIni.bScoreIni.Value = false;\r
+ CDTXMania.Instance.ConfigIni.bStageFailed.Value = false;\r
+ CDTXMania.Instance.ConfigIni.bTight.Value = false;\r
+ CDTXMania.Instance.ConfigIni.bStoicMode.Value = false;\r
+ CDTXMania.Instance.ConfigIni.bDrumsHitSound.Value = true;\r
+ CDTXMania.Instance.ConfigIni.bBGMPlay.Value = true;\r
+ CDTXMania.Instance.ConfigIni.nRisky.Value = 0;\r
+ CDTXMania.Instance.ConfigIni.nShowLagType.Value = EShowLagType.Off;\r
}\r
\r
-\r
- protected virtual void t進行描画_チップ_ギターベース_ウェイリング(\r
- CConfigIni configIni, ref CDTX dTX, ref CChip pChip, E楽器パート inst, bool bGRmode)\r
+ private void t進行描画_チップ_ウェイリング(ref CChip pChip)\r
{\r
- int indexInst = (int)inst;\r
- if (configIni.bGuitar有効)\r
+ if (CDTXMania.Instance.ConfigIni.bGuitar有効)\r
{\r
- #region [ Invisible処理 ]\r
- if (configIni.eInvisible[indexInst] != EInvisible.OFF)\r
+ EPart indexInst = pChip.bGuitar可視チップ_Wailing含む ? EPart.Guitar : EPart.Bass;\r
+ #region [ Sud Hid Inv 処理 ]\r
+ if (\r
+ CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.FullInv ||\r
+ CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.SemiInv)\r
{\r
cInvisibleChip.SetInvisibleStatus(ref pChip);\r
}\r
- #endregion\r
- #region [ Sudden/Hidden処理 ]\r
- if (configIni.bSudden[indexInst])\r
- {\r
- pChip.b可視 = (pChip.nバーからの距離dot[indexInst] < 200 * Scale.Y);\r
- }\r
- if (configIni.bHidden[indexInst] && (pChip.nバーからの距離dot[indexInst] < 100 * Scale.Y))\r
+ else\r
{\r
- pChip.b可視 = false;\r
+ if (CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.Sudden ||\r
+ CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.SudHid)\r
+ {\r
+ pChip.b可視 = (pChip.nバーからの距離dot[indexInst] < CDTXMania.Instance.ConfigIni.nSuddenFrom[indexInst]);\r
+ }\r
+ if (CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.Hidden ||\r
+ CDTXMania.Instance.ConfigIni.eSudHidInv[indexInst] == ESudHidInv.SudHid)\r
+ {\r
+ pChip.b可視 = pChip.nバーからの距離dot[indexInst] >= CDTXMania.Instance.ConfigIni.nHiddenFrom[indexInst];\r
+ }\r
}\r
#endregion\r
-\r
- cWailingChip[indexInst].t進行描画_チップ_ギターベース_ウェイリング(\r
- configIni, ref dTX, ref pChip,\r
- ref txチップ, ref 演奏判定ライン座標, ref ctWailingチップ模様アニメ\r
- );\r
+ cWailingChip[(int)indexInst].t進行描画_チップ_ウェイリング(ref pChip, ref txチップGB, ref ctWailingチップ模様アニメ);\r
\r
if (!pChip.bHit && (pChip.nバーからの距離dot[indexInst] < 0))\r
{\r
- if (pChip.nバーからの距離dot[indexInst] < -234 * Scale.Y) // #25253 2011.5.29 yyagi: Don't set pChip.bHit=true for wailing at once. It need to 1sec-delay (234pix per 1sec). \r
+ if (pChip.nバーからの距離dot[indexInst] < -234 * Scale.Y) // #25253 2011.5.29 yyagi: Don't set pChip.bHit=true for wailing at once. It need to 1sec-delay (234pix per 1sec). \r
{\r
pChip.bHit = true;\r
}\r
- bool autoW = (inst == E楽器パート.GUITAR) ? configIni.bAutoPlay.GtW : configIni.bAutoPlay.BsW;\r
- //if ( configIni.bAutoPlay[ ((int) Eレーン.Guitar - 1) + indexInst ] ) // このような、バグの入りやすい書き方(GT/BSのindex値が他と異なる)はいずれ見直したい\r
+ bool autoW = (indexInst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail : CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail;\r
if (autoW)\r
{\r
- // pChip.bHit = true; // #25253 2011.5.29 yyagi: Set pChip.bHit=true if autoplay.\r
- // this.actWailingBonus.Start( inst, this.r現在の歓声Chip[indexInst] );\r
+ // #25253 2011.5.29 yyagi: Set pChip.bHit=true if autoplay.\r
+ // pChip.bHit = true;\r
+ // this.actWailingBonus.Start( inst, this.r現在の歓声Chip[indexInst] );\r
// #23886 2012.5.22 yyagi; To support auto Wailing; Don't do wailing for ALL wailing chips. Do wailing for queued wailing chip.\r
// wailing chips are queued when 1) manually wailing and not missed at that time 2) AutoWailing=ON and not missed at that time\r
long nTimeStamp_Wailed = pChip.n発声時刻ms + CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻;\r
- DoWailingFromQueue(inst, nTimeStamp_Wailed, autoW);\r
+ DoWailingFromQueue(indexInst, nTimeStamp_Wailed, autoW);\r
}\r
- cInvisibleChip.StartSemiInvisible(inst);\r
+ cInvisibleChip.StartSemiInvisible(indexInst);\r
}\r
return;\r
}\r
pChip.bHit = true;\r
}\r
- protected virtual void t進行描画_チップ_ギター_ウェイリング(CConfigIni configIni, ref CDTX dTX, ref CChip pChip, bool bGRmode)\r
- {\r
- t進行描画_チップ_ギターベース_ウェイリング(configIni, ref dTX, ref pChip, E楽器パート.GUITAR, bGRmode);\r
- }\r
- protected abstract void t進行描画_チップ_フィルイン(CConfigIni configIni, ref CDTX dTX, ref CChip pChip);\r
- protected abstract void t進行描画_チップ_小節線(CConfigIni configIni, ref CDTX dTX, ref CChip pChip);\r
- //protected abstract void t進行描画_チップ_ベース( CConfigIni configIni, ref CDTX dTX, ref CChip pChip );\r
- protected virtual void t進行描画_チップ_ベース_ウェイリング(CConfigIni configIni, ref CDTX dTX, ref CChip pChip, bool bGRmode)\r
- {\r
- t進行描画_チップ_ギターベース_ウェイリング(configIni, ref dTX, ref pChip, E楽器パート.BASS, bGRmode);\r
- }\r
-\r
-\r
\r
- protected abstract void t進行描画_チップ_空打ち音設定_ドラム(CConfigIni configIni, ref CDTX dTX, ref CChip pChip);\r
protected void t進行描画_チップアニメ()\r
{\r
- for (int i = 0; i < 3; i++) // 0=drums, 1=guitar, 2=bass\r
+ for (EPart i = EPart.Drums; i <= EPart.Bass; i++) // 0=drums, 1=guitar, 2=bass\r
{\r
if (this.ctチップ模様アニメ[i] != null)\r
{\r
}\r
return false;\r
}\r
- protected void t進行描画_レーンフラッシュD()\r
- {\r
- if ((CDTXMania.app.ConfigIni.eDark == Eダークモード.OFF) && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED) && (base.eフェーズID != CStage.Eフェーズ.演奏_STAGE_FAILED_フェードアウト))\r
- {\r
- this.actLaneFlushD.On進行描画();\r
- }\r
- }\r
- protected void t進行描画_レーンフラッシュGB()\r
- {\r
- if ((CDTXMania.app.ConfigIni.eDark == Eダークモード.OFF) && CDTXMania.app.ConfigIni.bGuitar有効)\r
- {\r
- this.actLaneFlushGB.On進行描画();\r
- }\r
- }\r
- protected abstract void t進行描画_演奏情報();\r
- protected void t進行描画_演奏情報(int x, int y)\r
- {\r
- if (!CDTXMania.app.ConfigIni.b演奏情報を表示しない)\r
- {\r
- this.actPlayInfo.t進行描画(x, y);\r
- }\r
- }\r
- protected void t進行描画_背景()\r
- {\r
- if (CDTXMania.app.ConfigIni.eDark == Eダークモード.OFF)\r
- {\r
- if (this.tx背景 != null)\r
- {\r
- this.tx背景.t2D描画(CDTXMania.app.Device, 0, 0);\r
- }\r
- }\r
- else\r
- {\r
- // FullHD版では、背景描画のさらに奥でAVI描画をするため、\r
- // Dark!=OFF時下記の画面クリアをすると、AVI描画がクリアされてしまう\r
- // CDTXMania.app.Device.Clear( ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 0f, 0 );\r
- }\r
- }\r
-\r
- protected void t進行描画_判定ライン()\r
- {\r
- if (CDTXMania.app.ConfigIni.eDark != Eダークモード.FULL)\r
- {\r
- int y = this.演奏判定ライン座標.n判定ラインY座標(E楽器パート.DRUMS, false, bReverse[(int)E楽器パート.DRUMS], false, true); // -(int) ( 3 * Scale.Y );\r
- // #31602 2016.2.11 yyagi 描画遅延対策として、判定ラインの表示位置をオフセット調整できるようにする\r
- // #31602 2013.6.23 yyagi 描画遅延対策として、判定ラインの表示位置をオフセット調整できるようにする\r
- if (this.txヒットバー != null)\r
- {\r
- int xStart = (CDTXMania.app.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left) ? 32 * 3 : 619;\r
- int xEnd = (CDTXMania.app.ConfigIni.eドラムレーン表示位置 == Eドラムレーン表示位置.Left) ? 335 * 3 : 619 + 682;\r
- for (int x = xStart; x < xEnd; x += 24)\r
- {\r
- this.txヒットバー.t2D描画(CDTXMania.app.Device,\r
- x,\r
- y,\r
- new Rectangle(\r
- 0,\r
- 0,\r
- ((x + 24) >= xEnd) ? (int)((23 - ((x + 24) - xEnd))) : 24,\r
- 18\r
- )\r
- );\r
- }\r
- }\r
- }\r
- }\r
- protected void t進行描画_判定文字列()\r
- {\r
- this.actJudgeString.t進行描画(演奏判定ライン座標);\r
- }\r
- protected void t進行描画_判定文字列1_通常位置指定の場合()\r
- {\r
- if (((E判定文字表示位置)CDTXMania.app.ConfigIni.判定文字表示位置.Drums) != E判定文字表示位置.コンボ下) // 判定ライン上または横\r
- {\r
- this.actJudgeString.t進行描画(演奏判定ライン座標);\r
- }\r
- }\r
- protected void t進行描画_判定文字列2_判定ライン上指定の場合()\r
- {\r
- if (((E判定文字表示位置)CDTXMania.app.ConfigIni.判定文字表示位置.Drums) == E判定文字表示位置.コンボ下) // 判定ライン上または横\r
- {\r
- this.actJudgeString.t進行描画(演奏判定ライン座標);\r
- }\r
- }\r
\r
- protected void t進行描画_譜面スクロール速度()\r
+ protected virtual void t入力処理_ギターベース(EPart inst)\r
{\r
- this.act譜面スクロール速度.On進行描画();\r
- }\r
-\r
- protected abstract void t背景テクスチャの生成();\r
- protected void t背景テクスチャの生成(string DefaultBgFilename, string DefaultLaneFilename, Rectangle bgrect, string bgfilename)\r
- { // Default...: レーン等があるレイヤー bgfilename: DTXファイルで指定する背景\r
- Bitmap image = null;\r
- bool bSuccessLoadDTXbgfile = false;\r
-\r
- int[] offsetX = new int[2] { 96, 506 };\r
- int nLanePosition = (int)CDTXMania.app.ConfigIni.eドラムレーン表示位置;\r
- //int nLanePosition = (int) Eドラムレーン表示位置.Left;\r
-\r
- if (bgfilename != null && File.Exists(bgfilename) && !CDTXMania.app.DTX.bチップがある.Movie)\r
- {\r
- try\r
- {\r
- #region [ DTXデータで指定されている背景画像を読み込む ]\r
- Bitmap bitmap1 = null;\r
- bitmap1 = new Bitmap(bgfilename);\r
- if ((bitmap1.Size.Width == 0) && (bitmap1.Size.Height == 0))\r
- {\r
- this.tx背景 = null;\r
- return;\r
- }\r
- #endregion\r
-\r
- int newWidth = (int)(bitmap1.Width * Scale.X);\r
- int newHeight = (int)(bitmap1.Height * Scale.Y);\r
- Bitmap bitmap2;\r
-\r
- #region [ 背景画像がVGAサイズ以下なら、FullHDサイズに拡大する ]\r
- if (bitmap1.Width <= 640 && bitmap1.Height <= 480)\r
- {\r
- bitmap2 = new Bitmap(newWidth, newHeight);\r
- Graphics graphic2 = Graphics.FromImage(bitmap2);\r
- graphic2.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;\r
- graphic2.DrawImage(bitmap1, 0, 0, newWidth, newHeight);\r
- graphic2.Dispose();\r
- }\r
- else\r
- {\r
- bitmap2 = (Bitmap)bitmap1.Clone();\r
- }\r
- bitmap1.Dispose();\r
- #endregion\r
-\r
- #region [ 実背景に格子状に配置するよう、コピーしていく ]\r
- Bitmap bitmap3 = new Bitmap(SampleFramework.GameWindowSize.Width, SampleFramework.GameWindowSize.Height);\r
- Graphics graphics3 = Graphics.FromImage(bitmap3);\r
- for (int i = 0; i < SampleFramework.GameWindowSize.Height; i += bitmap2.Size.Height)\r
- {\r
- for (int j = 0; j < SampleFramework.GameWindowSize.Width; j += bitmap2.Size.Width)\r
- {\r
- graphics3.DrawImage(bitmap2, j, i, bitmap2.Width, bitmap2.Height);\r
- }\r
- }\r
- graphics3.Dispose();\r
- bitmap2.Dispose();\r
- #endregion\r
-\r
- #region [ レーン外・レーンそのもののフレームを合成 ]\r
- image = new Bitmap(CSkin.Path(DefaultBgFilename)); // レーン外のフレーム\r
- graphics3 = Graphics.FromImage(image);\r
-\r
- //#region [ レーンのフレームがあれば、それを合成 ]\r
- //if ( DefaultLaneFilename != "" )\r
- //{\r
- // Bitmap bmLane = new Bitmap( CSkin.Path( DefaultLaneFilename ) );\r
- // graphics3.DrawImage( bmLane, offsetX[ nLanePosition ], 0 );\r
- // bmLane.Dispose();\r
- //}\r
- //#endregion\r
-\r
- ColorMatrix matrix2 = new ColorMatrix();\r
- matrix2.Matrix00 = 1f;\r
- matrix2.Matrix11 = 1f;\r
- matrix2.Matrix22 = 1f;\r
- matrix2.Matrix33 = ((float)CDTXMania.app.ConfigIni.n背景の透過度) / 255f;\r
- matrix2.Matrix44 = 1f;\r
- ColorMatrix newColorMatrix = matrix2;\r
- ImageAttributes imageAttr = new ImageAttributes();\r
- imageAttr.SetColorMatrix(newColorMatrix);\r
- graphics3.DrawImage(bitmap3, new Rectangle(0, 0, SampleFramework.GameWindowSize.Width, SampleFramework.GameWindowSize.Height), 0, 0, SampleFramework.GameWindowSize.Width, SampleFramework.GameWindowSize.Height, GraphicsUnit.Pixel, imageAttr);\r
- // graphics3.DrawImage( bitmap3, bgrect, bgrect.X, bgrect.Y, bgrect.Width, bgrect.Height, GraphicsUnit.Pixel );\r
- bitmap3.Dispose();\r
- #endregion\r
-\r
- imageAttr.Dispose();\r
- graphics3.Dispose();\r
- bSuccessLoadDTXbgfile = true;\r
- }\r
- catch\r
- {\r
- Trace.TraceError("背景画像とレーン画像の合成に失敗しました。({0})", bgfilename);\r
- }\r
- }\r
- #region [ DTXデータで指定する背景画像を合成しない場合は、レーン画像単体を背景画像とする ]\r
- if (!bSuccessLoadDTXbgfile)\r
+ #region [ スクロール速度変更 ]\r
+ int scrollSpeed = CDTXMania.Instance.ConfigIni.nScrollSpeed[inst];\r
+ bool scrollSpeedChanged = false;\r
+ float f = (float)CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset[inst] / (scrollSpeed + 1);\r
+ if (\r
+ CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtDecide : EPad.BsDecide) &&\r
+ CDTXMania.Instance.Pad.b押された(inst == EPart.Guitar ? EPad.GtB : EPad.BsB)\r
+ )\r
{\r
- bgfilename = CSkin.Path(DefaultBgFilename);\r
- try\r
- {\r
- image = new Bitmap(bgfilename);\r
-\r
- if (DefaultLaneFilename != "")\r
- {\r
- Bitmap bmLane = new Bitmap(CSkin.Path(DefaultLaneFilename));\r
- Graphics g = Graphics.FromImage(image);\r
- g.DrawImage(bmLane, offsetX[nLanePosition], 0);\r
- g.Dispose();\r
- bmLane.Dispose();\r
- }\r
- }\r
- catch\r
+ CDTXMania.Instance.ConfigIni.nScrollSpeed[inst].Value = scrollSpeed + 1;\r
+ if (scrollSpeed < CDTXMania.Instance.ConfigIni.nScrollSpeed[inst])\r
{\r
- Trace.TraceError("レーン画像の読み込みに失敗しました。({0})", bgfilename);\r
- this.tx背景 = null;\r
- return;\r
+ scrollSpeedChanged = true;\r
}\r
}\r
- #endregion\r
- #region [ BGA画像を表示する予定がある場合は、背景画像からあらかじめその領域を黒抜きにしておく ]\r
- if ((CDTXMania.app.DTX.listBMP.Count > 0) || (CDTXMania.app.DTX.listBMPTEX.Count > 0) || CDTXMania.app.DTX.listAVI.Count > 0)\r
- {\r
- Graphics graphics2 = Graphics.FromImage(image);\r
- graphics2.FillRectangle(Brushes.Black, bgrect.X, bgrect.Y, bgrect.Width, bgrect.Height);\r
- graphics2.Dispose();\r
- }\r
- #endregion\r
- #region [ 背景画像をテクスチャにする。背景動画の表示予定がある場合は、更に透明度を付与する。 ]\r
- try\r
+ if (\r
+ CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtDecide : EPad.BsDecide) &&\r
+ CDTXMania.Instance.Pad.b押された(inst == EPart.Guitar ? EPad.GtR : EPad.BsR)\r
+ )\r
{\r
- this.tx背景 = new CTexture(CDTXMania.app.Device, image, CDTXMania.app.TextureFormat);\r
- if (CDTXMania.app.DTX.bMovieをFullscreen再生する) // Fullscreen動画再生が発生する場合は、動画レイヤーに対してレーン+背景レイヤーに透明度を設定する\r
+ CDTXMania.Instance.ConfigIni.nScrollSpeed[inst].Value = scrollSpeed - 1;\r
+ if (scrollSpeed > CDTXMania.Instance.ConfigIni.nScrollSpeed[inst])\r
{\r
- this.tx背景.n透明度 = 255 - CDTXMania.app.ConfigIni.n背景の透過度; // 背景動画用\r
+ scrollSpeedChanged = true;\r
}\r
}\r
- catch (CTextureCreateFailedException)\r
- {\r
- Trace.TraceError("背景テクスチャの生成に失敗しました。");\r
- this.tx背景 = null;\r
- }\r
- #endregion\r
- image.Dispose();\r
- }\r
-\r
- protected virtual void t入力処理_ギター()\r
- {\r
- t入力処理_ギターベース(E楽器パート.GUITAR);\r
- }\r
- protected virtual void t入力処理_ベース()\r
- {\r
- t入力処理_ギターベース(E楽器パート.BASS);\r
- }\r
-\r
-\r
- protected virtual void t入力処理_ギターベース(E楽器パート inst)\r
- {\r
- int indexInst = (int)inst;\r
- #region [ スクロール速度変更 ]\r
- if (CDTXMania.app.Pad.b押されている(inst, Eパッド.Decide) && CDTXMania.app.Pad.b押された(inst, Eパッド.B))\r
- {\r
- float f = (float)this.演奏判定ライン座標.nJudgeLinePosY_delta[indexInst] / (CDTXMania.app.ConfigIni.n譜面スクロール速度[indexInst] + 1);\r
- CDTXMania.app.ConfigIni.n譜面スクロール速度[indexInst] = Math.Min(CDTXMania.app.ConfigIni.n譜面スクロール速度[indexInst] + 1, 1999);\r
- f *= CDTXMania.app.ConfigIni.n譜面スクロール速度[indexInst];\r
- this.演奏判定ライン座標.nJudgeLinePosY_delta[indexInst] = (int)(f + 0.5);\r
- CDTXMania.app.ConfigIni.nJudgeLinePosOffset[indexInst] = (int)(f + 0.5);\r
- }\r
- if (CDTXMania.app.Pad.b押されている(inst, Eパッド.Decide) && CDTXMania.app.Pad.b押された(inst, Eパッド.R))\r
+ if (scrollSpeedChanged)\r
{\r
- CDTXMania.app.ConfigIni.n譜面スクロール速度[indexInst] = Math.Max(CDTXMania.app.ConfigIni.n譜面スクロール速度[indexInst] - 1, 0);\r
-\r
- float f = (float)this.演奏判定ライン座標.nJudgeLinePosY_delta[indexInst] / (CDTXMania.app.ConfigIni.n譜面スクロール速度[indexInst] + 1);\r
- CDTXMania.app.ConfigIni.n譜面スクロール速度[indexInst] = Math.Max(CDTXMania.app.ConfigIni.n譜面スクロール速度[indexInst] - 1, 0);\r
- f *= CDTXMania.app.ConfigIni.n譜面スクロール速度[indexInst];\r
- this.演奏判定ライン座標.nJudgeLinePosY_delta[indexInst] = (int)(f + 0.5);\r
- CDTXMania.app.ConfigIni.nJudgeLinePosOffset[indexInst] = (int)(f + 0.5);\r
+ // 判定ラインも付随\r
+ CDTXMania.Instance.ConfigIni.nJudgeLinePosOffset[inst].Value = (int)(f * CDTXMania.Instance.ConfigIni.nScrollSpeed[inst] + 0.5);\r
}\r
#endregion\r
\r
- if (!CDTXMania.app.ConfigIni.bGuitar有効 || !CDTXMania.app.DTX.bチップがある[indexInst])\r
+ if (!CDTXMania.Instance.ConfigIni.bGuitar有効 || !CDTXMania.Instance.DTX.bチップがある[inst])\r
{\r
return;\r
}\r
\r
- int R = (inst == E楽器パート.GUITAR) ? 0 : 3;\r
+ int R = (inst == EPart.Guitar) ? 0 : 3;\r
int G = R + 1;\r
int B = R + 2;\r
- bool autoW = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtW : bIsAutoPlay.BsW;\r
- bool autoR = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtR : bIsAutoPlay.BsR;\r
- bool autoG = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtG : bIsAutoPlay.BsG;\r
- bool autoB = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtB : bIsAutoPlay.BsB;\r
- bool autoPick = (inst == E楽器パート.GUITAR) ? bIsAutoPlay.GtPick : bIsAutoPlay.BsPick;\r
+ bool autoW = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail : CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail;\r
+ bool autoR = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtR : CDTXMania.Instance.ConfigIni.bAutoPlay.BsR;\r
+ bool autoG = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtG : CDTXMania.Instance.ConfigIni.bAutoPlay.BsG;\r
+ bool autoB = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtB : CDTXMania.Instance.ConfigIni.bAutoPlay.BsB;\r
+ bool autoPick = (inst == EPart.Guitar) ? CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick : CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick;\r
int nAutoW = (autoW) ? 8 : 0;\r
int nAutoR = (autoR) ? 4 : 0;\r
int nAutoG = (autoG) ? 2 : 0;\r
int nAutoB = (autoB) ? 1 : 0;\r
int nAutoMask = nAutoW | nAutoR | nAutoG | nAutoB;\r
\r
- // if ( bIsAutoPlay[ (int) Eレーン.Guitar - 1 + indexInst ] ) // このような、バグの入りやすい書き方(GT/BSのindex値が他と異なる)はいずれ見直したい\r
- // {\r
CChip chip = this.r次に来る指定楽器Chipを更新して返す(inst);\r
if (chip != null)\r
{\r
this.actLaneFlushGB.Start(B);\r
this.actRGB.Push(B);\r
}\r
- // }\r
+ }\r
\r
+ int pressingR = CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtR : EPad.BsR) ? 4 : 0;\r
+ this.t入力メソッド記憶(inst);\r
+ int pressingG = CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtG : EPad.BsG) ? 2 : 0;\r
+ this.t入力メソッド記憶(inst);\r
+ int pressingB = CDTXMania.Instance.Pad.b押されている(inst == EPart.Guitar ? EPad.GtB : EPad.BsB) ? 1 : 0;\r
+ this.t入力メソッド記憶(inst);\r
+ int pressingRGB = pressingR | pressingG | pressingB;\r
+ if (pressingR != 0)\r
+ {\r
+ this.actLaneFlushGB.Start(R);\r
+ this.actRGB.Push(R);\r
}\r
- // else\r
+ if (pressingG != 0)\r
{\r
- int pressingR = CDTXMania.app.Pad.b押されている(inst, Eパッド.R) ? 4 : 0;\r
- this.t入力メソッド記憶(inst);\r
- int pressingG = CDTXMania.app.Pad.b押されている(inst, Eパッド.G) ? 2 : 0;\r
- this.t入力メソッド記憶(inst);\r
- int pressingB = CDTXMania.app.Pad.b押されている(inst, Eパッド.B) ? 1 : 0;\r
- this.t入力メソッド記憶(inst);\r
- int pressingRGB = pressingR | pressingG | pressingB;\r
- if (pressingR != 0)\r
- {\r
- this.actLaneFlushGB.Start(R);\r
- this.actRGB.Push(R);\r
- }\r
- if (pressingG != 0)\r
- {\r
- this.actLaneFlushGB.Start(G);\r
- this.actRGB.Push(G);\r
- }\r
- if (pressingB != 0)\r
- {\r
- this.actLaneFlushGB.Start(B);\r
- this.actRGB.Push(B);\r
- }\r
- // auto pickだとここから先に行かないので注意\r
- List<STInputEvent> events = CDTXMania.app.Pad.GetEvents(inst, Eパッド.Pick);\r
- if ((events != null) && (events.Count > 0))\r
+ this.actLaneFlushGB.Start(G);\r
+ this.actRGB.Push(G);\r
+ }\r
+ if (pressingB != 0)\r
+ {\r
+ this.actLaneFlushGB.Start(B);\r
+ this.actRGB.Push(B);\r
+ }\r
+ // auto pickだとここから先に行かないので注意\r
+ List<STInputEvent> events = CDTXMania.Instance.Pad.GetEvents(inst == EPart.Guitar ? EPad.GtPick : EPad.BsPick);\r
+ if ((events != null) && (events.Count > 0))\r
+ {\r
+ foreach (STInputEvent eventPick in events)\r
{\r
- foreach (STInputEvent eventPick in events)\r
+ if (!eventPick.b押された)\r
{\r
- if (!eventPick.b押された)\r
- {\r
- continue;\r
- }\r
- this.t入力メソッド記憶(inst);\r
- long nTime = eventPick.nTimeStamp - CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻;\r
- Ech定義 chWailingSound = (inst == E楽器パート.GUITAR) ? Ech定義.Guitar_WailingSound : Ech定義.Bass_WailingSound;\r
- CChip pChip = this.r指定時刻に一番近い未ヒットChip(nTime, chWailingSound, this.nInputAdjustTimeMs[indexInst]); // E楽器パート.GUITARなチップ全てにヒットする\r
- E判定 e判定 = this.e指定時刻からChipのJUDGEを返す(nTime, pChip, this.nInputAdjustTimeMs[indexInst]);\r
- //Trace.TraceInformation("ch={0:x2}, mask1={1:x1}, mask2={2:x2}", pChip.nチャンネル番号, ( pChip.nチャンネル番号 & ~nAutoMask ) & 0x0F, ( flagRGB & ~nAutoMask) & 0x0F );\r
- if (\r
+ continue;\r
+ }\r
+ this.t入力メソッド記憶(inst);\r
+ long nTime = eventPick.nTimeStamp - CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻;\r
+ EChannel chWailingSound = (inst == EPart.Guitar) ? EChannel.Guitar_WailingSound : EChannel.Bass_WailingSound;\r
+\r
+ // WailingSound チャンネルでE楽器パート.GUITARなチップ全てにヒットする\r
+ CChip pChip = this.r指定時刻に一番近い未ヒットChip(\r
+ nTime, chWailingSound,\r
+ CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[inst],\r
+ CDTXMania.Instance.nPoor範囲ms + 1);\r
+\r
+ EJudge e判定 = this.e指定時刻からChipのJUDGEを返す(nTime, pChip,\r
+ CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[inst]);\r
+ //Trace.TraceInformation("ch={0:x2}, mask1={1:x1}, mask2={2:x2}", pChip.nチャンネル番号, ( pChip.nチャンネル番号 & ~nAutoMask ) & 0x0F, ( flagRGB & ~nAutoMask) & 0x0F );\r
+ if (\r
(pChip != null) &&\r
((((int)pChip.eチャンネル番号 & ~nAutoMask) & 0x0F) == ((pressingRGB & ~nAutoMask) & 0x0F)) &&\r
- (e判定 != E判定.Miss))\r
+ (e判定 != EJudge.Miss))\r
+ {\r
+ bool bChipHasR = pChip.bGuitarBass_R;\r
+ bool bChipHasG = pChip.bGuitarBass_G;\r
+ bool bChipHasB = pChip.bGuitarBass_B;\r
+ bool bChipHasW = pChip.bGuitarBass_Wailing;\r
+ bool bChipIsO = pChip.bGuitarBass_Open;\r
+ bool bSuccessOPEN = bChipIsO && (autoR || pressingR == 0) && (autoG || pressingG == 0) && (autoB || pressingB == 0);\r
+ if ((bChipHasR && (autoR || pressingR != 0)) || bSuccessOPEN)\r
{\r
- bool bChipHasR = pChip.bGuitarBass_R;\r
- bool bChipHasG = pChip.bGuitarBass_G;\r
- bool bChipHasB = pChip.bGuitarBass_B;\r
- bool bChipHasW = pChip.bGuitarBass_Wailing;\r
- bool bChipIsO = pChip.bGuitarBass_Open;\r
- bool bSuccessOPEN = bChipIsO && (autoR || pressingR == 0) && (autoG || pressingG == 0) && (autoB || pressingB == 0);\r
- if ((bChipHasR && (autoR || pressingR != 0)) || bSuccessOPEN)\r
- //if ( ( pushingR != 0 ) || autoR || ( flagRGB == 0 ) )\r
- {\r
- this.actChipFireGB.Start(R, 演奏判定ライン座標);\r
- }\r
- if ((bChipHasG && (autoG || pressingG != 0)) || bSuccessOPEN)\r
- //if ( ( pushingG != 0 ) || autoG || ( flagRGB == 0 ) )\r
- {\r
- this.actChipFireGB.Start(G, 演奏判定ライン座標);\r
- }\r
- if ((bChipHasB && (autoB || pressingB != 0)) || bSuccessOPEN)\r
- //if ( ( pushingB != 0 ) || autoB || ( flagRGB == 0 ) )\r
- {\r
- this.actChipFireGB.Start(B, 演奏判定ライン座標);\r
- }\r
- this.tチップのヒット処理(nTime, pChip);\r
- this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.nシステム時刻, inst, CDTXMania.app.ConfigIni.n手動再生音量, CDTXMania.app.ConfigIni.b演奏音を強調する[indexInst], e判定 == E判定.Poor);\r
- Ech定義 chWailingChip = (inst == E楽器パート.GUITAR) ? Ech定義.Guitar_Wailing : Ech定義.Bass_Wailing;\r
- CChip item = this.r指定時刻に一番近い未ヒットChip(nTime, chWailingChip, this.nInputAdjustTimeMs[indexInst], 140);\r
- if (item != null)\r
- {\r
- this.queWailing[indexInst].Enqueue(item);\r
- }\r
- continue;\r
+ this.actChipFireGB.Start(R);\r
}\r
-\r
- // 以下、間違いレーンでのピック時\r
- CChip NoChipPicked = (inst == E楽器パート.GUITAR) ? this.r現在の空うちギターChip : this.r現在の空うちベースChip;\r
- if ((NoChipPicked != null) || ((NoChipPicked = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, chWailingSound, this.nInputAdjustTimeMs[indexInst])) != null))\r
+ if ((bChipHasG && (autoG || pressingG != 0)) || bSuccessOPEN)\r
+ {\r
+ this.actChipFireGB.Start(G);\r
+ }\r
+ if ((bChipHasB && (autoB || pressingB != 0)) || bSuccessOPEN)\r
{\r
- this.tサウンド再生(NoChipPicked, CSound管理.rc演奏用タイマ.nシステム時刻, inst, CDTXMania.app.ConfigIni.n手動再生音量, CDTXMania.app.ConfigIni.b演奏音を強調する[indexInst], true);\r
+ this.actChipFireGB.Start(B);\r
}\r
- if (!CDTXMania.app.ConfigIni.bLight[indexInst])\r
+ this.tチップのヒット処理(nTime, pChip);\r
+ this.tサウンド再生(pChip, CSound管理.rc演奏用タイマ.nシステム時刻, inst, CDTXMania.Instance.ConfigIni.nChipVolume, CDTXMania.Instance.ConfigIni.bEmphasizePlaySound[inst], e判定 == EJudge.Poor);\r
+ EChannel chWailingChip = (inst == EPart.Guitar) ? EChannel.Guitar_Wailing : EChannel.Bass_Wailing;\r
+ CChip item = this.r指定時刻に一番近い未ヒットChip(nTime, chWailingChip, CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[inst], 140);\r
+ if (item != null)\r
{\r
- this.tチップのヒット処理_BadならびにTight時のMiss(inst);\r
+ this.queWailing[inst].Enqueue(item);\r
}\r
+ continue;\r
+ }\r
+\r
+ // 以下、間違いレーンでのピック時\r
+ CChip NoChipPicked = (inst == EPart.Guitar) ? this.r現在の空うちギターChip : this.r現在の空うちベースChip;\r
+ if ((NoChipPicked != null) || ((NoChipPicked = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, chWailingSound, CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs[inst])) != null))\r
+ {\r
+ this.tサウンド再生(NoChipPicked, CSound管理.rc演奏用タイマ.nシステム時刻, inst, CDTXMania.Instance.ConfigIni.nChipVolume, CDTXMania.Instance.ConfigIni.bEmphasizePlaySound[inst], true);\r
+ }\r
+ if (!CDTXMania.Instance.ConfigIni.bLight[inst])\r
+ {\r
+ this.tチップのヒット処理_BadならびにTight時のMiss(inst);\r
}\r
}\r
- List<STInputEvent> list = CDTXMania.app.Pad.GetEvents(inst, Eパッド.Wail);\r
- if ((list != null) && (list.Count > 0))\r
+ }\r
+ List<STInputEvent> list = CDTXMania.Instance.Pad.GetEvents(inst == EPart.Guitar ? EPad.GtWail : EPad.BsWail);\r
+ if ((list != null) && (list.Count > 0))\r
+ {\r
+ foreach (STInputEvent eventWailed in list)\r
{\r
- foreach (STInputEvent eventWailed in list)\r
+ if (!eventWailed.b押された)\r
{\r
- if (!eventWailed.b押された)\r
- {\r
- continue;\r
- }\r
- DoWailingFromQueue(inst, eventWailed.nTimeStamp, autoW);\r
+ continue;\r
}\r
+ DoWailingFromQueue(inst, eventWailed.nTimeStamp, autoW);\r
}\r
}\r
}\r
\r
- private void DoWailingFromQueue(E楽器パート inst, long nTimeStamp_Wailed, bool autoW)\r
+ private void DoWailingFromQueue(EPart inst, long nTimeStamp_Wailed, bool autoW)\r
{\r
- int indexInst = (int)inst;\r
long nTimeWailed = nTimeStamp_Wailed - CSound管理.rc演奏用タイマ.n前回リセットした時のシステム時刻;\r
CChip chipWailing;\r
- while ((this.queWailing[indexInst].Count > 0) && ((chipWailing = this.queWailing[indexInst].Dequeue()) != null))\r
+ while ((this.queWailing[inst].Count > 0) && ((chipWailing = this.queWailing[inst].Dequeue()) != null))\r
{\r
- if ((nTimeWailed - chipWailing.n発声時刻ms) <= 1000) // #24245 2011.1.26 yyagi: 800 -> 1000\r
+ if ((nTimeWailed - chipWailing.n発声時刻ms) <= 1000) // #24245 2011.1.26 yyagi: 800 -> 1000\r
{\r
chipWailing.bHit = true;\r
- this.actWailingBonus.Start(inst, this.r現在の歓声Chip[indexInst]);\r
- //if ( !bIsAutoPlay[indexInst] )\r
+ this.actWailingBonus.Start(inst, this.r現在の歓声Chip[inst]);\r
if (!autoW)\r
{\r
- int nCombo = (this.actCombo.n現在のコンボ数[indexInst] < 500) ? this.actCombo.n現在のコンボ数[indexInst] : 500;\r
- this.actScore.Add(inst, bIsAutoPlay, nCombo * 3000L); // #24245 2011.1.26 yyagi changed DRUMS->BASS, add nCombo conditions\r
+ int nCombo = (this.actCombo.dgbコンボ数[inst].n現在値 < 500) ? this.actCombo.dgbコンボ数[inst].n現在値 : 500;\r
+ // #24245 2011.1.26 yyagi changed DRUMS->BASS, add nCombo conditions\r
+ this.actScore.Add(inst, nCombo * 3000L);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+\r
+ // t入力処理・ドラム()からメソッドを抽出したもの。\r
+ /// <summary>\r
+ /// chipArrayの中を, n発生位置の小さい順に並べる + nullを大きい方に退かす。セットでe判定Arrayも並べ直す。\r
+ /// </summary>\r
+ /// <param name="chipArray">ソート対象chip群</param>\r
+ /// <param name="e判定Array">ソート対象e判定群</param>\r
+ /// <param name="NumOfChips">チップ数</param>\r
+ private static void SortChipsByNTime(CChip[] chipArray, EJudge[] e判定Array, int NumOfChips)\r
+ {\r
+ for (int i = 0; i < NumOfChips - 1; i++)\r
+ {\r
+ for (int j = NumOfChips - 1; j > i; j--)\r
+ {\r
+ if ((chipArray[j - 1] == null) || ((chipArray[j] != null) && (chipArray[j - 1].n発声位置 > chipArray[j].n発声位置)))\r
+ {\r
+ // swap\r
+ CChip chipTemp = chipArray[j - 1];\r
+ chipArray[j - 1] = chipArray[j];\r
+ chipArray[j] = chipTemp;\r
+ EJudge e判定Temp = e判定Array[j - 1];\r
+ e判定Array[j - 1] = e判定Array[j];\r
+ e判定Array[j] = e判定Temp;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ private bool tドラムヒット処理(long nHitTime, EPad type, CChip pChip, int n強弱度合い0to127)\r
+ {\r
+ if (pChip == null)\r
+ {\r
+ return false;\r
+ }\r
+ // Ech定義 channel = pChip.eチャンネル番号;\r
+ int index = -1;\r
+ if (pChip.bDrums可視チップ_LP_LBD含まない)\r
+ {\r
+ index = pChip.nDrumsIndex;\r
+ }\r
+ else if (pChip.bDrums不可視チップ_LP_LBD含まない)\r
+ {\r
+ index = pChip.nDrumsIndexHidden;\r
+ }\r
+ ELane eLane = EnumConverter.LaneFromChannel(index + EChannel.HiHatClose);// nチャンネル0Atoレーン07[index];\r
+ EPad ePad = EnumConverter.PadFromChannel(index + EChannel.HiHatClose); //nチャンネル0Atoパッド08[index];\r
+ bool bPChipIsAutoPlay = CDTXMania.Instance.ConfigIni.bAutoPlay[ePad];\r
+ int nInputAdjustTime = bPChipIsAutoPlay ? 0 : CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums;\r
+ EJudge e判定 = this.e指定時刻からChipのJUDGEを返す(nHitTime, pChip, nInputAdjustTime);\r
+ if (e判定 == EJudge.Miss)\r
+ {\r
+ return false;\r
+ }\r
+ this.tチップのヒット処理(nHitTime, pChip);\r
+ this.actLaneFlushD.Start(eLane, ((float)n強弱度合い0to127) / 127f);\r
+ this.actPad.Hit(ePad);\r
+ if ((e判定 != EJudge.Poor) && (e判定 != EJudge.Miss))\r
+ {\r
+ bool flag = this.bフィルイン中;\r
+ bool flag2 = this.bフィルイン中 && this.bフィルイン区間の最後のChipである(pChip);\r
+ // bool flag3 = flag2;\r
+ // #31602 2013.6.24 yyagi 判定ラインの表示位置をずらしたら、チップのヒットエフェクトの表示もずらすために、nJudgeLine..を追加\r
+ this.actChipFireD.Start(eLane, flag, flag2, flag2);\r
+ }\r
+ if (CDTXMania.Instance.ConfigIni.bDrumsHitSound)\r
+ {\r
+ CChip rChip = null;\r
+ bool bIsChipsoundPriorToPad = true;\r
+ if (((type == EPad.HH) || (type == EPad.HHO)) || (type == EPad.LC))\r
+ {\r
+ bIsChipsoundPriorToPad = CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH == EHitSoundPriority.Chip;\r
+ }\r
+ else if ((type == EPad.LT) || (type == EPad.FT))\r
+ {\r
+ bIsChipsoundPriorToPad = CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT == EHitSoundPriority.Chip;\r
+ }\r
+ else if ((type == EPad.CY) || (type == EPad.RD))\r
+ {\r
+ bIsChipsoundPriorToPad = CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY == EHitSoundPriority.Chip;\r
+ }\r
+ if (bIsChipsoundPriorToPad)\r
+ {\r
+ rChip = pChip;\r
+ }\r
+ else\r
+ {\r
+ EPad hH = type;\r
+ if (!CDTXMania.Instance.DTX.bチップがある.HHOpen && (type == EPad.HHO))\r
+ {\r
+ hH = EPad.HH;\r
+ }\r
+ if (!CDTXMania.Instance.DTX.bチップがある.Ride && (type == EPad.RD))\r
+ {\r
+ hH = EPad.CY;\r
+ }\r
+ if (!CDTXMania.Instance.DTX.bチップがある.LeftCymbal && (type == EPad.LC))\r
+ {\r
+ hH = EPad.HH;\r
+ }\r
+ rChip = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nHitTime, EnumConverter.ChannelFromPad(hH), nInputAdjustTime);\r
+ if (rChip == null)\r
+ {\r
+ rChip = pChip;\r
+ }\r
+ }\r
+ this.tサウンド再生(rChip, CSound管理.rc演奏用タイマ.nシステム時刻, EPart.Drums, CDTXMania.Instance.ConfigIni.nChipVolume, CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);\r
+ }\r
+ return true;\r
+ }\r
+\r
+ protected bool bフィルイン区間の最後のChipである(CChip pChip)\r
+ {\r
+ if (pChip == null)\r
+ {\r
+ return false;\r
+ }\r
+ int num = pChip.n発声位置;\r
+ for (int i = CDTXMania.Instance.DTX.listChip.IndexOf(pChip) + 1; i < CDTXMania.Instance.DTX.listChip.Count; i++)\r
+ {\r
+ pChip = CDTXMania.Instance.DTX.listChip[i];\r
+ if ((pChip[EChannel.FillIn]) && (pChip.n整数値 == 2))\r
+ {\r
+ return true;\r
+ }\r
+ if ((pChip.bDrums可視チップ_LP_LBD含まない) && (pChip.n発声位置 - num) > 0x18)\r
+ {\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+\r
+ private void t進行描画_チップ_フィルイン(ref CChip pChip)\r
+ {\r
+ if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\r
+ {\r
+ pChip.bHit = true;\r
+\r
+ if (CDTXMania.Instance.ConfigIni.bDrums有効)\r
+ {\r
+ switch (pChip.n整数値)\r
+ {\r
+ case 0x01: // フィルイン開始\r
+ if (CDTXMania.Instance.ConfigIni.bFillin)\r
+ {\r
+ this.bフィルイン中 = true;\r
+ }\r
+ break;\r
+\r
+ case 0x02: // フィルイン終了\r
+ if (CDTXMania.Instance.ConfigIni.bFillin)\r
+ {\r
+ this.bフィルイン中 = false;\r
+ }\r
+ if (((this.actCombo.dgbコンボ数.Drums.n現在値 > 0) || CDTXMania.Instance.ConfigIni.bIsAutoPlay(EPart.Drums)) && CDTXMania.Instance.ConfigIni.bAudience)\r
+ {\r
+ if (this.r現在の歓声Chip.Drums != null)\r
+ {\r
+ CDTXMania.Instance.DTX.tチップの再生(this.r現在の歓声Chip.Drums, CSound管理.rc演奏用タイマ.nシステム時刻, CDTXMania.Instance.DTX.nモニタを考慮した音量(EPart.Unknown));\r
+ }\r
+ else\r
+ {\r
+ CDTXMania.Instance.Skin.sound歓声音.n位置_次に鳴るサウンド = 0;\r
+ CDTXMania.Instance.Skin.sound歓声音.t再生する();\r
+ }\r
+ }\r
+ break;\r
+#if TEST_NOTEOFFMODE // 2011.1.1 yyagi TEST\r
+ case 0x04: // HH消音あり(従来同等)\r
+ CDTXMania.Instance.DTX.b演奏で直前の音を消音する.HH = true;\r
+ break;\r
+ case 0x05: // HH消音無し\r
+ CDTXMania.Instance.DTX.b演奏で直前の音を消音する.HH = false;\r
+ break;\r
+ case 0x06: // ギター消音あり(従来同等)\r
+ CDTXMania.Instance.DTX.b演奏で直前の音を消音する.Gutiar = true;\r
+ break;\r
+ case 0x07: // ギター消音無し\r
+ CDTXMania.Instance.DTX.b演奏で直前の音を消音する.Gutiar = false;\r
+ break;\r
+ case 0x08: // ベース消音あり(従来同等)\r
+ CDTXMania.Instance.DTX.b演奏で直前の音を消音する.Bass = true;\r
+ break;\r
+ case 0x09: // ベース消音無し\r
+ CDTXMania.Instance.DTX.b演奏で直前の音を消音する.Bass = false;\r
+ break;\r
+#endif\r
}\r
}\r
}\r
}\r
- #endregion\r
}\r
}\r