private void Init(LongNote _prefab, Queue <LongNote> _inputQueue, string _objName, int turnNum)
    {
        LongNote temp = Instantiate(_prefab, Vector2.zero, Quaternion.identity);

        temp.SetNoteProperties(float.Parse(value[0]), float.Parse(value[1]), float.Parse(value[2]), PlayMusicInfo.ReturnAutoMode()); // 판정선거리, 감소속도
        temp.transform.SetParent(gameObject.transform, false);
        temp.name = _objName + "(" + turnNum.ToString() + ")";
        _inputQueue.Enqueue(temp);
    }
Example #2
0
        public LongVisualNote([NotNull] VisualBeatmap beatmap, [NotNull] LongNote baseNote, [NotNull] StageMetrics metrics)
            : base(beatmap, baseNote)
        {
            _baseNote      = baseNote;
            _metrics       = metrics;
            _noteRectangle = new TexturedRectangle(beatmap.GraphicsDevice);

            PreviewStartY = beatmap.CalculateY(baseNote.StartTick, metrics, metrics.FinishLineY);
            PreviewEndY   = beatmap.CalculateY(baseNote.EndTick, metrics, metrics.FinishLineY);
        }
Example #3
0
 public bool Contains(LongNote longNote)
 {
     foreach (Note note in longNote)
     {
         if (!Contains(note))
         {
             return(false);
         }
     }
     return(true);
 }
Example #4
0
    void CreateNote(NoteDescriptor n)
    {
        switch (n.noteType)
        {
        case NoteType.Normal:
            // create a normal note at the center
            GameObject go   = Instantiate(singleNotePrefab) as GameObject;
            SingleNote note = go.GetComponent <SingleNote>();
            note.noteType   = NoteType.Normal;
            note.startTime  = currTime;
            note.arriveTime = n.arriveTime;
            note.angle_deg  = n.angle_deg;
            note.velocity   = ringRad / flyTime;
            note.time       = n.arriveTime;
            queues[(int)n.angle_deg / deg_perqueue].Enqueue(note);
            break;

        case NoteType.Long:
            go = Instantiate(longNotePrefab) as GameObject;
            LongNote ln = go.GetComponent <LongNote>();
            ln.noteType       = NoteType.Long;
            ln.startTime      = currTime;
            ln.headArriveTime = n.arriveTime;
            ln.tailArriveTime = n.endTime;
            ln.angle_deg      = n.angle_deg;
            ln.velocity       = ringRad / flyTime;
            ln.time           = n.arriveTime;
            queues[(int)n.angle_deg / deg_perqueue].Enqueue(ln);
            break;

        case NoteType.Special:
            go = Instantiate(specialNotePrefab) as GameObject;
            go.transform.parent = null;
            SpecialNote sn = go.GetComponent <SpecialNote>();
            sn.noteType   = NoteType.Special;
            sn.startTime  = currTime;
            sn.arriveTime = n.arriveTime;
            sn.angle_deg  = n.angle_deg;
            sn.velocity   = ringRad / flyTime;
            sn.time       = n.arriveTime;
            queues[(int)n.angle_deg / deg_perqueue].Enqueue(sn);
            break;

        default:
            break;
        }
    }
Example #5
0
        public AddLongNoteOperation(Model model, LongNote longNote)
        {
            if (longNote is AirHold)
            {
                Logger.Warn("AirHoldはこの操作の対象ではありません");
                Canceled = true;
                return;
            }

            Invoke += () =>
            {
                model.NoteBook.Put(longNote);
            };
            Undo += () =>
            {
                model.NoteBook.UnPut(longNote);
            };
        }
Example #6
0
    private LongNote GetLongNoteFromRailStart(EditorNote rNote)
    {
        LongNote lNote = new LongNote();

        lNote.startTime   = rNote.time;
        lNote.note        = rNote.note;
        lNote.gameObject  = rNote.noteGO;
        lNote.segmentAxis = new List <int>();
        lNote.segments    = new List <GameObject>();
        lNote.lastSegment = rNote.connectedNodes.Count - 1;

        foreach (Transform t in rNote.connectedNodes)
        {
            lNote.segments.Add(t.gameObject);
            lNote.segmentAxis.Add(Track.YAxisInverse ? -1 : 1);
        }

        return(lNote);
    }
