-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTutorialManager.cs
117 lines (95 loc) · 3.44 KB
/
TutorialManager.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TutorialManager : MonoBehaviour
{
private static TutorialManager _instance;
public static TutorialManager Instance
{
get
{
if (_instance == null)
{
_instance = FindObjectOfType<TutorialManager>();
}
return _instance;
}
}
private TutorialUIController _tutorialUIController;
public TutorialUIController UI => _tutorialUIController;
[HideInInspector] public List<TutorialSectionGroup> ValidatingTutorialGroups;
[HideInInspector] public List<TutorialSectionGroup> ActiveTutorialGroups;
[HideInInspector] public bool activeTutorialLoopIsRunning;
public GTutorialSettings TutorialSettings;
private void Awake()
{
ActiveTutorialGroups = new List<TutorialSectionGroup>();
_tutorialUIController = GetComponentInChildren<TutorialUIController>();
for (var i = 0; i < TutorialSettings.AllTutorialGroups.Count; i++)
{
var tutorialGroup = TutorialSettings.AllTutorialGroups[i];
if (tutorialGroup.TutorialIsCompleted) continue;
tutorialGroup = tutorialGroup.Clone();
tutorialGroup.Init();
if (tutorialGroup.triggerCondition == TutorialSectionGroup.TriggerCondition.Validator)
ValidatingTutorialGroups.Add(tutorialGroup);
}
}
private void Start()
{
//START VALIDATOR COROUTINE
StartCoroutine(SectionGroupTriggerValidatorCoroutine());
}
/// <summary>
/// Activate giving Tutorial Section Group and start tutorial
/// </summary>
/// <param name="sectionGroup"></param>
public void StartTutorial(TutorialSectionGroup sectionGroup)
{
ActiveTutorialGroups.Add(sectionGroup);
sectionGroup.OnTutorialStart();
if (!activeTutorialLoopIsRunning)
StartCoroutine(ActiveSectionGroupsUpdateCoroutine());
}
/// <summary>
/// Run Active Tutorials, it's run only have any active tutorial
/// </summary>
/// <returns></returns>
private IEnumerator ActiveSectionGroupsUpdateCoroutine()
{
while (ActiveTutorialGroups.Count != 0)
{
for (int i = 0; i < ActiveTutorialGroups.Count; i++)
{
ActiveTutorialGroups[i].Tick();
if (ActiveTutorialGroups[i].EndCheck())
{
ActiveTutorialGroups[i].Destroy();
ActiveTutorialGroups.RemoveAt(i--);
}
}
yield return null;
}
activeTutorialLoopIsRunning = false;
}
/// <summary>
/// Check everytime if any tutorial can be active with Validator.
/// </summary>
/// <returns></returns>
private IEnumerator SectionGroupTriggerValidatorCoroutine()
{
var validatorDelay = new WaitForSecondsRealtime(TutorialSettings.scanValidatorsDelayInMs / 1000);
while (ValidatingTutorialGroups.Count != 0)
{
for (int i = 0; i < ValidatingTutorialGroups.Count; i++)
{
if (ValidatingTutorialGroups[i].IsValid())
{
StartTutorial(ValidatingTutorialGroups[i]);
ValidatingTutorialGroups.RemoveAt(i--);
}
}
yield return validatorDelay;
}
}
}