2 using System.Collections.Generic;
4 using System.Runtime.InteropServices;
10 internal class CAct演奏Drumsパッド : CActivity
12 private readonly EPad[] n描画順 = new EPad[] {
23 private long nY座標制御タイマ;
24 private long nフラッシュ制御タイマ;
25 private STPadValue<STパッド状態> stパッド状態 = new STPadValue<STパッド状態>();
26 private CTexture txパッド;
27 private CTexture tx光るパッド;
32 public int nY座標オフセットdot;
33 public int nY座標加速度dot;
34 public STパッド状態(int n明るさ_, int nY座標オフセットdot_, int nY座標加速度dot_)
37 nY座標オフセットdot = nY座標オフセットdot_;
38 nY座標加速度dot = nY座標加速度dot_;
42 public void Hit(EPad ePad)
44 this.stパッド状態[ePad].n明るさ = 6;
45 this.stパッド状態[ePad].nY座標加速度dot = 2;
48 public override void On活性化()
52 this.nフラッシュ制御タイマ = -1;
54 for (EPad i = EPad.DrumsPadMin; i < EPad.DrumsPadMax; ++i)
56 this.stパッド状態[i] = new STパッド状態(0, 0, 0);
62 public override void OnManagedリソースの作成()
66 this.txパッド = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlayDrums pads.png"));
67 this.tx光るパッド = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenPlayDrums pads flush.png"));
68 base.OnManagedリソースの作成();
72 public override void OnManagedリソースの解放()
76 TextureFactory.tテクスチャの解放(ref this.txパッド);
77 TextureFactory.tテクスチャの解放(ref this.tx光るパッド);
78 base.OnManagedリソースの解放();
82 public override int On進行描画()
85 CDTXMania.Instance.ConfigIni.bDrums有効 &&
86 CDTXMania.Instance.DTX.bチップがある.Drums &&
87 CDTXMania.Instance.ConfigIni.eDark != EDark.Full)
91 nフラッシュ制御タイマ = FDK.CSound管理.rc演奏用タイマ.n現在時刻;
92 nY座標制御タイマ = FDK.CSound管理.rc演奏用タイマ.n現在時刻;
95 long n現在時刻 = FDK.CSound管理.rc演奏用タイマ.n現在時刻;
96 if (n現在時刻 < this.nフラッシュ制御タイマ)
98 this.nフラッシュ制御タイマ = n現在時刻;
100 while ((n現在時刻 - this.nフラッシュ制御タイマ) >= 15)
102 for (EPad i = EPad.DrumsPadMin; i < EPad.DrumsPadMax; i++)
104 if (this.stパッド状態[i].n明るさ > 0)
106 this.stパッド状態[i].n明るさ--;
109 this.nフラッシュ制御タイマ += 15;
111 n現在時刻 = FDK.CSound管理.rc演奏用タイマ.n現在時刻;
112 if (n現在時刻 < this.nY座標制御タイマ)
114 this.nY座標制御タイマ = n現在時刻;
116 while ((n現在時刻 - this.nY座標制御タイマ) >= 5)
118 for (EPad i = EPad.DrumsPadMin; i < EPad.DrumsPadMax; i++)
120 this.stパッド状態[i].nY座標オフセットdot += this.stパッド状態[i].nY座標加速度dot;
121 if (this.stパッド状態[i].nY座標オフセットdot > 15)
123 this.stパッド状態[i].nY座標オフセットdot = 15;
124 this.stパッド状態[i].nY座標加速度dot = -1;
126 else if (this.stパッド状態[i].nY座標オフセットdot < 0)
128 this.stパッド状態[i].nY座標オフセットdot = 0;
129 this.stパッド状態[i].nY座標加速度dot = 0;
135 for (int idx = 0; idx < n描画順.Length; idx++)
138 Rectangle rc = CDTXMania.Instance.Coordinates.ImgDrPad[i];
139 int x = CDTXMania.Instance.ConfigIni.GetLaneX(EnumConverter.LaneFromPad(i)) +
140 (CDTXMania.Instance.ConfigIni.GetLaneW(EnumConverter.LaneFromPad(i)) / 2 -
141 CDTXMania.Instance.Coordinates.ImgDrPad[i].W / 2);
142 int yoffset = CDTXMania.Instance.Coordinates.DrPadOffset[i].Y;
143 int y = (CDTXMania.Instance.ConfigIni.bReverse.Drums ?
144 SampleFramework.GameWindowSize.Height - CDTXMania.Instance.Coordinates.DrPad.Y - yoffset - rc.Height :
145 CDTXMania.Instance.Coordinates.DrPad.Y + yoffset) + 2 * this.stパッド状態[i].nY座標オフセットdot;
147 if (this.txパッド != null)
149 this.txパッド.t2D描画(CDTXMania.Instance.Device, x, y, rc);
151 if (this.tx光るパッド != null)
153 this.tx光るパッド.n透明度 = (this.stパッド状態[i].n明るさ * 40) + 15;
154 this.tx光るパッド.t2D描画(CDTXMania.Instance.Device, x, y, rc);