OSDN Git Service

#23670 エラー発生時強制終了する前に例外の内容をダイアログ表示するようにした。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 08.結果 / CStage結果.cs
index 07fa69a..38fdf00 100644 (file)
@@ -12,13 +12,14 @@ namespace DTXMania
 \r
                public STDGBVALUE<bool> b新記録スキル;\r
                public STDGBVALUE<bool> b新記録スコア;\r
-               public STDGBVALUE<bool> b新記録ランク;\r
+        public STDGBVALUE<bool> b新記録ランク;\r
                public STDGBVALUE<float> fPerfect率;\r
                public STDGBVALUE<float> fGreat率;\r
                public STDGBVALUE<float> fGood率;\r
                public STDGBVALUE<float> fPoor率;\r
         public STDGBVALUE<float> fMiss率;\r
-        public STDGBVALUE<int> nオート;     // #23596 10.11.16 add ikanick\r
+        public STDGBVALUE<bool> bオート;        // #23596 10.11.16 add ikanick\r
+                                                //        10.11.17 change (int to bool) ikanick\r
                public STDGBVALUE<int> nランク値;\r
                public STDGBVALUE<int> n演奏回数;\r
                public int n総合ランク値;\r
@@ -30,11 +31,11 @@ namespace DTXMania
 \r
                public CStage結果()\r
                {\r
-                       STDGBVALUE<CScoreIni.C演奏記録> stdgbvalue = new STDGBVALUE<CScoreIni.C演奏記録>();\r
-                       stdgbvalue.Drums = new CScoreIni.C演奏記録();\r
-                       stdgbvalue.Guitar = new CScoreIni.C演奏記録();\r
-                       stdgbvalue.Bass = new CScoreIni.C演奏記録();\r
-                       this.st演奏記録 = stdgbvalue;\r
+//                     STDGBVALUE<CScoreIni.C演奏記録> stdgbvalue = new STDGBVALUE<CScoreIni.C演奏記録>();\r
+                       this.st演奏記録.Drums = new CScoreIni.C演奏記録();\r
+                       this.st演奏記録.Guitar = new CScoreIni.C演奏記録();\r
+                       this.st演奏記録.Bass = new CScoreIni.C演奏記録();\r
+//                     this.st演奏記録 = stdgbvalue;\r
                        this.r空うちドラムチップ = new CDTX.CChip[ 10 ];\r
                        this.n総合ランク値 = -1;\r
                        this.nチャンネル0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 7, 0 };\r
@@ -68,42 +69,48 @@ namespace DTXMania
                                for( int i = 0; i < 3; i++ )\r
                                {\r
                                        this.b新記録スキル[ i ] = false;\r
-                                       this.b新記録スコア[ i ] = false;\r
-                                       this.b新記録ランク[ i ] = false;\r
+                    this.b新記録スコア[ i ] = false;\r
+                    this.b新記録ランク[ i ] = false;\r
                                }\r
                                //---------------------\r
                                #endregion\r
 \r
                                #region [ 結果の計算 ]\r
                                //---------------------\r
