OSDN Git Service

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