OSDN Git Service

33ae22699263c17524e6dec7e434677c80759299
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 08.結果 / CActResultImage.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Diagnostics;\r
5 using System.IO;\r
6 using System.Drawing;\r
7 using SlimDX;\r
8 using SlimDX.Direct3D9;\r
9 using FDK;\r
10 \r
11 namespace DTXMania\r
12 {\r
13         internal class CActResultImage : CActivity\r
14         {\r
15                 CDTX.CAVI rAVI;\r
16                 CCounter ct登場用;\r
17                 int n本体X;\r
18                 int n本体Y;\r
19                 CTexture r表示するリザルト画像;\r
20                 string strAVIファイル名;\r
21                 CTexture txパネル本体;\r
22                 CTexture txリザルト画像;\r
23                 CTexture txリザルト画像がないときの画像;\r
24 \r
25                 public void tアニメを完了させる()\r
26                 {\r
27                         ct登場用.n現在の値 = ct登場用.n終了値;\r
28                 }\r
29                 public CAct演奏AVI actAVI\r
30                 {\r
31                         get;\r
32                         set;\r
33                 }\r
34 \r
35                 public override void On活性化()\r
36                 {\r
37                         if (b活性化してない)\r
38                         {\r
39                                 n本体X = 4;\r
40                                 n本体Y = 0x3f;\r
41                                 base.On活性化();\r
42                                 actAVI.bIsPreviewMovie = true;\r
43                                 actAVI.On活性化();\r
44                         }\r
45                 }\r
46                 public override void On非活性化()\r
47                 {\r
48                         if (b活性化してる)\r
49                         {\r
50                                 if (ct登場用 != null)\r
51                                 {\r
52                                         ct登場用 = null;\r
53                                 }\r
54                                 if (rAVI != null)\r
55                                 {\r
56                                         rAVI.Dispose();\r
57                                         rAVI = null;\r
58                                 }\r
59                                 base.On非活性化();\r
60                                 actAVI.On非活性化();\r
61                         }\r
62                 }\r
63 \r
64                 public override void OnManagedリソースの作成()\r
65                 {\r
66                         if (b活性化してる)\r
67                         {\r
68                                 txパネル本体 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenResult resultimage panel.png"));\r
69                                 txリザルト画像がないときの画像 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenSelect preimage default.png"));\r
70                                 base.OnManagedリソースの作成();\r
71                                 actAVI.OnManagedリソースの作成();\r
72                         }\r
73                 }\r
74 \r
75                 public override void OnManagedリソースの解放()\r
76                 {\r
77                         if (b活性化してる)\r
78                         {\r
79                                 TextureFactory.tテクスチャの解放(ref txパネル本体);\r
80                                 TextureFactory.tテクスチャの解放(ref txリザルト画像);\r
81                                 TextureFactory.tテクスチャの解放(ref txリザルト画像がないときの画像);\r
82                                 base.OnManagedリソースの解放();\r
83                                 actAVI.OnManagedリソースの解放();\r
84                         }\r
85                 }\r
86                 public override unsafe int On進行描画()\r
87                 {\r
88                         if (b活性化してる)\r
89                         {\r
90                                 if (b初めての進行描画)\r
91                                 {\r
92                                         if (CDTXMania.Instance.ConfigIni.bStoicMode)\r
93                                         {\r
94                                                 r表示するリザルト画像 = txリザルト画像がないときの画像;\r
95                                         }\r
96                                         else if (!tリザルト動画の指定があれば構築する() &&\r
97                                                 !tリザルト画像の指定があれば構築する() &&\r
98                                                 !tプレビュー動画の指定があれば構築する() &&\r
99                                                 !tプレビュー画像の指定があれば構築する() &&\r
100                                                 !t背景画像があればその一部からリザルト画像を構築する())\r
101                                         {\r
102                                                 r表示するリザルト画像 = txリザルト画像がないときの画像;\r
103                                         }\r
104 \r
105                                         ct登場用 = new CCounter(0, 100, 5, CDTXMania.Instance.Timer);\r
106                                         b初めての進行描画 = false;\r
107                                 }\r
108                                 ct登場用.t進行();\r
109                                 if (ct登場用.b終了値に達した)\r
110                                 {\r
111                                         n本体X = 4;\r
112                                         n本体Y = 0x3f;\r
113                                 }\r
114                                 else\r
115                                 {\r
116                                         double num3 = ((double)ct登場用.n現在の値) / 100.0;\r
117                                         double num4 = Math.Cos((1.5 + (0.5 * num3)) * Math.PI);\r
118                                         n本体X = 4;\r
119                                         n本体Y = 0x3f - ((int)(((txパネル本体 != null) ?\r
120                                                 ((double)txパネル本体.sz画像サイズ.Height) : ((double)0)) * (1.0 - (num4 * num4))));\r
121                                 }\r
122                                 if (txパネル本体 != null)\r
123                                 {\r
124                                         txパネル本体.t2D描画(\r
125                                                 CDTXMania.Instance.Device,\r
126                                                 n本体X * Scale.X,\r
127                                                 n本体Y * Scale.Y\r
128                                         );\r
129                                 }\r
130                                 int x = (int)((n本体X + 17) * Scale.X);\r
131                                 int y = (int)((n本体Y + 16) * Scale.Y);\r
132                                 if (rAVI != null)\r
133                                 {\r
134                                         actAVI.t進行描画(x, y, 612, 605);\r
135                                 }\r
136                                 #region [ プレビュー画像表示 ]\r
137                                 else if (r表示するリザルト画像 != null)\r
138                                 {\r
139                                         CPreviewMagnifier cmg = new CPreviewMagnifier(CPreviewMagnifier.EPreviewType.MusicSelect);\r
140                                         cmg.GetMagnifier(r表示するリザルト画像.sz画像サイズ.Width, r表示するリザルト画像.sz画像サイズ.Height, 1.0f, 1.0f);\r
141 \r
142                                         r表示するリザルト画像.vc拡大縮小倍率.X = cmg.magX;\r
143                                         r表示するリザルト画像.vc拡大縮小倍率.Y = cmg.magY;\r
144                                         r表示するリザルト画像.vc拡大縮小倍率.Z = 1f;\r
145                                         x += (int)((612 - cmg.width * cmg.magX) / 2);\r
146                                         y += (int)((605 - cmg.height * cmg.magY) / 2);\r
147                                         r表示するリザルト画像.t2D描画(CDTXMania.Instance.Device, x, y);\r
148 \r
149 \r
150                                 }\r
151                                 #endregion\r
152                                 if ((CDTXMania.Instance.DTX.GENRE != null) && (CDTXMania.Instance.DTX.GENRE.Length > 0))\r
153                                 {\r
154                                         CDTXMania.Instance.act文字コンソール.tPrint(\r
155                                                 (int)((n本体X + 0x12) * Scale.X),\r
156                                                 (int)((n本体Y - 1) * Scale.Y),\r
157                                                 C文字コンソール.Eフォント種別.赤細,\r
158                                                 CDTXMania.Instance.DTX.GENRE\r
159                                         );\r
160                                 }\r
161                                 if (!ct登場用.b終了値に達した)\r
162                                 {\r
163                                         return 0;\r
164                                 }\r
165                                 return 1;\r
166                         }\r
167                         return 0;\r
168                 }\r
169 \r
170                 private bool t背景画像があればその一部からリザルト画像を構築する()\r
171                 {\r
172                         string strBackground = CDTXMania.Instance.DTX.BACKGROUND;\r
173                         if (string.IsNullOrEmpty(strBackground))\r
174                         {\r
175                                 strBackground = CDTXMania.Instance.DTX.BACKGROUND_GR;\r
176                         }\r
177                         if (string.IsNullOrEmpty(strBackground))\r
178                         {\r
179                                 return false;\r
180                         }\r
181                         TextureFactory.tテクスチャの解放(ref txリザルト画像);\r
182                         r表示するリザルト画像 = null;\r
183                         strBackground = CDTXMania.Instance.DTX.strフォルダ名 + strBackground;\r
184                         if (!File.Exists(strBackground))\r
185                         {\r
186                                 return false;\r
187                         }\r
188                         using (Bitmap image = new Bitmap(strBackground))\r
189                         {\r
190                                 using (Bitmap bitmap2 = new Bitmap(SampleFramework.GameWindowSize.Width, SampleFramework.GameWindowSize.Height))\r
191                                 {\r
192                                         using (Graphics graphics = Graphics.FromImage(bitmap2))\r
193                                         {\r
194                                                 int x = 0;\r
195                                                 for (int i = 0; i < SampleFramework.GameWindowSize.Height; i += image.Height)\r
196                                                 {\r
197                                                         for (x = 0; x < SampleFramework.GameWindowSize.Width; x += image.Width)\r
198                                                         {\r
199                                                                 graphics.DrawImage(image, x, i, image.Width, image.Height);\r
200                                                         }\r
201                                                 }\r
202                                         }\r
203                                         using (Bitmap bitmap3 = new Bitmap(0xcc, 0x10d))\r
204                                         {\r
205                                                 using (Graphics graphics = Graphics.FromImage(bitmap3))\r
206                                                 {\r
207                                                         graphics.DrawImage(bitmap2, 5, 5, new Rectangle(0x157, 0x6d, 0xcc, 0x10d), GraphicsUnit.Pixel);\r
208                                                 }\r
209                                                 txリザルト画像 = new CTexture(CDTXMania.Instance.Device, bitmap3, CDTXMania.Instance.TextureFormat);\r
210                                         }\r
211                                 }\r
212                                 r表示するリザルト画像 = txリザルト画像;\r
213                         }\r
214                         return true;\r
215                 }\r
216 \r
217                 private bool tプレビュー画像の指定があれば構築する()\r
218                 {\r
219                         if (string.IsNullOrEmpty(CDTXMania.Instance.DTX.PREIMAGE))\r
220                         {\r
221                                 return false;\r
222                         }\r
223                         TextureFactory.tテクスチャの解放(ref txリザルト画像);\r
224                         r表示するリザルト画像 = null;\r
225                         string path = CDTXMania.Instance.DTX.strフォルダ名 + CDTXMania.Instance.DTX.PREIMAGE;\r
226                         if (!File.Exists(path))\r
227                         {\r
228                                 Trace.TraceWarning("ファイルが存在しません。({0})", new object[] { path });\r
229                                 return false;\r
230                         }\r
231                         txリザルト画像 = TextureFactory.tテクスチャの生成(path);\r
232                         r表示するリザルト画像 = txリザルト画像;\r
233                         return (r表示するリザルト画像 != null);\r
234                 }\r
235 \r
236                 private bool tプレビュー動画の指定があれば構築する()\r
237                 {\r
238                         if (!CDTXMania.Instance.ConfigIni.bAVI)\r
239                         {\r
240                                 return false;\r
241                         }\r
242                         actAVI.Stop();\r
243                         if (string.IsNullOrEmpty(CDTXMania.Instance.DTX.PREMOVIE))\r
244                         {\r
245                                 return false;\r
246                         }\r
247                         strAVIファイル名 = CDTXMania.Instance.DTX.strフォルダ名 + CDTXMania.Instance.DTX.PREMOVIE;\r
248                         if (!File.Exists(this.strAVIファイル名))\r
249                         {\r
250                                 Trace.TraceWarning("プレビュー動画のファイルが存在しません。({0})", strAVIファイル名);\r
251                                 return false;\r
252                         }\r
253                         if (rAVI != null)\r
254                         {\r
255                                 rAVI.Dispose();\r
256                                 rAVI = null;\r
257                         }\r
258                         try\r
259                         {\r
260                                 rAVI = new CDTX.CAVI(00, this.strAVIファイル名, "", CDTXMania.Instance.ConfigIni.nPlaySpeed);\r
261                                 rAVI.OnDeviceCreated();\r
262                                 actAVI.Start(EChannel.Movie, rAVI, 204, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1);\r
263                         }\r
264                         catch\r
265                         {\r
266                                 Trace.TraceError("プレビュー動画の生成に失敗しました。({0})", strAVIファイル名);\r
267                                 rAVI = null;\r
268                         }\r
269                         return true;\r
270                 }\r
271 \r
272                 private bool tリザルト画像の指定があれば構築する()\r
273                 {\r
274                         CScoreIni.ERANK rank = CScoreIni.t総合ランク値を計算して返す(CDTXMania.Instance.stage結果.st演奏記録);\r
275                         if (rank == CScoreIni.ERANK.UNKNOWN)  // #23534 2010.10.28 yyagi: 演奏チップが0個のときは、rankEと見なす\r
276                         {\r
277                                 rank = CScoreIni.ERANK.E;\r
278                         }\r
279                         if (string.IsNullOrEmpty(CDTXMania.Instance.DTX.RESULTIMAGE[(int)rank]))\r
280                         {\r
281                                 return false;\r
282                         }\r
283                         TextureFactory.tテクスチャの解放(ref txリザルト画像);\r
284                         r表示するリザルト画像 = null;\r
285                         string path = CDTXMania.Instance.DTX.strフォルダ名 + CDTXMania.Instance.DTX.RESULTIMAGE[(int)rank];\r
286                         if (!File.Exists(path))\r
287                         {\r
288                                 Trace.TraceWarning("ファイルが存在しません。({0})", new object[] { path });\r
289                                 return false;\r
290                         }\r
291                         txリザルト画像 = TextureFactory.tテクスチャの生成(path);\r
292                         r表示するリザルト画像 = this.txリザルト画像;\r
293                         return (this.r表示するリザルト画像 != null);\r
294                 }\r
295 \r
296                 private bool tリザルト動画の指定があれば構築する()\r
297                 {\r
298                         if (!CDTXMania.Instance.ConfigIni.bAVI)\r
299                         {\r
300                                 return false;\r
301                         }\r
302                         CScoreIni.ERANK rank = CScoreIni.t総合ランク値を計算して返す(CDTXMania.Instance.stage結果.st演奏記録);\r
303                         // #23534 2010.10.28 yyagi: 演奏チップが0個のときは、rankEと見なす\r
304                         if (rank == CScoreIni.ERANK.UNKNOWN)\r
305                         {\r
306                                 rank = CScoreIni.ERANK.E;\r
307                         }\r
308 \r
309                         if (string.IsNullOrEmpty(CDTXMania.Instance.DTX.RESULTMOVIE[(int)rank]))\r
310                         {\r
311                                 return false;\r
312                         }\r
313                         strAVIファイル名 = CDTXMania.Instance.DTX.strフォルダ名 + CDTXMania.Instance.DTX.RESULTMOVIE[(int)rank];\r
314                         if (!File.Exists(this.strAVIファイル名))\r
315                         {\r
316                                 Trace.TraceWarning("リザルト動画のファイルが存在しません。({0})", this.strAVIファイル名);\r
317                                 return false;\r
318                         }\r
319                         if (rAVI != null)\r
320                         {\r
321                                 rAVI.Dispose();\r
322                                 rAVI = null;\r
323                         }\r
324                         try\r
325                         {\r
326                                 rAVI = new CDTX.CAVI(00, this.strAVIファイル名, "", CDTXMania.Instance.ConfigIni.nPlaySpeed);\r
327                                 rAVI.OnDeviceCreated();\r
328                                 actAVI.Start(EChannel.Movie, rAVI, 204, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1);\r
329                         }\r
330                         catch\r
331                         {\r
332                                 Trace.TraceError("リザルト動画の生成に失敗しました。({0})", this.strAVIファイル名);\r
333                                 rAVI = null;\r
334                         }\r
335                         return true;\r
336                 }\r
337         }\r
338 }\r