-                               for( int j = 0; j < 3; j++ )\r
+                               for( int i = 0; i < 3; i++ )\r
                                {\r
-                                       this.nランク値[ j ] = -1;\r
-                                       if( ( ( ( j != 0 ) || ( CDTXMania.DTX.bチップがある.Drums && !CDTXMania.ConfigIni.bギタレボモード ) ) && ( ( j != 1 ) || CDTXMania.DTX.bチップがある.Guitar ) ) && ( ( j != 2 ) || CDTXMania.DTX.bチップがある.Bass ) )\r
+                                       this.nランク値[ i ] = -1;\r
+                                       if ( ( ( ( i != 0 ) || ( CDTXMania.DTX.bチップがある.Drums && !CDTXMania.ConfigIni.bギタレボモード ) ) && ( ( i != 1 ) || CDTXMania.DTX.bチップがある.Guitar ) ) && ( ( i != 2 ) || CDTXMania.DTX.bチップがある.Bass ) )\r
                                        {\r
-                                               CScoreIni.C演奏記録 part = this.st演奏記録[ j ];\r
-                                               bool guitar = true;\r
-                                               switch( j )\r
+                                               CScoreIni.C演奏記録 part = this.st演奏記録[ i ];\r
+                                               bool bIsAutoPlay = true;\r
+                                               switch( i )\r
                                                {\r
                                                        case 0:\r
-                                guitar = CDTXMania.ConfigIni.bドラムが全部オートプレイである;\r
+                                bIsAutoPlay = CDTXMania.ConfigIni.bドラムが全部オートプレイである;\r
                                                                break;\r
 \r
                                                        case 1:\r
-                                                               guitar = CDTXMania.ConfigIni.bAutoPlay.Guitar;\r
+                                                               bIsAutoPlay = CDTXMania.ConfigIni.bAutoPlay.Guitar;\r
                                                                break;\r
 \r
                                                        case 2:\r
-                                                               guitar = CDTXMania.ConfigIni.bAutoPlay.Bass;\r
+                                                               bIsAutoPlay = CDTXMania.ConfigIni.bAutoPlay.Bass;\r
                                                                break;\r
                                                }\r
-                                               this.fPerfect率[ j ] = guitar ? 0f : ( ( 100f * part.nPerfect数 ) / ( (float) part.n全チップ数 ) );\r
-                                               this.fGreat率[ j ] = guitar ? 0f : ( ( 100f * part.nGreat数 ) / ( (float) part.n全チップ数 ) );\r
-                                               this.fGood率[ j ] = guitar ? 0f : ( ( 100f * part.nGood数 ) / ( (float) part.n全チップ数 ) );\r
-                                               this.fPoor率[ j ] = guitar ? 0f : ( ( 100f * part.nPoor数 ) / ( (float) part.n全チップ数 ) );\r
-                                               this.fMiss率[ j ] = guitar ? 0f : ( ( 100f * part.nMiss数 ) / ( (float) part.n全チップ数 ) );\r
-                        this.nオート[ j ] = guitar ? 1 : 0; // #23596 10.11.16 add ikanick そのパートがオートなら1\r
-                                               this.nランク値[ j ] = CScoreIni.tランク値を計算して返す( part );\r
+                                               this.fPerfect率[ i ] = bIsAutoPlay ? 0f : ( ( 100f * part.nPerfect数 ) / ( (float) part.n全チップ数 ) );\r
+                                               this.fGreat率[ i ] = bIsAutoPlay ? 0f : ( ( 100f * part.nGreat数 ) / ( (float) part.n全チップ数 ) );\r
+                                               this.fGood率[ i ] = bIsAutoPlay ? 0f : ( ( 100f * part.nGood数 ) / ( (float) part.n全チップ数 ) );\r
+                                               this.fPoor率[ i ] = bIsAutoPlay ? 0f : ( ( 100f * part.nPoor数 ) / ( (float) part.n全チップ数 ) );\r
+                                               this.fMiss率[ i ] = bIsAutoPlay ? 0f : ( ( 100f * part.nMiss数 ) / ( (float) part.n全チップ数 ) );\r
+                                               this.bオート[ i ] = bIsAutoPlay;     // #23596 10.11.16 add ikanick そのパートがオートなら1\r
+                                                                                                                       //        10.11.17 change (int to bool) ikanick\r
+                                               this.nランク値[ i ] = CScoreIni.tランク値を計算して返す( part );\r
+//Debug.WriteLine( "rank[" + i + "]=" + this.nランク値[ i ] );\r
+//if ( this.nランク値[ i ] != -1 )\r
+//{\r
+//     this.n総合ランク値 = Math.Min( this.n総合ランク値, this.nランク値[ i ] );\r
+//}\r
                                        }\r
                                }\r
                                this.n総合ランク値 = CScoreIni.t総合ランク値を計算して返す( this.st演奏記録.Drums, this.st演奏記録.Guitar, this.st演奏記録.Bass );\r
@@ -117,34 +124,50 @@ namespace DTXMania
 \r
                                bool[] b今までにフルコンボしたことがある = new bool[] { false, false, false };\r
 \r
