-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSubtitleManager.cs
69 lines (57 loc) · 2.19 KB
/
SubtitleManager.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.Events;
namespace Scythe.Accessibility
{
public class SubtitleManager : MonoBehaviour
{
// instance definition
public static SubtitleManager instance;
// reference to our subtitle text object
[Tooltip("The text used for the subtitles, can be any text object")] [SerializeField] public TextMeshProUGUI subtitleText;
// optional functionality if we want to interrupt subtitles
[Tooltip("If false, does not interrupt the current playing subtitle")] public bool subtitlesInterrupt;
// throwaway variables
private Coroutine _subControl;
private bool _subtitleSequenceRunning;
// for additional functionality, if needed :)
public UnityEvent BeforeSubtitleBegins;
public UnityEvent OnSubtitleFinished;
void Awake()
{
instance = this;
}
public void CueSubtitle(SubtitleCard subCard)
{
if(!subtitlesInterrupt && _subtitleSequenceRunning)
{
return;
}
else
{
if (_subtitleSequenceRunning)
{
StopCoroutine(_subControl);
}
}
_subControl = StartCoroutine(SubtitleControl(subCard));
}
IEnumerator SubtitleControl(SubtitleCard subCard)
{
BeforeSubtitleBegins.Invoke(); // for additional functionality, if needed :)
_subtitleSequenceRunning = true;
for (int i = 0; i < subCard.dialogue.Length; i++)
{
subtitleText.text = subCard.dialogue[i];
yield return new WaitForSeconds(subCard.pauseUntilNextLine[i]);
}
subtitleText.text = "";
_subtitleSequenceRunning = false;
OnSubtitleFinished.Invoke(); // for additional functionality, if needed :)
Debug.Log("Subtitle Sequence finished");
}
}
}
// The subtitle manager is a singleton instance so we can call it from any script.