OSDN Git Service

d978a4d743de8d361f27a0ec809bffb06d3e090f
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 08.結果 / CActResultSongBar.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Drawing;\r
5 using System.Diagnostics;\r
6 using SlimDX;\r
7 using FDK;\r
8 \r
9 namespace DTXMania\r
10 {\r
11         internal class CActResultSongBar : CActivity\r
12         {\r
13                 // コンストラクタ\r
14 \r
15                 public CActResultSongBar()\r
16                 {\r
17                         base.b活性化してない = true;\r
18                 }\r
19 \r
20 \r
21                 // メソッド\r
22 \r
23                 public void tアニメを完了させる()\r
24                 {\r
25                         this.ct登場用.n現在の値 = this.ct登場用.n終了値;\r
26                 }\r
27 \r
28 \r
29                 // CActivity 実装\r
30 \r
31                 public override void On活性化()\r
32                 {\r
33                         this.n本体X = 0;\r
34                         this.n本体Y = 0x18b;\r
35                         this.ft曲名用フォント = new Font("MS PGothic", 44f * Scale.Y, FontStyle.Bold, GraphicsUnit.Pixel);\r
36                         base.On活性化();\r
37                 }\r
38                 public override void On非活性化()\r
39                 {\r
40                         if (this.ft曲名用フォント != null)\r
41                         {\r
42                                 this.ft曲名用フォント.Dispose();\r
43                                 this.ft曲名用フォント = null;\r
44                         }\r
45                         if (this.ct登場用 != null)\r
46                         {\r
47                                 this.ct登場用 = null;\r
48                         }\r
49                         base.On非活性化();\r
50                 }\r
51                 public override void OnManagedリソースの作成()\r
52                 {\r
53                         if (!base.b活性化してない)\r
54                         {\r
55                                 this.txバー = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenResult song bar.png"), false);\r
56                                 try\r
57                                 {\r
58                                         Bitmap image = new Bitmap((int)(0x3a8 * Scale.X), (int)(0x36 * Scale.Y));\r
59                                         Graphics graphics = Graphics.FromImage(image);\r
60                                         graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;\r
61                                         graphics.DrawString(CDTXMania.Instance.DTX.TITLE, this.ft曲名用フォント, Brushes.White, (float)8f * Scale.X, (float)0f);\r
62                                         this.tx曲名 = new CTexture(CDTXMania.Instance.Device, image, CDTXMania.Instance.TextureFormat);\r
63                                         this.tx曲名.vc拡大縮小倍率 = new Vector3(0.5f, 0.5f, 1f);\r
64                                         graphics.Dispose();\r
65                                         image.Dispose();\r
66                                 }\r
67                                 catch (CTextureCreateFailedException)\r
68                                 {\r
69                                         Trace.TraceError("曲名テクスチャの生成に失敗しました。");\r
70                                         this.tx曲名 = null;\r
71                                 }\r
72                                 base.OnManagedリソースの作成();\r
73                         }\r
74                 }\r
75                 public override void OnManagedリソースの解放()\r
76                 {\r
77                         if (!base.b活性化してない)\r
78                         {\r
79                                 TextureFactory.tテクスチャの解放(ref this.txバー);\r
80                                 TextureFactory.tテクスチャの解放(ref this.tx曲名);\r
81                                 base.OnManagedリソースの解放();\r
82                         }\r
83                 }\r
84                 public override int On進行描画()\r
85                 {\r
86                         if (base.b活性化してない)\r
87                         {\r
88                                 return 0;\r
89                         }\r
90                         if (base.b初めての進行描画)\r
91                         {\r
92                                 this.ct登場用 = new CCounter(0, 270, 4, CDTXMania.Instance.Timer);\r
93                                 base.b初めての進行描画 = false;\r
94                         }\r
95                         this.ct登場用.t進行();\r
96                         int num = 0x1d4;\r
97                         int num2 = num - 0x40;\r
98                         if (this.ct登場用.b進行中)\r
99                         {\r
100                                 if (this.ct登場用.n現在の値 <= 100)\r
101                                 {\r
102                                         double num3 = 1.0 - (((double)this.ct登場用.n現在の値) / 100.0);\r
103                                         this.n本体X = -((int)(num * Math.Sin(Math.PI / 2 * num3)));\r
104                                         this.n本体Y = 0x18b;\r
105                                 }\r
106                                 else if (this.ct登場用.n現在の値 <= 200)\r
107                                 {\r
108                                         double num4 = ((double)(this.ct登場用.n現在の値 - 100)) / 100.0;\r
109                                         this.n本体X = -((int)((((double)num) / 6.0) * Math.Sin(Math.PI * num4)));\r
110                                         this.n本体Y = 0x18b;\r
111                                 }\r
112                                 else if (this.ct登場用.n現在の値 <= 270)\r
113                                 {\r
114                                         double num5 = ((double)(this.ct登場用.n現在の値 - 200)) / 70.0;\r
115                                         this.n本体X = -((int)((((double)num) / 18.0) * Math.Sin(Math.PI * num5)));\r
116                                         this.n本体Y = 0x18b;\r
117                                 }\r
118                         }\r
119                         else\r
120                         {\r
121                                 this.n本体X = 0;\r
122                                 this.n本体Y = 0x18b;\r
123                         }\r
124                         int num6 = this.n本体X;\r
125                         int y = this.n本体Y;\r
126                         int num8 = 0;\r
127                         while (num8 < num2)\r
128                         {\r
129                                 Rectangle rectangle = new Rectangle(0, 0, 0x40, 0x40);\r
130                                 if ((num8 + rectangle.Width) >= num2)\r
131                                 {\r
132                                         rectangle.Width -= (num8 + rectangle.Width) - num2;\r
133                                 }\r
134                                 if (this.txバー != null)\r
135                                 {\r
136                                         Rectangle rectangle1 = rectangle;\r
137                                         rectangle1.X = (int)(rectangle1.X * Scale.X);\r
138                                         rectangle1.Y = (int)(rectangle1.Y * Scale.Y);\r
139                                         rectangle1.Width = (int)(rectangle1.Width * Scale.X);\r
140                                         rectangle1.Height = (int)(rectangle1.Height * Scale.Y);\r
141                                         this.txバー.t2D描画(\r
142                                                 CDTXMania.Instance.Device,\r
143                                                 (num6 + num8) * Scale.X,\r
144                                                 y * Scale.Y,\r
145                                                 rectangle1\r
146                                         );\r
147                                 }\r
148                                 num8 += rectangle.Width;\r
149                         }\r
150                         if (this.txバー != null)\r
151                         {\r
152                                 this.txバー.t2D描画(\r
153                                         CDTXMania.Instance.Device,\r
154                                         (num6 + num8) * Scale.X,\r
155                                         y * Scale.Y,\r
156                                         new Rectangle(\r
157                                                 (int)(0x40 * Scale.X),\r
158                                                 0,\r
159                                                 (int)(0x40 * Scale.X),\r
160                                                 (int)(0x40 * Scale.Y)\r
161                                                 )\r
162                                         );\r
163                         }\r
164                         if (this.tx曲名 != null)\r
165                         {\r
166                                 this.tx曲名.t2D描画(\r
167                                         CDTXMania.Instance.Device,\r
168                                         this.n本体X * Scale.X,\r
169                                         (this.n本体Y + 20) * Scale.Y\r
170                                 );\r
171                         }\r
172                         if (!this.ct登場用.b終了値に達した)\r
173                         {\r
174                                 return 0;\r
175                         }\r
176                         return 1;\r
177                 }\r
178 \r
179 \r
180                 // その他\r
181 \r
182                 #region [ private ]\r
183                 //-----------------\r
184                 private CCounter ct登場用;\r
185                 private Font ft曲名用フォント;\r
186                 private int n本体X;\r
187                 private int n本体Y;\r
188                 private CTextureAf txバー;\r
189                 private CTexture tx曲名;\r
190                 //-----------------\r
191                 #endregion\r
192         }\r
193 }\r