Tanoda
Dana/TablePositionSetter.cs
Go to the documentation of this file.
1using System.Collections;
2using System.Collections.Generic;
3using System.Globalization;
4using System.IO;
5using GILES;
6using UnityEngine;
7using UnityEngine.UI;
8
9public class TablePositionSetter : MonoBehaviour
10{
11 private string savePath = "";
12 private Transform iris;
13 public GameObject[] hide;
14 public Transform irisVisual;
15 public Transform quizPanel;
16 public Toggle visualToggle;
17 public GameObject startButton, replayPoi;
18 internal bool showTable = true;
19 public bool useGlobalIRISSettings = false;
20 private List<GameObject> deactivatedByDefault = new List<GameObject>();
21 public static TablePositionSetter instance;
22
23#if DANA
24 private void Awake()
25 {
26 if (!instance)
27 instance = this;
28 else
29 Destroy(this);
30 }
31
32 IEnumerator Start()
33 {
35 savePath = Path.Combine(Application.persistentDataPath, "tableSettings.ini");
36 while (LoadingManager.instance.isLoading) yield return new WaitForSeconds(0.1f);
37 var player = GameObject.Find("Player");
38 while (!player)
39 {
40 yield return new WaitForSeconds(0.1f);
41 player = GameObject.Find("Player");
42 }
43 iris = player.transform;
44 if (File.Exists(savePath))
45 {
46 var settings = File.ReadAllText(savePath).Split('\n');
47
48 settings[0] = Macro.NormalizeFraction(settings[0]);
49 settings[1] = Macro.NormalizeFraction(settings[1]);
50 settings[2] = Macro.NormalizeFraction(settings[2]);
51 settings[3] = Macro.NormalizeFraction(settings[3]);
52 settings[4] = Macro.NormalizeFraction(settings[4]);
53 settings[5] = Macro.NormalizeFraction(settings[5]);
54
55 var pos = new Vector3(float.Parse(settings[0]), float.Parse(settings[1]), float.Parse(settings[2]));
56 var euler = new Vector3(float.Parse(settings[3]), float.Parse(settings[4]), float.Parse(settings[5]));
57
58 iris.eulerAngles = euler;
59 iris.position = pos;
60
61 if (settings.Length > 6)
62 {
64 {
65 showTable = settings[6].ToLower() == "true";
66 }
67
68 if (visualToggle)
69 visualToggle.isOn = showTable;
70
71 if (settings.Length > 7)
72 {
73 settings[7] = Macro.NormalizeFraction(settings[7]);
74 settings[8] = Macro.NormalizeFraction(settings[8]);
75 settings[9] = Macro.NormalizeFraction(settings[9]);
76 settings[10] = Macro.NormalizeFraction(settings[10]);
77 settings[11] = Macro.NormalizeFraction(settings[11]);
78 settings[12] = Macro.NormalizeFraction(settings[12]);
79
80 var buttonpos = new Vector3(float.Parse(settings[7]), float.Parse(settings[8]), float.Parse(settings[9]));
81 var buttoneuler = new Vector3(float.Parse(settings[10]), float.Parse(settings[11]), float.Parse(settings[12]));
82
83 startButton.transform.localPosition = buttonpos;
84 startButton.transform.localEulerAngles = buttoneuler;
85 replayPoi.transform.localPosition = buttonpos;
86 replayPoi.transform.localEulerAngles = buttoneuler;
87 }
88 if (settings.Length > 12)
89 {
90 settings[13] = Macro.NormalizeFraction(settings[13]);
91 settings[14] = Macro.NormalizeFraction(settings[14]);
92 settings[15] = Macro.NormalizeFraction(settings[15]);
93 settings[16] = Macro.NormalizeFraction(settings[16]);
94 settings[17] = Macro.NormalizeFraction(settings[17]);
95 settings[18] = Macro.NormalizeFraction(settings[18]);
96
97 var quizpos = new Vector3(float.Parse(settings[13]), float.Parse(settings[14]), float.Parse(settings[15]));
98 var quizeuler = new Vector3(float.Parse(settings[16]), float.Parse(settings[17]), float.Parse(settings[18]));
99
100 quizPanel.position = quizpos;
101 quizPanel.eulerAngles = quizeuler;
102 }
103 }
104 SetTableVisibility(showTable);
105 pb_Scene.instance.RepositionTools();
106 if (deactivatedByDefault.Count == 0)
107 {
108 deactivatedByDefault.Add(gameObject);
109 }
110 }
111 else
112 {
113 File.WriteAllText(savePath, $"{iris.position.x:F5}\n{iris.position.y:F5}\n{iris.position.z:F5}\n{iris.eulerAngles.x:F5}\n{iris.eulerAngles.y:F5}\n{iris.eulerAngles.z:F5}\n{showTable}\n{startButton.transform.localPosition.x:F5}\n{startButton.transform.localPosition.y:F5}\n{startButton.transform.localPosition.z:F5}\n{startButton.transform.localEulerAngles.x:F5}\n{startButton.transform.localEulerAngles.y:F5}\n{startButton.transform.localEulerAngles.z:F5}\n{quizPanel.position.x:F5}\n{quizPanel.position.y:F5}\n{quizPanel.position.z:F5}\n{quizPanel.eulerAngles.x:F5}\n{quizPanel.eulerAngles.y:F5}\n{quizPanel.eulerAngles.z:F5}");
114 }
115
116 pb_Selection.AddOnRemovedFromSelectionListener(OnRemovedFromSelection);
117 }
118
119 void OnRemovedFromSelection(IEnumerable<GameObject> selection)
120 {
121 foreach (var o in selection)
122 {
123 if (o == iris.gameObject)
124 {
125 foreach (var o1 in hide)
126 {
127 o1.SetActive(true);
128 }
129 DelayedDestroy.EpilepsyFixer?.SetActive(false);
130 }
131
132 if (o == quizPanel.gameObject)
133 {
134 quizPanel.gameObject.SetActive(false);
135 }
136 }
137
138 SavePosition();
139 }
140
141 public void SetTableVisibility(bool value)
142 {
143 SetTableVisibility(value, true);
144 }
145
146 public void SetTableVisibility(bool value, bool save = true)
147 {
148 showTable = value;
149 RecursiveJob(irisVisual, value, deactivatedByDefault.Count == 0);
150 if (save)
151 SavePosition();
152 }
153
154 private void RecursiveJob(Transform t, bool show, bool add = false)
155 {
156 foreach (Transform o in t)
157 {
158 if (o.name == pb_Scene.instance.name)
159 continue;
160
161 if (o.childCount > 0)
162 {
163 RecursiveJob(o, show, add);
164 }
165
166 var mr = o.GetComponent<MeshRenderer>();
167 var c = o.GetComponent<Collider>();
168 var canvas = o.GetComponent<Canvas>();
169 var l = o.GetComponent<Light>();
170
171 if (add && !o.gameObject.activeSelf)
172 {
173 deactivatedByDefault.Add(o.gameObject);
174 continue;
175 }
176
177 if (deactivatedByDefault.Contains(o.gameObject))
178 {
179 continue;
180 }
181
182 if (mr)
183 mr.gameObject.SetActive(show);
184
185 if (c)
186 c.gameObject.SetActive(show);
187
188 if (canvas)
189 canvas.gameObject.SetActive(show);
190
191 if (l)
192 l.gameObject.SetActive(show);
193 }
194 }
195
196 public void SetPosition()
197 {
198 foreach (var o1 in hide)
199 {
200 o1.SetActive(false);
201 }
202
204 pb_Selection.AddToSelection(iris.gameObject);
205
206 DelayedDestroy.EpilepsyFixer?.SetActive(true);
207
208 }
209
210 public void SetStartButtonPosition()
211 {
214
215 }
216
217 public void SetQuizPosition()
218 {
221 quizPanel.gameObject.SetActive(true);
222 }
223
224 private void SavePosition()
225 {
226 File.WriteAllText(savePath, $"{iris.position.x:F5}\n{iris.position.y:F5}\n{iris.position.z:F5}\n{iris.eulerAngles.x:F5}\n{iris.eulerAngles.y:F5}\n{iris.eulerAngles.z:F5}\n{showTable}\n{startButton.transform.localPosition.x:F5}\n{startButton.transform.localPosition.y:F5}\n{startButton.transform.localPosition.z:F5}\n{startButton.transform.localEulerAngles.x:F5}\n{startButton.transform.localEulerAngles.y:F5}\n{startButton.transform.localEulerAngles.z:F5}\n{quizPanel.position.x:F5}\n{quizPanel.position.y:F5}\n{quizPanel.position.z:F5}\n{quizPanel.eulerAngles.x:F5}\n{quizPanel.eulerAngles.y:F5}\n{quizPanel.eulerAngles.z:F5}");
227 }
228#else
229
230 private void Awake()
231 {
232 if (!instance)
233 instance = this;
234 else
235 Destroy(this);
236 }
237#endif
238}
static GameObject EpilepsyFixer
static void AddOnRemovedFromSelectionListener(Callback< IEnumerable< GameObject > > del)
Definition: pb_Selection.cs:45
static void AddToSelection(GameObject go)
static void Clear()
Definition: pb_Selection.cs:61
Definition: Macro.cs:12
static string NormalizeFraction(string value)
Definition: Macro.cs:164
static TablePositionSetter instance