Beispiel #1
0
 /// <summary>
 /// 配置済みショートノーツに対して新規AirHoldと新規AirUpCを配置し取り付けます。
 /// </summary>
 public bool AttachAirHoldToAirableNote(AirableNote airable, AirHold airHold, AirUpC air)
 {
     if (airable == null || airHold == null)
     {
         Logger.Error("AirHoldを取り付けできません。引数airableまたはairHoldがnullです。", true);
         return(false);
     }
     if (!Contains(airable))
     {
         Logger.Error("AirHold取り付け先のAirableノーツはすでに配置されている必要があります。", true);
         return(false);
     }
     if (!airable.IsAirHoldAttachable)
     {
         Logger.Error("AirHold取り付け先のAirableノーツにはすでにAirやAirHoldが取り付けられています。", true);
         return(false);
     }
     airable.AttachAirHold(airHold);
     airHoldNotes.Add(airHold);
     if (air == null)
     {
         Logger.Warn("引数airがnullのためAirHoldのみが取り付けられました。予期せぬデータ構造になる可能性があります。");
         return(true);
     }
     if (!airable.IsAirAttached)
     {
         airable.AttachAir(air);
         airNotes.Add(air);
     }
     return(true);
 }
Beispiel #2
0
 /// <summary>
 /// AirableノーツからAirHoldおよびAirUpCを取り外します。
 /// AirHoldを取り外せた場合成功(true)となりますが、その場合AirUpCの出力引数がnullである可能性もあります。
 /// </summary>
 public bool DetachAirHoldFromAirableNote(AirableNote airable, out AirHold airHold, out AirUpC air)
 {
     air = null;
     if (!DetachAirHoldFromAirableNote(airable, out airHold))
     {
         return(false);
     }
     if (airable.IsAirAttached)
     {
         // NOTE: 本来AirHoldは単体で配置できず、かならずAirUpCが伴うはずであるが、何らかの原因でそうではない場合のために処理を分岐する。
         air = airable.Air as AirUpC;
         if (air != null)
         {
             airable.DetachAir();
             airNotes.Remove(air);
         }
         else
         {
             // NOTE: 取り付けられていたAirがAirUpCでないときはAirを取り外さず、出力引数airもnullとなる。
             Logger.Warn("取り付けられていたAirはAirUpCではありませんでした。Airを削除しません。");
         }
     }
     return(true);
 }