OSDN Git Service

#xxxxx score.iniの保存時に、Auto演奏フラグとしてCapture設定の情報を保存しようとしてNullRef例外が発生していたのを修正。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 07.演奏 / CStage演奏画面共通.cs
index 35cf668..0e70f24 100644 (file)
@@ -156,7 +156,7 @@ namespace DTXMania
                                Drums.nMiss数_Auto含まない = this.nヒット数_Auto含まない.Drums.Miss;\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
+                               for ( EPad i = EPad.Min; i < EPad.BassPadMax; i++ )\r
                                {\r
                                        Drums.bAutoPlay[i] = CDTXMania.Instance.ConfigIni.bAutoPlay[i];\r
                                }\r
@@ -172,6 +172,9 @@ namespace DTXMania
                                Drums.eDark = CDTXMania.Instance.ConfigIni.eDark;\r
                                Drums.n演奏速度分子 = CDTXMania.Instance.ConfigIni.nPlaySpeed;\r
                                Drums.n演奏速度分母 = 20;\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
@@ -182,6 +185,7 @@ namespace DTXMania
                                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
@@ -220,7 +224,7 @@ namespace DTXMania
                                Guitar.nMiss数_Auto含まない = this.nヒット数_Auto含まない.Guitar.Miss;\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
+                               for (EPad i = EPad.Min; i < EPad.BassPadMax; i++)\r
                                {\r
                                        Guitar.bAutoPlay[i] = CDTXMania.Instance.ConfigIni.bAutoPlay[i];\r
                                }\r
@@ -239,6 +243,9 @@ namespace DTXMania
                                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
@@ -246,6 +253,7 @@ namespace DTXMania
                                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
@@ -282,7 +290,7 @@ namespace DTXMania
                                Bass.nMiss数_Auto含まない = this.nヒット数_Auto含まない.Bass.Miss;\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
+                               for (EPad i = EPad.Min; i < EPad.BassPadMax; i++)\r
                                {\r
                                        Bass.bAutoPlay[i] = CDTXMania.Instance.ConfigIni.bAutoPlay[i];\r
                                }\r
@@ -301,6 +309,9 @@ namespace DTXMania
                                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
@@ -309,6 +320,7 @@ namespace DTXMania
                                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
@@ -373,13 +385,6 @@ namespace DTXMania
                                }\r
 \r
                                cInvisibleChip.Reset();\r
-                               string strLabel = CDTXMania.Instance.stage選曲.r確定された曲.ar難易度ラベル[CDTXMania.Instance.stage選曲.n確定された曲の難易度];\r
-                               string strPanel = CDTXMania.Instance.DTX.TITLE;\r
-                               if (!string.IsNullOrWhiteSpace(strLabel))\r
-                               {\r
-                                       strPanel += "(" + strLabel + ")";\r
-                               }\r
-                               this.actPanel.SetPanelString(strPanel);\r
                                actGauge.Init(CDTXMania.Instance.ConfigIni.nRisky);\r
                                // 効果音のストリームをミキサーから解除しておく\r
                                CDTXMania.Instance.Skin.tRemoveMixerAll();\r
@@ -417,7 +422,7 @@ namespace DTXMania
                                                        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.nPoliphonicSounds; i++)\r
+                                                               for (int i = 0; i < CDTXMania.Instance.ConfigIni.nPolyphonicSounds; i++)\r
                                                                {\r
                                                                        if (wc.rSound[i] != null)\r
                                                                        {\r
@@ -479,6 +484,20 @@ namespace DTXMania
                                }\r
 \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
                }\r
                public override void On非活性化()\r
@@ -546,12 +565,12 @@ namespace DTXMania
                                        CDTXMania.Instance.Timer.tリセット();\r
                                        if (CDTXMania.Instance.ConfigIni.bDrums有効)\r
                                        {\r
-                                               ctチップ模様アニメ.Drums = new CCounter(0, 0x30, 10, CDTXMania.Instance.Timer);\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, 0x17, 20, CDTXMania.Instance.Timer);\r
-                                               ctチップ模様アニメ.Bass = new CCounter(0, 0x17, 20, CDTXMania.Instance.Timer);\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
@@ -804,9 +823,11 @@ namespace DTXMania
                                //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
