OSDN Git Service

#25399 リザルト画像自動保存機能のON/OFFを可能とした。CONFIGURATION/System/AutoSaveResult にて。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 08.結果 / CStage結果.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.IO;\r
4 using System.Text;\r
5 using System.Diagnostics;\r
6 using FDK;\r
7 using SlimDX.Direct3D9;\r
8 \r
9 namespace DTXMania\r
10 {\r
11         internal class CStage結果 : CStage\r
12         {\r
13                 // プロパティ\r
14 \r
15                 public STDGBVALUE<bool> b新記録スキル;\r
16                 public STDGBVALUE<bool> b新記録スコア;\r
17         public STDGBVALUE<bool> b新記録ランク;\r
18                 public STDGBVALUE<float> fPerfect率;\r
19                 public STDGBVALUE<float> fGreat率;\r
20                 public STDGBVALUE<float> fGood率;\r
21                 public STDGBVALUE<float> fPoor率;\r
22         public STDGBVALUE<float> fMiss率;\r
23         public STDGBVALUE<bool> bオート;        // #23596 10.11.16 add ikanick\r
24                                                 //        10.11.17 change (int to bool) ikanick\r
25                 public STDGBVALUE<int> nランク値;\r
26                 public STDGBVALUE<int> n演奏回数;\r
27                 public int n総合ランク値;\r
28                 public CDTX.CChip[] r空うちドラムチップ;\r
29                 public STDGBVALUE<CScoreIni.C演奏記録> st演奏記録;\r
30 \r
31 \r
32                 // コンストラクタ\r
33 \r
34                 public CStage結果()\r
35                 {\r
36                         this.st演奏記録.Drums = new CScoreIni.C演奏記録();\r
37                         this.st演奏記録.Guitar = new CScoreIni.C演奏記録();\r
38                         this.st演奏記録.Bass = new CScoreIni.C演奏記録();\r
39                         this.r空うちドラムチップ = new CDTX.CChip[ 10 ];\r
40                         this.n総合ランク値 = -1;\r
41                         this.nチャンネル0Atoレーン07 = new int[] { 1, 2, 3, 4, 5, 7, 6, 1, 7, 0 };\r
42                         base.eステージID = CStage.Eステージ.結果;\r
43                         base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
44                         base.b活性化してない = true;\r
45                         base.list子Activities.Add( this.actResultImage = new CActResultImage() );\r
46                         base.list子Activities.Add( this.actParameterPanel = new CActResultParameterPanel() );\r
47                         base.list子Activities.Add( this.actRank = new CActResultRank() );\r
48                         base.list子Activities.Add( this.actSongBar = new CActResultSongBar() );\r
49                         base.list子Activities.Add( this.actOption = new CActオプションパネル() );\r
50                         base.list子Activities.Add( this.actFI = new CActFIFOWhite() );\r
51                         base.list子Activities.Add( this.actFO = new CActFIFOBlack() );\r
52                 }\r
53 \r
54                 \r
55                 // CStage 実装\r
56 \r
57                 public override void On活性化()\r
58                 {\r
59                         Trace.TraceInformation( "結果ステージを活性化します。" );\r
60                         Trace.Indent();\r
61                         try\r
62                         {\r
63                                 #region [ 初期化 ]\r
64                                 //---------------------\r
65                                 this.eフェードアウト完了時の戻り値 = E戻り値.継続;\r
66                                 this.bアニメが完了 = false;\r
67                                 this.bIsCheckedWhetherResultScreenShouldSaveOrNot = false;                              // #24609 2011.3.14 yyagi\r
68                                 this.n最後に再生したHHのWAV番号 = -1;\r
69                                 this.n最後に再生したHHのチャンネル番号 = 0;\r
70                                 for( int i = 0; i < 3; i++ )\r
71                                 {\r
72                                         this.b新記録スキル[ i ] = false;\r
73                     this.b新記録スコア[ i ] = false;\r
74                     this.b新記録ランク[ i ] = false;\r
75                                 }\r
76                                 //---------------------\r
77                                 #endregion\r
78 \r
79                                 #region [ 結果の計算 ]\r
80                                 //---------------------\r
81                                 for( int i = 0; i < 3; i++ )\r
82                                 {\r
83                                         this.nランク値[ i ] = -1;\r
84                                         if ( ( ( ( i != 0 ) || ( CDTXMania.DTX.bチップがある.Drums && !CDTXMania.ConfigIni.bギタレボモード ) ) && ( ( i != 1 ) || CDTXMania.DTX.bチップがある.Guitar ) ) && ( ( i != 2 ) || CDTXMania.DTX.bチップがある.Bass ) )\r
85                                         {\r
86                                                 CScoreIni.C演奏記録 part = this.st演奏記録[ i ];\r
87                                                 bool bIsAutoPlay = true;\r
88                                                 switch( i )\r
89                                                 {\r
90                                                         case 0:\r
91                                 bIsAutoPlay = CDTXMania.ConfigIni.bドラムが全部オートプレイである;\r
92                                                                 break;\r
93 \r
94                                                         case 1:\r
95                                                                 bIsAutoPlay = CDTXMania.ConfigIni.bAutoPlay.Guitar;\r
96                                                                 break;\r
97 \r
98                                                         case 2:\r
99                                                                 bIsAutoPlay = CDTXMania.ConfigIni.bAutoPlay.Bass;\r
100                                                                 break;\r
101                                                 }\r
102                                                 this.fPerfect率[ i ] = bIsAutoPlay ? 0f : ( ( 100f * part.nPerfect数 ) / ( (float) part.n全チップ数 ) );\r
103                                                 this.fGreat率[ i ] = bIsAutoPlay ? 0f : ( ( 100f * part.nGreat数 ) / ( (float) part.n全チップ数 ) );\r
104                                                 this.fGood率[ i ] = bIsAutoPlay ? 0f : ( ( 100f * part.nGood数 ) / ( (float) part.n全チップ数 ) );\r
105                                                 this.fPoor率[ i ] = bIsAutoPlay ? 0f : ( ( 100f * part.nPoor数 ) / ( (float) part.n全チップ数 ) );\r
106                                                 this.fMiss率[ i ] = bIsAutoPlay ? 0f : ( ( 100f * part.nMiss数 ) / ( (float) part.n全チップ数 ) );\r
107                                                 this.bオート[ i ] = bIsAutoPlay;     // #23596 10.11.16 add ikanick そのパートがオートなら1\r
108                                                                                                                         //        10.11.17 change (int to bool) ikanick\r
109                                                 this.nランク値[ i ] = CScoreIni.tランク値を計算して返す( part );\r
110                                         }\r
111                                 }\r
112                                 this.n総合ランク値 = CScoreIni.t総合ランク値を計算して返す( this.st演奏記録.Drums, this.st演奏記録.Guitar, this.st演奏記録.Bass );\r
113                                 //---------------------\r
114                                 #endregion\r
115 \r
116                                 #region [ .score.ini の作成と出力 ]\r
117                                 //---------------------\r
118                                 string str = CDTXMania.DTX.strファイル名の絶対パス + ".score.ini";\r
119                                 CScoreIni ini = new CScoreIni( str );\r
120 \r
121                                 bool[] b今までにフルコンボしたことがある = new bool[] { false, false, false };\r
122 \r
123                                 for( int i = 0; i < 3; i++ )\r
124                                 {\r
125                                         // フルコンボチェックならびに新記録ランクチェックは、ini.Record[] が、スコアチェックや演奏型スキルチェックの IF 内で書き直されてしまうよりも前に行う。(2010.9.10)\r
126                                         \r
127                                         b今までにフルコンボしたことがある[ i ] = ini.stセクション[ i * 2 ].bフルコンボである | ini.stセクション[ i * 2 + 1 ].bフルコンボである;\r
128 \r
129                                         #region [deleted by #24459]\r
130                         //              if( this.nランク値[ i ] <= CScoreIni.tランク値を計算して返す( ini.stセクション[ ( i * 2 ) + 1 ] ) )\r
131                         //              {\r
132                         //                      this.b新記録ランク[ i ] = true;\r
133                                         //              }\r
134                                         #endregion\r
135                                         // #24459 上記の条件だと[HiSkill.***]でのランクしかチェックしていないので、BestRankと比較するよう変更。\r
136                                         if ( this.nランク値[ i ] >= 0 && ini.stファイル.BestRank[ i ] > this.nランク値[ i ] )               // #24459 2011.3.1 yyagi update BestRank\r
137                                         {\r
138                                                 this.b新記録ランク[ i ] = true;\r
139                                                 ini.stファイル.BestRank[ i ] = this.nランク値[ i ];\r
140                                         }\r
141 \r
142                                         // 新記録スコアチェック\r
143                                         if( this.st演奏記録[ i ].nスコア > ini.stセクション[ i * 2 ].nスコア )\r
144                                         {\r
145                                                 this.b新記録スコア[ i ] = true;\r
146                                                 ini.stセクション[ i * 2 ] = this.st演奏記録[ i ];\r
147                                         }\r
148 \r
149                     // 新記録スキルチェック\r
150                     if (this.st演奏記録[i].db演奏型スキル値 > ini.stセクション[(i * 2) + 1].db演奏型スキル値)\r
151                     {\r
152                         this.b新記録スキル[ i ] = true;\r
153                         ini.stセクション[(i * 2) + 1] = this.st演奏記録[ i ];\r
154                     }\r
155                     // ラストプレイ #23595 2011.1.9 ikanick\r
156                     // オートじゃなければプレイ結果を書き込む\r
157                     if (this.bオート[ i ] == false) {\r
158                         ini.stセクション[i + 6] = this.st演奏記録[ i ];\r
159                     }\r
160 \r
161                     // #23596 10.11.16 add ikanick オートじゃないならクリア回数を1増やす\r
162                     //        11.02.05 bオート to t更新条件を取得する use      ikanick\r
163                                         bool[] b更新が必要か否か = new bool[ 3 ];\r
164                                         CScoreIni.t更新条件を取得する( out b更新が必要か否か[ 0 ], out b更新が必要か否か[ 1 ], out b更新が必要か否か[ 2 ] );\r
165 \r
166                     if (b更新が必要か否か[ i ])\r
167                     {\r
168                         switch ( i )\r
169                         {\r
170                             case 0:\r
171                                 ini.stファイル.ClearCountDrums++;\r
172                                 break;\r
173                             case 1:\r
174                                 ini.stファイル.ClearCountGuitar++;\r
175                                 break;\r
176                             case 2:\r
177                                 ini.stファイル.ClearCountBass++;\r
178                                 break;\r
179                             default:\r
180                                 throw new Exception("クリア回数増加のk(0-2)が範囲外です。");\r
181                         }\r
182                     }\r
183                     //---------------------------------------------------------------------/\r
184                                 }\r
185                                 ini.t書き出し( str );\r
186                                 //---------------------\r
187                                 #endregion\r
188 \r
189                                 #region [ リザルト画面への演奏回数の更新 #24281 2011.1.30 yyagi]\r
190                                 this.n演奏回数.Drums = ini.stファイル.PlayCountDrums;\r
191                                 this.n演奏回数.Guitar = ini.stファイル.PlayCountGuitar;\r
192                                 this.n演奏回数.Bass = ini.stファイル.PlayCountBass;\r
193                                 #endregion\r
194                                 #region [ 選曲画面の譜面情報の更新 ]\r
195                                 //---------------------\r
196                                 if( !CDTXMania.bコンパクトモード )\r
197                                 {\r
198                                         Cスコア cスコア = CDTXMania.stage選曲.r確定されたスコア;\r
199                                         bool[] b更新が必要か否か = new bool[ 3 ];\r
200                                         CScoreIni.t更新条件を取得する( out b更新が必要か否か[ 0 ], out b更新が必要か否か[ 1 ], out b更新が必要か否か[ 2 ] );\r
201                                         for( int m = 0; m < 3; m++ )\r
202                                         {\r
203                                                 if( b更新が必要か否か[ m ] )\r
204                                                 {\r
205                                                         // FullCombo した記録を FullCombo なしで超えた場合、FullCombo マークが消えてしまう。\r
206                                                         // → FullCombo は、最新記録と関係なく、一度達成したらずっとつくようにする。(2010.9.11)\r
207                                                         cスコア.譜面情報.フルコンボ[ m ] = this.st演奏記録[ m ].bフルコンボである | b今までにフルコンボしたことがある[ m ];\r
208 \r
209                                                         if( this.b新記録スキル[ m ] )\r
210                                                         {\r
211                                                                 cスコア.譜面情報.最大スキル[ m ] = this.st演奏記録[ m ].db演奏型スキル値;\r
212                             }\r
213 \r
214                             if (this.b新記録ランク[ m ])\r
215                             {\r
216                                 cスコア.譜面情報.最大ランク[ m ] = this.nランク値[ m ];\r
217                             }\r
218                                                 }\r
219                                         }\r
220                                 }\r
221                                 //---------------------\r
222                                 #endregion\r
223 \r
224                                 #region [ #RESULTSOUND_xx の再生(あれば)]\r
225                                 //---------------------\r
226                                 int rank = CScoreIni.t総合ランク値を計算して返す( this.st演奏記録.Drums, this.st演奏記録.Guitar, this.st演奏記録.Bass );\r
227 \r
228                                 if (rank == 99) // #23534 2010.10.28 yyagi: 演奏チップが0個のときは、rankEと見なす\r
229                                 {\r
230                                         rank = 6;\r
231                                 }\r
232         \r
233                                 if( string.IsNullOrEmpty( CDTXMania.DTX.RESULTSOUND[ rank ] ) )\r
234                                 {\r
235                                         CDTXMania.Skin.soundステージクリア音.t再生する();\r
236                                         this.rResultSound = null;\r
237                                 }\r
238                                 else\r
239                                 {\r
240                                         string str2 = CDTXMania.DTX.strフォルダ名 + CDTXMania.DTX.RESULTSOUND[ rank ];\r
241                                         try\r
242                                         {\r
243                                                 this.rResultSound = CDTXMania.Sound管理.tサウンドを生成する( str2 );\r
244                                         }\r
245                                         catch\r
246                                         {\r
247                                                 Trace.TraceError( "サウンドの生成に失敗しました。({0})", new object[] { str2 } );\r
248                                                 this.rResultSound = null;\r
249                                         }\r
250                                 }\r
251                                 //---------------------\r
252                                 #endregion\r
253 \r
254                                 base.On活性化();\r
255                         }\r
256                         finally\r
257                         {\r
258                                 Trace.TraceInformation( "結果ステージの活性化を完了しました。" );\r
259                                 Trace.Unindent();\r
260                         }\r
261                 }\r
262                 public override void On非活性化()\r
263                 {\r
264                         if( this.rResultSound != null )\r
265                         {\r
266                                 CDTXMania.Sound管理.tサウンドを破棄する( this.rResultSound );\r
267                                 this.rResultSound = null;\r
268                         }\r
269                         base.On非活性化();\r
270                 }\r
271                 public override void OnManagedリソースの作成()\r
272                 {\r
273                         if( !base.b活性化してない )\r
274                         {\r
275                                 this.tx背景 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult background.jpg" ) );\r
276                                 this.tx上部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult header panel.png" ), true );\r
277                                 this.tx下部パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenResult footer panel.png" ), true );\r
278                                 this.txオプションパネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\Screen option panels.png" ) );\r
279                                 base.OnManagedリソースの作成();\r
280                         }\r
281                 }\r
282                 public override void OnManagedリソースの解放()\r
283                 {\r
284                         if( !base.b活性化してない )\r
285                         {\r
286                                 if( this.ct登場用 != null )\r
287                                 {\r
288                                         this.ct登場用 = null;\r
289                                 }\r
290                                 CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
291                                 CDTXMania.tテクスチャの解放( ref this.tx上部パネル );\r
292                                 CDTXMania.tテクスチャの解放( ref this.tx下部パネル );\r
293                                 CDTXMania.tテクスチャの解放( ref this.txオプションパネル );\r
294                                 base.OnManagedリソースの解放();\r
295                         }\r
296                 }\r
297                 public override int On進行描画()\r
298                 {\r
299                         if( !base.b活性化してない )\r
300                         {\r
301                                 int num;\r
302                                 if( base.b初めての進行描画 )\r
303                                 {\r
304                                         this.ct登場用 = new CCounter( 0, 100, 5, CDTXMania.Timer );\r
305                                         this.actFI.tフェードイン開始();\r
306                                         base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
307                                         if( this.rResultSound != null )\r
308                                         {\r
309                                                 this.rResultSound.t再生を開始する();\r
310                                         }\r
311                                         base.b初めての進行描画 = false;\r
312                                 }\r
313                                 this.bアニメが完了 = true;\r
314                                 if( this.ct登場用.b進行中 )\r
315                                 {\r
316                                         this.ct登場用.t進行();\r
317                                         if( this.ct登場用.b終了値に達した )\r
318                                         {\r
319                                                 this.ct登場用.t停止();\r
320                                         }\r
321                                         else\r
322                                         {\r
323                                                 this.bアニメが完了 = false;\r
324                                         }\r
325                                 }\r
326 \r
327                                 // 描画\r
328 \r
329                                 if( this.tx背景 != null )\r
330                                 {\r
331                                         this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
332                                 }\r
333                                 if( this.ct登場用.b進行中 && ( this.tx上部パネル != null ) )\r
334                                 {\r
335                                         double num2 = ( (double) this.ct登場用.n現在の値 ) / 100.0;\r
336                                         double num3 = Math.Sin( Math.PI / 2 * num2 );\r
337                                         num = ( (int) ( this.tx上部パネル.sz画像サイズ.Height * num3 ) ) - this.tx上部パネル.sz画像サイズ.Height;\r
338                                 }\r
339                                 else\r
340                                 {\r
341                                         num = 0;\r
342                                 }\r
343                                 if( this.tx上部パネル != null )\r
344                                 {\r
345                                         this.tx上部パネル.t2D描画( CDTXMania.app.Device, 0, num );\r
346                                 }\r
347                                 if( this.tx下部パネル != null )\r
348                                 {\r
349                                         this.tx下部パネル.t2D描画( CDTXMania.app.Device, 0, 480 - this.tx下部パネル.sz画像サイズ.Height );\r
350                                 }\r
351                                 this.actOption.On進行描画();\r
352                                 if( this.actResultImage.On進行描画() == 0 )\r
353                                 {\r
354                                         this.bアニメが完了 = false;\r
355                                 }\r
356                                 if ( this.actParameterPanel.On進行描画() == 0 )\r
357                                 {\r
358                                         this.bアニメが完了 = false;\r
359                                 }\r
360                                 if ( this.actRank.On進行描画() == 0 )\r
361                                 {\r
362                                         this.bアニメが完了 = false;\r
363                                 }\r
364                                 if ( this.actSongBar.On進行描画() == 0 )\r
365                                 {\r
366                                         this.bアニメが完了 = false;\r
367                                 }\r
368                                 if( base.eフェーズID == CStage.Eフェーズ.共通_フェードイン )\r
369                                 {\r
370                                         if( this.actFI.On進行描画() != 0 )\r
371                                         {\r
372                                                 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
373                                         }\r
374                                 }\r
375                                 else if( ( base.eフェーズID == CStage.Eフェーズ.共通_フェードアウト ) && ( this.actFO.On進行描画() != 0 ) )\r
376                                 {\r
377                                         return (int) this.eフェードアウト完了時の戻り値;\r
378                                 }\r
379                                 #region [ #24609 2011.3.14 yyagi ランク更新or演奏型スキル更新時、リザルト画像をpngで保存する ]\r
380                                 if ( this.bアニメが完了 == true && this.bIsCheckedWhetherResultScreenShouldSaveOrNot == false     // #24609 2011.3.14 yyagi; to save result screen in case BestRank or HiSkill.\r
381                                         && CDTXMania.ConfigIni.bScoreIniを出力する\r
382                                         && CDTXMania.ConfigIni.bIsAutoResultCapture)                                                                                            // #25399 2011.6.9 yyagi\r
383                                 {\r
384                                         CheckAndSaveResultScreen(true);\r
385                                         this.bIsCheckedWhetherResultScreenShouldSaveOrNot = true;\r
386                                 }\r
387                                 #endregion\r
388 \r
389                                 // キー入力\r
390 \r
391                                 if( CDTXMania.act現在入力を占有中のプラグイン == null )\r
392                                 {\r
393                                         if( CDTXMania.ConfigIni.bドラム打音を発声する && CDTXMania.ConfigIni.bDrums有効 )\r
394                                         {\r
395                                                 for( int i = 0; i < 10; i++ )\r
396                                                 {\r
397                                                         List<STInputEvent> events = CDTXMania.Pad.GetEvents( E楽器パート.DRUMS, (Eパッド) i );\r
398                                                         if( ( events != null ) && ( events.Count > 0 ) )\r
399                                                         {\r
400                                                                 foreach( STInputEvent event2 in events )\r
401                                                                 {\r
402                                                                         if( !event2.b押された )\r
403                                                                         {\r
404                                                                                 continue;\r
405                                                                         }\r
406                                                                         CDTX.CChip rChip = this.r空うちドラムチップ[ i ];\r
407                                                                         if( rChip == null )\r
408                                                                         {\r
409                                                                                 switch( ( (Eパッド) i ) )\r
410                                                                                 {\r
411                                                                                         case Eパッド.HH:\r
412                                                                                                 rChip = this.r空うちドラムチップ[ 7 ];\r
413                                                                                                 if( rChip == null )\r
414                                                                                                 {\r
415                                                                                                         rChip = this.r空うちドラムチップ[ 9 ];\r
416                                                                                                 }\r
417                                                                                                 break;\r
418 \r
419                                                                                         case Eパッド.FT:\r
420                                                                                                 rChip = this.r空うちドラムチップ[ 4 ];\r
421                                                                                                 break;\r
422 \r
423                                                                                         case Eパッド.CY:\r
424                                                                                                 rChip = this.r空うちドラムチップ[ 8 ];\r
425                                                                                                 break;\r
426 \r
427                                                                                         case Eパッド.HHO:\r
428                                                                                                 rChip = this.r空うちドラムチップ[ 0 ];\r
429                                                                                                 if( rChip == null )\r
430                                                                                                 {\r
431                                                                                                         rChip = this.r空うちドラムチップ[ 9 ];\r
432                                                                                                 }\r
433                                                                                                 break;\r
434 \r
435                                                                                         case Eパッド.RD:\r
436                                                                                                 rChip = this.r空うちドラムチップ[ 6 ];\r
437                                                                                                 break;\r
438 \r
439                                                                                         case Eパッド.LC:\r
440                                                                                                 rChip = this.r空うちドラムチップ[ 0 ];\r
441                                                                                                 if( rChip == null )\r
442                                                                                                 {\r
443                                                                                                         rChip = this.r空うちドラムチップ[ 7 ];\r
444                                                                                                 }\r
445                                                                                                 break;\r
446                                                                                 }\r
447                                                                         }\r
448                                                                         if( ( ( rChip != null ) && ( rChip.nチャンネル番号 >= 0x11 ) ) && ( rChip.nチャンネル番号 <= 0x1a ) )\r
449                                                                         {\r
450                                                                                 int nLane = this.nチャンネル0Atoレーン07[ rChip.nチャンネル番号 - 0x11 ];\r
451                                                                                 if( ( nLane == 1 ) && ( ( rChip.nチャンネル番号 == 0x11 ) || ( ( rChip.nチャンネル番号 == 0x18 ) && ( this.n最後に再生したHHのチャンネル番号 != 0x18 ) ) ) )\r
452                                                                                 {\r
453                                                                                         CDTXMania.DTX.tWavの再生停止( this.n最後に再生したHHのWAV番号 );\r
454                                                                                         this.n最後に再生したHHのWAV番号 = rChip.n整数値・内部番号;\r
455                                                                                         this.n最後に再生したHHのチャンネル番号 = rChip.nチャンネル番号;\r
456                                                                                 }\r
457                                                                                 CDTXMania.DTX.tチップの再生( rChip, CDTXMania.Timer.nシステム時刻, nLane, CDTXMania.ConfigIni.n手動再生音量, CDTXMania.ConfigIni.b演奏音を強調する.Drums );\r
458                                                                         }\r
459                                                                 }\r
460                                                         }\r
461                                                 }\r
462                                         }\r
463                                         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
464                                         {\r
465                                                 this.actResultImage.tアニメを完了させる();\r
466                                                 this.actParameterPanel.tアニメを完了させる();\r
467                                                 this.actRank.tアニメを完了させる();\r
468                                                 this.actSongBar.tアニメを完了させる();\r
469                                                 this.ct登場用.t停止();\r
470                                         }\r
471                                         #region [ #24609 2011.4.7 yyagi リザルト画面で[F12]を押下すると、リザルト画像をpngで保存する機能は、CDTXManiaに移管。 ]\r
472 //                                      if ( CDTXMania.Input管理.Keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.F12 ) &&\r
473 //                                              CDTXMania.ConfigIni.bScoreIniを出力する )\r
474 //                                      {\r
475 //                                              CheckAndSaveResultScreen(false);\r
476 //                                              this.bIsCheckedWhetherResultScreenShouldSaveOrNot = true;\r
477 //                                      }\r
478                                         #endregion\r
479                                         if ( base.eフェーズID == CStage.Eフェーズ.共通_通常状態 )\r
480                                         {\r
481                                                 if ( CDTXMania.Input管理.Keyboard.bキーが押された( (int)SlimDX.DirectInput.Key.Escape ) )\r
482                                                 {\r
483                                                         CDTXMania.Skin.sound取消音.t再生する();\r
484                                                         this.actFO.tフェードアウト開始();\r
485                                                         base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
486                                                         this.eフェードアウト完了時の戻り値 = E戻り値.完了;\r
487                                                 }\r
488                                                 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
489                                                 {\r
490                                                         CDTXMania.Skin.sound取消音.t再生する();\r
491                                                         this.actFO.tフェードアウト開始();\r
492                                                         base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
493                                                         this.eフェードアウト完了時の戻り値 = E戻り値.完了;\r
494                                                 }\r
495                                         }\r
496                                 }\r
497                         }\r
498                         return 0;\r
499                 }\r
500 \r
501                 public enum E戻り値 : int\r
502                 {\r
503                         継続,\r
504                         完了\r
505                 }\r
506 \r
507 \r
508                 // その他\r
509 \r
510                 #region [ private ]\r
511                 //-----------------\r
512                 private CCounter ct登場用;\r
513                 private E戻り値 eフェードアウト完了時の戻り値;\r
514                 private CActFIFOWhite actFI;\r
515                 private CActFIFOBlack actFO;\r
516                 private CActオプションパネル actOption;\r
517                 private CActResultParameterPanel actParameterPanel;\r
518                 private CActResultRank actRank;\r
519                 private CActResultImage actResultImage;\r
520                 private CActResultSongBar actSongBar;\r
521                 private bool bアニメが完了;\r
522                 private bool bIsCheckedWhetherResultScreenShouldSaveOrNot;                              // #24509 2011.3.14 yyagi\r
523                 private readonly int[] nチャンネル0Atoレーン07;\r
524                 private int n最後に再生したHHのWAV番号;\r
525                 private int n最後に再生したHHのチャンネル番号;\r
526                 private CSound rResultSound;\r
527                 private CTexture txオプションパネル;\r
528                 private CTexture tx下部パネル;\r
529                 private CTexture tx上部パネル;\r
530                 private CTexture tx背景;\r
531 \r
532                 #region [ #24609 リザルト画像をpngで保存する ]              // #24609 2011.3.14 yyagi; to save result screen in case BestRank or HiSkill.\r
533                 /// <summary>\r
534                 /// リザルト画像のキャプチャと保存。\r
535                 /// 自動保存モード時は、ランク更新or演奏型スキル更新時に自動保存。\r
536                 /// 手動保存モード時は、ランクに依らず保存。\r
537                 /// </summary>\r
538                 /// <param name="bIsAutoSave">true=自動保存モード, false=手動保存モード</param>\r
539                 private void CheckAndSaveResultScreen(bool bIsAutoSave)\r
540                 {\r
541                         string path = Path.GetDirectoryName( CDTXMania.DTX.strファイル名の絶対パス );\r
542                         string datetime = DateTime.Now.ToString( "yyyyMMddHHmmss" );\r
543                         if ( bIsAutoSave )\r
544                         {\r
545                                 // リザルト画像を自動保存するときは、dtxファイル名.yyMMddHHmmss_DRUMS_SS.png という形式で保存。\r
546                                 for ( int i = 0; i < 3; i++ )\r
547                                 {\r
548                                         if ( this.b新記録ランク[ i ] == true || this.b新記録スキル[ i ] == true )\r
549                                         {\r
550                                                 string strPart = ( (E楽器パート) ( i ) ).ToString();\r
551                                                 string strRank = ( (CScoreIni.ERANK) ( this.nランク値[ i ] ) ).ToString();\r
552                                                 string strFullPath = CDTXMania.DTX.strファイル名の絶対パス + "." + datetime + "_" + strPart + "_" + strRank + ".png";\r
553                                                 //Surface.ToFile( pSurface, strFullPath, ImageFileFormat.Png );\r
554                                                 CDTXMania.app.SaveResultScreen( strFullPath );\r
555                                         }\r
556                                 }\r
557                         }\r
558                         #region [ #24609 2011.4.11 yyagi; リザルトの手動保存ロジックは、CDTXManiaに移管した。]\r
559 //                      else\r
560 //                      {\r
561 //                              // リザルト画像を手動保存するときは、dtxファイル名.yyMMddHHmmss_SS.png という形式で保存。(楽器名無し)\r
562 //                              string strRank = ( (CScoreIni.ERANK) ( CDTXMania.stage結果.n総合ランク値 ) ).ToString();\r
563 //                              string strSavePath = CDTXMania.strEXEのあるフォルダ + "\\" + "Capture_img";\r
564 //                              if ( !Directory.Exists( strSavePath ) )\r
565 //                              {\r
566 //                                      try\r
567 //                                      {\r
568 //                                              Directory.CreateDirectory( strSavePath );\r
569 //                                      }\r
570 //                                      catch\r
571 //                                      {\r
572 //                                      }\r
573 //                              }\r
574 //                              string strSetDefDifficulty = CDTXMania.stage選曲.r確定された曲.ar難易度ラベル[ CDTXMania.stage選曲.n確定された曲の難易度 ];\r
575 //                              if ( strSetDefDifficulty != null )\r
576 //                              {\r
577 //                                      strSetDefDifficulty = "(" + strSetDefDifficulty + ")";\r
578 //                              }\r
579 //                              string strFullPath = strSavePath + "\\" + CDTXMania.DTX.TITLE + strSetDefDifficulty +\r
580 //                                      "." + datetime + "_" + strRank + ".png";\r
581 //                              // Surface.ToFile( pSurface, strFullPath, ImageFileFormat.Png );\r
582 //                              CDTXMania.app.SaveResultScreen( strFullPath );\r
583 //                      }\r
584                         #endregion\r
585                 }\r
586                 #endregion\r
587                 //-----------------\r
588                 #endregion\r
589         }\r
590 }\r