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
 public void AttachAirHold(AirHold airHold)
 {
     if (airHold == null)
     {
         Logger.Error("AirableNoteへのAirHoldの紐づけに失敗しました。引数airHoldがnullです。");
         return;
     }
     AirHold             = airHold;
     airHold.GetAirable += () => this;
     airHoldBegin        = airHold.AirHoldBegin;
     Debug.Assert(airHoldBegin != null);
     return;
 }
Beispiel #3
0
 public AirableNote(Note note) : base(note)
 {
     if (note is AirableNote airable)
     {
         if (airable.Air != null)
         {
             Air = new Air(airable.Air);
         }
         if (airable.AirHold != null)
         {
             AirHold = new AirHold(airable.AirHold);
         }
     }
 }
Beispiel #4
0
 /// <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);
 }
Beispiel #5
0
        public AirHold(AirHold ah)
        {
            ah.ForEach(x =>
            {
                switch (x)
                {
                case AirHoldBegin airHoldBegin:
                    {
                        var note = new AirHoldBegin(airHoldBegin);
                        Add(note);
                        note.CheckNotePosition += CheckNotePosition;
                        note.CheckNoteSize     += CheckNoteSize;
                    }
                    break;

                case AirHoldEnd airHoldEnd:
                    {
                        var note = new AirHoldEnd(airHoldEnd);
                        Add(note);
                        note.CheckNotePosition   += CheckNotePosition;
                        note.IsPositionAvailable += IsPositionTickAvailable;
                    }
                    break;

                case AirAction airAction:
                    {
                        var note = new AirAction(airAction);
                        base.Add(note);
                        note.CheckNotePosition   += CheckNotePosition;
                        note.IsPositionAvailable += IsPositionTickAvailable;
                    }
                    break;

                default:
                    Logger.Warn("AirHoldの要素ではないノーツです");
                    break;
                }
            });
        }
Beispiel #6
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);
 }