OSDN Git Service

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