/// <summary> /// 检测是否有击中音符对象 /// 如果是,它将执行命中并删除 /// </summary> public void CheckNoteHit() { //if (!gameController.gameStart) //{ // CreateDownEffect(); // return; //} if (trackedNotes.Count > 0) { NoteObject noteObject = trackedNotes.Peek(); if (noteObject.hitOffset > -20000) { trackedNotes.Dequeue(); //Debug.Log(trackedNotes.Count); int hitLevel = noteObject.IsNoteHittable(); gameController.ChangeHitLevelSprite(hitLevel); if (hitLevel > 0) { //更新分数 gameController.UpdateScoreText(100 * hitLevel); if (noteObject.isLongNote) { HasLongNote = true; CreateHitLongEffect(); //noteObject.OnHitLongNote(); } else if (noteObject.isLongNoteEnd) { HasLongNote = false; } else { CreateHitEffect(); } //增加连接数 gameController.comboNum++; //Debug.Log("comboNum:" + gameController.comboNum); } else { //未击中 //断掉玩家命中连接数 gameController.HideComboNumText(); gameController.comboNum = 0; } noteObject.OnHit(); } else { CreateDownEffect(); } } else { CreateDownEffect(); } }
/// <summary> /// 检测长音符 /// </summary> public void CheckLongNote() { if (HasLongNote) { NoteObject noteObject = trackedNotes.Peek(); trackedNotes.Dequeue(); gameController.ReturnNoteObjectToPool(noteObject); } }
/// <summary> /// 将音符对象放回对象池 /// </summary> /// <param name="obj"></param> public void ReturnNoteObjectToPool(NoteObject obj) { if (obj != null) { obj.enabled = false; obj.gameObject.SetActive(false); noteObjectPool.Push(obj); } }
/// <summary> /// 生成长音符 /// </summary> void CreateLongNote() { float time = 0; time += Time.deltaTime; if (time >= 0.5f) { NoteObject obj = gameController.GetFreshNoteObject(); obj.InitializeLongNote(NoteNum, this, gameController); time = 0; } }
/// <summary> /// 检测是否生成下一个新音符 /// </summary> public void CheckSpawnNext() { int samplesToTarget = GetSpawnSampleOffset(); int currentTime = gameController.DelayedSampleTime; while (pendingEventIdx < laneEvents.Count && laneEvents[pendingEventIdx].StartSample < currentTime + samplesToTarget) { KoreographyEvent evt = laneEvents[pendingEventIdx]; NoteNum = evt.GetIntValue(); //Debug.Log("noteNum:" + noteNum); NoteObject newObj = gameController.GetFreshNoteObject(); bool isLongNoteStart = false; bool isLongNoteEnd = false; if (NoteNum > 4) { isLongNoteStart = true; InLongNote = true; NoteNum = NoteNum - 4; CreateLongNote(); if (NoteNum > 4) { isLongNoteEnd = true; isLongNoteStart = false; NoteNum = NoteNum - 4; InLongNote = false; } } //Debug.Log("NoteNum: " + NoteNum); newObj.Initialize(evt, NoteNum, this, gameController, isLongNoteStart, isLongNoteEnd); trackedNotes.Enqueue(newObj); //Debug.Log(trackedNotes.Count); pendingEventIdx++; } }