namespace SST.ステージ.選曲
{
+ /// <remarks>
+ /// 入力:
+ /// StrokeStyleT.曲ツリー管理
+ ///
+ /// 出力:
+ /// (A) 曲が確定した場合
+ /// this.現在のフェーズ ← 曲確定
+ /// StrokeStyleT.曲ツリー管理.現在選択されているノード ← 確定された曲のノード
+ ///
+ /// (B) キャンセルされた場合
+ /// this.現在のフェーズ ← キャンセル
+ /// </remarks>
class 選曲ステージ : SST.ステージ.ステージ
{
public enum フェーズ
曲確定,
キャンセル,
}
+
public フェーズ 現在のフェーズ { get; protected set; } = フェーズ.初期状態;
public 選曲ステージ()
{
- this.子リスト.Add( this.背景動画 = new 動画( @"$(Static)\images\選曲画面BGV.mp4" ) );
- this.子リスト.Add( this.ステージ台 = new 画像( @"$(Static)\images\ステージ台.png" ) );
- this.子リスト.Add( this.ドラムセット = new ドラムセット() );
- this.子リスト.Add( this.曲パネルビュー = new 曲パネルビュー() );
+ this.子リスト.Add( this._背景動画 = new 動画( @"$(Static)\images\選曲画面BGV.mp4", StrokeStyleT.Config.動画デコーダのキューサイズ ) );
+ this.子リスト.Add( this._ステージ台 = new 画像( @"$(Static)\images\ステージ台.png" ) );
+ this.子リスト.Add( this._ドラムセット = new ドラムセット() );
+ this.子リスト.Add( this._曲パネルビュー = new 曲パネルビュー() );
}
+
protected override void On活性化( デバイスリソース dr )
{
FDK.Log.Info( "選曲ステージを開始します。" );
- this.背景動画.ループ再生する = true;
- this.現在のフェーズ = フェーズ.表示中;
+ this.子リスト.Add( StrokeStyleT.曲ツリー管理 ); // コンストラクタで追加したら static への直接参照がずっと子リストに残るので、ここで追加する。
- this.子リスト.Add( StrokeStyleT.曲ツリー管理 ); // コンストラクタで追加したら static への直接参照がずっと子リストに残る。
+ this.現在のフェーズ = フェーズ.表示中;
+ this._活性化した直後である = true;
}
+
protected override void On非活性化( デバイスリソース dr )
{
FDK.Log.Info( "選曲ステージを終了します。" );
this.子リスト.Remove( StrokeStyleT.曲ツリー管理 );
}
+
public override void 進行描画する( デバイスリソース dr )
{
if( this.現在のフェーズ != フェーズ.表示中 )
return;
- // 描画。
- this.背景動画.進行描画する( dr, new SharpDX.RectangleF( 0f, 0f, dr.設計画面サイズdpx.Width, dr.設計画面サイズdpx.Height ) );
+ if( this._活性化した直後である )
+ {
+ this._背景動画.再生を開始する( 開始位置sec: 0.0, ループ再生する: true );
+ this._活性化した直後である = false;
+ }
+
+ // 進行描画。
+
+ this._背景動画.進行描画する( dr, new SharpDX.RectangleF( 0f, 0f, dr.設計画面サイズdpx.Width, dr.設計画面サイズdpx.Height ) );
+
switch( this.現在のフェーズ )
{
case フェーズ.表示中:
this.現在のフェーズ = フェーズ.表示中;
- this.曲パネルビュー.進行描画する( dr );
- this.ステージ台.進行描画する( dr, 0.0f, 0.0f );
- this.ドラムセット.進行描画する( dr );
+ this._曲パネルビュー.進行描画する( dr );
+ this._ステージ台.描画する( dr, 0.0f, 0.0f );
+ this._ドラムセット.進行描画する( dr );
break;
}
}
else
{
- Trace.Fail( "確定された曲が、曲でも BOX でも 戻る でも null でもありません。" ); // バグあり。
+ Trace.Fail( "[バグあり] 確定された曲が、曲でも BOX でも 戻る でも null でもありません。" );
}
}
// Esc 押下 → 戻る
// カーソルキー(キーバインドに寄らず固定)→ 選曲カーソル移動
else if( StrokeStyleT.キーボード入力.キーが押された( SharpDX.DirectInput.Key.Left ) )
{
- this.曲パネルビュー.カーソルを左に移動する();
+ this._曲パネルビュー.カーソルを左に移動する();
}
else if( StrokeStyleT.キーボード入力.キーが押された( SharpDX.DirectInput.Key.Right ) )
{
- this.曲パネルビュー.カーソルを右に移動する();
+ this._曲パネルビュー.カーソルを右に移動する();
}
else if( StrokeStyleT.キーボード入力.キーが押された( SharpDX.DirectInput.Key.Up ) )
{
- this.曲パネルビュー.カーソルを上に移動する();
+ this._曲パネルビュー.カーソルを上に移動する();
}
else if( StrokeStyleT.キーボード入力.キーが押された( SharpDX.DirectInput.Key.Down ) )
{
- this.曲パネルビュー.カーソルを下に移動する();
+ this._曲パネルビュー.カーソルを下に移動する();
}
}
- protected FDK.メディア.動画 背景動画 = null;
- protected FDK.メディア.画像 ステージ台 = null;
- protected SST.ステージ.ドラムセット ドラムセット = null;
- protected 曲パネルビュー 曲パネルビュー = null;
+ private bool _活性化した直後である = false;
+
+ private FDK.メディア.動画 _背景動画 = null;
+
+ private FDK.メディア.画像 _ステージ台 = null;
+
+ private SST.ステージ.ドラムセット _ドラムセット = null;
+
+ private 曲パネルビュー _曲パネルビュー = null;
}
}