OSDN Git Service

D2D版を改名し、新しく曲パネルビュークラスを追加。
[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
7 namespace SST.ステージ.選曲
8 {
9         class 選曲ステージ : SST.ステージ.ステージ
10         {
11                 public enum フェーズ
12                 {
13                         初期状態,
14                         表示中,
15                         曲確定,
16                         キャンセル,
17                 }
18                 public フェーズ 現在のフェーズ { get; protected set; } = フェーズ.初期状態;
19
20                 public 選曲ステージ()
21                 {
22                         this.子リスト.Add( this.背景動画 = new 動画( @"$(Static)\images\選曲画面BGV.mp4" ) );
23                         this.子リスト.Add( this.ステージ台 = new 画像( @"$(Static)\images\ステージ台.png" ) );
24                         this.子リスト.Add( this.ドラムセット = new 汎用.ドラムセット() );
25                         this.子リスト.Add( this.曲パネルビュー = new 曲パネルビュー() );
26                 }
27                 protected override void On活性化( デバイスリソース dr )
28                 {
29                         FDK.Log.Info( "選曲ステージを開始します。" );
30
31                         this.背景動画.ループ再生する = true;
32                         this.現在のフェーズ = フェーズ.表示中;
33
34                         this.子リスト.Add( StrokeStyleT.曲ツリー管理 );       // コンストラクタで追加したら static への直接参照がずっと子リストに残る。
35                 }
36                 protected override void On非活性化( デバイスリソース dr )
37                 {
38                         FDK.Log.Info( "選曲ステージを終了します。" );
39
40                         this.子リスト.Remove( StrokeStyleT.曲ツリー管理 );
41                 }
42                 public override void 進行描画する( デバイスリソース dr )
43                 {
44                         if( this.現在のフェーズ != フェーズ.表示中 )
45                                 return;
46
47                         // 描画。
48                         this.背景動画.進行描画する( dr, new SharpDX.RectangleF( 0f, 0f, dr.設計画面サイズdpx.Width, dr.設計画面サイズdpx.Height ) );
49                         switch( this.現在のフェーズ )
50                         {
51                                 case フェーズ.表示中:
52                                         this.現在のフェーズ = フェーズ.表示中;
53                                         this.曲パネルビュー.進行描画する( dr );
54                                         this.ステージ台.進行描画する( dr, 0.0f, 0.0f );
55                                         this.ドラムセット.進行描画する( dr );
56                                         break;
57                         }
58
59                         // 入力。
60
61                         StrokeStyleT.すべての入力デバイスをポーリングする();
62
63                         // Enter 押下
64                         if( StrokeStyleT.キーボード入力.キーが押された( SharpDX.DirectInput.Key.Return ) )
65                         {
66                                 if( StrokeStyleT.曲ツリー管理.現在選択されているノード is 曲.MusicNode )
67                                 {
68                                         FDK.Log.Info( "MusicNode が選択されました。" );
69                                         this.現在のフェーズ = フェーズ.曲確定;
70                                 }
71                                 else if( StrokeStyleT.曲ツリー管理.現在選択されているノード is 曲.BoxNode )
72                                 {
73                                         FDK.Log.Info( "BoxNode が選択されました。" );
74                                         // todo: BOX が選択された場合の実装。
75                                 }
76                                 else if( StrokeStyleT.曲ツリー管理.現在選択されているノード is 曲.BackNode )
77                                 {
78                                         FDK.Log.Info( "BackNode が選択されました。" );
79                                         // todo: 戻る が選択された場合の実装。
80                                 }
81                                 else if( null == StrokeStyleT.曲ツリー管理.現在選択されているノード )
82                                 {
83                                         FDK.Log.Info( "曲リストが空です。何もしません。" );
84                                 }
85                                 else
86                                 {
87                                         Trace.Fail( "確定された曲が、曲でも BOX でも 戻る でも null でもありません。" );   // バグあり。
88                                 }
89                         }
90                         // Esc 押下 → 戻る
91                         else if( StrokeStyleT.キーボード入力.キーが押された( SharpDX.DirectInput.Key.Escape ) )
92                         {
93                                 this.現在のフェーズ = フェーズ.キャンセル;
94                         }
95
96                         // カーソルキー(キーバインドに寄らず固定)→ 選曲カーソル移動
97                         else if( StrokeStyleT.キーボード入力.キーが押された( SharpDX.DirectInput.Key.Left ) )
98                         {
99                                 this.曲パネルビュー.カーソルを左に移動する();
100                         }
101                         else if( StrokeStyleT.キーボード入力.キーが押された( SharpDX.DirectInput.Key.Right ) )
102                         {
103                                 this.曲パネルビュー.カーソルを右に移動する();
104                         }
105                         else if( StrokeStyleT.キーボード入力.キーが押された( SharpDX.DirectInput.Key.Up ) )
106                         {
107                                 this.曲パネルビュー.カーソルを上に移動する();
108                         }
109                         else if( StrokeStyleT.キーボード入力.キーが押された( SharpDX.DirectInput.Key.Down ) )
110                         {
111                                 this.曲パネルビュー.カーソルを下に移動する();
112                         }
113                 }
114
115                 protected FDK.メディア.動画 背景動画 = null;
116                 protected FDK.メディア.画像 ステージ台 = null;
117                 protected SST.ステージ.汎用.ドラムセット ドラムセット = null;
118                 protected 曲パネルビュー 曲パネルビュー = null;
119         }
120 }