OSDN Git Service

"進行" を "高速進行" に改名。
[strokestylet/CsWin10Desktop3.git] / StrokeStyleT / ステージ / 演奏 / レーンフレーム.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Diagnostics;
4 using System.Linq;
5 using FDK;
6 using FDK.メディア;
7 using FDK.カウンタ;
8
9 namespace SST.ステージ.演奏
10 {
11         /// <summary>
12         ///             チップの背景であり、レーンを示すフレーム画像。
13         ///             レーンフラッシュアニメも追加。
14         /// </summary>
15         class レーンフレーム : Activity
16         {
17                 public float 高さ
18                 {
19                         get
20                         {
21                                 lock( this._スレッド間同期 )
22                                 {
23                                         return this._高さ;
24                                 }
25                         }
26                         set
27                         {
28                                 lock( this._スレッド間同期 )
29                                 {
30                                         this._高さ = value;
31                                 }
32                         }
33                 }
34
35                 /// <summary>
36                 ///             レーンフレーム左端から各レーンの中央位置までの相対距離。
37                 /// </summary>
38                 public static Dictionary<表示レーン種別, float> レーンto横中央相対位置;
39
40
41                 public レーンフレーム()
42                 {
43                         this.子リスト.Add( this._レーンフレーム画像 = new 画像( @"$(System)images\レーン.png" ) );
44                         this.子リスト.Add( this._フラッシュ破片 = new 画像( @"$(System)images\レーンフラッシュ.png" ) );
45                         this._フラッシュ破片.加算合成 = true;
46                 }
47
48                 protected override void On活性化( グラフィックデバイス gd )
49                 {
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 },
60                         };
61
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 ) ) },
72                         };
73                 }
74
75                 public void フラッシュ開始( 表示レーン種別 laneType )
76                 {
77                         this._フラッシュ情報[ laneType ].Item1.開始する( 0, 10, 15 );
78                 }
79
80                 public void 進行する()
81                 {
82                 }
83
84                 public void 描画する( グラフィックデバイス gd, float 左端 )
85                 {
86                         lock( this._スレッド間同期 )
87                         {
88                                 // (1) レーンフレームを描画する。
89                                 this._レーンフレーム画像.描画する( gd, 左端, 0f );
90
91                                 // (2) レーンフラッシュを描画する。
92                                 var フラッシュ破片のサイズ = new SharpDX.Size2F( 16f, 32f );
93                                 foreach( var kvp in this._フラッシュ情報 )
94                                 {
95                                         if( this._フラッシュ情報[ kvp.Key ].Item1.終了値に達していない )
96                                         {
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(加速しながら)
100
101                                                 for( float y = ( 演奏ステージ.ヒット判定バーの中央Y座標 - フラッシュ破片のサイズ.Height ); y > -( フラッシュ破片のサイズ.Height ); y -= フラッシュ破片のサイズ.Height )
102                                                 {
103                                                         this._フラッシュ破片.描画する(
104                                                                 gd,
105                                                                 演奏ステージ.レーンフレームの左端位置 + レーンフレーム.レーンto横中央相対位置[ kvp.Key ] - ( フラッシュ破片のサイズ.Width * 横拡大率 ) / 2f,
106                                                                 y,
107                                                                 不透明度0to1: 割合 * 0.75f,   // ちょっと暗めに。
108                                                                 転送元矩形: this._フラッシュ情報[ kvp.Key ].Item2,
109                                                                 X方向拡大率: 横拡大率 );
110                                                 }
111                                         }
112                                 }
113                         }
114                 }
115
116
117                 private 画像 _レーンフレーム画像 = null;
118
119                 private float _高さ = 1080f;
120
121                 private 画像 _フラッシュ破片 = null;
122
123                 private Dictionary<表示レーン種別, (Counter, SharpDX.RectangleF)> _フラッシュ情報 = null;
124
125                 private readonly object _スレッド間同期 = new object();
126         }
127 }