• R/O
  • HTTP
  • SSH
  • HTTPS

CsWin10Desktop3: Commit

Visual C# 7.0, Windows10 Desktop App


Commit MetaInfo

Revision7f91592715a6533ee36aabf84495762984575596 (tree)
Time2017-01-14 23:15:57
Authorくまかみ工房 <kumakamikoubou@gmai...>
Commiterくまかみ工房

Log Message

チップ種別(ドラムチップ)、レーン種別、表示レーン種別、ヒット判定、ドラム様式入力種別のマッピング情報が混乱してきたので整理。

switch case による分岐をマッピングに変更。
SSTFormat.v2.レーン種別 に Unknown を追加。(これだけなかった)
SST.ステージ.演奏.ヒットレーン種別 を 表示レーン種別に改名。
SST.入力.ドラム様式入力種別 を修正。

Change Summary

Incremental Difference

--- a/SSTFormat/v2/レーン種別.cs
+++ b/SSTFormat/v2/レーン種別.cs
@@ -4,6 +4,7 @@ namespace SSTFormat.v2
44 {
55 public enum レーン種別
66 {
7+ Unknown,
78 LeftCrash,
89 Ride, // 左右指定なし
910 China, // 左右指定なし
--- a/StrokeStyleT/Extensions.cs
+++ b/StrokeStyleT/Extensions.cs
@@ -3,8 +3,6 @@ using System.Collections.Generic;
33 using System.Diagnostics;
44 using System.Linq;
55 using SSTFormat.v2;
6-using SST.設定;
7-using SST.ステージ.演奏;
86
97 namespace SST
108 {
--- a/StrokeStyleT/StrokeStyleT.csproj
+++ b/StrokeStyleT/StrokeStyleT.csproj
@@ -101,7 +101,7 @@
101101 <Compile Include="Win32.cs" />
102102 <Compile Include="ViewerMessage.cs" />
103103 <Compile Include="ステージ\コンソールフォント.cs" />
104- <Compile Include="ステージ\演奏\ヒットレーン種別Extensions.cs" />
104+ <Compile Include="ステージ\演奏\表示レーン種別Extensions.cs" />
105105 <Compile Include="入力\キーバインディング.cs" />
106106 <Compile Include="入力\ドラム様式入力イベント.cs" />
107107 <Compile Include="入力\ドラム様式入力種別.cs" />
@@ -126,7 +126,7 @@
126126 <Compile Include="ステージ\演奏\コンボジャンプ.cs" />
127127 <Compile Include="ステージ\演奏\スクロール譜面.cs" />
128128 <Compile Include="ステージ\演奏\ドラムサウンド.cs" />
129- <Compile Include="ステージ\演奏\ヒットレーン種別.cs" />
129+ <Compile Include="ステージ\演奏\表示レーン種別.cs" />
130130 <Compile Include="ステージ\演奏\ヒット判定文字列.cs" />
131131 <Compile Include="ステージ\演奏\ヒット判定種別.cs" />
132132 <Compile Include="ステージ\演奏\レーンフレーム.cs" />
@@ -147,6 +147,7 @@
147147 <Compile Include="曲\RootNode.cs" />
148148 <Compile Include="曲\曲ツリー管理.cs" />
149149 <Compile Include="設定\Option.cs" />
150+ <Compile Include="設定\ドラムチップからのマッピング.cs" />
150151 <EmbeddedResource Include="Properties\Resources.resx">
151152 <Generator>ResXFileCodeGenerator</Generator>
152153 <LastGenOutput>Resources.Designer.cs</LastGenOutput>
--- a/StrokeStyleT/ステージ/演奏/スクロール譜面.cs
+++ b/StrokeStyleT/ステージ/演奏/スクロール譜面.cs
@@ -765,8 +765,11 @@ namespace SST.ステージ.演奏
765765 // 高頻度処理関連
766766
767767 /// <summary>
768- /// 音声の再生と演奏用入力は、描画処理とは独立したタスクを使い、より高頻度にループさせる。
768+ /// 音声の再生と演奏用入力を行う。
769769 /// </summary>
770+ /// <remarks>
771+ /// 描画処理とは独立したタスクを使い、より高頻度にループさせる。
772+ /// </remarks>
770773 private void _高頻度進行処理タスクエントリ()
771774 {
772775 Log.Info( $"{FDK.Utilities.現在のメソッド名} --> 開始" );
@@ -813,15 +816,13 @@ namespace SST.ステージ.演奏
813816 var チップ = 演奏スコア.チップリスト[ i ];
814817
815818 double 描画時間差sec = リアルタイム演奏時刻sec - チップ.描画時刻sec;
816-
817819 double 描画距離dpx = 演奏スコア.指定された時間secに対応する符号付きピクセル数を返す( this.譜面スクロール速度の倍率を取得する(), 描画時間差sec ); // 負数ならバー未達、0でバー直上、正数でバー通過
818820 bool チップは判定バーを通過した = ( 0 <= 描画距離dpx );
821+ double チップのY座標 = 座標.判定バーの中央Y座標dpx + 描画距離dpx;
819822
820- // チップのY座標を算出する。
821- double y = 座標.判定バーの中央Y座標dpx + 描画距離dpx;
822- if( y < -40.0 )
823+ if( チップのY座標 < -40.0 ) // -40dpx はチップが隠れるであろう適当なマージン。
823824 {
824- // y が画面上端より上に出ていればそこでチップのループ描画は終了。-40dpx はチップが隠れるであろう適当なマージン。
825+ // チップが画面上端より上に出ていればそこでチップのループ描画は終了。
825826 break;
826827 }
827828
@@ -850,12 +851,13 @@ namespace SST.ステージ.演奏
850851 {
851852 lock( this._スレッド間同期 )
852853 {
853- if( ( chip.ヒットされていない ) && // チップが未ヒット、かつ、
854- ( オプション.チップは自動演奏である( chip ) ) && // チップの AutoPlay が ON、かつ、
854+ if( ( chip.ヒットされていない ) &&
855+ ( オプション.チップは自動演奏である( chip ) ) &&
855856 ( 0 <= 描画距離dpx ) ) // バーを通過した。
856857 {
857858 chip.ヒット済みである = true;
858859 chip.不可視 = true;
860+
859861 if( chip.チップ種別 == チップ種別.背景動画 )
860862 {
861863 // (A) 背景動画の場合。
@@ -877,9 +879,16 @@ namespace SST.ステージ.演奏
877879 {
878880 lock( this._スレッド間同期 )
879881 {
880- if( ( chip.ヒットされていない ) && // チップが未ヒット、かつ、
881- ( オプション.チップはヒット判定対象である( chip.チップ種別 ) ) && // チップがヒット判定対象である、かつ、
882- ( 描画時間差sec > オプション.最大ヒット距離sec[ ヒット判定種別.POOR ] ) ) // 描画時間差が Poor 範囲を超えている。
882+ var mapping = オプション.マッピングを取得する( chip.チップ種別 );
883+ if( null == mapping )
884+ return;
885+
886+ var チップがヒット判定対象である = mapping.ヒット判定する;
887+ var 描画時間差がPoorの範囲を超えている = ( 描画時間差sec > オプション.最大ヒット距離sec[ ヒット判定種別.POOR ] );
888+
889+ if( chip.ヒットされていない &&
890+ チップがヒット判定対象である &&
891+ 描画時間差がPoorの範囲を超えている )
883892 {
884893 chip.ヒット済みである = true;
885894 chip.不可視 = true;
--- a/StrokeStyleT/ステージ/演奏/ヒット判定文字列.cs
+++ b/StrokeStyleT/ステージ/演奏/ヒット判定文字列.cs
@@ -19,18 +19,18 @@ namespace SST.ステージ.演奏
1919 this.子リスト.Add( kvp.Value );
2020 }
2121
22- public void 表示開始( ヒットレーン種別 レーン種別, ヒット判定種別 ヒット判定種別 )
22+ public void 表示開始( 表示レーン種別 表示レーン種別, ヒット判定種別 ヒット判定種別 )
2323 {
2424 lock( this._スレッド間同期 )
2525 {
26- if( レーン種別 == ヒットレーン種別.Unknown )
26+ if( 表示レーン種別 == 表示レーン種別.Unknown )
2727 return;
2828
2929 // レーンに対応する進行描画コンテキストを更新し、表示を開始するためのパラメータを設定する。
30- if( this._ヒット判定レーンto進行描画コンテキスト.ContainsKey( レーン種別 ) ) // すでにあったら、
31- this._ヒット判定レーンto進行描画コンテキスト.Remove( レーン種別 ); // 削除してから、
30+ if( this._ヒット判定レーンto進行描画コンテキスト.ContainsKey( 表示レーン種別 ) ) // すでにあったら、
31+ this._ヒット判定レーンto進行描画コンテキスト.Remove( 表示レーン種別 ); // 削除してから、
3232 this._ヒット判定レーンto進行描画コンテキスト.Add( // 追加。
33- レーン種別,
33+ 表示レーン種別,
3434 new 進行描画コンテキスト() {
3535 ヒット判定種別 = ヒット判定種別,
3636 進行カウンタ = new FDK.カウンタ.単純増加後不変カウンタ( 最初の値: 0, 最後の値: 300, 値をひとつ増加させるのにかける時間ms: 1 ), // カウント開始(=表示開始)
@@ -47,8 +47,10 @@ namespace SST.ステージ.演奏
4747 {
4848 lock( this._スレッド間同期 )
4949 {
50- var レーン種別 = StrokeStyleT.ユーザ管理.現在選択されているユーザ.オプション.チップに対応するヒットレーンを取得する( チップ種別 );
51- this.表示開始( レーン種別, ヒット判定種別 );
50+ var mapping = StrokeStyleT.ユーザ管理.現在選択されているユーザ.オプション.マッピングを取得する( チップ種別 );
51+
52+ if( null != mapping )
53+ this.表示開始( mapping.表示レーン種別, ヒット判定種別 );
5254 }
5355 }
5456
@@ -56,10 +58,10 @@ namespace SST.ステージ.演奏
5658 {
5759 // すべてのヒット判定レーンに対する進行描画コンテキストを生成する。
5860
59- this._ヒット判定レーンto進行描画コンテキスト = new Dictionary<ヒットレーン種別, 進行描画コンテキスト>();
61+ this._ヒット判定レーンto進行描画コンテキスト = new Dictionary<表示レーン種別, 進行描画コンテキスト>();
6062
61- foreach( var judgeType in typeof( ヒットレーン種別 ).GetEnumValues() )
62- this._ヒット判定レーンto進行描画コンテキスト.Add( (ヒットレーン種別) judgeType, new 進行描画コンテキスト() );
63+ foreach( var judgeType in typeof( 表示レーン種別 ).GetEnumValues() )
64+ this._ヒット判定レーンto進行描画コンテキスト.Add( (表示レーン種別) judgeType, new 進行描画コンテキスト() );
6365 }
6466
6567 protected override void On非活性化( デバイスリソース dr )
@@ -72,9 +74,9 @@ namespace SST.ステージ.演奏
7274 lock( this._スレッド間同期 )
7375 {
7476 // すべての ヒットレーン種別 について、進行描画する。
75- foreach( var lane_object in typeof( ヒットレーン種別 ).GetEnumValues() )
77+ foreach( var lane_object in typeof( 表示レーン種別 ).GetEnumValues() )
7678 {
77- var lane = (ヒットレーン種別) lane_object;
79+ var lane = (表示レーン種別) lane_object;
7880 var context = this._ヒット判定レーンto進行描画コンテキスト[ lane ];
7981
8082 if( context.進行カウンタ.停止中である )
@@ -240,7 +242,7 @@ namespace SST.ステージ.演奏
240242 }
241243 }
242244
243- private Dictionary<ヒットレーン種別, 進行描画コンテキスト> _ヒット判定レーンto進行描画コンテキスト = null;
245+ private Dictionary<表示レーン種別, 進行描画コンテキスト> _ヒット判定レーンto進行描画コンテキスト = null;
244246
245247 private readonly Dictionary<ヒット判定種別, 画像> _文字列画像 = new Dictionary<ヒット判定種別, 画像>() {
246248 { ヒット判定種別.PERFECT, new 画像( @"$(Static)\images\Judge Perfect.png" ) },
@@ -251,16 +253,16 @@ namespace SST.ステージ.演奏
251253 { ヒット判定種別.AUTO, new 画像( @"$(Static)\images\Judge Auto.png" ) },
252254 };
253255
254- private readonly Dictionary<ヒットレーン種別, float> _ヒットレーン種別toレーン表示位置Y中央dpx = new Dictionary<ヒットレーン種別, float>() {
255- { ヒットレーン種別.Unknown, 0f },
256- { ヒットレーン種別.LeftCrash, 469f },
257- { ヒットレーン種別.HiHat, 562f },
258- { ヒットレーン種別.Snare, 641f },
259- { ヒットレーン種別.Tom1, 495f },
260- { ヒットレーン種別.Bass, 716f },
261- { ヒットレーン種別.Tom2, 558f },
262- { ヒットレーン種別.Tom3, 798f },
263- { ヒットレーン種別.RightCrash, 633f },
256+ private readonly Dictionary<表示レーン種別, float> _ヒットレーン種別toレーン表示位置Y中央dpx = new Dictionary<表示レーン種別, float>() {
257+ { 表示レーン種別.Unknown, 0f },
258+ { 表示レーン種別.LeftCrash, 469f },
259+ { 表示レーン種別.HiHat, 562f },
260+ { 表示レーン種別.Snare, 641f },
261+ { 表示レーン種別.Tom1, 495f },
262+ { 表示レーン種別.Bass, 716f },
263+ { 表示レーン種別.Tom2, 558f },
264+ { 表示レーン種別.Tom3, 798f },
265+ { 表示レーン種別.RightCrash, 633f },
264266 };
265267
266268 private readonly object _スレッド間同期 = new object();
--- a/StrokeStyleT/ステージ/演奏/回転羽.cs
+++ b/StrokeStyleT/ステージ/演奏/回転羽.cs
@@ -27,10 +27,13 @@ namespace SST.ステージ.演奏
2727 {
2828 lock( this._スレッド間同期 )
2929 {
30- if( StrokeStyleT.ユーザ管理.現在選択されているユーザ.オプション.チップはヒット判定対象である( chipType ) )
30+ var mapping = StrokeStyleT.ユーザ管理.現在選択されているユーザ.オプション.マッピングを取得する( chipType );
31+ if( null == mapping )
32+ return;
33+
34+ if( mapping.ヒット判定する )
3135 {
32- var レーン種別 = StrokeStyleT.ユーザ管理.現在選択されているユーザ.オプション.チップに対応するヒットレーンを取得する( chipType );
33- this.発火する( new Vector2( レーン種別.レーンの中央X位置dpx(), 座標.判定バーの中央Y座標dpx ) );
36+ this.発火する( new Vector2( mapping.表示レーン種別.レーンの中央X位置dpx(), 座標.判定バーの中央Y座標dpx ) );
3437 }
3538 }
3639 }
--- a/StrokeStyleT/ステージ/演奏/演奏ステージ.cs
+++ b/StrokeStyleT/ステージ/演奏/演奏ステージ.cs
@@ -46,6 +46,7 @@ namespace SST.ステージ.演奏
4646
4747 public RWLock<フェーズ> 現在のフェーズ { get; } = new RWLock<フェーズ>( フェーズ.初期状態 );
4848
49+
4950 public 演奏ステージ()
5051 {
5152 this.子リスト.Add( this._コンボ = new コンボ() );
@@ -347,6 +348,7 @@ namespace SST.ステージ.演奏
347348 FDK.Utilities.解放する( ref this._デコード済みWaveSource );
348349 }
349350
351+
350352 private bool _活性化した直後である = false;
351353
352354 private double _演奏開始時刻sec = 0.0;
--- a/StrokeStyleT/ステージ/演奏/ヒットレーン種別.cs
+++ b/StrokeStyleT/ステージ/演奏/表示レーン種別.cs
@@ -3,14 +3,14 @@
33 namespace SST.ステージ.演奏
44 {
55 /// <summary>
6- /// 判定文字列のレーン種別。
7- /// SSTFormat.レーン種別とはまた微妙に異なるので、独立して定義する。(涙
6+ /// チップや判定文字列の表示先となるレーンの種別。
87 /// </summary>
9- enum ヒットレーン種別
8+ enum 表示レーン種別
109 {
1110 Unknown,
1211 LeftCrash,
1312 HiHat,
13+ Foot,
1414 Snare,
1515 Bass,
1616 Tom1,
--- a/StrokeStyleT/ステージ/演奏/ヒットレーン種別Extensions.cs
+++ b/StrokeStyleT/ステージ/演奏/表示レーン種別Extensions.cs
@@ -2,34 +2,37 @@
22
33 namespace SST.ステージ.演奏
44 {
5- static class ヒットレーン種別Extensions
5+ static class 表示レーン種別Extensions
66 {
7- public static float レーンの中央X位置dpx( this ヒットレーン種別 laneType )
7+ public static float レーンの中央X位置dpx( this 表示レーン種別 laneType )
88 {
99 switch( laneType )
1010 {
11- case ヒットレーン種別.LeftCrash:
11+ case 表示レーン種別.LeftCrash:
1212 return 座標.レーンフレーム左端のX座標dpx + 36f;
1313
14- case ヒットレーン種別.HiHat:
14+ case 表示レーン種別.HiHat:
1515 return 座標.レーンフレーム左端のX座標dpx + 105f;
1616
17- case ヒットレーン種別.Snare:
17+ case 表示レーン種別.Foot:
18+ return 座標.レーンフレーム左端のX座標dpx + 105f;
19+
20+ case 表示レーン種別.Snare:
1821 return 座標.レーンフレーム左端のX座標dpx + 214f;
1922
20- case ヒットレーン種別.Tom1:
23+ case 表示レーン種別.Tom1:
2124 return 座標.レーンフレーム左端のX座標dpx + 310f;
2225
23- case ヒットレーン種別.Bass:
26+ case 表示レーン種別.Bass:
2427 return 座標.レーンフレーム左端のX座標dpx + 381f;
2528
26- case ヒットレーン種別.Tom2:
29+ case 表示レーン種別.Tom2:
2730 return 座標.レーンフレーム左端のX座標dpx + 448f;
2831
29- case ヒットレーン種別.Tom3:
32+ case 表示レーン種別.Tom3:
3033 return 座標.レーンフレーム左端のX座標dpx + 544f;
3134
32- case ヒットレーン種別.RightCrash:
35+ case 表示レーン種別.RightCrash:
3336 return 座標.レーンフレーム左端のX座標dpx + 632f;
3437 }
3538 return 0;
--- a/StrokeStyleT/ユーザ/ユーザ管理.cs
+++ b/StrokeStyleT/ユーザ/ユーザ管理.cs
@@ -21,18 +21,6 @@ namespace SST.ユーザ
2121 public List<ユーザ> ユーザリスト { get; protected set; } = null;
2222
2323 /// <summary>
24- /// コンストラクタ時、または逆シリアル化時のメンバの既定値を設定する。
25- /// </summary>
26- /// <param name="sc"></param>
27- [OnDeserializing]
28- private void _初期化する( StreamingContext sc )
29- {
30- this.ユーザリスト = new List<ユーザ>();
31- this.現在選択されているユーザ = null;
32- }
33-
34-
35- /// <summary>
3624 /// 現在選択されているユーザ。
3725 /// null の場合は、どのユーザも選択されていないことを示す。
3826 /// </summary>
@@ -48,7 +36,7 @@ namespace SST.ユーザ
4836 public ユーザ管理()
4937 {
5038 this._初期化する( new StreamingContext() );
51- this._AutoPlayerが存在しないなら追加する();
39+ this._AutoPlayerの追加または固定の設定を行う();
5240 }
5341
5442 /// <summary>
@@ -209,30 +197,46 @@ namespace SST.ユーザ
209197 FDK.Log.ERROR( $"Usersファイルの読み込みに失敗しました。[{e.Message}][{XMLファイルパス}]" );
210198 userManager = new ユーザ管理();
211199 }
212- userManager._AutoPlayerが存在しないなら追加する();
200+ userManager._AutoPlayerの追加または固定の設定を行う();
213201 }
214202 else
215203 {
216204 FDK.Log.WARNING( $"Usersファイルが存在しません。作成します。[{XMLファイルパス}]" );
217- userManager._AutoPlayerが存在しないなら追加する(); // 保存する前に追加。
205+ userManager._AutoPlayerの追加または固定の設定を行う(); // 保存する前に追加。
218206 userManager.保存する( XMLファイルパス );
219207 }
220208
221209 return userManager;
222210 }
223211
224- private void _AutoPlayerが存在しないなら追加する()
212+ /// <summary>
213+ /// コンストラクタ時、または逆シリアル化時のメンバの既定値を設定する。
214+ /// </summary>
215+ /// <param name="sc"></param>
216+ [OnDeserializing]
217+ private void _初期化する( StreamingContext sc )
225218 {
226- int userIndex = this.ユーザリスト.FindIndex( ( user ) => ( user.名前 == Properties.Resources.AUTOPLAYER ) );
219+ this.ユーザリスト = new List<ユーザ>();
220+ this.現在選択されているユーザ = null;
221+ }
227222
228- if( -1 == userIndex ) // 存在してない
223+ private void _AutoPlayerの追加または固定の設定を行う()
224+ {
225+ // AutoPlayer ユーザが存在しないなら、追加する。
226+ if( -1 == this.ユーザリスト.FindIndex( ( user ) => ( user.名前 == Properties.Resources.AUTOPLAYER ) ) )
229227 {
230228 var autoPlayer = new ユーザ( Properties.Resources.AUTOPLAYER );
231229 autoPlayer.オプション.自動演奏を一括設定する( true );
232230 autoPlayer.曲検索フォルダパスリスト.Add( @"$(Static)\songs" ); // 既定の曲フォルダ
233231 this.ユーザリスト.Add( autoPlayer );
232+ }
234233
235- FDK.Log.Info( "ユーザリストに AutoPlayer を追加しました。" );
234+ // AutoPlayer の固定の設定を行う。
235+ {
236+ var autoPlayer = this.ユーザリスト.Find( ( user ) => ( user.名前 == Properties.Resources.AUTOPLAYER ) );
237+
238+ // 常に全オート。
239+ autoPlayer.オプション.自動演奏を一括設定する( true );
236240 }
237241 }
238242
--- a/StrokeStyleT/入力/キーバインディング.cs
+++ b/StrokeStyleT/入力/キーバインディング.cs
@@ -126,7 +126,6 @@ namespace SST.入力
126126 { 操作コマンド種別.決定, new [] {
127127 new [] { ドラム様式入力種別.LeftCrash },
128128 new [] { ドラム様式入力種別.Ride },
129- new [] { ドラム様式入力種別.Ride_Cup },
130129 new [] { ドラム様式入力種別.China },
131130 new [] { ドラム様式入力種別.Splash }
132131 } },
@@ -164,7 +163,6 @@ namespace SST.入力
164163 { this.MidiKey( 0, 93 ), ドラム様式入力種別.HiHat_Close },
165164 { this.MidiKey( 0, 46 ), ドラム様式入力種別.HiHat_Open },
166165 { this.MidiKey( 0, 92 ), ドラム様式入力種別.HiHat_Open },
167- { this.MidiKey( 0, 44 ), ドラム様式入力種別.HiHat_Foot },
168166 { this.MidiKey( 0, 255 ), ドラム様式入力種別.HiHat_Control }, // FDK の MidiIn クラスは、FootControl を ノート 255 として扱う。
169167 { this.MidiKey( 0, 25 ), ドラム様式入力種別.Snare },
170168 { this.MidiKey( 0, 26 ), ドラム様式入力種別.Snare },
--- a/StrokeStyleT/入力/ドラム様式入力種別.cs
+++ b/StrokeStyleT/入力/ドラム様式入力種別.cs
@@ -16,18 +16,18 @@ namespace SST.入力
1616 Unknown,
1717 LeftCrash,
1818 Ride,
19- Ride_Cup,
19+ //Ride_Cup, --> Ride として扱う。
2020 China,
2121 Splash,
2222 HiHat_Open,
23- //HiHat_HalfOpen, --> 削除: HiHat_Open として扱う。
23+ //HiHat_HalfOpen, --> HiHat_Open として扱う。
2424 HiHat_Close,
25- HiHat_Foot,
26- HiHat_Control, // --> 追加: 開度(入力信号である)
25+ //HiHat_Foot, --> ヒット判定しない。
26+ HiHat_Control, // --> 開度(入力信号である)
2727 Snare,
2828 Snare_OpenRim,
2929 Snare_ClosedRim,
30- //Snare_Ghost, --> 削除: 音量の小さいSnare として扱う。
30+ //Snare_Ghost, --> ヒット判定しない。
3131 Bass,
3232 Tom1,
3333 Tom1_Rim,
@@ -36,7 +36,9 @@ namespace SST.入力
3636 Tom3,
3737 Tom3_Rim,
3838 RightCrash,
39- //LeftCymbal_Mute, --> 削除: (YAMAHAでは)入力信号じゃない
40- //RightCymbal_Mute, --> 削除: (YAMAHAでは)入力信号じゃない
39+ //LeftCymbal_Mute, --> (YAMAHAでは)入力信号じゃない
40+ //RightCymbal_Mute, --> (YAMAHAでは)入力信号じゃない
4141 }
42+
43+ // ※変更したら、チップ種別の Extention も修正すること。
4244 }
--- a/StrokeStyleT/設定/Option.cs
+++ b/StrokeStyleT/設定/Option.cs
@@ -6,6 +6,7 @@ using System.Linq;
66 using System.Runtime.Serialization;
77 using System.Xml;
88 using SSTFormat.v2;
9+using SST.入力;
910 using SST.ステージ.演奏;
1011
1112 namespace SST.設定
@@ -58,11 +59,8 @@ namespace SST.設定
5859 /// <summary>
5960 /// AutoPlay であるなら true 。
6061 /// </summary>
61- /// <remarks>
62- /// SSTFormat.レーン種別単位である(チップ種別、ヒットレーン種別ではない)ことに注意。
63- /// </remarks>
6462 [DataMember]
65- public Dictionary<レーン種別, bool> AutoPlay { get; set; }
63+ public Dictionary<ドラム様式入力種別, bool> AutoPlay { get; set; }
6664
6765 /// <summary>
6866 /// 演奏画面での譜面スクロール速度の倍率。
@@ -97,20 +95,15 @@ namespace SST.設定
9795 /// </param>
9896 public void 自動演奏を一括設定する( bool 設定値 )
9997 {
100- this.AutoPlay[ レーン種別.LeftCrash ] =
101- this.AutoPlay[ レーン種別.Ride ] =
102- this.AutoPlay[ レーン種別.China ] =
103- this.AutoPlay[ レーン種別.Splash ] =
104- this.AutoPlay[ レーン種別.HiHat ] =
105- this.AutoPlay[ レーン種別.Snare ] =
106- this.AutoPlay[ レーン種別.Bass ] =
107- this.AutoPlay[ レーン種別.Tom1 ] =
108- this.AutoPlay[ レーン種別.Tom2 ] =
109- this.AutoPlay[ レーン種別.Tom3 ] =
110- this.AutoPlay[ レーン種別.RightCrash ] = 設定値;
111-
112- this.AutoPlay[ レーン種別.BPM ] = false; // 常に
113- this.AutoPlay[ レーン種別.Song ] = true; // 常に
98+ foreach( var itemObject in Enum.GetValues( typeof( ドラム様式入力種別 ) ) )
99+ {
100+ var item = (ドラム様式入力種別) itemObject;
101+
102+ if( this.AutoPlay.ContainsKey( item ) )
103+ this.AutoPlay.Remove( item );
104+
105+ this.AutoPlay[ item ] = 設定値;
106+ }
114107 }
115108
116109 /// <summary>
@@ -176,162 +169,47 @@ namespace SST.設定
176169 option.保存する( XMLファイルパス );
177170 }
178171
172+ option._チップからのマッピングを現在のオプション内容で初期化する();
173+
179174 return option;
180175 }
181176
182- /// <summary>
183- /// チップに対応するヒットレーンを返す。
184- /// 現在のオプション内容を参照して対応を決定する。
185- /// </summary>
186- public ヒットレーン種別 チップに対応するヒットレーンを取得する( チップ種別 chipType )
177+ public bool チップは自動演奏である( チップ種別 chipType )
187178 {
188- var レーン種別 = ヒットレーン種別.Unknown; // ヒット判定しないレーンなら Unknown。
189-
190- switch( chipType )
179+ if( this._チップからのマッピング.ContainsKey( chipType ) )
191180 {
192- case チップ種別.LeftCrash:
193- レーン種別 = ヒットレーン種別.LeftCrash;
194- break;
195-
196- case チップ種別.Ride:
197- case チップ種別.Ride_Cup:
198- レーン種別 = ( this.Rideは左 ) ? ヒットレーン種別.LeftCrash : ヒットレーン種別.RightCrash;
199- break;
200-
201- case チップ種別.China:
202- レーン種別 = ( this.Chinaは左 ) ? ヒットレーン種別.LeftCrash : ヒットレーン種別.RightCrash;
203- break;
204-
205- case チップ種別.Splash:
206- レーン種別 = ( this.Splashは左 ) ? ヒットレーン種別.LeftCrash : ヒットレーン種別.RightCrash;
207- break;
208-
209- case チップ種別.HiHat_Open:
210- case チップ種別.HiHat_HalfOpen:
211- case チップ種別.HiHat_Close:
212- //case チップ種別.HiHat_Foot: → 判定なし。
213- レーン種別 = ヒットレーン種別.HiHat;
214- break;
215-
216- case チップ種別.Snare:
217- case チップ種別.Snare_OpenRim:
218- case チップ種別.Snare_ClosedRim:
219- //case チップ種別.Snare_Ghost: → 判定なし。
220- レーン種別 = ヒットレーン種別.Snare;
221- break;
222-
223- case チップ種別.Bass:
224- レーン種別 = ヒットレーン種別.Bass;
225- break;
226-
227- case チップ種別.Tom1:
228- case チップ種別.Tom1_Rim:
229- レーン種別 = ヒットレーン種別.Tom1;
230- break;
231-
232- case チップ種別.Tom2:
233- case チップ種別.Tom2_Rim:
234- レーン種別 = ヒットレーン種別.Tom2;
235- break;
236-
237- case チップ種別.Tom3:
238- case チップ種別.Tom3_Rim:
239- レーン種別 = ヒットレーン種別.Tom3;
240- break;
241-
242- case チップ種別.RightCrash:
243- レーン種別 = ヒットレーン種別.RightCrash;
244- break;
245-
246- case チップ種別.LeftCymbal_Mute:
247- レーン種別 = ヒットレーン種別.LeftCrash;
248- break;
249-
250- case チップ種別.RightCymbal_Mute:
251- レーン種別 = ヒットレーン種別.RightCrash;
252- break;
181+ var drumType = this._チップからのマッピング[ chipType ].ドラム様式入力種別;
182+
183+ if( ( drumType != ドラム様式入力種別.Unknown ) && // AutoPlay[Unknown] は無効。
184+ ( this.AutoPlay.ContainsKey( drumType ) ) )
185+ {
186+ return this.AutoPlay[ drumType ];
187+ }
253188 }
254189
255- return レーン種別;
190+ return true; // 既定値。
256191 }
257- public ヒットレーン種別 チップに対応するヒットレーンを取得する( チップ chip )
258- {
259- return チップに対応するヒットレーンを取得する( chip.チップ種別 );
260- }
261-
262- public bool チップはヒット判定対象である( チップ種別 chipType )
263- {
264- // 対応するヒットレーンが Unknown じゃなければ判定対象である。
265- return ( this.チップに対応するヒットレーンを取得する( chipType ) != ヒットレーン種別.Unknown );
266- }
267- public bool チップはヒット判定対象である( チップ chip )
192+ public bool チップは自動演奏である( チップ chip )
268193 {
269- return this.チップはヒット判定対象である( chip.チップ種別 );
194+ return this.チップは自動演奏である( chip.チップ種別 );
270195 }
271196
272- public bool チップは自動演奏である( チップ種別 chipType )
197+ public ドラムチップからのマッピング マッピングを取得する( チップ種別 chipType )
273198 {
274- // チップの種別に対応するレーンの AutoPlay 設定値を返す。
275- switch( chipType )
199+ if( this._チップからのマッピング.ContainsKey( chipType ) )
276200 {
277- case チップ種別.LeftCrash:
278- case チップ種別.LeftCymbal_Mute:
279- return this.AutoPlay[ レーン種別.LeftCrash ];
280-
281- case チップ種別.Ride:
282- case チップ種別.Ride_Cup:
283- return ( this.Rideは左 ) ? this.AutoPlay[ レーン種別.LeftCrash ] : this.AutoPlay[ レーン種別.RightCrash ];
284-
285- case チップ種別.China:
286- return ( this.Chinaは左 ) ? this.AutoPlay[ レーン種別.LeftCrash ] : this.AutoPlay[ レーン種別.RightCrash ];
287-
288- case チップ種別.Splash:
289- return ( this.Splashは左 ) ? this.AutoPlay[ レーン種別.LeftCrash ] : this.AutoPlay[ レーン種別.RightCrash ];
290-
291- case チップ種別.HiHat_Open:
292- case チップ種別.HiHat_HalfOpen:
293- case チップ種別.HiHat_Close:
294- case チップ種別.HiHat_Foot:
295- return this.AutoPlay[ レーン種別.HiHat ];
296-
297- case チップ種別.Snare:
298- case チップ種別.Snare_OpenRim:
299- case チップ種別.Snare_ClosedRim:
300- case チップ種別.Snare_Ghost:
301- return this.AutoPlay[ レーン種別.Snare ];
302-
303- case チップ種別.Bass:
304- return this.AutoPlay[ レーン種別.Bass ];
305-
306- case チップ種別.Tom1:
307- case チップ種別.Tom1_Rim:
308- return this.AutoPlay[ レーン種別.Tom1 ];
309-
310- case チップ種別.Tom2:
311- case チップ種別.Tom2_Rim:
312- return this.AutoPlay[ レーン種別.Tom2 ];
313-
314- case チップ種別.Tom3:
315- case チップ種別.Tom3_Rim:
316- return this.AutoPlay[ レーン種別.Tom3 ];
317-
318- case チップ種別.RightCrash:
319- case チップ種別.RightCymbal_Mute:
320- return this.AutoPlay[ レーン種別.RightCrash ];
321-
322- case チップ種別.背景動画:
323- return true; // 常にAutoPlay
201+ return this._チップからのマッピング[ chipType ];
324202 }
325203
326- // 上記以外はみな false。
327- return false;
328- }
329- public bool チップは自動演奏である( チップ chip )
330- {
331- return this.チップは自動演奏である( chip.チップ種別 );
204+ return null; // チップはドラムチップじゃない
332205 }
333206
334207 /// <summary>
208+ /// チップ種別と各種種別との対応表。
209+ /// </summary>
210+ private Dictionary<チップ種別, ドラムチップからのマッピング> _チップからのマッピング = null;
211+
212+ /// <summary>
335213 /// メンバを初期化する。
336214 /// </summary>
337215 /// <param name="sc"></param>
@@ -339,7 +217,7 @@ namespace SST.設定
339217 /// コンストラクタ、または逆シリアル前に呼び出される。
340218 /// 特に、既定の初期値だと困る逆シリアル化の対象メンバがあれば、ここで初期化しておくこと。
341219 /// </remarks>
342- [OnDeserializing]
220+ [ OnDeserializing ]
343221 private void _初期化する( StreamingContext sc )
344222 {
345223 this.Rideは左 = false;
@@ -355,27 +233,89 @@ namespace SST.設定
355233 { ヒット判定種別.AUTO, Autoの最大ヒット距離secの既定値 },
356234 };
357235
358- this.AutoPlay = new Dictionary<レーン種別, bool>() {
359- { レーン種別.LeftCrash, false },
360- { レーン種別.Ride, false },
361- { レーン種別.China, false },
362- { レーン種別.Splash, false },
363- { レーン種別.HiHat, false },
364- { レーン種別.Foot, false },
365- { レーン種別.Snare, false },
366- { レーン種別.Bass, false },
367- { レーン種別.Tom1, false },
368- { レーン種別.Tom2, false },
369- { レーン種別.Tom3, false },
370- { レーン種別.RightCrash, false },
371- { レーン種別.BPM, false },
372- { レーン種別.Song, true },
373- };
236+ this.AutoPlay = new Dictionary<ドラム様式入力種別, bool>();
237+ this.自動演奏を一括設定する( false );
374238
375239 this.譜面スクロール速度の倍率 = 1.0;
376240 this.演奏動画の表示パターン = 1;
241+
242+ this._チップからのマッピングを現在のオプション内容で初期化する();
243+ }
244+ private void _チップからのマッピングを現在のオプション内容で初期化する()
245+ {
246+ this._チップからのマッピング = new Dictionary<チップ種別, ドラムチップからのマッピング>() {
247+
248+ { チップ種別.Unknown,
249+ new ドラムチップからのマッピング( チップ種別.Unknown, レーン種別.Unknown, 表示レーン種別.Unknown, ドラム様式入力種別.Unknown ) },
250+
251+ { チップ種別.LeftCrash,
252+ new ドラムチップからのマッピング( チップ種別.LeftCrash, レーン種別.LeftCrash, 表示レーン種別.LeftCrash, ドラム様式入力種別.LeftCrash ) },
253+
254+ { チップ種別.Ride,
255+ new ドラムチップからのマッピング( チップ種別.Ride, レーン種別.Ride, ( this.Rideは左 ) ? 表示レーン種別.LeftCrash : 表示レーン種別.RightCrash, ドラム様式入力種別.Ride ) },
256+
257+ { チップ種別.Ride_Cup,
258+ new ドラムチップからのマッピング( チップ種別.Ride_Cup, レーン種別.Ride, ( this.Rideは左 ) ? 表示レーン種別.LeftCrash : 表示レーン種別.RightCrash, ドラム様式入力種別.Ride ) },
259+
260+ { チップ種別.China,
261+ new ドラムチップからのマッピング( チップ種別.China, レーン種別.China, ( this.Chinaは左 ) ? 表示レーン種別.LeftCrash : 表示レーン種別.RightCrash, ドラム様式入力種別.China ) },
262+
263+ { チップ種別.Splash,
264+ new ドラムチップからのマッピング( チップ種別.Splash, レーン種別.Splash, ( this.Splashは左 ) ? 表示レーン種別.LeftCrash : 表示レーン種別.RightCrash, ドラム様式入力種別.Splash ) },
265+
266+ { チップ種別.HiHat_Open,
267+ new ドラムチップからのマッピング( チップ種別.HiHat_Open, レーン種別.HiHat, 表示レーン種別.HiHat, ドラム様式入力種別.HiHat_Open ) },
268+
269+ { チップ種別.HiHat_HalfOpen,
270+ new ドラムチップからのマッピング( チップ種別.HiHat_HalfOpen, レーン種別.HiHat, 表示レーン種別.HiHat, ドラム様式入力種別.HiHat_Open ) },
271+
272+ { チップ種別.HiHat_Close,
273+ new ドラムチップからのマッピング( チップ種別.HiHat_Close, レーン種別.HiHat, 表示レーン種別.HiHat, ドラム様式入力種別.HiHat_Close ) },
274+
275+ { チップ種別.HiHat_Foot,
276+ new ドラムチップからのマッピング( チップ種別.HiHat_Foot, レーン種別.Foot, 表示レーン種別.Foot, ドラム様式入力種別.Unknown ) },
277+
278+ { チップ種別.Snare,
279+ new ドラムチップからのマッピング( チップ種別.Snare, レーン種別.Snare, 表示レーン種別.Snare, ドラム様式入力種別.Snare ) },
280+
281+ { チップ種別.Snare_OpenRim,
282+ new ドラムチップからのマッピング( チップ種別.Snare_OpenRim, レーン種別.Snare, 表示レーン種別.Snare, ドラム様式入力種別.Snare_OpenRim ) },
283+
284+ { チップ種別.Snare_ClosedRim,
285+ new ドラムチップからのマッピング( チップ種別.Snare_ClosedRim, レーン種別.Snare, 表示レーン種別.Snare, ドラム様式入力種別.Snare_ClosedRim ) },
286+
287+ { チップ種別.Snare_Ghost,
288+ new ドラムチップからのマッピング( チップ種別.Snare_Ghost, レーン種別.Snare, 表示レーン種別.Snare, ドラム様式入力種別.Unknown ) },
289+
290+ { チップ種別.Bass,
291+ new ドラムチップからのマッピング( チップ種別.Bass, レーン種別.Bass, 表示レーン種別.Bass, ドラム様式入力種別.Bass ) },
292+
293+ { チップ種別.Tom1,
294+ new ドラムチップからのマッピング( チップ種別.Tom1, レーン種別.Tom1, 表示レーン種別.Tom1, ドラム様式入力種別.Tom1 ) },
295+
296+ { チップ種別.Tom1_Rim,
297+ new ドラムチップからのマッピング( チップ種別.Tom1_Rim, レーン種別.Tom1, 表示レーン種別.Tom1, ドラム様式入力種別.Tom1_Rim ) },
298+
299+ { チップ種別.Tom2,
300+ new ドラムチップからのマッピング( チップ種別.Tom2, レーン種別.Tom2, 表示レーン種別.Tom2, ドラム様式入力種別.Tom2 ) },
301+
302+ { チップ種別.Tom2_Rim,
303+ new ドラムチップからのマッピング( チップ種別.Tom2_Rim, レーン種別.Tom2, 表示レーン種別.Tom2, ドラム様式入力種別.Tom2_Rim ) },
304+
305+ { チップ種別.Tom3,
306+ new ドラムチップからのマッピング( チップ種別.Tom3, レーン種別.Tom3, 表示レーン種別.Tom3, ドラム様式入力種別.Tom3 ) },
307+
308+ { チップ種別.Tom3_Rim,
309+ new ドラムチップからのマッピング( チップ種別.Tom3_Rim, レーン種別.Tom3, 表示レーン種別.Tom3, ドラム様式入力種別.Tom3_Rim ) },
310+
311+ { チップ種別.RightCrash,
312+ new ドラムチップからのマッピング( チップ種別.RightCrash, レーン種別.RightCrash, 表示レーン種別.RightCrash, ドラム様式入力種別.RightCrash ) },
313+
314+ { チップ種別.LeftCymbal_Mute,
315+ new ドラムチップからのマッピング( チップ種別.LeftCymbal_Mute, レーン種別.LeftCrash, 表示レーン種別.LeftCrash, ドラム様式入力種別.Unknown ) },
316+ };
377317 }
378-
318+
379319 #region " IExtensibleDataObject の実装 "
380320 //----------------
381321 private ExtensionDataObject _ExData;
--- /dev/null
+++ b/StrokeStyleT/設定/ドラムチップからのマッピング.cs
@@ -0,0 +1,45 @@
1+using System;
2+using System.Collections.Generic;
3+using System.Diagnostics;
4+using System.Linq;
5+using SSTFormat.v2;
6+using SST.入力;
7+using SST.ステージ.演奏;
8+
9+namespace SST.設定
10+{
11+ class ドラムチップからのマッピング
12+ {
13+ /// <summary>
14+ /// ドラムチップの種別。マッピングのキー値。
15+ /// </summary>
16+ public チップ種別 チップ種別 = チップ種別.Unknown;
17+
18+ /// <summary>
19+ /// ドラムチップに対応するレーン種別。
20+ /// </summary>
21+ public レーン種別 レーン種別 = レーン種別.Bass;
22+
23+ /// <summary>
24+ /// ドラムチップの表示先レーン。
25+ /// </summary>
26+ public 表示レーン種別 表示レーン種別 = 表示レーン種別.Unknown;
27+
28+ /// <summary>
29+ /// ドラムチップとヒット判定を行うドラム様式入力。
30+ /// ヒット判定を行わないチップなら、Unknown。
31+ /// </summary>
32+ public ドラム様式入力種別 ドラム様式入力種別 = ドラム様式入力種別.Unknown;
33+
34+ public bool ヒット判定する => ( this.ドラム様式入力種別 != ドラム様式入力種別.Unknown );
35+ public bool ヒット判定しない => !this.ヒット判定する;
36+
37+ public ドラムチップからのマッピング( チップ種別 chipType, レーン種別 laneType, 表示レーン種別 locationLaneType, ドラム様式入力種別 drumType )
38+ {
39+ this.チップ種別 = chipType;
40+ this.レーン種別 = laneType;
41+ this.表示レーン種別 = locationLaneType;
42+ this.ドラム様式入力種別 = drumType;
43+ }
44+ }
45+}
Show on old repository browser