-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTextLoader.cs
122 lines (99 loc) · 3.36 KB
/
TextLoader.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
118
119
120
121
122
/***********************************************
Copyright © 2018 AltSalt Media, LLC.
All rights reserved.
https://www.altsalt.com / ricky@altsalt.com
**********************************************/
using UnityEngine;
using Sirenix.OdinInspector;
using TMPro;
using UnityEngine.Serialization;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace AltSalt.Maestro
{
[ExecuteInEditMode]
public class TextLoader : MonoBehaviour
{
[SerializeField]
[Required]
[ReadOnly]
private AppSettingsReference _appSettings = new AppSettingsReference();
private AppSettings appSettings => _appSettings.GetVariable() as AppSettings;
[Required]
[SerializeField]
public string key;
[FormerlySerializedAs("textCollectionBank"),Required]
[SerializeField]
#if UNITY_EDITOR
[Header("$"+nameof(GetActiveTextFamilyName))]
#endif
private TextCollectionBank _textCollectionBank;
public TextCollectionBank textCollectionBank => _textCollectionBank;
private TMP_Text _textComponent;
private TMP_Text textComponent {
get
{
if (_textComponent == null) {
_textComponent = GetComponent<TMP_Text>();
}
return _textComponent;
}
set => _textComponent = value;
}
private void Awake()
{
#if UNITY_EDITOR
_appSettings.PopulateVariable(this, nameof(_appSettings));
#endif
textComponent = GetComponent<TMP_Text>();
}
#if UNITY_EDITOR
private string GetActiveTextFamilyName()
{
if (textCollectionBank != null) {
return "Active Text Family: " + textCollectionBank.GetActiveTextFamilyName();
}
return "Please populate a text collection bank";
}
#endif
private void Start()
{
if(appSettings.modifyTextActive == true && textCollectionBank != null) {
PopulateWithText();
}
}
[InfoBox("Gets text according to active text family, text collection bank, and key.")]
[Button(ButtonSizes.Large), GUIColor(0.4f, 0.8f, 1)]
public void PopulateWithText()
{
if(textCollectionBank != null) {
#if UNITY_EDITOR
Undo.RecordObject(textComponent, "populate text");
#endif
if (textCollectionBank.GetText(key, out string text)) {
textComponent.SetText(text, true);
}
else {
Debug.Log(text, this);
}
}
}
public void RefreshText(ComplexPayload complexPayload)
{
if(textCollectionBank == null) {
return;
}
TextCollectionBank targetTextBank = complexPayload.GetScriptableObjectValue(DataType.scriptableObjectType) as TextCollectionBank;
// If the textUpdate event was raised without a text bank, then update the text.
// Otherwise, check to see if this text's bank matches the one slated for update.
if(targetTextBank == null) {
PopulateWithText();
} else {
if (targetTextBank == textCollectionBank) {
PopulateWithText();
}
}
}
}
}