• R/O
  • HTTP
  • SSH
  • HTTPS

CsWin10Desktop3: Commit

Visual C# 7.0, Windows10 Desktop App


Commit MetaInfo

Revisione22ce3a7c64acd0f52d81980fcc7ff491be9e185 (tree)
Time2017-04-05 16:51:56
Authorくまかみ工房 <kumakamikoubou@gmai...>
Commiterくまかみ工房

Log Message

ステージ管理クラスを追加し、ステージ関連のコードを App から分離。

なんとなく。

Change Summary

Incremental Difference

--- a/StrokeStyleT/App.cs
+++ b/StrokeStyleT/App.cs
@@ -73,6 +73,12 @@ namespace SST
7373 protected set;
7474 } = null;
7575
76+ public static ステージ管理 ステージ管理
77+ {
78+ get;
79+ protected set;
80+ } = null;
81+
7682 #endregion
7783
7884
@@ -157,15 +163,12 @@ namespace SST
157163 App.サウンドデバイス = new サウンドデバイス( CSCore.CoreAudioAPI.AudioClientShareMode.Shared );
158164
159165 App.ユーザ管理 = ユーザ管理.復元する();
160- //----------------
161- #endregion
162166
163- #region " 最初のステージを起動する。"
164- //----------------
165- this._現在のステージ = this._ステージs.ElementAt( 0 ).Value; // ステージリストの最初のステージ。
166- this._現在のステージ.活性化する( App.デバイスリソース );
167+ App.ステージ管理 = new ステージ管理();
167168 //----------------
168169 #endregion
170+
171+ App.ステージ管理.ステージを遷移する( App.デバイスリソース, App.ステージ管理.最初のステージ名 );
169172 }
170173 }
171174
@@ -176,14 +179,8 @@ namespace SST
176179 {
177180 using( Log.Block( Utilities.現在のメソッド名 ) )
178181 {
179- // 現在活性化しているステージがあれば、すべて非活性化する。
180- foreach( var kvp in this._ステージs )
181- {
182- if( kvp.Value.活性化している )
183- {
184- kvp.Value.非活性化する( App.デバイスリソース );
185- }
186- }
182+ App.ステージ管理.Dispose();
183+ App.ステージ管理 = null;
187184
188185 App.ユーザ管理.保存する(); // DataContract は新規追加メンバがあってもXMLファイルを更新しないので、アプリのライフサイクルの中で一度だけ保存して反映するようにする。
189186 App.システム設定.保存する(); // 同上。
@@ -212,7 +209,7 @@ namespace SST
212209 /// </remarks>
213210 public void Run()
214211 {
215- Debug.Assert( null != this._現在のステージ ); // この時点で最初のステージが設定されていること。
212+ Debug.Assert( null != App.ステージ管理.現在のステージ ); // この時点で最初のステージが設定されていること。
216213
217214 // メインループを登録し、実行を開始する。
218215 SharpDX.Windows.RenderLoop.Run( this, () => {
@@ -254,11 +251,8 @@ namespace SST
254251 //----------------
255252 #endregion
256253
257- #region " (3) 現在のステージの進行描画を行う。"
258- //----------------
259- this._現在のステージ.進行描画する( App.デバイスリソース );
260- //----------------
261- #endregion
254+ // (3) 現在のステージの進行描画を行う。
255+ App.ステージ管理.現在のステージ.進行描画する( App.デバイスリソース );
262256
263257 #region " (4) スワップチェーンを表示する。"
264258 //----------------
@@ -283,16 +277,14 @@ namespace SST
283277 #endregion
284278
285279 // (5) ステージの状態をチェックし、遷移処理を行う。(必要に応じてビュアーメッセージキューの処理も行う。)
286- switch( this._現在のステージ.GetType().Name )
280+ switch( App.ステージ管理.現在のステージ.GetType().Name )
287281 {
288282 case nameof( 起動ステージ ):
289283 #region " 完了 → タイトルステージへ "
290284 //----------------
291- if( ( ( 起動ステージ ) this._現在のステージ ).現在のフェーズ == 起動ステージ.フェーズ.完了 )
285+ if( ( ( 起動ステージ ) App.ステージ管理.現在のステージ ).現在のフェーズ == 起動ステージ.フェーズ.完了 )
292286 {
293- this._現在のステージ.非活性化する( App.デバイスリソース );
294- this._現在のステージ = this._ステージs[ nameof( タイトルステージ ) ];
295- this._現在のステージ.活性化する( App.デバイスリソース );
287+ App.ステージ管理.ステージを遷移する( App.デバイスリソース, nameof( タイトルステージ ) );
296288 }
297289 //----------------
298290 #endregion
@@ -301,20 +293,17 @@ namespace SST
301293 case nameof( タイトルステージ ):
302294 #region " 確定 → ユーザステージへ "
303295 //----------------
304- if( ( ( タイトルステージ ) this._現在のステージ ).現在のフェーズ == タイトルステージ.フェーズ.確定 )
296+ if( ( ( タイトルステージ ) App.ステージ管理.現在のステージ ).現在のフェーズ == タイトルステージ.フェーズ.確定 )
305297 {
306- this._現在のステージ.非活性化する( App.デバイスリソース );
307- this._現在のステージ = this._ステージs[ nameof( ユーザステージ ) ];
308- this._現在のステージ.活性化する( App.デバイスリソース );
298+ App.ステージ管理.ステージを遷移する( App.デバイスリソース, nameof( ユーザステージ ) );
309299 }
310300 //----------------
311301 #endregion
312302 #region " キャンセル → アプリを終了する。"
313303 //----------------
314- else if( ( ( タイトルステージ ) this._現在のステージ ).現在のフェーズ == タイトルステージ.フェーズ.キャンセル )
304+ else if( ( ( タイトルステージ ) App.ステージ管理.現在のステージ ).現在のフェーズ == タイトルステージ.フェーズ.キャンセル )
315305 {
316- this._現在のステージ.非活性化する( App.デバイスリソース );
317- this._現在のステージ = null;
306+ App.ステージ管理.ステージを遷移する( App.デバイスリソース, null );
318307 this._アプリを終了する();
319308 }
320309 //----------------
@@ -330,21 +319,6 @@ namespace SST
330319
331320
332321 /// <summary>
333- /// 全ステージのリスト。
334- /// 新しいステージができたら、ここに追加すること。
335- /// </summary>
336- private Dictionary<string, SST.ステージ.ステージ> _ステージs = new Dictionary<string, ステージ.ステージ>() {
337- { nameof( 起動ステージ ), new 起動ステージ() },
338- { nameof( タイトルステージ ), new タイトルステージ() },
339- { nameof( ユーザステージ ), new ユーザステージ() },
340- };
341-
342- /// <summary>
343- /// 現在実行中のステージ。<see cref="_ステージs"/> の中のひとつを参照している(ので、うかつにDisposeとかしたりしないこと)。
344- /// </summary>
345- private SST.ステージ.ステージ _現在のステージ = null;
346-
347- /// <summary>
348322 /// true なら、<see cref="_アプリを終了する"/> が呼ばれてアプリが終了処理を開始していることを意味する。
349323 /// <see cref="_アプリを終了する"/> 以外では変更しないこと。
350324 /// </summary>
@@ -419,11 +393,12 @@ namespace SST
419393 }
420394 }
421395
396+
422397 private void _デバイス依存リソースを解放する()
423398 {
424399 using( Log.Block( Utilities.現在のメソッド名 ) )
425400 {
426- this._現在のステージ?.デバイス依存リソースを解放する( App.デバイスリソース );
401+ App.ステージ管理.現在のステージ?.デバイス依存リソースを解放する( App.デバイスリソース );
427402 }
428403 }
429404
@@ -431,7 +406,7 @@ namespace SST
431406 {
432407 using( Log.Block( Utilities.現在のメソッド名 ) )
433408 {
434- this._現在のステージ?.デバイス依存リソースを作成する( App.デバイスリソース );
409+ App.ステージ管理.現在のステージ?.デバイス依存リソースを作成する( App.デバイスリソース );
435410 }
436411 }
437412
--- a/StrokeStyleT/StrokeStyleT.csproj
+++ b/StrokeStyleT/StrokeStyleT.csproj
@@ -87,6 +87,7 @@
8787 <Compile Include="Viewer\ViewerMessageQueue.cs" />
8888 <Compile Include="ステージ\コンソールフォント.cs" />
8989 <Compile Include="ステージ\ステージ.cs" />
90+ <Compile Include="ステージ\ステージ管理.cs" />
9091 <Compile Include="ステージ\タイトル\タイトルステージ.cs" />
9192 <Compile Include="ステージ\ドラムセット.cs" />
9293 <Compile Include="ステージ\フェードアウト.cs" />
--- /dev/null
+++ b/StrokeStyleT/ステージ/ステージ管理.cs
@@ -0,0 +1,86 @@
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 ステージ管理 : IDisposable
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+
25+ public ステージ管理()
26+ {
27+ }
28+
29+ public void Dispose()
30+ {
31+ Debug.Assert( null != App.デバイスリソース );
32+
33+ // 現在活性化しているステージがあれば、すべて非活性化する。
34+ foreach( var kvp in this._ステージリスト )
35+ {
36+ if( kvp.Value.活性化している )
37+ {
38+ kvp.Value.非活性化する( App.デバイスリソース );
39+ }
40+ }
41+ }
42+
43+ /// <summary>
44+ /// 現在のステージを非活性化し、指定されたステージに遷移して、活性化する。
45+ /// </summary>
46+ /// <param name="遷移先ステージ名">Nullまたは空文字列なら、非活性化のみ行う。</param>
47+ public void ステージを遷移する( デバイスリソース dr, string 遷移先ステージ名 )
48+ {
49+ using( Log.Block( Utilities.現在のメソッド名 ) )
50+ {
51+ if( null != this._現在のステージ )
52+ this._現在のステージ.非活性化する( dr );
53+
54+ if( 遷移先ステージ名.Nullでも空でもない() )
55+ {
56+ Log.Info( "==============================" );
57+ Log.Info( $"{遷移先ステージ名} へ遷移します。" );
58+ Log.Info( "==============================" );
59+ this._現在のステージ = this._ステージリスト[ 遷移先ステージ名 ];
60+ this._現在のステージ.活性化する( dr );
61+ }
62+ else
63+ {
64+ Log.Info( "ステージの遷移を終了します。" );
65+ this._現在のステージ = null;
66+ }
67+ }
68+ }
69+
70+
71+ /// <summary>
72+ /// 全ステージのリスト。
73+ /// 新しいステージができたら、ここに追加すること。
74+ /// </summary>
75+ private Dictionary<string, ステージ> _ステージリスト = new Dictionary<string, ステージ>() {
76+ { nameof( 起動.起動ステージ ), new 起動.起動ステージ() },
77+ { nameof( タイトル.タイトルステージ ), new タイトル.タイトルステージ() },
78+ { nameof( ユーザ.ユーザステージ ), new ユーザ.ユーザステージ() },
79+ };
80+
81+ /// <summary>
82+ /// 現在実行中のステージ。<see cref="_ステージリスト"/> の中のひとつを参照している(ので、うかつにDisposeとかしたりしないこと)。
83+ /// </summary>
84+ private ステージ _現在のステージ;
85+ }
86+}
--- a/StrokeStyleT/ステージ/ユーザ/ユーザステージ.cs
+++ b/StrokeStyleT/ステージ/ユーザ/ユーザステージ.cs
@@ -55,17 +55,8 @@ namespace SST.ステージ.ユーザ
5555 switch( this.現在のフェーズ )
5656 {
5757 case フェーズ.ログアウト:
58-
59- App.ユーザ管理.選択されているユーザ?.保存する();
60-
61- if( App.ビュアーモードである )
62- {
63- this.現在のフェーズ = フェーズ.AutoPlayer選択;
64- }
65- else
66- {
67- this.現在のフェーズ = フェーズ.ユーザ一覧;
68- }
58+ this._ログアウトする();
59+ this.現在のフェーズ = ( App.ビュアーモードである ) ? フェーズ.AutoPlayer選択 : フェーズ.ユーザ一覧;
6960 break;
7061
7162 case フェーズ.AutoPlayer選択:
@@ -74,12 +65,11 @@ namespace SST.ステージ.ユーザ
7465 break;
7566
7667 case フェーズ.ユーザ一覧:
77- this._ステージ台.描画する( dr, 0, 0 );
78- this._ドラムセット.進行描画する( dr );
68+ this.現在のフェーズ = this._ユーザ一覧フェーズの進行描画( dr );
7969 break;
8070
8171 case フェーズ.ログイン:
82- App.ユーザ管理.ユーザを再構築する( App.ユーザ管理.選択されているユーザ.名前 );
72+ this._ログインする();
8373 this.現在のフェーズ = フェーズ.完了;
8474 break;
8575
@@ -92,5 +82,68 @@ namespace SST.ステージ.ユーザ
9282 private 画像 _ステージ台 = null;
9383
9484 private ドラムセット _ドラムセット = null;
85+
86+
87+ /// <summary>
88+ /// <see cref="App.ユーザ管理.現在選択されているユーザ"/> のログイン処理を行う。
89+ /// 未選択なら何もしない。
90+ /// </summary>
91+ private void _ログインする()
92+ {
93+ using( Log.Block( Utilities.現在のメソッド名 ) )
94+ {
95+ var user = App.ユーザ管理.選択されているユーザ;
96+
97+ if( null != user )
98+ {
99+ #region " ログイン処理 "
100+ //----------------
101+ App.ユーザ管理.ユーザを再構築する( App.ユーザ管理.選択されているユーザ.名前 );
102+ //----------------
103+ #endregion
104+
105+ Log.Info( $"ユーザ [{App.ユーザ管理.選択されているユーザ.名前}] がログインしました。" );
106+ }
107+ else
108+ {
109+ Log.WARNING( "現在選択されているユーザはいません。" );
110+ }
111+ }
112+ }
113+
114+ /// <summary>
115+ /// <see cref="App.ユーザ管理.現在選択されているユーザ"/> のログアウト処理を行う。
116+ /// 未選択なら何もしない。
117+ /// </summary>
118+ private void _ログアウトする()
119+ {
120+ using( Log.Block( Utilities.現在のメソッド名 ) )
121+ {
122+ var user = App.ユーザ管理.選択されているユーザ;
123+
124+ if( null != user )
125+ {
126+ #region " ログアウト処理 "
127+ //----------------
128+ user.保存する();
129+ //----------------
130+ #endregion
131+
132+ Log.Info( $"ユーザ [{user.名前}] をログアウトしました。" );
133+ }
134+ else
135+ {
136+ Log.WARNING( "現在ログインしているユーザはいません。" );
137+ }
138+ }
139+ }
140+
141+ private フェーズ _ユーザ一覧フェーズの進行描画( デバイスリソース dr )
142+ {
143+ this._ステージ台.描画する( dr, 0, 0 );
144+ this._ドラムセット.進行描画する( dr );
145+
146+ return フェーズ.ユーザ一覧;
147+ }
95148 }
96149 }
Show on old repository browser