/// <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); }
/// <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); }