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); }
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); }
public bool Contains(LongNote longNote) { foreach (Note note in longNote) { if (!Contains(note)) { return(false); } } return(true); }
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; } }
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); }; }
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); }
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); } } }
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); }; }
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); }
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); }
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); } }; }
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); }
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); }
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."); } } } }
private void Awake() { _longNote = GetComponentInParent <LongNote>(); }
public int GetHashCode(LongNote obj) { return(obj.Time.GetHashCode()); }
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); } } }