-                               for( int k = 0; k < 3; k++ )\r
+                               for( int i = 0; i < 3; i++ )\r
                                {\r
                                        // フルコンボチェックならびに新記録ランクチェックは、ini.Record[] が、スコアチェックや演奏型スキルチェックの IF 内で書き直されてしまうよりも前に行う。(2010.9.10)\r
                                        \r
-                                       b今までにフルコンボしたことがある[ k ] = ini.stセクション[ k * 2 ].bフルコンボである | ini.stセクション[ k * 2 + 1 ].bフルコンボである;\r
-\r
-                                       if( this.nランク値[ k ] <= CScoreIni.tランク値を計算して返す( ini.stセクション[ ( k * 2 ) + 1 ] ) )\r
+                                       b今までにフルコンボしたことがある[ i ] = ini.stセクション[ i * 2 ].bフルコンボである | ini.stセクション[ i * 2 + 1 ].bフルコンボである;\r
+\r
+                       //              if( this.nランク値[ i ] <= CScoreIni.tランク値を計算して返す( ini.stセクション[ ( i * 2 ) + 1 ] ) )\r
+                       //              {\r
+                       //                      this.b新記録ランク[ i ] = true;\r
+                       //              }\r
+                                       // 上記の条件だと[HiSkill.***]でのランクしかチェックしていないので、BestRankと比較するよう変更\r
+                                       if ( this.nランク値[ i ] >= 0 && ini.stファイル.BestRank[ i ] > this.nランク値[ i ] )               // #24459 2011.3.1 yyagi update BestRank\r
                                        {\r
-                                               this.b新記録ランク[ k ] = true;\r
+                                               this.b新記録ランク[ i ] = true;\r
+                                               ini.stファイル.BestRank[ i ] = this.nランク値[ i ];\r
                                        }\r
 \r
                                        // 新記録スコアチェック\r
-                                       if( this.st演奏記録[ k ].nスコア > ini.stセクション[ k * 2 ].nスコア )\r
+                                       if( this.st演奏記録[ i ].nスコア > ini.stセクション[ i * 2 ].nスコア )\r
                                        {\r
-                                               this.b新記録スコア[ k ] = true;\r
-                                               ini.stセクション[ k * 2 ] = this.st演奏記録[ k ];\r
+                                               this.b新記録スコア[ i ] = true;\r
+                                               ini.stセクション[ i * 2 ] = this.st演奏記録[ i ];\r
                                        }\r
 \r
-                                       // 新記録スキルチェック\r
-                                       if( this.st演奏記録[ k ].db演奏型スキル値 > ini.stセクション[ ( k * 2 ) + 1 ].db演奏型スキル値 )\r
-                                       {\r
-                                               this.b新記録スキル[ k ] = true;\r
-                                               ini.stセクション[ ( k * 2 ) + 1 ] = this.st演奏記録[ k ];\r
-                                       }\r
+                    // 新記録スキルチェック\r
+                    if (this.st演奏記録[i].db演奏型スキル値 > ini.stセクション[(i * 2) + 1].db演奏型スキル値)\r
+                    {\r
+                        this.b新記録スキル[ i ] = true;\r
+                        ini.stセクション[(i * 2) + 1] = this.st演奏記録[ i ];\r
+                    }\r
+                    // ラストプレイ #23595 2011.1.9 ikanick\r
+                    // オートじゃなければプレイ結果を書き込む\r
+                    if (this.bオート[ i ] == false) {\r
+                        ini.stセクション[i + 6] = this.st演奏記録[ i ];\r
+                    }\r
+\r
                     // #23596 10.11.16 add ikanick オートじゃないならクリア回数を1増やす\r
-                    if (this.nオート[ k ] == 0)\r
+                    //        11.02.05 bオート to t更新条件を取得する use      ikanick\r
+                                       bool[] b更新が必要か否か = new bool[ 3 ];\r
+                                       CScoreIni.t更新条件を取得する( out b更新が必要か否か[ 0 ], out b更新が必要か否か[ 1 ], out b更新が必要か否か[ 2 ] );\r
+\r
+                    if (b更新が必要か否か[ i ])\r
                     {\r
-                        switch ( k )\r
+                        switch ( i )\r
                         {\r
                             case 0:\r
                                 ini.stファイル.ClearCountDrums++;\r
@@ -155,6 +178,8 @@ namespace DTXMania
                             case 2:\r
                                 ini.stファイル.ClearCountBass++;\r
                                 break;\r
+                            default:\r
+                                throw new Exception("クリア回数増加のk(0-2)が範囲外です。");\r
                         }\r
                     }\r
                     //---------------------------------------------------------------------/\r
@@ -163,16 +188,21 @@ namespace DTXMania
                                //---------------------\r
                                #endregion\r
 \r
+                               #region [ リザルト画面への演奏回数の更新 #24281 2011.1.30 yyagi]\r
+                               this.n演奏回数.Drums = ini.stファイル.PlayCountDrums;\r
+                               this.n演奏回数.Guitar = ini.stファイル.PlayCountGuitar;\r
+                               this.n演奏回数.Bass = ini.stファイル.PlayCountBass;\r
+                               #endregion\r
                                #region [ 選曲画面の譜面情報の更新 ]\r
                                //---------------------\r
                                if( !CDTXMania.bコンパクトモード )\r
                                {\r
                                        Cスコア cスコア = CDTXMania.stage選曲.r確定されたスコア;\r
-                                       bool[] flagArray = new bool[ 3 ];\r
-                                       CScoreIni.t更新条件を取得する( out flagArray[ 0 ], out flagArray[ 1 ], out flagArray[ 2 ] );\r
+                                       bool[] b更新が必要か否か = new bool[ 3 ];\r
+                                       CScoreIni.t更新条件を取得する( out b更新が必要か否か[ 0 ], out b更新が必要か否か[ 1 ], out b更新が必要か否か[ 2 ] );\r
                                        for( int m = 0; m < 3; m++ )\r
                                        {\r
-                                               if( flagArray[ m ] )\r
+                                               if( b更新が必要か否か[ m ] )\r
                                                {\r
                                                        // FullCombo した記録を FullCombo なしで超えた場合、FullCombo マークが消えてしまう。\r
                                                        // → FullCombo は、最新記録と関係なく、一度達成したらずっとつくようにする。(2010.9.11)\r
@@ -181,12 +211,12 @@ namespace DTXMania
                                                        if( this.b新記録スキル[ m ] )\r
                                                        {\r
                                                                cスコア.譜面情報.最大スキル[ m ] = this.st演奏記録[ m ].db演奏型スキル値;\r
-                                                       }\r
+                            }\r
 \r
-                                                       if( this.b新記録ランク[ m ] )\r
-                                                       {\r
-                                                               cスコア.譜面情報.最大ランク[ m ] = this.nランク値[ m ];\r
-                                                       }\r
+                            if (this.b新記録ランク[ m ])\r
+                            {\r
+                                cスコア.譜面情報.最大ランク[ m ] = this.nランク値[ m ];\r
+                            }\r
                                                }\r
                                        }\r
                                }\r
