/// <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ノーツから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); }