/// <summary> /// Update /// </summary> protected override void Update() { if (Skill.Framework.Global.IsGamePaused) { return; } while (_Queue.Count > 0 && _Queue.Peek().Time <= Time.time) { SubTime st = _Queue.Dequeue(); string valueText = GetText(st.Title.TitleKey); if (SubRenderer != null && valueText != null) { if (!string.IsNullOrEmpty(valueText)) { if (st.Title.OverrideStyle) { SubRenderer.ShowTitle(valueText, st.Title.Duration, st.Title.FontColor, st.Title.FontStyle, st.Title.Alignment); } else { SubRenderer.ShowTitle(valueText, st.Title.Duration); } } } } base.Update(); }
/// <summary> /// VTT 格式處理的實作 /// <para>未來介面化或要支援其它格式,改這裡即可</para> /// </summary> /// <returns></returns> private List <Sentence> VTTLinesToSentences(string[] lines) { /* VTT 格式範例 * WEBVTT * * 00:01.950 --> 00:03.720 * What is programming. * * 00:03.930 --> 00:11.580 * What is programming, what is programming. */ var sentences = new List <Sentence>(); var lineCount = lines.Length; for (var i = 0; i < lineCount; i++) { var(time, isOk) = SubTime.TryParse(lines[i].Trim()); if (isOk) { if (i + 1 < lineCount && !string.IsNullOrEmpty(lines[i + 1])) { sentences.Add(new Sentence(time.ToSrtFormat(), lines[i + 1])); i++; } } } return(sentences); }
/// <summary> /// Start show subtitles of specified AudioClip /// </summary> /// <param name="clip">AudioClip to show it's subtitles (must be exists in Dictionaries)</param> public void Show(AudioClip clip) { if (clip != null) { _Queue.Clear(); Dictionary dictionary = null; AudioClipSubtitle at = GetSubtitle(clip, out dictionary); if (at != null) { if (at.Titles.Length > 0) { if (at.Titles.Length > 1) { Skill.Framework.Utility.QuickSort(at.Titles, SubtitleComparer.Instance); } for (int i = 0; i < at.Titles.Length; i++) { SubTime st = new SubTime(); st.Time = Time.time + at.Titles[i].Time; st.Title = at.Titles[i]; _Queue.Enqueue(st); } } } } }