@@ -423,7 +453,7 @@ namespace DTXMania
                                                        }\r
                                                }\r
                                        }\r
-                                       if( ( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || CDTXMania.Input管理.Keyboard.bキーが押された( 0x75 ) ) ) && !this.bアニメが完了 )\r
+                                       if( ( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || CDTXMania.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.Return ) ) ) && !this.bアニメが完了 )\r
                                        {\r
                                                this.actResultImage.tアニメを完了させる();\r
                                                this.actParameterPanel.tアニメを完了させる();\r
@@ -433,14 +463,14 @@ namespace DTXMania
                                        }\r
                                        if( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 )\r
                                        {\r
-                                               if( CDTXMania.Input管理.Keyboard.bキーが押された( 0x35 ) )\r
+                                               if ( CDTXMania.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.Escape ) )\r
                                                {\r
                                                        CDTXMania.Skin.sound取消音.t再生する();\r
                                                        this.actFO.tフェードアウト開始();\r
                                                        base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
                                                        this.eフェードアウト完了時の戻り値 = E戻り値.完了;\r
                                                }\r
-                                               if( ( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || CDTXMania.Input管理.Keyboard.bキーが押された( 0x75 ) ) ) && this.bアニメが完了 )\r
+                                               if ( ( ( CDTXMania.Pad.b押されたDGB( Eパッド.CY ) || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD ) ) || ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC ) || CDTXMania.Input管理.Keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Return ) ) ) && this.bアニメが完了 )\r
                                                {\r
                                                        CDTXMania.Skin.sound取消音.t再生する();\r
                                                        this.actFO.tフェードアウト開始();\r