2 using System.Collections.Generic;
3 using System.Diagnostics;
12 /// チップの背景であり、レーンを示すフレーム画像。
15 class レーンフレーム : Activity
36 /// レーンフレーム左端から各レーンの中央位置までの相対距離。
38 public static Dictionary<表示レーン種別, float> レーンto横中央相対位置;
43 this.子リスト.Add( this._レーンフレーム画像 = new 画像( @"$(System)images\レーン.png" ) );
44 this.子リスト.Add( this._フラッシュ破片 = new 画像( @"$(System)images\レーンフラッシュ.png" ) );
45 this._フラッシュ破片.加算合成 = true;
48 protected override void On活性化( グラフィックデバイス gd )
50 レーンto横中央相対位置 = new Dictionary<表示レーン種別, float>() {
51 { 表示レーン種別.LeftCrash, +36f },
52 { 表示レーン種別.HiHat, +105f },
53 { 表示レーン種別.Foot, +105f },
54 { 表示レーン種別.Snare, +214f },
55 { 表示レーン種別.Tom1, +310f },
56 { 表示レーン種別.Bass, +381f },
57 { 表示レーン種別.Tom2, +448f },
58 { 表示レーン種別.Tom3, +544f },
59 { 表示レーン種別.RightCrash, +632f },
62 this._フラッシュ情報 = new Dictionary<表示レーン種別, (Counter, SharpDX.RectangleF)>() {
63 { 表示レーン種別.LeftCrash, ( new Counter(), new SharpDX.RectangleF( 16f * 0, 0f, 16f, 32f ) ) },
64 { 表示レーン種別.HiHat, ( new Counter(), new SharpDX.RectangleF( 16f * 1, 0f, 16f, 32f ) ) },
65 { 表示レーン種別.Foot, ( new Counter(), new SharpDX.RectangleF( 16f * 2, 0f, 16f, 32f ) ) },
66 { 表示レーン種別.Snare, ( new Counter(), new SharpDX.RectangleF( 16f * 3, 0f, 16f, 32f ) ) },
67 { 表示レーン種別.Tom1, ( new Counter(), new SharpDX.RectangleF( 16f * 4, 0f, 16f, 32f ) ) },
68 { 表示レーン種別.Bass, ( new Counter(), new SharpDX.RectangleF( 16f * 5, 0f, 16f, 32f ) ) },
69 { 表示レーン種別.Tom2, ( new Counter(), new SharpDX.RectangleF( 16f * 6, 0f, 16f, 32f ) ) },
70 { 表示レーン種別.Tom3, ( new Counter(), new SharpDX.RectangleF( 16f * 7, 0f, 16f, 32f ) ) },
71 { 表示レーン種別.RightCrash, ( new Counter(), new SharpDX.RectangleF( 16f * 8, 0f, 16f, 32f ) ) },
75 public void フラッシュ開始( 表示レーン種別 laneType )
77 this._フラッシュ情報[ laneType ].Item1.開始する( 0, 10, 15 );
84 public void 描画する( グラフィックデバイス gd, float 左端 )
89 this._レーンフレーム画像.描画する( gd, 左端, 0f );
92 var フラッシュ破片のサイズ = new SharpDX.Size2F( 16f, 32f );
93 foreach( var kvp in this._フラッシュ情報 )
95 if( this._フラッシュ情報[ kvp.Key ].Item1.終了値に達していない )
97 float 割合 = this._フラッシュ情報[ kvp.Key ].Item1.現在値の割合; // 0 → 1
98 float 横拡大率 = 0.2f + 0.8f * 割合; // 0.2 → 1.0
99 割合 = (float) Math.Cos( 割合 * Math.PI / 2f ); // 1 → 0(加速しながら)
101 for( float y = ( 演奏ステージ.ヒット判定バーの中央Y座標 - フラッシュ破片のサイズ.Height ); y > -( フラッシュ破片のサイズ.Height ); y -= フラッシュ破片のサイズ.Height )
105 演奏ステージ.レーンフレームの左端位置 + レーンフレーム.レーンto横中央相対位置[ kvp.Key ] - ( フラッシュ破片のサイズ.Width * 横拡大率 ) / 2f,
107 不透明度0to1: 割合 * 0.75f, // ちょっと暗めに。
108 転送元矩形: this._フラッシュ情報[ kvp.Key ].Item2,
117 private 画像 _レーンフレーム画像 = null;
119 private float _高さ = 1080f;
121 private 画像 _フラッシュ破片 = null;
123 private Dictionary<表示レーン種別, (Counter, SharpDX.RectangleF)> _フラッシュ情報 = null;
125 private readonly object _スレッド間同期 = new object();