OSDN Git Service

#36373 NowLoading画面 (#STAGEFILE) のFullHD画像対応。これに伴い、プレビュー表示や動画表示の拡大率や座標値の算出部分をリファクタしています。
[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                         using (Bitmap image = new Bitmap(strBackground))\r
185                         {\r
186                                 using (Bitmap bitmap2 = new Bitmap(SampleFramework.GameWindowSize.Width, SampleFramework.GameWindowSize.Height))\r
187                                 {\r
188                                         using (Graphics graphics = Graphics.FromImage(bitmap2))\r
189                                         {\r
190                                                 int x = 0;\r
191                                                 for (int i = 0; i < SampleFramework.GameWindowSize.Height; i += image.Height)\r
192                                                 {\r
193                                                         for (x = 0; x < SampleFramework.GameWindowSize.Width; x += image.Width)\r
194                                                         {\r
195                                                                 graphics.DrawImage(image, x, i, image.Width, image.Height);\r
196                                                         }\r
197                                                 }\r
198                                         }\r
199                                         using (Bitmap bitmap3 = new Bitmap(0xcc, 0x10d))\r
200                                         {\r
201                                                 using (Graphics graphics = Graphics.FromImage(bitmap3))\r
202                                                 {\r
203                                                         graphics.DrawImage(bitmap2, 5, 5, new Rectangle(0x157, 0x6d, 0xcc, 0x10d), GraphicsUnit.Pixel);\r
204                                                 }\r
205                                                 txリザルト画像 = new CTexture(CDTXMania.Instance.Device, bitmap3, CDTXMania.Instance.TextureFormat);\r
206                                         }\r
207                                 }\r
208                                 r表示するリザルト画像 = txリザルト画像;\r
209                         }\r
210                         return true;\r
211                 }\r
212 \r
213                 private bool tプレビュー画像の指定があれば構築する()\r
214                 {\r
215                         if (string.IsNullOrEmpty(CDTXMania.Instance.DTX.PREIMAGE))\r
216                         {\r
217                                 return false;\r
218                         }\r
219                         TextureFactory.tテクスチャの解放(ref txリザルト画像);\r
220                         r表示するリザルト画像 = null;\r
221                         string path = CDTXMania.Instance.DTX.strフォルダ名 + CDTXMania.Instance.DTX.PREIMAGE;\r
222                         if (!File.Exists(path))\r
223                         {\r
224                                 Trace.TraceWarning("ファイルが存在しません。({0})", new object[] { path });\r
225                                 return false;\r
226                         }\r
227                         txリザルト画像 = TextureFactory.tテクスチャの生成(path);\r
228                         r表示するリザルト画像 = txリザルト画像;\r
229                         return (r表示するリザルト画像 != null);\r
230                 }\r
231 \r
232                 private bool tプレビュー動画の指定があれば構築する()\r
233                 {\r
234                         if (!CDTXMania.Instance.ConfigIni.bAVI)\r
235                         {\r
236                                 return false;\r
237                         }\r
238                         actAVI.Stop();\r
239                         if (string.IsNullOrEmpty(CDTXMania.Instance.DTX.PREMOVIE))\r
240                         {\r
241                                 return false;\r
242                         }\r
243                         strAVIファイル名 = CDTXMania.Instance.DTX.strフォルダ名 + CDTXMania.Instance.DTX.PREMOVIE;\r
244                         if (!File.Exists(this.strAVIファイル名))\r
245                         {\r
246                                 Trace.TraceWarning("プレビュー動画のファイルが存在しません。({0})", strAVIファイル名);\r
247                                 return false;\r
248                         }\r
249                         if (rAVI != null)\r
250                         {\r
251                                 rAVI.Dispose();\r
252                                 rAVI = null;\r
253                         }\r
254                         try\r
255                         {\r
256                                 rAVI = new CDTX.CAVI(00, this.strAVIファイル名, "", CDTXMania.Instance.ConfigIni.nPlaySpeed);\r
257                                 rAVI.OnDeviceCreated();\r
258                                 actAVI.Start(EChannel.Movie, rAVI, 204, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1);\r
259                         }\r
260                         catch\r
261                         {\r
262                                 Trace.TraceError("プレビュー動画の生成に失敗しました。({0})", strAVIファイル名);\r
263                                 rAVI = null;\r
264                         }\r
265                         return true;\r
266                 }\r
267 \r
268                 private bool tリザルト画像の指定があれば構築する()\r
269                 {\r
270                         CScoreIni.ERANK rank = CScoreIni.t総合ランク値を計算して返す(CDTXMania.Instance.stage結果.st演奏記録);\r
271                         if (rank == CScoreIni.ERANK.UNKNOWN)  // #23534 2010.10.28 yyagi: 演奏チップが0個のときは、rankEと見なす\r
272                         {\r
273                                 rank = CScoreIni.ERANK.E;\r
274                         }\r
275                         if (string.IsNullOrEmpty(CDTXMania.Instance.DTX.RESULTIMAGE[(int)rank]))\r
276                         {\r
277                                 return false;\r
278                         }\r
279                         TextureFactory.tテクスチャの解放(ref txリザルト画像);\r
280                         r表示するリザルト画像 = null;\r
281                         string path = CDTXMania.Instance.DTX.strフォルダ名 + CDTXMania.Instance.DTX.RESULTIMAGE[(int)rank];\r
282                         if (!File.Exists(path))\r
283                         {\r
284                                 Trace.TraceWarning("ファイルが存在しません。({0})", new object[] { path });\r
285                                 return false;\r
286                         }\r
287                         txリザルト画像 = TextureFactory.tテクスチャの生成(path);\r
288                         r表示するリザルト画像 = this.txリザルト画像;\r
289                         return (this.r表示するリザルト画像 != null);\r
290                 }\r
291 \r
292                 private bool tリザルト動画の指定があれば構築する()\r
293                 {\r
294                         if (!CDTXMania.Instance.ConfigIni.bAVI)\r
295                         {\r
296                                 return false;\r
297                         }\r
298                         CScoreIni.ERANK rank = CScoreIni.t総合ランク値を計算して返す(CDTXMania.Instance.stage結果.st演奏記録);\r
299                         // #23534 2010.10.28 yyagi: 演奏チップが0個のときは、rankEと見なす\r
300                         if (rank == CScoreIni.ERANK.UNKNOWN)\r
301                         {\r
302                                 rank = CScoreIni.ERANK.E;\r
303                         }\r
304 \r
305                         if (string.IsNullOrEmpty(CDTXMania.Instance.DTX.RESULTMOVIE[(int)rank]))\r
306                         {\r
307                                 return false;\r
308                         }\r
309                         strAVIファイル名 = CDTXMania.Instance.DTX.strフォルダ名 + CDTXMania.Instance.DTX.RESULTMOVIE[(int)rank];\r
310                         if (!File.Exists(this.strAVIファイル名))\r
311                         {\r
312                                 Trace.TraceWarning("リザルト動画のファイルが存在しません。({0})", this.strAVIファイル名);\r
313                                 return false;\r
314                         }\r
315                         if (rAVI != null)\r
316                         {\r
317                                 rAVI.Dispose();\r
318                                 rAVI = null;\r
319                         }\r
320                         try\r
321                         {\r
322                                 rAVI = new CDTX.CAVI(00, this.strAVIファイル名, "", CDTXMania.Instance.ConfigIni.nPlaySpeed);\r
323                                 rAVI.OnDeviceCreated();\r
324                                 actAVI.Start(EChannel.Movie, rAVI, 204, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1);\r
325                         }\r
326                         catch\r
327                         {\r
328                                 Trace.TraceError("リザルト動画の生成に失敗しました。({0})", this.strAVIファイル名);\r
329                                 rAVI = null;\r
330                         }\r
331                         return true;\r
332                 }\r
333         }\r
334 }\r