var オプション設定 = App.ユーザ管理.選択されているユーザ.オプション設定;
var 対応表 = オプション設定.ドラムとチップと入力の対応表.対応表[ chip.チップ種別 ];
- var AutoPlay = オプション設定.AutoPlay[ 対応表.AutoPlay種別 ];
- var ヒット判定バーとの時間の絶対値sec = Math.Abs( ヒット判定バーとの時間sec );
-
+ bool AutoPlay = オプション設定.AutoPlay[ 対応表.AutoPlay種別 ];
+ double ヒット判定バーとの時間の絶対値sec = Math.Abs( ヒット判定バーとの時間sec );
bool チップはヒット済みである = chip.ヒット済みである;
bool チップはMISSエリアに達している = ( ヒット判定バーとの時間sec > オプション設定.最大ヒット距離sec[ ヒットランク種別.POOR ] );
bool チップはヒット可能エリアにある = ( ヒット判定バーとの時間sec >= -( オプション設定.最大ヒット距離sec[ ヒットランク種別.POOR ] ) && !チップはMISSエリアに達している );
return;
// チップにヒットする入力を探す。
+ var ヒット入力 = App.入力管理.ポーリング結果.FirstOrDefault( ( 入力 ) => {
+
+ if( !( 入力.InputEvent.押された ) )
+ return false; // 押下入力じゃない。
+
+ if( 処理済み入力.Contains( 入力 ) )
+ return false; // すでに今回のターンで処理済み(=処理済み入力リストに追加済み)。
+
+ if( 対応表.シンバルフリーの対象 && オプション設定.シンバルフリー )
+ {
+ // (A) シンバルフリーの対象チップであり、かつシンバルフリーが ON である場合
+ var 入力の対応表 = オプション設定.ドラムとチップと入力の対応表.対応表.FirstOrDefault( ( kvp ) => ( kvp.Value.ドラム入力種別 == 入力.Type ) ).Value; // 見つからなきゃバグだ
+ if( !( 入力の対応表.シンバルフリーの対象 ) )
+ return false; // この入力はシンバルフリーの対象ではない。
+ }
+ else
+ {
+ // (B) シンバルフリーの対象ではないチップ、またはシンバルフリーが OFF である場合
+ if( 対応表.ドラム入力種別 != 入力.Type )
+ return false; // チップに対応している入力じゃない。
+ }
- // todo: シンバルフリーを実装する。
- var ヒット入力 = App.入力管理.ポーリング結果.FirstOrDefault( ( 入力 ) =>
- ( 入力.InputEvent.押された ) &&
- ( 対応表.ドラム入力種別 == 入力.Type ) &&
- !( 処理済み入力.Contains( 入力 ) )
- );
+ return true; // この 入力 はこの chip にヒットしている。
+ });
if( null == ヒット入力 )
- {
return;
- }
- else
- {
- 処理済み入力.Add( ヒット入力 );
- }
+
+ 処理済み入力.Add( ヒット入力 );
// ヒットランクを判定する。
[DataMember]
public 動画表示パターン種別 動画表示パターン種別 { get; set; }
+ /// <summary>
+ /// true なら、LeftCrash・RightCrash・Ride・China・Splash・HiHat(Close,Open,Foot)の入力としての区別がなくなり、
+ /// いずれの入力でもいずれのチップをヒットできるようになる。
+ /// </summary>
+ [DataMember]
+ public bool シンバルフリー { get; set; }
+
public ドラムとチップと入力の対応表 ドラムとチップと入力の対応表
{
get;
this.譜面スクロール速度の倍率 = 1.0;
this.動画表示パターン種別 = 動画表示パターン種別.中央表示;
+ this.シンバルフリー = false;
}
}