Example #7
0
        public void InitiateLongNote()
        {
            float pos = 0;

            foreach (float value in ReadFile("level1longnote.txt"))
            {
                if (value > 10000)
                {
                    pos = value;
                }
                else
                {
                    int next = random.Next(75, 275);

                    LongNote note = new LongNote(new Vector2(pos, next), new Vector2(value, 1));
                    longNotes.Add(note);
                    AddSceneObject(note);
                }
            }
        }
Example #8
0
        public DeleteLongNoteOperation(Model model, LongNote longNote)
        {
            if (model == null || longNote == null)
            {
                Logger.Error("引数にnullのものが存在するため削除操作を行えません。", true);
                Canceled = true;
                return;
            }

            var book = model.NoteBook;

            Invoke += () =>
            {
                book.UnPut(longNote);
            };

            Undo += () =>
            {
                book.Put(longNote);
            };
        }
Example #9
0
    public void HitNote(Note _note)
    {
        if (_note.data.noteType == Note.N_LONG)
        {
            LongNote ln = (LongNote)_note;
            if (ln.firstTouched)
            {
                return;
            }
            ln.firstTouched = true;
            ln.touched      = true;
        }
        else if (_note.data.noteType == Note.N_BATTER)
        {
            currentBatter.Hit();
        }
        else
        {
            g.noteSpawn.RemoveNote(_note);
        }

        JudgementNote(CheckJudgement(_note), _note);
    }
Example #10
0
 public LongNoteEditCMenu(ScorePanel scorePanel, LongNote longNote, int tick)
 {
     System.Diagnostics.Debug.Assert(longNote != null, "ヤバイわよ");
     #region Slide切断操作が有効か判断
     var notesBeforeTick = longNote.Where(x => x.Position.Tick <= tick).OrderBy(x => x.Position.Tick);
     var notesAfterTick  = longNote.Where(x => x.Position.Tick > tick).OrderBy(x => x.Position.Tick);
     var slideEditable   = longNote is Slide;
     if (!notesBeforeTick.Any() || !notesAfterTick.Any())
     {
         slideEditable = false;
     }
     else if (notesBeforeTick.Last() is SlideBegin || notesAfterTick.First() is SlideEnd)
     {
         slideEditable = false;
     }
     #endregion
     stripItems = new ToolStripItem[]
     {
         new ToolStripMenuItem(
             "選択したSlideノーツを最前面に移動",
             null,
             (s, e) => scorePanel.LongNoteToFront(longNote)),
         new ToolStripMenuItem(
             "選択したSlideノーツを最背面に移動",
             null,
             (s, e) => scorePanel.LongNoteToBack(longNote)),
         new ToolStripSeparator(),
         new ToolStripMenuItem(
             "選択箇所でSlideノーツを切断",
             null,
             (s, e) => scorePanel.CutSlide(longNote as Slide, tick))
         {
             Enabled = slideEditable
         }
     };
     Items.AddRange(stripItems);
 }
Example #11
0
        public LongNoteToBackOperation(Model model, LongNote longNote)
        {
            var  noteBook = model.NoteBook;
            var  index    = -1;
            bool result   = false;

            Invoke += () =>
            {
                if (longNote is Hold hold)
                {
                    index  = noteBook.HoldNotes.ToList().IndexOf(hold);
                    result = noteBook.MoveIndexTo(0, hold);
                }
                else if (longNote is Slide slide)
                {
                    index  = noteBook.SlideNotes.ToList().IndexOf(slide);
                    result = noteBook.MoveIndexTo(0, slide);
                }
                else if (longNote is AirHold airHold)
                {
                    index  = noteBook.AirHoldNotes.ToList().IndexOf(airHold);
                    result = noteBook.MoveIndexTo(0, airHold);
                }
                if (!result)
                {
                    Logger.Error("操作に失敗しました。", true);
                }
            };
            Undo += () =>
            {
                if (!noteBook.MoveIndexTo(index, longNote))
                {
                    Logger.Error("操作に失敗しました。", true);
                }
            };
        }
Example #12
0
    private void SpawnNote(NoteData _data)
    {
        Note note = PopNote(_data.noteType);

        note.data             = _data;
        note.time             = _data.time;
        note.lineNum          = _data.lineNum;
        note.transform.parent = g.lines[_data.lineNum];

        switch (_data.noteType)
        {
        case Note.N_LONG:
            LongNote ln = (LongNote)note;
            ln.UpdateTimeInterval();
            ln.length = _data.length;
            break;

        case Note.N_DRAG:
            DragNote dn = (DragNote)note;
            dn.drag = _data.drag;
            break;

        case Note.N_BATTER:
            BatterNote bn = (BatterNote)note;
            bn.maxHit             = _data.batterHit;
            bn.endTime            = _data.batterEndTime;
            note.transform.parent = g.lines[0].parent;
            break;
        }

        note.UpdatePosition();
        note.gameObject.SetActive(true);
        note.Start();

        notes.Add(note);
    }
