Tanoda
TriggerAction.cs
Go to the documentation of this file.
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.Linq;
5using System.Runtime.Serialization;
6using GILES;
7using JetBrains.Annotations;
8using NaughtyAttributes;
9using UnityEngine;
11using UnityEngine.UI;
12
13public class TriggerAction : ActionObject, ISerializable
14{
15 public GameObject triggerPrefab;
16
17 public Toggle followGameobject;
18 public Toggle visuals;
19 public Toggle once;
20
22
23 protected GameObject triggerGo, followGo;
24
25 private bool triggerDone;
26 internal bool showVisuals;
27 internal bool triggerOnce = true;
28 internal bool bFollowGo;
29
30 public string canvasSelectorName = "Canvas_selector";
31 public string selectedHash = "";
32
33 private GameObject canvasSelector;
34 private GameObject canvasHierarchy;
35 private GameObject canvas;
36
37 private GameObject hoverShow;
38
39 public override void Start()
40 {
41 base.Start();
42 if (!triggerGo)
43 {
44 triggerGo = Instantiate(triggerPrefab, GameObject.Find("SpawnPoint").transform);
45 pb_Selection.AddOnRemovedFromSelectionListener(OnRemovedFromSelection);
46 }
47 }
48
49 public new void Update()
50 {
51 base.Update();
52 if (base.isInFieldOfView(triggerGo)) base.actionRecognized = true;
53 }
54
55 public void OnValueChanged(bool value)
56 {
57 showVisuals = value;
58 }
59
60 public void OnValueChangedOnce(bool value)
61 {
62 triggerOnce = value;
63 }
64 public void OnValueChangedFollow(bool value)
65 {
66 bFollowGo = value;
67 }
68
70 {
71 if (triggerPosition != default)
72 triggerGo.transform.localPosition = triggerPosition;
73 if (triggerRotation != default)
74 triggerGo.transform.localEulerAngles = triggerRotation;
75 if (triggerScale != default)
76 triggerGo.transform.localScale = triggerScale;
77
78 if (visuals) visuals.isOn = showVisuals;
79
80 if (followGameobject) followGameobject.isOn = bFollowGo;
81
82 if (once) once.isOn = triggerOnce;
83
84 triggerGo.GetComponent<TriggerActionHelper>().SetTAParent(this);
85 triggerGo.SetActive(false);
86 }
87
88 public override void OnPointerEnter(PointerEventData eventData)
89 {
90 if (SavedUser.instance.isEditor) {
91 if (hoverShow)
92 {
93 var hsref = hoverShow;
94 Destroy(hsref);
95 }
96 hoverShow = Instantiate(triggerPrefab, GameObject.Find("SpawnPoint").transform);
97
98 if (bFollowGo && GetGameObject())
99 {
100 hoverShow.transform.SetParent(followGo.transform, true);
101
102 if (triggerPosition == default)
103 hoverShow.transform.localPosition = Vector3.zero;
104 }
105
106 if (triggerPosition != default)
107 hoverShow.transform.localPosition = triggerPosition;
108 if (triggerRotation != default)
109 hoverShow.transform.localEulerAngles = triggerRotation;
110 if (triggerScale != default)
111 hoverShow.transform.localScale = triggerScale;
112
113 }
114 }
115 public override void OnPointerExit(PointerEventData eventData)
116 {
117 if (SavedUser.instance.isEditor)
118 {
119 Destroy(hoverShow);
120 }
121 }
122
123 void OnRemovedFromSelection(IEnumerable<GameObject> selection)
124 {
125 if (!triggerGo)
126 return;
127
128 foreach (var o in selection)
129 if (o == triggerGo)
130 {
131 triggerGo.SetActive(false);
132 GameObject.Find("Btn_StageMgr").GetComponent<Button>().onClick.Invoke();
133
134 triggerPosition = triggerGo.transform.localPosition;
135 triggerRotation = triggerGo.transform.localEulerAngles;
136 triggerScale = triggerGo.transform.localScale;
137 }
138 }
139
140 public override void Triggered(string id)
141 {
143 //GameObject.Find("screwdriver").GetComponent<ReferenceSaver>().Reference.SetActive(true);
144 //GameObject.Find("fake_csavarozas").GetComponent<ReferenceSaver>().Reference.SetActive(true);
145 //GameObject.Find("fake_csavarozas (1)").GetComponent<ReferenceSaver>().Reference.SetActive(true);
146 //DanaLedManager.instance.SetAllLedOff();
148 base.Triggered(id);
149
150 if (bFollowGo && GetGameObject())
151 {
152 triggerGo.transform.SetParent(followGo.transform, true);
153 triggerGo.transform.localPosition = Vector3.zero;
154 triggerGo.transform.localEulerAngles = Vector3.zero;
155 }
156
157 if (triggerPosition != default)
158 triggerGo.transform.localPosition = triggerPosition;
159 if (triggerRotation != default)
160 triggerGo.transform.localEulerAngles = triggerRotation;
161 if (triggerScale != default)
162 triggerGo.transform.localScale = triggerScale;
163
164 if (!showVisuals) triggerGo.GetComponent<MeshRenderer>().enabled = false;
165 triggerGo.SetActive(true);
166
167 StartCoroutine(ShowPreview(triggerGo.transform.position));
168 //if (MiscLogicManager.instance.mode == MiscLogicManager.CurrentMode.Training)
169 //{
170 // FollowMe.Instance?.StartFollowing(triggerGo.transform.position);
171 //}
172 }
173
174
175 public void SetSelectedGO()
176 {
178 canvasSelector.GetComponent<Canvas>().enabled = false;
179 GetComponentInParent<Canvas>().enabled = true;
180 canvasSelector.transform.GetChild(0).GetComponent<Button>().onClick.RemoveListener(SetSelectedGO);
181 canvasSelector.transform.GetChild(1).GetComponent<Button>().onClick.RemoveListener(CancelSelection);
182
184
185 pb_SelectionHandle.instance.SetTool(Tool.Position);
186
187 canvasHierarchy.transform.SetParent(canvas.transform, false);
188
189 triggerGo.SetActive(true);
190 triggerGo.GetComponent<MeshRenderer>().enabled = true;
191
192 if (bFollowGo)
193 {
194 triggerGo.transform.SetParent(followGo.transform, true);
195
196 if (triggerPosition == default)
197 triggerGo.transform.localPosition = Vector3.zero;
198
200 }
201 }
202
203 public void CancelSelection()
204 {
205 canvasSelector.GetComponent<Canvas>().enabled = false;
206 GetComponentInParent<Canvas>().enabled = true;
207 canvasSelector.transform.GetChild(0).GetComponent<Button>().onClick.RemoveListener(SetSelectedGO);
208 canvasSelector.transform.GetChild(1).GetComponent<Button>().onClick.RemoveListener(CancelSelection);
209
211
212 pb_SelectionHandle.instance.SetTool(Tool.Position);
213
214 canvasHierarchy.transform.SetParent(canvas.transform, false);
215 }
216
217 public void TriggerSelection()
218 {
219 if (!canvasSelector)
220 canvasSelector = GameObject.Find(canvasSelectorName);
221
222 if (!canvasSelector)
223 {
224 Debug.LogError(canvasSelectorName + " not found!");
225 return;
226 }
227
228 GetComponentInParent<Canvas>().enabled = false;
229 canvasSelector.transform.GetChild(0).GetComponent<Button>().onClick.AddListener(SetSelectedGO);
230 canvasSelector.transform.GetChild(1).GetComponent<Button>().onClick.AddListener(CancelSelection);
231 canvasSelector.GetComponent<Canvas>().enabled = true;
232 pb_SelectionHandle.instance.SetTool(Tool.None);
233
234
235 canvas = GameObject.Find("Canvas");
236 if (canvas == null)
237 {
238 Debug.LogError("canvas not found!");
239 return;
240 }
241
242 canvasHierarchy = GameObject.Find("Hierarchy");
243 if (canvasHierarchy == null)
244 {
245 Debug.LogError("Hierarchy not found!");
246 return;
247 }
248
249 canvasHierarchy.transform.SetParent(canvasSelector.transform, false);
250 }
251
252 public override void Deactivate()
253 {
254 Debug.Log("Trigger deactivated!");
255 triggerGo.SetActive(false);
256 }
257
258 public override void Remove()
259 {
260 Destroy(triggerGo);
261 base.Remove();
262 }
263
264 [Button]
265 public void TriggerNow()
266 {
267 if (triggerOnce)
268 {
269 if (!triggerDone)
270 {
272 //GameObject.Find("Promo_second_floor").GetComponent<ReferenceSaver>().Reference.SetActive(false);
274 TriggerOutput(outPuts[0].name);
275#if !UNITY_WEBGL
276 statusImg.color = Color.green;
277#endif
278 triggerDone = true;
279 triggerGo.SetActive(false);
280
282
283 //if (MiscLogicManager.instance.mode == MiscLogicManager.CurrentMode.Training)
284 //{
285 // FollowMe.Instance?.StopFollowing();
286 //}
287
288 }
289 }
290 else
291 {
292 TriggerOutput(outPuts[0].name);
293#if !UNITY_WEBGL
294 statusImg.color = Color.green;
295#endif
296 triggerGo.SetActive(false);
297
299 }
300 }
301
302 public void SelectTrigger()
303 {
304 GameObject.Find("Btn_StageMgr").GetComponent<Button>().onClick.Invoke();
305
306 if (bFollowGo)
307 {
309 return;
310 }
311 triggerGo.SetActive(true);
312 triggerGo.GetComponent<MeshRenderer>().enabled = true;
314 pb_SelectionHandle.instance.SetTool(Tool.Position);
315 }
316
317 public GameObject GetTriggerGO()
318 {
319 return triggerGo;
320 }
321
322 public void OverrideTriggerObject(GameObject o)
323 {
324 triggerGo = o;
325 triggerGo.GetComponent<TriggerActionHelper>().SetTAParent(this);
326 }
327
328 [CanBeNull]
329 public string GetInput()
330 {
331 try
332 {
333 return inIDs.Keys.ToList()[0];
334 }
335 catch (Exception)
336 {
337 return null;
338 }
339 }
340
341 [CanBeNull]
342 public GameObject GetGameObject()
343 {
344 if (followGo == null)
346
347 return followGo;
348 }
349 public IEnumerator SetGameObjectJob(string hash)
350 {
351 if (selectedHash == "")
352 selectedHash = hash;
353
354 yield return new WaitForEndOfFrame();
355 while (LoadingManager.instance.isLoading) yield return new WaitForEndOfFrame();
356
358 }
359
360 public new void GetObjectData(SerializationInfo info, StreamingContext context)
361 {
362 base.GetObjectData(info, context);
363
364 var convertOldSave = false;
365 if (convertOldSave)
366 triggerGo.transform.localPosition =
367 triggerGo.transform.localPosition - new Vector3(0.4815754f, -0.324203f, -0.0164394f);
368 info.AddValue("triggerPosition", triggerGo.transform.localPosition, typeof(Vector3));
369 info.AddValue("triggerRotation", triggerGo.transform.localEulerAngles, typeof(Vector3));
370 info.AddValue("triggerScale", triggerGo.transform.localScale, typeof(Vector3));
371 info.AddValue("showVisuals", showVisuals, typeof(bool));
372 info.AddValue("triggerOnce", triggerOnce, typeof(bool));
373 info.AddValue("bFollowGo", bFollowGo, typeof(bool));
374 info.AddValue("followGo", GetGameObject(), typeof(GameObject));
375
376 try
377 {
378 if (string.IsNullOrEmpty(selectedHash))
379 info.AddValue("selectedGOHash", followGo.GetComponent<HashHolder>().Hash, typeof(string));
380 else
381 try
382 {
383 info.AddValue("selectedGOHash", followGo.GetComponent<HashHolder>().Hash, typeof(string));
384 }
385 catch (Exception)
386 {
387 info.AddValue("selectedGOHash", selectedHash, typeof(string));
388 }
389 }
390 catch (Exception e)
391 {
392 // ignored
393 }
394 }
395
396 public TriggerAction(SerializationInfo info, StreamingContext context) : base(info, context)
397 {
398 triggerPosition = (Vector3) info.GetValue("triggerPosition", typeof(Vector3));
399 triggerRotation = (Vector3) info.GetValue("triggerRotation", typeof(Vector3));
400 triggerScale = (Vector3) info.GetValue("triggerScale", typeof(Vector3));
401 try
402 {
403 showVisuals = info.GetBoolean("showVisuals");
404 triggerOnce = info.GetBoolean("triggerOnce");
405 bFollowGo = info.GetBoolean("bFollowGo");
406
407
408 followGo = (GameObject)info.GetValue("followGo", typeof(GameObject));
409
410 foreach (var e in info)
411 if (e.Name == "selectedGOHash")
412 {
413 selectedHash = info.GetString("selectedGOHash");
414 break;
415 }
416 }
417 catch (Exception)
418 {
419 // ignored, old save
420 }
421 }
422 private IEnumerator ShowPreview(Vector3 TargetPosition)
423 {
424 if (MiscLogicManager.instance.mode != MiscLogicManager.CurrentMode.Training && MiscLogicManager.instance.mode != MiscLogicManager.CurrentMode.Optimization) yield break;
425 yield return new WaitForEndOfFrame();
426 FollowMe.Instance?.StartFollowing(TargetPosition, triggerGo);
427 yield return null;
428 }
429}
UnityEngine.UI.Button Button
Definition: Pointer.cs:7
UnityEngine.Debug Debug
Definition: TanodaServer.cs:19
UnityEngine.Color Color
Definition: TestScript.cs:32
Image statusImg
Definition: ActionObject.cs:21
void TriggerOutput(string id)
List< GameObject > outPuts
Definition: ActionObject.cs:19
void StartFollowing(Vector3 EndPosition, GameObject TargetObject)
Definition: FollowMe.cs:35
static FollowMe Instance
Definition: FollowMe.cs:19
static void AddOnRemovedFromSelectionListener(Callback< IEnumerable< GameObject > > del)
Definition: pb_Selection.cs:45
static void SetSelection(IEnumerable< GameObject > selection)
Definition: pb_Selection.cs:92
static void Clear()
Definition: pb_Selection.cs:61
static GameObject activeGameObject
Definition: pb_Selection.cs:82
string Hash
Definition: HashHolder.cs:18
static SoundManager instance
Definition: SoundManager.cs:8
void PlaySuccessSound()
Definition: SoundManager.cs:33
new void Update()
GameObject GetGameObject()
GameObject triggerGo
string GetInput()
Vector3 triggerPosition
void SetTriggerTransformNow()
GameObject GetTriggerGO()
Vector3 triggerScale
TriggerAction(SerializationInfo info, StreamingContext context)
string selectedHash
new void GetObjectData(SerializationInfo info, StreamingContext context)
void TriggerSelection()
override void OnPointerEnter(PointerEventData eventData)
void CancelSelection()
Toggle followGameobject
GameObject triggerPrefab
void OnValueChangedOnce(bool value)
override void OnPointerExit(PointerEventData eventData)
void SelectTrigger()
override void Start()
IEnumerator SetGameObjectJob(string hash)
string canvasSelectorName
void OnValueChangedFollow(bool value)
GameObject followGo
override void Deactivate()
void OnValueChanged(bool value)
Vector3 triggerRotation
void OverrideTriggerObject(GameObject o)
override void Remove()
override void Triggered(string id)
void SetSelectedGO()
Tool
Definition: pb_Enum.cs:24