/// <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を取り外します。 /// AirHoldを取り外せた場合成功(true)となります。 /// </summary> public bool DetachAirHoldFromAirableNote(AirableNote airable, out AirHold airHold) { airHold = null; if (airable == null) { Logger.Error("引数のAirableNoteがnullのため、操作を行えません。"); return(false); } if (!airable.IsAirHoldAttached) { Logger.Error("AirHold取り外し対象のAirableNoteにはAirHoldが取り付けられていませんでした。"); return(false); } airHold = airable.AirHold; airable.DetachAirHold(); airHoldNotes.Remove(airHold); return(true); }
/// <summary> /// AirableノーツからAirを取り外します。 /// 失敗した場合、出力引数はnullになります。 /// </summary> public bool DetachAirFromAirableNote(AirableNote airable, out Air air) { air = null; if (airable == null) { Logger.Error("引数のAirableNoteがnullのため、操作を行えません。"); return(false); } if (!airable.IsAirAttached) { Logger.Error("Air取り外し対象のAirableNoteにはAirが取り付けられていませんでした。"); return(false); } air = airable.Air; airable.DetachAir(); airNotes.Remove(air); return(true); }
/// <summary> /// 配置済みAirableノーツに対して新規Airノーツを配置し取り付けます。 /// </summary> public bool AttachAirToAirableNote(AirableNote airable, Air air) { if (airable == null || air == null) { Logger.Error("Airを取り付けできません。引数にnullが含まれます。", true); return(false); } if (!Contains(airable)) { Logger.Error("Airノーツ取り付け先のAirableノーツはすでに配置されている必要があります。"); return(false); } if (airable.IsAirAttached) { Logger.Error("Air取り付け先のAirableノーツにはすでにAirが取り付けられています。"); return(false); } 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); }