OSDN Git Service

#23928 スキン変更・1280x720対応に先立ち、論理ウインドウサイズをconst化した。FDK/コード/01.フレームワーク/Core/GameWindowSiz...
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 06.曲読み込み / CStage曲読み込み.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Diagnostics;\r
5 using System.Drawing;\r
6 using System.IO;\r
7 using SlimDX;\r
8 using FDK;\r
9 \r
10 namespace DTXMania\r
11 {\r
12         internal class CStage曲読み込み : CStage\r
13         {\r
14                 // コンストラクタ\r
15 \r
16                 public CStage曲読み込み()\r
17                 {\r
18                         base.eステージID = CStage.Eステージ.曲読み込み;\r
19                         base.eフェーズID = CStage.Eフェーズ.共通_通常状態;\r
20                         base.b活性化してない = true;\r
21                         base.list子Activities.Add( this.actFI = new CActFIFOBlack() );\r
22                         base.list子Activities.Add( this.actFO = new CActFIFOBlack() );\r
23                 }\r
24 \r
25 \r
26                 // CStage 実装\r
27 \r
28                 public override void On活性化()\r
29                 {\r
30                         Trace.TraceInformation( "曲読み込みステージを活性化します。" );\r
31                         Trace.Indent();\r
32                         try\r
33                         {\r
34                                 this.str曲タイトル = "";\r
35                                 this.strSTAGEFILE = "";\r
36                                 this.b音符を表示する = false;\r
37                                 this.n音符の表示位置X = 0x308;\r
38                                 this.ftタイトル表示用フォント = new Font( "MS PGothic", 48f, GraphicsUnit.Pixel );\r
39                                 this.nBGM再生開始時刻 = -1;\r
40                                 this.nBGMの総再生時間ms = 0;\r
41                                 if( this.sd読み込み音 != null )\r
42                                 {\r
43                                         CDTXMania.Sound管理.tサウンドを破棄する( this.sd読み込み音 );\r
44                                         this.sd読み込み音 = null;\r
45                                 }\r
46 \r
47                                 string strDTXファイルパス = ( CDTXMania.bコンパクトモード ) ?\r
48                                         CDTXMania.strコンパクトモードファイル : CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;\r
49                                 \r
50                                 CDTX cdtx = new CDTX( strDTXファイルパス, true );\r
51                                 this.str曲タイトル = cdtx.TITLE;\r
52                                 if( ( ( cdtx.STAGEFILE != null ) && ( cdtx.STAGEFILE.Length > 0 ) ) && ( File.Exists( cdtx.strフォルダ名 + cdtx.STAGEFILE ) && !CDTXMania.ConfigIni.bストイックモード ) )\r
53                                 {\r
54                                         this.strSTAGEFILE = cdtx.strフォルダ名 + cdtx.STAGEFILE;\r
55                                         this.b音符を表示する = false;\r
56                                 }\r
57                                 else\r
58                                 {\r
59                                         this.strSTAGEFILE = CSkin.Path( @"Graphics\\ScreenNowLoading background.jpg" );\r
60                                         this.b音符を表示する = true;\r
61                                 }\r
62                                 if( ( ( cdtx.SOUND_NOWLOADING != null ) && ( cdtx.SOUND_NOWLOADING.Length > 0 ) ) && File.Exists( cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING ) )\r
63                                 {\r
64                                         string strNowLoading画像ファイルパス = cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING;\r
65                                         try\r
66                                         {\r
67                                                 this.sd読み込み音 = CDTXMania.Sound管理.tサウンドを生成する( strNowLoading画像ファイルパス );\r
68                                         }\r
69                                         catch\r
70                                         {\r
71                                                 Trace.TraceError( "#SOUND_NOWLOADING に指定されたサウンドファイルの読み込みに失敗しました。({0})", strNowLoading画像ファイルパス );\r
72                                         }\r
73                                 }\r
74                                 cdtx.On非活性化();\r
75                                 base.On活性化();\r
76                         }\r
77                         finally\r
78                         {\r
79                                 Trace.TraceInformation( "曲読み込みステージの活性化を完了しました。" );\r
80                                 Trace.Unindent();\r
81                         }\r
82                 }\r
83                 public override void On非活性化()\r
84                 {\r
85                         Trace.TraceInformation( "曲読み込みステージを非活性化します。" );\r
86                         Trace.Indent();\r
87                         try\r
88                         {\r
89                                 if( this.ftタイトル表示用フォント != null )\r
90                                 {\r
91                                         this.ftタイトル表示用フォント.Dispose();\r
92                                         this.ftタイトル表示用フォント = null;\r
93                                 }\r
94                                 base.On非活性化();\r
95                         }\r
96                         finally\r
97                         {\r
98                                 Trace.TraceInformation( "曲読み込みステージの非活性化を完了しました。" );\r
99                                 Trace.Unindent();\r
100                         }\r
101                 }\r
102                 public override void OnManagedリソースの作成()\r
103                 {\r
104                         if( !base.b活性化してない )\r
105                         {\r
106                                 this.tx音符 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\\ScreenNowLoading onpu.png" ), false );\r
107                                 this.tx背景 = CDTXMania.tテクスチャの生成( this.strSTAGEFILE, false );\r
108                                 if( this.b音符を表示する )\r
109                                 {\r
110                                         try\r
111                                         {\r
112                                                 if( ( this.str曲タイトル != null ) && ( this.str曲タイトル.Length > 0 ) )\r
113                                                 {\r
114                                                         Bitmap image = new Bitmap( 1, 1 );\r
115                                                         Graphics graphics = Graphics.FromImage( image );\r
116                                                         SizeF ef = graphics.MeasureString( this.str曲タイトル, this.ftタイトル表示用フォント );\r
117                                                         Size size = new Size( (int) Math.Ceiling( (double) ef.Width ), (int) Math.Ceiling( (double) ef.Height ) );\r
118                                                         graphics.Dispose();\r
119                                                         image.Dispose();\r
120                                                         image = new Bitmap( size.Width, size.Height );\r
121                                                         graphics = Graphics.FromImage( image );\r
122                                                         graphics.DrawString( this.str曲タイトル, this.ftタイトル表示用フォント, Brushes.White, (float) 0f, (float) 0f );\r
123                                                         graphics.Dispose();\r
124                                                         this.txタイトル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );\r
125                                                         this.txタイトル.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );\r
126                                                         image.Dispose();\r
127                                                         this.n音符の表示位置X = ( ( 640 - ( (int) ( size.Width * this.txタイトル.vc拡大縮小倍率.X ) ) ) - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;\r
128                                                 }\r
129                                                 else\r
130                                                 {\r
131                                                         this.txタイトル = null;\r
132                                                         this.n音符の表示位置X = ( 640 - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;\r
133                                                 }\r
134                                         }\r
135                                         catch( CTextureCreateFailedException )\r
136                                         {\r
137                                                 Trace.TraceError( "テクスチャの生成に失敗しました。({0})", new object[] { this.strSTAGEFILE } );\r
138                                                 this.txタイトル = null;\r
139                                                 this.tx背景 = null;\r
140                                         }\r
141                                 }\r
142                                 else\r
143                                 {\r
144                                         this.txタイトル = null;\r
145                                 }\r
146                                 base.OnManagedリソースの作成();\r
147                         }\r
148                 }\r
149                 public override void OnManagedリソースの解放()\r
150                 {\r
151                         if( !base.b活性化してない )\r
152                         {\r
153                                 CDTXMania.tテクスチャの解放( ref this.tx背景 );\r
154                                 CDTXMania.tテクスチャの解放( ref this.tx音符 );\r
155                                 CDTXMania.tテクスチャの解放( ref this.txタイトル );\r
156                                 base.OnManagedリソースの解放();\r
157                         }\r
158                 }\r
159                 public override int On進行描画()\r
160                 {\r
161                         string str;\r
162 \r
163                         if( base.b活性化してない )\r
164                                 return 0;\r
165 \r
166                         #region [ 初めての進行描画 ]\r
167                         //-----------------------------\r
168                         if( base.b初めての進行描画 )\r
169                         {\r
170                                 Cスコア cスコア1 = CDTXMania.stage選曲.r確定されたスコア;\r
171                                 if( this.sd読み込み音 != null )\r
172                                 {\r
173                                         if( CDTXMania.Skin.sound曲読込開始音.b排他 && ( CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド != null ) )\r
174                                         {\r
175                                                 CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド.t停止する();\r
176                                         }\r
177                                         this.sd読み込み音.t再生を開始する();\r
178                                         this.nBGM再生開始時刻 = CDTXMania.Timer.n現在時刻;\r
179                                         this.nBGMの総再生時間ms = this.sd読み込み音.n総演奏時間ms;\r
180                                 }\r
181                                 else\r
182                                 {\r
183                                         CDTXMania.Skin.sound曲読込開始音.t再生する();\r
184                                         this.nBGM再生開始時刻 = CDTXMania.Timer.n現在時刻;\r
185                                         this.nBGMの総再生時間ms = CDTXMania.Skin.sound曲読込開始音.n長さ・現在のサウンド;\r
186                                 }\r
187                                 this.actFI.tフェードイン開始();\r
188                                 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;\r
189                                 base.b初めての進行描画 = false;\r
190                         }\r
191                         //-----------------------------\r
192                         #endregion\r
193 \r
194                         #region [ 背景、音符+タイトル表示 ]\r
195                         //-----------------------------\r
196                         if( this.tx背景 != null )\r
197                                 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );\r
198 \r
199                         if( this.b音符を表示する )\r
200                         {\r
201                                 int y = 480 - 45;\r
202                                 if( this.tx音符 != null )\r
203                                 {\r
204                                         this.tx音符.t2D描画( CDTXMania.app.Device, this.n音符の表示位置X, y );\r
205                                 }\r
206                                 if( this.txタイトル != null )\r
207                                 {\r
208                                         this.txタイトル.t2D描画( CDTXMania.app.Device, (int) ( 640 - ( this.txタイトル.sz画像サイズ.Width * this.txタイトル.vc拡大縮小倍率.X ) ), y );\r
209                                 }\r
210                         }\r
211                         //-----------------------------\r
212                         #endregion\r
213 \r
214                         switch( base.eフェーズID )\r
215                         {\r
216                                 case CStage.Eフェーズ.共通_フェードイン:\r
217                                         if( this.actFI.On進行描画() != 0 )\r
218                                                 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む;\r
219                                         return 0;\r
220 \r
221                                 case CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む:\r
222                                         {\r
223                                                 str = null;\r
224                                                 if( !CDTXMania.bコンパクトモード )\r
225                                                         str = CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;\r
226                                                 else\r
227                                                         str = CDTXMania.strコンパクトモードファイル;\r
228 \r
229                                                 CScoreIni ini = new CScoreIni( str + ".score.ini" );\r
230                                                 ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();\r
231 \r
232                                                 if( ( CDTXMania.DTX != null ) && CDTXMania.DTX.b活性化してる )\r
233                                                         CDTXMania.DTX.On非活性化();\r
234 \r
235                                                 CDTXMania.DTX = new CDTX( str, false, ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0, ini.stファイル.BGMAdjust );\r
236                                                 Trace.TraceInformation( "----曲情報-----------------" );\r
237                                                 Trace.TraceInformation( "TITLE: {0}", new object[] { CDTXMania.DTX.TITLE } );\r
238                                                 Trace.TraceInformation( "FILE: {0}", new object[] { CDTXMania.DTX.strファイル名の絶対パス } );\r
239                                                 Trace.TraceInformation( "---------------------------" );\r
240 \r
241                                                 if( CDTXMania.bコンパクトモード )\r
242                                                         CDTXMania.DTX.MIDIレベル = 1;\r
243                                                 else\r
244                                                         CDTXMania.DTX.MIDIレベル = ( CDTXMania.stage選曲.r確定された曲.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) ? CDTXMania.stage選曲.n現在選択中の曲の難易度 : 0;\r
245 \r
246                                                 CDTXMania.DTX.tWAVの読み込み();\r
247                                                 CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.GUITAR, CDTXMania.ConfigIni.eRandom.Guitar );\r
248                                                 CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.BASS, CDTXMania.ConfigIni.eRandom.Bass );\r
249 \r
250                                                 if( CDTXMania.ConfigIni.bギタレボモード )\r
251                                                         CDTXMania.stage演奏ギター画面.On活性化();\r
252                                                 else\r
253                                                         CDTXMania.stage演奏ドラム画面.On活性化();\r
254 \r
255                                                 if( CDTXMania.ConfigIni.bBGA有効 )\r
256                                                         CDTXMania.DTX.tBMP_BMPTEXの読み込み();\r
257 \r
258                                                 if( CDTXMania.ConfigIni.bAVI有効 )\r
259                                                         CDTXMania.DTX.tAVIの読み込み();\r
260 \r
261                                                 CDTXMania.Timer.t更新();\r
262                                                 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ;\r
263                                                 return 0;\r
264                                         }\r
265 \r
266                                 case CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ:\r
267                                         {\r
268                                                 long nCurrentTime = CDTXMania.Timer.n現在時刻;\r
269 \r
270                                                 if( nCurrentTime < this.nBGM再生開始時刻 )\r
271                                                         this.nBGM再生開始時刻 = nCurrentTime;\r
272 \r
273                                                 if( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 1000 ) )\r
274                                                 {\r
275                                                         this.actFO.tフェードアウト開始();\r
276                                                         base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;\r
277                                                 }\r
278                                                 return 0;\r
279                                         }\r
280 \r
281                                 case CStage.Eフェーズ.共通_フェードアウト:\r
282                                         if( this.actFO.On進行描画() == 0 )\r
283                                                 return 0;\r
284                                         return 1;\r
285                         }\r
286                         return 0;\r
287                 }\r
288 \r
289                 \r
290                 // その他\r
291 \r
292                 #region [ private ]\r
293                 //-----------------\r
294                 private CActFIFOBlack actFI;\r
295                 private CActFIFOBlack actFO;\r
296                 private bool b音符を表示する;\r
297                 private Font ftタイトル表示用フォント;\r
298                 private long nBGMの総再生時間ms;\r
299                 private long nBGM再生開始時刻;\r
300                 private int n音符の表示位置X;\r
301                 private CSound sd読み込み音;\r
302                 private string strSTAGEFILE;\r
303                 private string str曲タイトル;\r
304                 private CTexture txタイトル;\r
305                 private CTexture tx音符;\r
306                 private CTexture tx背景;\r
307                 //-----------------\r
308                 #endregion\r
309         }\r
310 }\r