/// <summary> /// Section 재생 준비 /// </summary> public void StartSection(Data.Section section, BeatSyncClock clock, TransitionType ttype, double startTime = 0) { EndSection(); // 이전에 재생중이었을 수도 있는 섹션을 강제 종료 // 초기화 m_sectionData = section; m_clock = clock; m_startTransition = ttype; m_endTransition = TransitionType.None; isOnTransition = false; // 텐션 관련 설정 for (int i = 0; i < Data.Section.c_maxLayerPerSection; i++) { var layer = section.GetLayer(i); if (layer != null) { layer.SetAutomationTarget(m_tensionAutomationTargets[i]); } } section.tension = m_tension; if (startTime == 0) // 시작 시간이 지정되지 않은 경우 다음 안전한 비트를 시작 시간으로 { startTime = m_clock.CalcNextSafeBeatTime(); } m_updateCo = m_context.StartCoroutine(UpdateStateCo(startTime)); // 코루틴 시작 }
/// <summary> /// Track을 새로 지정 /// </summary> /// <param name="track"></param> /// <param name="clockToSync">기존에 존재하는 clock과 싱크를 맞춰야할 경우 지정</param> public void SetTrack(Track track, BeatSyncClock clockToSync = null) { m_track = track; m_sectionIdx = -1; m_suppressProgress = false; if (clockToSync == null) // 클럭이 지정되지 않은 경우, 새로 생성 { m_clock = new BeatSyncClock(track.BPM); } else if (clockToSync.BPM != track.BPM) // 기존 클럭과 bpm이 다른 경우, 기존 클럭의 다음번 비트와 동기화하여 새로 클럭 생성 { m_clock = new BeatSyncClock(track.BPM, clockToSync.CalcNextSafeBeatTime()); } else { // 아니면 기존 클럭 그대로 사용 m_clock = clockToSync; } }