OSDN Git Service

シンバル連打で毎回ミュートされてしまうミスを修正。
authorくまかみ工房 <kumakamikoubou@gmail.com>
Sat, 26 Nov 2016 12:50:46 +0000 (21:50 +0900)
committerくまかみ工房 <kumakamikoubou@gmail.com>
Sat, 26 Nov 2016 12:50:46 +0000 (21:50 +0900)
StrokeStyleT/ステージ/演奏/チップ種別Extensions.cs
StrokeStyleT/ステージ/演奏/ドラムサウンド.cs

index 4346613..b9364db 100644 (file)
@@ -11,6 +11,10 @@ namespace SST.ステージ.演奏
        /// </summary>
        static class チップ種別Extensions
        {
+               private const int GID_HIHAT = 1;
+               private const int GID_LEFT_CYMBAL = 2;
+               private const int GID_RIGHT_CYMBAL = 3;
+
                /// <summary>
                ///             チップ種別に対応するヒットレーン種別を、ユーザ設定も参照して、決定して返す。
                /// </summary>
@@ -99,7 +103,7 @@ namespace SST.ステージ.演奏
                /// </summary>
                /// <remarks>
                ///             このグループIDを 0 以外に設定すると、チップの発声時に、そのチップ種別に対応する排他発声グループIDを参照して
-               ///             ã\81\9dã\82\8cã\81¨å\90\8cã\81\98å\80¤ã\82\92æ\8c\81ã\81¤ã\83\81ã\83\83ã\83\97種å\88¥ã\81®ã\82µã\82¦ã\83³ã\83\89ã\81\8cã\81\99ã\81¹ã\81¦å\86\8dç\94\9få\81\9cæ­¢ã\81\95ã\82\8cてから発声されるようなる。
+               ///             ã\81\9dã\82\8cã\81¨å\90\8cã\81\98å\80¤ã\82\92æ\8c\81ã\81¤ã\83\81ã\83\83ã\83\97種å\88¥ã\81®ã\82µã\82¦ã\83³ã\83\89ã\81\8cã\81\99ã\81¹ã\81¦å\86\8dç\94\9få\81\9cæ­¢ã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8bã\81\8bã\82\92確èª\8dã\81\97ã\80\81å¿\85è¦\81ã\81\82ã\82\8cã\81°å\81\9cæ­¢ã\81\97てから発声されるようなる。
                ///             なお、同一かどうかだけを見るので、グループIDに設定する数値は(0を除いて)どんな値でもいい。
                /// </remarks>
                /// <param name="チップ種別">
@@ -110,10 +114,6 @@ namespace SST.ステージ.演奏
                /// </returns>
                public static int 排他発声グループID( this SSTFormat.チップ種別 チップ種別 )
                {
-                       const int GID_HIHAT = 1;
-                       const int GID_LEFT_CYMBAL = 2;
-                       const int GID_RIGHT_CYMBAL = 3;
-
                        var ユーザ設定 = StrokeStyleT.ユーザ管理.現在選択されているユーザ;
 
                        switch( チップ種別 )
@@ -145,5 +145,27 @@ namespace SST.ステージ.演奏
 
                        return 0;
                }
+
+               public static bool 直前のチップを消音する( this SSTFormat.チップ種別 今回のチップの種別, SSTFormat.チップ種別 直前のチップの種別 )
+               {
+                       int 今回のチップのGID = 今回のチップの種別.排他発声グループID();
+                       int 直前のチップのGID = 直前のチップの種別.排他発声グループID();
+
+                       if( 直前のチップのGID != 今回のチップのGID )
+                               return false;
+
+                       // グループIDがシンバルである場合は、Mute が来た場合を除き、消音しない。
+
+                       if( 直前のチップのGID == GID_LEFT_CYMBAL )
+                       {
+                               return ( 今回のチップの種別 == SSTFormat.チップ種別.LeftCymbal_Mute );
+                       }
+                       if( 直前のチップのGID == GID_RIGHT_CYMBAL )
+                       {
+                               return ( 今回のチップの種別 == SSTFormat.チップ種別.RightCymbal_Mute );
+                       }
+
+                       return true;
+               }
        }
 }
index 435a156..419dac5 100644 (file)
@@ -35,10 +35,10 @@ namespace SST.ステージ.演奏
                                // 現在発声中のサウンドを全部止めるチップ種別の場合は止める。
                                if( 0 != chipType.排他発声グループID() ) // ID = 0 は対象外。
                                {
-                                       // 同じ排他発声グループIDを持つコンテキストの Sounds[] を select する。
+                                       // 消音対象のコンテキストの Sounds[] を select する。
                                        var 停止するサウンド群 =
                                                from kvp in this._チップtoコンテキスト
-                                               where ( kvp.Key.排他発声グループID() == chipType.排他発声グループID() )
+                                               where ( chipType.直前のチップを消音する( kvp.Key ) )
                                                select kvp.Value.Sounds;
 
                                        // 集めた Sounds[] をすべて停止する。