@@ -1488,11 +1509,11 @@ namespace DTXMania
                                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
+                               if (!CDTXMania.Instance.DTX.bチップがある.Ride && (eCYGroup == ECYGroup.Off))\r
                                {\r
                                        eCYGroup = ECYGroup.Group;\r
                                }\r
-                               if (!CDTXMania.Instance.DTX.bチップがある.HHOpen && (eHHGroup == EHHGroup.None))\r
+                               if (!CDTXMania.Instance.DTX.bチップがある.HHOpen && (eHHGroup == EHHGroup.Off))\r
                                {\r
                                        eHHGroup = EHHGroup.LC_HH;\r
                                }\r
@@ -1500,7 +1521,7 @@ namespace DTXMania
                                {\r
                                        eHHGroup = EHHGroup.Group;\r
                                }\r
-                               if (!CDTXMania.Instance.DTX.bチップがある.LeftCymbal && (eHHGroup == EHHGroup.None))\r
+                               if (!CDTXMania.Instance.DTX.bチップがある.LeftCymbal && (eHHGroup == EHHGroup.Off))\r
                                {\r
                                        eHHGroup = EHHGroup.HO_HC;\r
                                }\r
@@ -1787,7 +1808,7 @@ namespace DTXMania
                                                                EJudge e判定FT = (chipFT != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipFT, nInputAdjustTime) : EJudge.Miss;\r
                                                                switch (eFTGroup)\r
                                                                {\r
-                                                                       case EFTGroup.None:\r
+                                                                       case EFTGroup.Off:\r
                                                                                #region [ LTのヒット処理 ]\r
                                                                                //-----------------------------\r
                                                                                if (e判定LT != EJudge.Miss)\r
@@ -1852,7 +1873,7 @@ namespace DTXMania
                                                                EJudge e判定FT = (chipFT != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipFT, nInputAdjustTime) : EJudge.Miss;\r
                                                                switch (eFTGroup)\r
                                                                {\r
-                                                                       case EFTGroup.None:\r
+                                                                       case EFTGroup.Off:\r
                                                                                #region [ FTのヒット処理 ]\r
                                                                                //-----------------------------\r
                                                                                if (e判定FT != EJudge.Miss)\r
@@ -1925,7 +1946,7 @@ namespace DTXMania
                                                                SortChipsByNTime(chipArray, e判定Array, NumOfChips);\r
                                                                switch (eCYGroup)\r
                                                                {\r
-                                                                       case ECYGroup.None:\r
+                                                                       case ECYGroup.Off:\r
                                                                                if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
                                                                                {\r
                                                                                        if (e判定CY != EJudge.Miss)\r
@@ -2007,7 +2028,7 @@ namespace DTXMania
                                                                EJudge e判定LC = (chipLC != null) ? this.e指定時刻からChipのJUDGEを返す(nTime, chipLC, nInputAdjustTime) : EJudge.Miss;\r
                                                                switch (eHHGroup)\r
                                                                {\r
-                                                                       case EHHGroup.None:\r
+                                                                       case EHHGroup.Off:\r
                                                                                if (e判定HO != EJudge.Miss)\r
                                                                                {\r
                                                                                        this.tドラムヒット処理(nTime, EPad.HHO, chipHO, inputEvent.nVelocity);\r
@@ -2213,7 +2234,7 @@ namespace DTXMania
                                                                SortChipsByNTime(chipArray, e判定Array, NumOfChips);\r
                                                                switch (eCYGroup)\r
                                                                {\r
-                                                                       case ECYGroup.None:\r
+                                                                       case ECYGroup.Off:\r
                                                                                if (e判定RD != EJudge.Miss)\r
                                                                                {\r
                                                                                        this.tドラムヒット処理(nTime, EPad.RD, chipRD, inputEvent.nVelocity);\r
@@ -2279,7 +2300,7 @@ namespace DTXMania
                                                                SortChipsByNTime(chipArray, e判定Array, NumOfChips);\r
                                                                switch (eHHGroup)\r
                                                                {\r
-                                                                       case EHHGroup.None:\r
+                                                                       case EHHGroup.Off:\r
                                                                        case EHHGroup.LC_HH:\r
                                                                                if (!CDTXMania.Instance.ConfigIni.bCymbalFree)\r
                                                                                {\r
@@ -2451,7 +2472,7 @@ namespace DTXMania
                                                                        {\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
+                                                                               if (CDTXMania.Instance.ConfigIni.eFTGroup != EFTGroup.Off)\r
                                                                                        rChip = (chipLT != null) ? chipLT : chipFT;\r
                                                                                else\r
                                                                                        rChip = chipLT;\r
@@ -2462,7 +2483,7 @@ namespace DTXMania
                                                                        {\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
+                                                                               if (CDTXMania.Instance.ConfigIni.eFTGroup != EFTGroup.Off)\r
                                                                                        rChip = (chipFT != null) ? chipFT : chipLT;\r
                                                                                else\r
                                                                                        rChip = chipFT;\r
@@ -2473,7 +2494,7 @@ namespace DTXMania
                                                                        {\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
+                                                                               if (CDTXMania.Instance.ConfigIni.eCYGroup != ECYGroup.Off)\r
                                                                                        rChip = (chipCY != null) ? chipCY : chipRD;\r
                                                                                else\r
                                                                                        rChip = chipCY;\r
@@ -2487,7 +2508,7 @@ namespace DTXMania
                                                                                CChip chipLC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LeftCymbal, nInputAdjustTime);\r
                                                                                switch (CDTXMania.Instance.ConfigIni.eHHGroup.Value)\r
                                                                                {\r
-                                                                                       case EHHGroup.None:\r
+                                                                                       case EHHGroup.Off:\r
                                                                                                rChip = chipHO;\r
                                                                                                break;\r
 \r
@@ -2529,7 +2550,7 @@ namespace DTXMania
                                                                        {\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
+                                                                               if (CDTXMania.Instance.ConfigIni.eCYGroup != ECYGroup.Off)\r
                                                                                        rChip = (chipRD != null) ? chipRD : chipCY;\r
                                                                                else\r
                                                                                        rChip = chipRD;\r
@@ -2543,7 +2564,7 @@ namespace DTXMania
                                                                                CChip chipLC = this.r指定時刻に一番近いChip_ヒット未済問わず不可視考慮(nTime, EChannel.LeftCymbal, nInputAdjustTime);\r
                                                                                switch (CDTXMania.Instance.ConfigIni.eHHGroup.Value)\r
                                                                                {\r
-                                                                                       case EHHGroup.None:\r
+                                                                                       case EHHGroup.Off:\r
                                                                                        case EHHGroup.LC_HH:\r
                                                                                                rChip = chipLC;\r
                                                                                                break;\r
@@ -3099,7 +3120,7 @@ namespace DTXMania
                                                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.nPoliphonicSounds; i++)\r
+                                               for (int i = 0; i < CDTXMania.Instance.ConfigIni.nPolyphonicSounds; i++)\r
                                                {\r
                                                        if (wc.rSound[i] != null)\r
                                                        {\r
@@ -3126,7 +3147,7 @@ namespace DTXMania
                                        {\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.nPoliphonicSounds; i++)\r
+                                               for (int i = 0; i < CDTXMania.Instance.ConfigIni.nPolyphonicSounds; i++)\r
                                                {\r
                                                        if (wc.rSound[i] != null)\r
                                                        {\r
@@ -3148,7 +3169,23 @@ namespace DTXMania
                                                }\r
                                        }\r
                                }\r
-                               else if (!pChip.bHit && (pChip.nバーからの距離dot.Drums < 0))\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
+                                                       case 1:\r
+                                                               CDTXMania.Instance.Skin.soundClickHigh.t再生する();\r
+                                                               break;\r
+                                                       case 2:\r
+                                                               CDTXMania.Instance.Skin.soundClickLow.t再生する();\r
+                                                               break;\r
+                                               }\r
+                                       }\r
+                               }\r
+                               else if ( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) )\r
                                {\r
                                        // other chips\r
                                        pChip.bHit = true;\r