OSDN Git Service

#36057 コンフィグまわりのリファクタ(リソース不完全なので注意)
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 07.演奏 / CAct演奏スコア共通.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Drawing;\r
5 using FDK;\r
6 \r
7 namespace DTXMania\r
8 {\r
9         internal class CAct演奏スコア共通 : CActivity\r
10         {\r
11                 protected STDGBSValue<long> nスコアの増分;\r
12                 protected STDGBSValue<double> n現在の本当のスコア;\r
13                 protected STDGBSValue<long> n現在表示中のスコア;\r
14                 protected long n進行用タイマ;\r
15                 private readonly Point[] ptSCORE = new Point[] { new Point(0x1f, 0x1a9), new Point(0x1e9, 0x1a9) };\r
16                 private CActDigit actDigit;\r
17 \r
18                 public CAct演奏スコア共通()\r
19                 {\r
20                         base.list子Activities.Add(actDigit = new CActDigit(Color.Orange, Color.Black, Color.OrangeRed, Color.DarkOrange, 30));\r
21                         base.b活性化してない = true;\r
22                 }\r
23 \r
24                 public double Get(EPart part)\r
25                 {\r
26                         return this.n現在の本当のスコア[part];\r
27                 }\r
28 \r
29                 public void Set(EPart part, double nScore)\r
30                 {\r
31                         if (this.n現在の本当のスコア[part] != nScore)\r
32                         {\r
33                                 this.n現在の本当のスコア[part] = nScore;\r
34                                 this.nスコアの増分[part] = (long)(((double)(this.n現在の本当のスコア[part] - this.n現在表示中のスコア[part])) / 20.0);\r
35                                 if (this.nスコアの増分[part] < 1L)\r
36                                 {\r
37                                         this.nスコアの増分[part] = 1L;\r
38                                 }\r
39                         }\r
40                 }\r
41 \r
42                 /// <summary>\r
43                 /// 点数を加える(各種AUTO補正つき)\r
44                 /// </summary>\r
45                 /// <param name="part"></param>\r
46                 /// <param name="bAutoPlay"></param>\r
47                 /// <param name="delta"></param>\r
48                 public void Add(EPart part, long delta)\r
49                 {\r
50                         double rev = 1.0;\r
51                         switch (part)\r
52                         {\r
53                                 case EPart.Unknown:\r
54                                         throw new ArgumentException();\r
55                                 case EPart.Drums:\r
56                                         if (!CDTXMania.Instance.ConfigIni.bIsAutoPlay(part))\r
57                                         {\r
58                                                 if (CDTXMania.Instance.ConfigIni.bAutoPlay.BD == true)\r
59                                                 {\r
60                                                         rev /= 2;\r
61                                                 }\r
62                                         }\r
63                                         break;\r
64                                 case EPart.Guitar:\r
65                                         if (!CDTXMania.Instance.ConfigIni.bIsAutoPlay(part))\r
66                                         {\r
67                                                 if (CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail)\r
68                                                 {\r
69                                                         rev /= 2;\r
70                                                 }\r
71                                                 if (CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick)\r
72                                                 {\r
73                                                         rev /= 3;\r
74                                                 }\r
75                                                 // Auto Neck\r
76                                                 if (CDTXMania.Instance.ConfigIni.bAutoPlay.GtR || CDTXMania.Instance.ConfigIni.bAutoPlay.GtG || CDTXMania.Instance.ConfigIni.bAutoPlay.GtB)\r
77                                                 {\r
78                                                         rev /= 4;\r
79                                                 }\r
80                                         }\r
81                                         break;\r
82                                 case EPart.Bass:\r
83                                         if (!CDTXMania.Instance.ConfigIni.bIsAutoPlay(part))\r
84                                         {\r
85                                                 if (CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail)\r
86                                                 {\r
87                                                         rev /= 2;\r
88                                                 }\r
89                                                 if (CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick)\r
90                                                 {\r
91                                                         rev /= 3;\r
92                                                 }\r
93                                                 if (CDTXMania.Instance.ConfigIni.bAutoPlay.BsR ||\r
94                                                                                                                 CDTXMania.Instance.ConfigIni.bAutoPlay.BsG ||\r
95                                                                                                                 CDTXMania.Instance.ConfigIni.bAutoPlay.BsB)\r
96                                                 {\r
97                                                         rev /= 4;\r
98                                                 }\r
99                                         }\r
100                                         break;\r
101                         }\r
102                         this.Set(part, this.Get(part) + delta * rev);\r
103                 }\r
104 \r
105 \r
106                 public override void On活性化()\r
107                 {\r
108                         if (base.b活性化してない)\r
109                         {\r
110                                 this.n進行用タイマ = -1;\r
111                                 for (EPart i = EPart.Drums; i <= EPart.Bass; i++)\r
112                                 {\r
113                                         this.n現在表示中のスコア[i] = 0L;\r
114                                         this.n現在の本当のスコア[i] = 0L;\r
115                                         this.nスコアの増分[i] = 0L;\r
116                                 }\r
117                                 base.On活性化();\r
118                         }\r
119                 }\r
120 \r
121                 // CActivity 実装(共通クラスからの差分のみ)\r
122                 public override int On進行描画()\r
123                 {\r
124                         if (b活性化してる)\r
125                         {\r
126                                 if (b初めての進行描画)\r
127                                 {\r
128                                         n進行用タイマ = FDK.CSound管理.rc演奏用タイマ.n現在時刻;\r
129                                         b初めての進行描画 = false;\r
130                                 }\r
131 \r
132                                 for (EPart inst = EPart.Drums; inst <= EPart.Bass; inst++)\r
133                                 {\r
134                                         if (CDTXMania.Instance.ConfigIni.b楽器有効(inst) && CDTXMania.Instance.DTX.bチップがある[inst])\r
135                                         {\r
136                                                 long num = FDK.CSound管理.rc演奏用タイマ.n現在時刻;\r
137                                                 if (num < n進行用タイマ)\r
138                                                 {\r
139                                                         n進行用タイマ = num;\r
140                                                 }\r
141                                                 while ((num - n進行用タイマ) >= 10)\r
142                                                 {\r
143                                                         this.n現在表示中のスコア[inst] += this.nスコアの増分[inst];\r
144 \r
145                                                         if (this.n現在表示中のスコア[inst] > (long)this.n現在の本当のスコア[inst])\r
146                                                                 this.n現在表示中のスコア[inst] = (long)this.n現在の本当のスコア[inst];\r
147 \r
148                                                         n進行用タイマ += 10;\r
149                                                 }\r
150 \r
151                                                 int x = CDTXMania.Instance.ConfigIni.cdInstX[inst][CDTXMania.Instance.ConfigIni.eActiveInst].Value\r
152                                                 + CDTXMania.Instance.Coordinates.Instrument[inst].W / 2;\r
153                                                 int y = CDTXMania.Instance.Coordinates.Score[inst].Y;\r
154 \r
155                                                 if (CDTXMania.Instance.ConfigIni.bReverse[inst])\r
156                                                 {\r
157                                                         y = SampleFramework.GameWindowSize.Height - y - actDigit.MaximumHeight;\r
158                                                 }\r
159                                                 int w = actDigit.Measure(this.n現在表示中のスコア[inst]);\r
160 \r
161                                                 actDigit.Draw(this.n現在表示中のスコア[inst], x - w / 2, y);\r
162                                         }\r
163                                 }\r
164                         }\r
165                         return 0;\r
166                 }\r
167         }\r
168 }\r