OSDN Git Service

Log のインデントをわかりやすくしてみた。
[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
8 namespace SST.ステージ
9 {
10         class ステージ管理
11         {
12                 public string 最初のステージ名
13                 {
14                         get
15                                 => this.ステージリスト.ElementAt( 0 ).Value.GetType().Name;
16                 }
17
18                 public ステージ 現在のステージ
19                 {
20                         get
21                                 => this._現在のステージ;
22                 }
23
24                 /// <summary>
25                 ///             全ステージのリスト。
26                 ///             新しいステージができたら、ここに追加すること。
27                 /// </summary>
28                 public Dictionary<string, ステージ> ステージリスト = new Dictionary<string, ステージ>() {
29                         { nameof( 起動.起動ステージ ), new 起動.起動ステージ() },
30                         { nameof( タイトル.タイトルステージ ), new タイトル.タイトルステージ() },
31                         { nameof( ユーザ.ユーザ選択ステージ ), new ユーザ.ユーザ選択ステージ() },
32                         { nameof( 選曲.選曲ステージ ), new 選曲.選曲ステージ() },
33                         { nameof( 曲読込.曲読込ステージ ), new 曲読込.曲読込ステージ() },
34                         { nameof( 演奏.演奏ステージ ), new 演奏.演奏ステージ() },
35                         { nameof( 結果.結果ステージ ), new 結果.結果ステージ() },
36                         { nameof( クリア.クリアステージ ), new クリア.クリアステージ() },
37                 };
38
39
40                 public ステージ管理()
41                 {
42                 }
43
44                 public void Dispose( グラフィックデバイス gd )
45                 {
46                         Debug.Assert( null != gd );
47
48                         // 現在活性化しているステージがあれば、すべて非活性化する。
49                         foreach( var kvp in this.ステージリスト )
50                         {
51                                 if( kvp.Value.活性化している )
52                                 {
53                                         kvp.Value.非活性化する( gd );
54                                 }
55                         }
56                 }
57
58                 /// <summary>
59                 ///             現在のステージを非活性化し、指定されたステージに遷移して、活性化する。
60                 /// </summary>
61                 /// <param name="遷移先ステージ名">Nullまたは空文字列なら、非活性化のみ行う。</param>
62                 public void ステージを遷移する( グラフィックデバイス gd, string 遷移先ステージ名 )
63                 {
64                         Log.Header( $"{遷移先ステージ名} へ遷移します。" );
65
66                         using( Log.Block( FDKUtilities.現在のメソッド名 ) )
67                         {
68                                 if( null != this._現在のステージ &&
69                                         this._現在のステージ.活性化している )
70                                 {
71                                         this._現在のステージ.非活性化する( gd );
72                                 }
73
74                                 if( 遷移先ステージ名.Nullでも空でもない() )
75                                 {
76                                         this._現在のステージ = this.ステージリスト[ 遷移先ステージ名 ];
77                                         this._現在のステージ.活性化する( gd );
78
79                                         App.入力管理.すべての入力デバイスをポーリングする();
80                                 }
81                                 else
82                                 {
83                                         Log.Header( "ステージの遷移を終了します。" );
84                                         this._現在のステージ = null;
85                                 }
86                         }
87                 }
88
89
90                 /// <summary>
91                 ///             現在実行中のステージ。<see cref="ステージリスト"/> の中のひとつを参照している(ので、うかつにDisposeとかしたりしないこと)。
92                 /// </summary>
93                 private ステージ _現在のステージ;
94         }
95 }