OSDN Git Service

Merge branch 'develop' into SSTFEditorでデバイス情報保存に対応する
[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                 public フェーズ 現在のフェーズ { get; protected set; } = フェーズ.初期状態;
13
14                 protected override void On活性化( デバイスリソース dr )
15                 {
16                         FDK.Log.Info( "曲読込ステージを開始します。" );
17
18                         #region " 条件チェック "
19                         //----------------
20                         if( StrokeStyleT.ビュアーモードである )
21                         {
22                                 // ビュアーモードでは、現在選択されているノードが null でも OK。
23                         }
24                         else
25                         {
26                                 Trace.Assert( null != StrokeStyleT.曲ツリー管理.現在選択されているノード, "[バグあり] 選択曲が null です。" );
27                         }
28                         //----------------
29                         #endregion
30
31                         this.現在のフェーズ = フェーズ.読込中;
32
33                         var 選択曲 = (SST.曲.MusicNode) StrokeStyleT.曲ツリー管理.現在選択されているノード;
34
35                         if( null != 選択曲 )
36                                 FDK.Log.Info( $"選択曲「{選択曲.タイトル}」({FDK.フォルダ.絶対パスをフォルダ変数付き絶対パスに変換して返す( 選択曲.sstfファイルパス )})" );
37                 }
38                 protected override void On非活性化( デバイスリソース dr )
39                 {
40                         FDK.Log.Info( "曲読込ステージを終了します。" );
41                 }
42                 public override void 進行描画する( デバイスリソース dr )
43                 {
44                         var 選択曲 = (SST.曲.MusicNode) StrokeStyleT.曲ツリー管理.現在選択されているノード;
45
46                         switch( this.現在のフェーズ )
47                         {
48                                 case フェーズ.読込中:
49                                         // 未解放なら解放する。念のため。
50                                         StrokeStyleT.演奏スコア?.Dispose();
51
52                                         // SSTFファイルを読み込んでスコアを構築。
53                                         if( null != 選択曲 )
54                                         {
55                                                 var user = StrokeStyleT.ユーザ管理.現在選択されているユーザ;
56                                                 StrokeStyleT.演奏スコア = new SSTFormat.スコア(
57                                                         選択曲.sstfファイルパス,
58                                                         user.Rideは左,
59                                                         user.Chinaは左,
60                                                         user.Splashは左 );
61                                         }
62
63                                         // フェーズ終了。
64                                         this.現在のフェーズ = フェーズ.終了;
65                                         break;
66                         }
67                 }
68         }
69 }