Example #13
0
 public bool Equals(LongNote x, LongNote y)
 {
     return(x.Time == y.Time);
 }
 public void InsertNote(LongNote _obj)
 {
     _obj.gameObject.SetActive(false);
     _dic_longNote[_obj.GetNoteName()].Enqueue(_obj);
     _activeLongNote.Remove(_obj);
 }
Example #15
0
        public static void Parse(string filename, out List <Note> notes, out List <LongNote> lns, int keys)
        {
            LineConverter converter = new LineConverter(keys);

            notes = new List <Note>();
            lns   = new List <LongNote>();

            using (var reader = new StreamReader(filename))
            {
                string currentLine;

                //  Find HitObjects tag.
                while ((currentLine = reader.ReadLine()) != null)
                {
                    if (currentLine == "[HitObjects]")
                    {
                        break;
                    }
                }

                //  Parsing notes.
                while ((currentLine = reader.ReadLine()) != null)
                {
                    //  Split current line with ','.
                    var splitLine = currentLine.Split(',');

                    if (splitLine.Length != 6)
                    {
                        throw new InvalidBeatmapException("Wrong HitObject format.");
                    }

                    //  x, y, time, 1, hitsound, addition for simple note.
                    //  x, y, time, 5, hitsound, addition for the first simple note.
                    if (Convert.ToInt32(splitLine[3]) == 1 || Convert.ToInt32(splitLine[3]) == 5)
                    {
                        var temp = new Note
                        {
                            Line = converter.GetLine(Convert.ToInt32(splitLine[0])),
                            Time = Convert.ToInt32(splitLine[2])
                        };

                        notes.Add(temp);
                    }

                    //  x, y, time, 128, hitsound, endtime:addition for long note.
                    else if (Convert.ToInt32(splitLine[3]) == 128 || (Convert.ToInt32(splitLine[3]) == 132))
                    {
                        var temp = new LongNote
                        {
                            Line    = converter.GetLine(Convert.ToInt32(splitLine[0])),
                            Time    = Convert.ToInt32(splitLine[2]),
                            Endtime = Convert.ToInt32(splitLine[5].Split(':')[0])
                        };

                        lns.Add(temp);
                    }

                    //  Any other types are unkown notes.
                    else
                    {
                        throw new InvalidBeatmapException("Unknown note type.");
                    }
                }
            }
        }
Example #16
0
 private void Awake()
 {
     _longNote = GetComponentInParent <LongNote>();
 }
Example #17
0
 public int GetHashCode(LongNote obj)
 {
     return(obj.Time.GetHashCode());
 }
