Ejemplo n.º 1
0
        /// <summary>
        /// Hold, Slideを配置します。
        /// 終端ノーツにAirやAirHoldが付随していた場合、それらも配置します。
        /// </summary>
        public bool Put(LongNote longNote)
        {
            if (longNote == null)
            {
                Logger.Error("ロングノーツを追加できません。引数がnullです。", true);
                return(false);
            }
            switch (longNote)
            {
            case Hold hold:
            {
                holdNotes.Add(hold);
                HoldEnd end = hold.EndNote as HoldEnd;
                if (end == null)
                {
                    Logger.Warn("EndNoteがnullでした。");
                    break;
                }
                if (end.IsAirAttached)
                {
                    airNotes.Add(end.Air);
                }
                if (end.IsAirHoldAttached)
                {
                    airHoldNotes.Add(end.AirHold);
                }
            }
            break;

            case Slide slide:
            {
                slideNotes.Add(slide);
                SlideEnd end = slide.EndNote as SlideEnd;
                if (end == null)
                {
                    Logger.Warn("EndNoteがnullでした。");
                    break;
                }
                if (end.IsAirAttached)
                {
                    airNotes.Add(end.Air);
                }
                if (end.IsAirHoldAttached)
                {
                    airHoldNotes.Add(end.AirHold);
                }
            }
            break;

            default:
            {
                Logger.Warn("不適切なロングノーツを追加できません。", true);
                return(false);
            }
            }
            return(true);
        }
Ejemplo n.º 2
0
        public Hold(int size, Position pos, PointF location, int laneIndex)
        {
            HoldBegin holdBegin = new HoldBegin(size, pos, location, laneIndex);

            holdBegin.CheckNotePosition += CheckNotePosition;
            holdBegin.CheckNoteSize     += CheckNoteSize;
            Add(holdBegin);
            location.Y -= ScoreInfo.UnitBeatHeight * ScoreInfo.MaxBeatDiv / Status.Beat;
            HoldEnd holdEnd = new HoldEnd(size, pos.Next(), location, laneIndex);

            holdEnd.CheckNotePosition   += CheckNotePosition;
            holdEnd.CheckNoteSize       += CheckNoteSize;
            holdEnd.IsPositionAvailable += IsPositionTickAvailable;
            Add(holdEnd);
            Status.SelectedNote = holdEnd;
        }