Example #18
0
    private void TouchLine(TouchInfo _info)
    {
        Vector3 worldPos = Camera.main.ScreenToWorldPoint(_info.position);
        int     lineNum  = (worldPos.x < 0) ? 0 : 1;

        // Vector3 localPos = g.lines[lineNum].InverseTransformPoint(worldPos);
        // Vector3 startPos = g.lines[lineNum].InverseTransformPoint(Camera.main.ScreenToWorldPoint(_info.startPosition));

        // 연타 노트 체크.
        if (currentBatter != null)
        {
            if (_info.state == TouchState.Press)
            {
                HitNote(currentBatter);
            }
            return;
        }

        // Press의 경우.
        if (_info.state == TouchState.Press)
        {
            Note targetNote = null;
            for (int i = 0; i < g.noteSpawn.notes.Count; ++i)
            {
                Note n = g.noteSpawn.notes[i];
                if (n.lineNum != lineNum)
                {
                    continue;
                }
                Judge judge = CheckJudgement(n);
                if (judge == Judge.None || judge == Judge.Miss)
                {
                    continue;
                }
                if (n.data.noteType == Note.N_DRAG)
                {
                    continue;
                }

                if (targetNote == null || n.time < targetNote.time)
                {
                    targetNote = n;
                }
            }
            if (targetNote != null)
            {
                HitNote(targetNote);
            }
        }
        // Stay의 경우.
        else if (_info.state == TouchState.Stay)
        {
            DragNote targetDrag = null;
            for (int i = 0; i < g.noteSpawn.notes.Count; ++i)
            {
                Note n = g.noteSpawn.notes[i];
                if (n.lineNum != lineNum)
                {
                    continue;
                }

                // 롱 노트 체크.
                if (n.data.noteType == Note.N_LONG)
                {
                    LongNote ln = (LongNote)n;
                    if (ln.firstTouched)
                    {
                        ln.touched = true;
                    }
                }
                // 드래그 노트 체크.
                else if (n.data.noteType == Note.N_DRAG)
                {
                    Judge judge = CheckJudgement(n);
                    if (judge == Judge.None || judge == Judge.Miss)
                    {
                        continue;
                    }
                    DragNote dn = (DragNote)n;
                    if (targetDrag == null || n.time < targetDrag.time)
                    {
                        targetDrag = dn;
                    }
                }
            }
            if (targetDrag != null &&
                _info.CheckDrag() == targetDrag.drag * (targetDrag.lineNum == 1 ? -1 : 1))
            {
                HitNote(targetDrag);
                _info.ResetDrag();
            }
        }
    }
    public void GetNote(Vector2 _origin, string _noteName, string _sfxName, string _motion = "")
    {
        if (_noteName == "ShortNote")
        {
            if (_queue_shortNote.Count > 0)
            {
                ShortNote _temp = _queue_shortNote.Dequeue();
                _temp.InputSfxName(_sfxName);
                if (_motion != null)               // 다음에 변경될 모션을 가지고 있으면
                {
                    _temp.InputAnimation(_motion); // 변경될 모션의 이름을 알려준다
                }
                _temp.transform.position = _origin;

                _temp.gameObject.SetActive(true);
                _temp.gameObject.transform.SetAsFirstSibling();
                _activeShortNote.Add(_temp); // 활성화 노트 리스트에 넣어줌
            }
        }
        else if (_noteName.Substring(0, 6) == "LongNo")
        {
            if (_dic_longNote[_noteName].Count > 0)
            {
                LongNote _temp = _dic_longNote[_noteName].Dequeue();
                _temp.InputSfxName(_sfxName);
                if (_motion != null)               // 다음에 변경될 모션을 가지고 있으면
                {
                    _temp.InputAnimation(_motion); // 변경될 모션의 이름을 알려준다
                }
                _temp.transform.position = _origin;

                _temp.gameObject.SetActive(true);
                _temp.gameObject.transform.SetAsFirstSibling();
                _activeLongNote.Add(_temp);
            }
        }
        else if (_noteName == "MultiShortNote")
        {
            if (_queue_multiShortNote.Count > 0)
            {
                ShortNote _temp = _queue_multiShortNote.Dequeue();
                _temp.InputSfxName(_sfxName);
                if (_motion != null)               // 다음에 변경될 모션을 가지고 있으면
                {
                    _temp.InputAnimation(_motion); // 변경될 모션의 이름을 알려준다
                }
                _temp.transform.position = _origin;

                _temp.gameObject.SetActive(true);
                _temp.gameObject.transform.SetAsFirstSibling();
                _activeMultiShortNote.Add(_temp); // 활성화 노트 리스트에 넣어줌
            }
        }
        else if (_noteName.Substring(0, 5) == "Slash")
        {
            if (_dic_slashNote[_noteName].Count != 0)
            {
                SlashNote _temp = _dic_slashNote[_noteName].Dequeue();
                _temp.InputSfxName(_sfxName);
                if (_motion != null)               // 다음에 변경될 모션을 가지고 있으면
                {
                    _temp.InputAnimation(_motion); // 변경될 모션의 이름을 알려준다
                }
                _temp.transform.position = _origin;

                _temp.gameObject.SetActive(true);
                _temp.gameObject.transform.SetAsFirstSibling();
                _activeSlashNote.Add(_temp);
            }
        }
        else if (_noteName.Substring(0, 5) == "Floor")
        {
            if (_noteName == "FloorNote_L")
            {
                _floorNotes[0].ActiveNote(_sfxName, _motion);
            }
            else
            {
                _floorNotes[1].ActiveNote(_sfxName, _motion);
            }
        }
        else
        {
            if (_noteName == "Skull_L")
            {
                _skullNotes[0].ActiveNote(_sfxName);
            }
            else
            {
                _skullNotes[1].ActiveNote(_sfxName);
            }
        }
    }