Tanoda
RotateAction.cs
Go to the documentation of this file.
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.Runtime.Serialization;
5using GILES;
6using NaughtyAttributes;
7using UnityEngine;
8using UnityEngine.UI;
10using System.Globalization;
11#if !UNITY_WEBGL
12using Valve.VR;
13using Valve.VR.InteractionSystem;
14#endif
15
16public class RotateAction : ActionObject, ISerializable
17{
18 public Dropdown axisSelector;
19 public InputField taktTimeInput, rotateInput;
20 internal Vector3 targetPosition, targetRotation;
21 internal bool activated;
22 internal bool done;
23 internal GameObject highlightObject, highlightTool;
24 public string selectedHash = "";
25 public string selectedToolHash = "";
27 internal GameObject finishBtn, inspector, canvas, stageManagerWindow, savedCustomTool;
28 private Coroutine mouseOver, mouseOver2;
29 internal float time = 0.0f;
30 internal int selectedAxis;
31 internal GameObject cachedGO;
32 private Vector3 currpos, currrot;
33 private Vector3 lastHandPos = Vector3.zero;
34 private float currentProgress = 0.0f;
35 internal float rotateAmount = 360f;
36
37
38#if !UNITY_WEBGL
39 public SteamVR_Action_Boolean gripButton;
40#endif
41
42 public override void Start()
43 {
44 base.Start();
45 stageManagerWindow = GameObject.Find("StageManager Window");
46 StartCoroutine(HideTCD());
47
48 // find inactive finish btn
49 canvas = GameObject.Find("Canvas");
50 var trs = canvas.GetComponentsInChildren<Transform>(true); // true: get inactive as well
51 foreach (var t in trs)
52 if (t.name == "Inspector")
53 inspector = t.gameObject;
54
55 trs = inspector.GetComponentsInChildren<Transform>(true);
56 foreach (var t in trs)
57 if (t.name == "FinishToolPos_Btn")
58 finishBtn = t.gameObject;
59
60
61 if (!cachedGO) cachedGO = GetInputGO();
62 }
63
64 public override void Deactivate()
65 {
66 base.Deactivate();
67
68 if (mouseOver != null)
69 StopCoroutine(mouseOver);
70 if (mouseOver2 != null)
71 StopCoroutine(mouseOver2);
72 Destroy(highlightObject);
73 Destroy(highlightTool);
74 }
75
76
77 public override void InputAdded(string id)
78 {
79 cachedGO = GetInputGO();
80 }
81
82 public override void OnPointerEnter(PointerEventData eventData)
83 {
84 if (targetPosition == default) return;
85
86 if (SavedUser.instance.isEditor || MiscLogicManager.instance.mode == MiscLogicManager.CurrentMode.Optimization)
87 {
88 mouseOver = StartCoroutine(ShowHighLight());
89 mouseOver2 = StartCoroutine(ShowToolHighLight());
90 }
91 }
92 public override void OnPointerExit(PointerEventData eventData)
93 {
94 if (SavedUser.instance.isEditor || MiscLogicManager.instance.mode == MiscLogicManager.CurrentMode.Optimization)
95 {
96 if (mouseOver != null)
97 StopCoroutine(mouseOver);
98 if (mouseOver2 != null)
99 StopCoroutine(mouseOver2);
100 Destroy(highlightObject);
101 Destroy(highlightTool);
102 }
103 }
104
105 public void OnAxisChanged(int xyz)
106 {
107 selectedAxis = xyz;
108 Vector3 axis = xyz == 0 ? Vector3.right : (xyz == 1) ? Vector3.up : Vector3.forward;
109 StartCoroutine(AxisVisualizer(axis));
110 }
111
112 private IEnumerator AxisVisualizer(Vector3 axis)
113 {
114 var origrot = cachedGO.transform.eulerAngles;
115 for (float i = 0; i < 1; i += Time.deltaTime)
116 {
117 var currrot = (i * 360f) * axis;
118 cachedGO.transform.eulerAngles = origrot + currrot;
119 yield return null;
120 }
121 cachedGO.transform.eulerAngles = origrot;
122 }
123
124 void ShowFinishBtn()
125 {
126 if (!inspector.activeSelf)
127 inspector.SetActive(true);
128
129 var btnOffset = finishBtn.transform.parent.GetComponent<RectTransform>().rect.width;
130 var spacing = 5f;
131 finishBtn.GetComponent<RectTransform>().anchoredPosition = new Vector2(-(btnOffset + spacing), 0);
132
133 finishBtn.SetActive(true);
134 }
135
136 void HideFinishBtn()
137 {
138 finishBtn.SetActive(false);
140 }
141
142 void SaveTarget(Transform t)
143 {
144 targetPosition = t.position;
145 targetRotation = t.eulerAngles;
146 selectedToolHash = t.GetComponent<HashHolder>().Hash;
147
148 }
149
150 protected bool InGoodPos(Transform t)
151 {
152 if (Math.Abs(t.position.x - targetPosition.x) > 0.05f) return false;
153 if (Math.Abs(t.position.y - targetPosition.y) > 0.05f) return false;
154 if (Math.Abs(t.position.z - targetPosition.z) > 0.09f) return false;
155
156 return true;
157 }
158
159 new void Update()
160 {
161
162 base.Update();
163
164 if (base.isInFieldOfView(GetToolObject())) base.actionRecognized = true;
165
166
167 if (!activated || done) return;
168
169 if (!savedCustomTool && !string.IsNullOrEmpty(selectedToolHash))
170 savedCustomTool = HashingManager.instance.GetGOFromHash(selectedToolHash);
171
172 var tool = GetToolObject();
173 if (tool == null)
174 {
175 return;
176 }
177
178 var t = tool.transform;
179#if !UNITY_WEBGL
180 if (tool.GetComponent<ThrowableCanDisable>() && !tool.GetComponent<ThrowableCanDisable>().IsAttachedToHand() /*&&/* !isRunning*/) return;
181 time += Time.deltaTime;
182 if (tool.GetComponentInParent<HandCopyAvg>() && tool.GetComponentInParent<HandCopyAvg>().release() && time >= 2.0f)
183 {
184 tool.GetComponent<ThrowableCanDisable>().ForceDrop();
186 {
187 ToolPositioner.instance.GetToolBlue(tool).GetComponent<LerpToMe>().DoTheLerp(tool);
188 }
189 time = 0.0f;
190
191 }
192 if (!highlightObject)
193 {
194 Destroy(highlightObject);
195 StartCoroutine(ShowHighLight());
197 {
198 FollowMe.Instance?.StartFollowing(targetPosition, cachedGO);
199 }
200
201 //StartCoroutine(ShowPreview(targetPosition));
202
203 }
204 PreviewHand.Instance?.hideHandPreview(GetToolObject());
205
206
207 if (gripButton.GetState(SteamVR_Input_Sources.Any))
208 {
209 DeltaRotate(t);
210 }
211 else
212 {
213 lastHandPos = Vector3.zero;
214 }
215#endif
216 }
217
218 private void DeltaRotate(Transform t)
219 {
220#if !UNITY_WEBGL
221 var lastHand = gripButton.GetActiveDevice(SteamVR_Input_Sources.Any);
222
223 var handpos = Vector3.zero;
224
225 foreach (var hand in Player.instance.hands)
226 {
227 if (hand.handType == lastHand)
228 {
229 handpos = hand.transform.position;
230 break;
231 }
232 }
233
234 if (lastHandPos == Vector3.zero)
235 {
236 lastHandPos = handpos;
237 return;
238 }
239
240 if (!cachedGO) cachedGO = GetInputGO();
241
242
243 var localHandPos = cachedGO.transform.InverseTransformPoint(handpos);
244 var localLastHandPos = cachedGO.transform.InverseTransformPoint(lastHandPos);
245
246 switch (selectedAxis)
247 {
248 case 0:
249 localHandPos.x = 0;
250 localLastHandPos.x = 0;
251 break;
252
253 case 1:
254 localHandPos.y = 0;
255 localLastHandPos.y = 0;
256 break;
257
258 case 2:
259 localHandPos.z = 0;
260 localLastHandPos.z = 0;
261 break;
262 }
263
264 var a = Vector3.Distance(Vector3.zero, localHandPos);
265 var b = Vector3.Distance(Vector3.zero, localLastHandPos);
266 var c = Vector3.Distance(localHandPos, localLastHandPos);
267
268 if (c == 0)
269 {
270 return;
271 }
272
273 var handDelta = lastHandPos - handpos;
274 var localDelta = cachedGO.transform.InverseTransformDirection(handDelta);
275
276 bool right = true;
277 if (selectedAxis == 0)
278 {
279 if (localDelta.z > 0)
280 {
281 if (localHandPos.y < 0)
282 {
283 right = true;
284 }
285 else
286 {
287 right = false;
288 }
289 }
290 else
291 {
292 if (localHandPos.y > 0)
293 {
294 right = true;
295 }
296 else
297 {
298 right = false;
299 }
300 }
301 }
302 if (selectedAxis == 1)
303 {
304 if (localDelta.z > 0)
305 {
306 if (localHandPos.x > 0)
307 {
308 right = true;
309 }
310 else
311 {
312 right = false;
313 }
314 }
315 else
316 {
317 if (localHandPos.x < 0)
318 {
319 right = true;
320 }
321 else
322 {
323 right = false;
324 }
325 }
326 }
327 if (selectedAxis == 2)
328 {
329 if (localDelta.x < 0)
330 {
331 if (localHandPos.y < 0)
332 {
333 right = true;
334 }
335 else
336 {
337 right = false;
338 }
339 }
340 else
341 {
342
343 if (localHandPos.y > 0)
344 {
345 right = true;
346 }
347 else
348 {
349 right = false;
350 }
351 }
352 }
353
354 var angle = Mathf.Acos((Mathf.Pow(a, 2) + Mathf.Pow(b, 2) - Mathf.Pow(c, 2)) / (2 * a * b)) * Mathf.Rad2Deg;
355
356 Vector3 axis = selectedAxis == 0 ? Vector3.right : (selectedAxis == 1) ? Vector3.up : Vector3.forward;
357
358 cachedGO.transform.Rotate(axis, right ? angle : -angle);
359
360 lastHandPos = handpos;
361 if (InGoodPos(t))
362 {
363 currentProgress += angle;
364 if (Mathf.Abs(currentProgress) >= rotateAmount)
365 {
366 var tcd = GetToolObject().GetComponent<ThrowableCanDisable>();
367 tcd.onDetachFromHand.AddListener(OnToolPutDown);
368 Destroy(highlightObject);
369 Destroy(highlightTool);
371 done = true;
372 }
373 }
374#endif
375 }
376
377 internal GameObject GetToolObject()
378 {
379 if (!savedCustomTool && !string.IsNullOrEmpty(selectedToolHash))
380 savedCustomTool = HashingManager.instance.GetGOFromHash(selectedToolHash);
381
382 return savedCustomTool;
383 }
384
385 public void OnRotateAmountChanged(string s)
386 {
387 rotateAmount = Macro.StoF(s);
388 }
389
390 public void onTaktTimeChanged(string value)
391 {
392 try
393 {
394
395 var single = Macro.StoF(value);
396 taktTimeInput.text = single.ToString("F2");
397 taktTime = single;
398 }
399 catch (Exception)
400 {
401 Debug.LogWarning("not parsable number(?) in holdTime inputfield!");
402
403 // restore last valid numbers
404 taktTimeInput.text = taktTime.ToString("F2");
405 }
406 }
407
408 internal IEnumerator ShowHighLight() //GREEN
409 {
410 if (highlightObject) Destroy(highlightObject);
411
412 if (MiscLogicManager.instance.mode != MiscLogicManager.CurrentMode.Training && MiscLogicManager.instance.mode != MiscLogicManager.CurrentMode.Optimization) yield break;
413
414 yield return new WaitForEndOfFrame();
415
416 if (done && IsCounting) yield break;
417
418 var inflate = false;
419
420
421 if (!savedCustomTool && !string.IsNullOrEmpty(selectedToolHash))
422 savedCustomTool = HashingManager.instance.GetGOFromHash(selectedToolHash);
423
424 var cachedGO = savedCustomTool;
425
426 highlightObject = Instantiate(cachedGO, targetPosition, Quaternion.Euler(targetRotation), cachedGO.transform.parent);
427 highlightObject.transform.position = targetPosition;
428 highlightObject.transform.eulerAngles = targetRotation;
429
430#if !UNITY_WEBGL
431 Destroy(highlightObject.GetComponent<TorqueWrench>());
432 Destroy(highlightObject.GetComponent<SeegerHelper>());
433 Destroy(highlightObject.GetComponent<ThrowableCanDisable>());
434 Destroy(highlightObject.GetComponent<Interactable>());
435#endif
436
437 var allCollider = highlightObject.GetComponentsInChildren<Collider>();
438 var allRb = highlightObject.GetComponentsInChildren<Rigidbody>();
439
440 foreach (var c in allCollider)
441 Destroy(c);
442
443 foreach (var c in allRb)
444 Destroy(c);
445
446 Destroy(highlightObject.GetComponent<HashHolder>());
447
448 yield return new WaitForEndOfFrame();
449
450 if (done && IsCounting)
451 {
452 Destroy(highlightObject);
453 yield break;
454 }
455
456 if (!highlightObject) yield break;
457
458 highlightObject.transform.SetPositionAndRotation(targetPosition, Quaternion.Euler(targetRotation));
459 highlightObject.transform.position = targetPosition;
460 highlightObject.transform.eulerAngles = targetRotation;
461
462 if (inflate)
463 highlightObject.transform.localScale *= 1.001f;
464
465 highlightObject.transform.SetParent(null, true);
466 highlightObject.SetActive(true);
467 MatChange(highlightObject);
468 if (highlightTool) highlightTool.SetActive(false);
469 }
470
471 private IEnumerator ShowPreview(Vector3 TargetPosition, GameObject TargetObject)
472 {
473 if (MiscLogicManager.instance.mode != MiscLogicManager.CurrentMode.Training && MiscLogicManager.instance.mode != MiscLogicManager.CurrentMode.Optimization) yield break;
474 yield return new WaitForEndOfFrame();
475
476#if !UNITY_WEBGL
477 PreviewHand.Instance?.EnterOffsetEditor(TargetObject, this, targetPosition, targetRotation);
478 FollowMe.Instance?.StartFollowing(TargetPosition, TargetObject);
479#endif
480 yield return null;
481
482 }
483
484 private IEnumerator ShowToolHighLight() //BLUE
485 {
486 if (highlightTool) Destroy(highlightTool);
487
488 if (MiscLogicManager.instance.mode != MiscLogicManager.CurrentMode.Training && MiscLogicManager.instance.mode != MiscLogicManager.CurrentMode.Optimization) yield break;
489
490 yield return new WaitForEndOfFrame();
491
492 var inflate = true;
493
494 var thl = GetToolObject();
495
496 if (thl == null) Debug.LogError("ShowToolHighlight tool is null!");
497
498 highlightTool = Instantiate(thl, thl.transform.position, thl.transform.rotation, null);
499#if !UNITY_WEBGL
500 Destroy(highlightTool.GetComponent<TorqueWrench>());
501 Destroy(highlightTool.GetComponent<SeegerHelper>());
502 Destroy(highlightTool.GetComponent<ThrowableCanDisable>());
503 Destroy(highlightTool.GetComponent<Interactable>());
504#endif
505 var allCollider = highlightTool.GetComponentsInChildren<Collider>();
506 var allRb = highlightTool.GetComponentsInChildren<Rigidbody>();
507
508 foreach (var c in allCollider)
509 Destroy(c);
510
511 foreach (var c in allRb)
512 Destroy(c);
513
514 Destroy(highlightTool.GetComponent<HashHolder>());
515
516 yield return new WaitForEndOfFrame();
517
518 highlightTool.transform.SetPositionAndRotation(thl.transform.position, thl.transform.rotation);
519
520 if (inflate)
521 highlightTool.transform.localScale *= 1.001f;
522
523 highlightTool.SetActive(true);
524
525 MatChange(highlightTool, true);
526 }
527
528 private void MatChange(GameObject go, bool tool = false)
529 {
530 var mrs = go.GetComponentsInChildren<MeshRenderer>();
531 foreach (var meshRenderer in mrs)
532 {
533 var list = new List<Material>();
534 for (var i = 0; i < meshRenderer.materials.Length; i++)
535 list.Add(tool ? highlightToolMaterial : highlightMaterial);
536
537 meshRenderer.materials = list.ToArray();
538 }
539 }
540
541 protected void TriggerNext()
542 {
546
547
549 Destroy(highlightTool);
550
551 StopAllCoroutines();
552 //StartCoroutine(LateOnPutToolDown());
553
554 StartCoroutine(Cleanup());
555
556 }
557 private IEnumerator LateOnPutToolDown()
558 {
559 yield return null;
560#if !UNITY_WEBGL
561 if (nextActionIsTheSame()) OnToolPutDown();
562 else
563 {
564 var tcd = GetToolObject().GetComponent<ThrowableCanDisable>();
565
566 if (tcd.onDetachFromHand == null)
567 tcd.onDetachFromHand = new UnityEngine.Events.UnityEvent();
568 tcd.onDetachFromHand.AddListener(OnToolPutDown);
569 }
570#endif
571 }
572 internal bool nextActionIsTheSame()
573 {
574 var connections = Controller.Instance.GetOutputConnectionsToObject(name);
575 foreach (var conn in connections)
576 {
578 var actions = Controller.Instance.GetActionsByIn(c.toId);
579
580 foreach (var act in actions)
581 {
582 if (act is RotateAction)
583 {
584 return true;
585 }
586 }
587 }
588
589 return false;
590
591 }
592 private IEnumerator Cleanup()
593 {
594 yield return null;
595 Destroy(highlightTool);
596 Destroy(highlightObject);
597 yield return null;
598 Destroy(highlightTool);
599 Destroy(highlightObject);
600 yield return null;
601 Destroy(highlightTool);
602 Destroy(highlightObject);
603 yield return null;
604 Destroy(highlightTool);
605 Destroy(highlightObject);
606 }
607
608 private void TriggerOutput()
609 {
611 {
612 var tool = GetToolObject();
613 if (tool && !nextActionIsTheSame())
614 {
615 tool.GetComponent<ThrowableCanDisable>().enabled = false;
616 }
617 }
618 activated = false;
619 done = true;
620 Destroy(highlightTool);
621
622 TriggerOutput(outPuts[0].name);
623 }
624
625 public override void Triggered(string id)
626 {
627 base.Triggered(id);
628#if !UNITY_WEBGL
630 {
631 if (GetToolObject() == null && savedCustomTool != null)
632 {
633 savedCustomTool.GetComponent<ThrowableCanDisable>().enabled = true;
634 savedCustomTool.GetComponent<ThrowableCanDisable>().actionOver = false;
635 savedCustomTool.GetComponent<ThrowableCanDisable>().wrong = true;
636 }
637 if (GetToolObject() != null && GetToolObject().GetComponent<ThrowableCanDisable>())
638 {
639 GetToolObject().GetComponent<ThrowableCanDisable>().enabled = true;
640 GetToolObject().GetComponent<ThrowableCanDisable>().actionOver = false;
641 GetToolObject().GetComponent<ThrowableCanDisable>().wrong = true;
642 }
643 }
644 activated = true;
645 done = false;
646
647 lastHandPos = Vector3.zero;
648 currentProgress = 0.0f;
649#if !UNITY_WEBGL
650 if (!GetToolObject().GetComponent<ThrowableCanDisable>().IsAttachedToHand())
651 {
652 StartCoroutine(ShowToolHighLight());
653 }
654#endif
655
656 StartCoroutine(ShowPreview(GetToolObject().transform.position, GetToolObject()));
657 var tool = GetToolObject();
658 if (tool == null)
659 {
660 return; // rossz node? nem lehet ilyen
661 }
662
663 var tcd = tool.GetComponent<ThrowableCanDisable>();
664
665 if (tcd.onDetachFromHand == null)
666 tcd.onDetachFromHand = new UnityEngine.Events.UnityEvent();
667
668 //tcd.onDetachFromHand.AddListener(OnToolPutDown);
669
670
671#endif
672
673 }
674
675 public IEnumerator HideTCD()
676 {
677 yield return null;
678
680 {
681 //Debug.LogError("Training (nem error)");
682 var tool = GetToolObject();
683 //Debug.LogError($"tool: {tool}");
684 if (tool && tool.GetComponent<ThrowableCanDisable>())
685 {
686 tool.GetComponent<ThrowableCanDisable>().enabled = false;
687 //Debug.LogError($"elvileg kész");
688 }
689 }
690 }
691 public IEnumerator SetGameObjectJob(string hash)
692 {
693 if (selectedHash == "")
694 selectedHash = hash;
695
696 yield return null;
697 while (LoadingManager.instance.isLoading) yield return null;
698 SetGameObject(hash);
699
700 GetToolObject()?.SetActive(true);
701 }
702
703
704 [Button]
705 internal GameObject GetInputGO()
706 {
707 try
708 {
710 var action = Controller.Instance.GetActionByInOut(connection.fromId);
711 GameObject retval = null;
712 if (action is GameObjectAction objectAction) retval = objectAction.GetGameObject();
713 if (action is WeldAction weldAction) retval = weldAction.GetGameObject();
714 if (action is ToolAction toolAction) retval = toolAction.GetGameObject();
715
716 Debug.Log($"RotateAction requested: \"{retval}\"");
717
718
719 if (cachedGO && cachedGO.GetComponent<ThrowableCanDisable>())
720 {
721 var tcd = cachedGO.GetComponent<ThrowableCanDisable>();
722 tcd.enabled = false;
723 }
724
725 if (retval && !retval.GetComponent<OffsetHolder>())
726 {
727 retval.AddComponent<OffsetHolder>();
728 retval.AddComponent<VisualOffset>();
729 }
730
731 return retval;
732 }
733 catch (Exception)
734 {
735 return null;
736 }
737 }
738
739 public GameObject GetGameObject()
740 {
741 if (cachedGO)
742 return cachedGO;
743
744 if (!string.IsNullOrEmpty(selectedHash))
745 return HashingManager.instance.GetGOFromHash(selectedHash);
746
747 return null;
748 }
749
750 public void SetToolPosition()
751 {
752#if !DANA
753 var toolname = "";
754 var to = GetToolObject();
755 if (to != null) toolname = to.name;
756 toolname = toolname.Replace("(Clone)", "").Replace("_blue", "");
759 return;
760#endif
761 }
762
763
764 public void SelectedCustomTool(GameObject tool)
765 {
767
769 pb_SelectionHandle.instance.SetTool(GILES.Tool.Position);
770 savedCustomTool = tool;
771
772 currpos = tool.transform.position;
773 currrot = tool.transform.eulerAngles;
774 GameObject.Find("Btn_StageMgr").GetComponent<Button>().onClick.Invoke();
775 pb_Selection.AddOnRemovedFromSelectionListener(OnRemovedFromSelection);
776
777 finishBtn.GetComponent<Button>().onClick.RemoveAllListeners();
778 finishBtn.GetComponent<Button>().onClick.AddListener(OnFinishBtn);
779 ShowFinishBtn();
780 }
781
782 void OnFinishBtn()
783 {
784 var selection = pb_Selection.gameObjects;
785 ResetTool(selection, true);
786 }
787
788 void OnRemovedFromSelection(IEnumerable<GameObject> selection)
789 {
790 ResetTool(selection);
791 }
792
793 void ResetTool(IEnumerable<GameObject> selection, bool saveTarget = false)
794 {
795 foreach (var o in selection)
796 if (o.GetComponent<ToolGO>())
797 {
798 // turn on, unless already on
799 if (stageManagerWindow.GetComponent<CanvasGroup>().alpha == 0)
800 GameObject.Find("Btn_StageMgr").GetComponent<Button>().onClick.Invoke();
801
802 if (saveTarget) SaveTarget(o.transform);
803 o.transform.eulerAngles = currrot;
804 o.transform.position = currpos;
805 pb_Selection.instance.OnRemovedFromSelection -= OnRemovedFromSelection;
806 }
807
808 HideFinishBtn();
809 }
810
811 public void SetGameObject(string hash)
812 {
813 if (hash == "") return;
814 cachedGO = HashingManager.instance.GetGOFromHash(hash);
815 }
817 {
818 taktTimeInput.text = taktTime.ToString("F2");
819 axisSelector?.SetValueWithoutNotify(selectedAxis);
820 rotateInput?.SetTextWithoutNotify(rotateAmount.ToString("F2"));
821
822 }
823 private void OnToolPutDown()
824 {
825#if !UNITY_WEBGL
826 if (!highlightTool)
827 {
828 TriggerOutput(outPuts[0].name);
830 {
831 if (!nextActionIsTheSame())
832 {
833 if (GetToolObject() == null)
834 {
835 savedCustomTool.GetComponent<ThrowableCanDisable>().enabled = false;
836 savedCustomTool.GetComponent<ThrowableCanDisable>().actionOver = true;
837 }
838 else
839 {
840 GetToolObject().GetComponent<ThrowableCanDisable>().enabled = false;
841 GetToolObject().GetComponent<ThrowableCanDisable>().actionOver = true;
842 }
843 }
844
845 }
846 activated = false;
847 done = true;
848 Destroy(highlightTool);
849 Destroy(highlightObject);
851 //cleanup
852 try
853 {
854 var tool = GetToolObject();
855 var tcd = tool.GetComponent<ThrowableCanDisable>();
856 tcd.enabled = false;
857 tcd.onDetachFromHand.RemoveListener(OnToolPutDown);
858 }
859 catch (Exception)
860 {
861 // ignored
862 }
863 }
864#endif
865 }
866 internal IEnumerator TCDOff()
867 {
868 yield return new WaitForSeconds(0.7f);
869 if (GetToolObject() == null)
870 {
871 savedCustomTool.GetComponent<ThrowableCanDisable>().enabled = false;
872 }
873 else
874 {
875 GetToolObject().GetComponent<ThrowableCanDisable>().enabled = false;
876 }
877 }
878 public override void GetObjectData(SerializationInfo info, StreamingContext context)
879 {
880 base.GetObjectData(info, context);
881
882 info.AddValue("targetPosition", targetPosition, typeof(Vector3));
883 info.AddValue("targetRotation", targetRotation, typeof(Vector3));
884 info.AddValue("axis", selectedAxis, typeof(int));
885
886 try
887 {
888 if (!string.IsNullOrEmpty(selectedHash))
889 info.AddValue("selectedGOHash", selectedHash, typeof(string));
890 else
891 info.AddValue("selectedGOHash", cachedGO.GetComponent<HashHolder>().Hash, typeof(string));
892 }
893 catch (Exception)
894 {
895 // ignored
896 }
897 if (!string.IsNullOrEmpty(selectedToolHash))
898 {
899 info.AddValue("selectedToolHash", selectedToolHash);
900 }
901 info.AddValue("taktTime", taktTime, typeof(float));
902 if (rotateAmount == 0)
903 rotateAmount = 360f;
904 info.AddValue("rotateAmount", rotateAmount);
905 }
906
907 public RotateAction(SerializationInfo info, StreamingContext context) : base(info, context)
908 {
909 targetPosition = (Vector3)info.GetValue("targetPosition", typeof(Vector3));
910 targetRotation = (Vector3)info.GetValue("targetRotation", typeof(Vector3));
911
912 try
913 {
914 foreach (var e in info)
915 {
916 if (e.Name == "selectedToolHash")
917 selectedToolHash = info.GetString("selectedToolHash");
918 if (e.Name == "selectedGOHash") selectedHash = info.GetString("selectedGOHash");
919 if (e.Name == "taktTime") taktTime = (float)info.GetValue("taktTime", typeof(float));
920 if (e.Name == "axis") selectedAxis = info.GetInt32("axis");
921 if (e.Name == "rotateAmount") rotateAmount = info.GetSingle("rotateAmount");
922 }
923 }
924 catch (Exception)
925 {
926 // ignored
927 }
928 }
929}
Es.InkPainter.Math Math
Definition: PaintTest.cs:7
UnityEngine.UI.Button Button
Definition: Pointer.cs:7
UnityEngine.Debug Debug
Definition: TanodaServer.cs:19
string action
Definition: ActionObject.cs:32
List< GameObject > outPuts
Definition: ActionObject.cs:19
string GetInput()
ActionObject[] GetActionsByIn(string id)
Definition: Controller.cs:943
List< string > GetOutputConnectionsToObject(string id)
Definition: Controller.cs:899
Connection GetConnectionByEndPointId(string id)
Definition: Controller.cs:857
Connection GetConnectionById(string id)
Definition: Controller.cs:871
ActionObject GetActionByInOut(string id)
Definition: Controller.cs:925
static Controller Instance
Definition: Controller.cs:16
void StartFollowing(Vector3 EndPosition, GameObject TargetObject)
Definition: FollowMe.cs:35
static FollowMe Instance
Definition: FollowMe.cs:19
static List< GameObject > gameObjects
A list of the currently selected GameObjects.
Definition: pb_Selection.cs:56
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
UnityEvent< GameObject > OnSelected
static pb_ToolSelectorButton instance
void SelectToolWindow(string selected="")
bool release()
Definition: HandCopyAvg.cs:300
string Hash
Definition: HashHolder.cs:18
Definition: Macro.cs:12
static float StoF(string value)
Definition: Macro.cs:24
void hideHandPreview(GameObject objectToGrab)
Definition: PreviewHand.cs:73
void EnterOffsetEditor(GameObject objectToGrab, ActionObject action, Vector3 TargetPos, Vector3 TargetRot)
Definition: PreviewHand.cs:40
static PreviewHand Instance
Definition: PreviewHand.cs:16
void OnAxisChanged(int xyz)
Material highlightMaterial
Definition: RotateAction.cs:26
override void InputAdded(string id)
Definition: RotateAction.cs:77
Material origHighlightToolMaterial
Definition: RotateAction.cs:26
void OnRotateAmountChanged(string s)
GameObject GetGameObject()
void SelectedCustomTool(GameObject tool)
InputField taktTimeInput
Definition: RotateAction.cs:19
override void GetObjectData(SerializationInfo info, StreamingContext context)
override void Deactivate()
Definition: RotateAction.cs:64
SteamVR_Action_Boolean gripButton
Definition: RotateAction.cs:39
InputField rotateInput
Definition: RotateAction.cs:19
override void OnPointerExit(PointerEventData eventData)
Definition: RotateAction.cs:92
Dropdown axisSelector
Definition: RotateAction.cs:18
void TriggerNext()
override void OnPointerEnter(PointerEventData eventData)
Definition: RotateAction.cs:82
RotateAction(SerializationInfo info, StreamingContext context)
void SetGameObject(string hash)
IEnumerator HideTCD()
Material highlightToolMaterial
Definition: RotateAction.cs:26
string selectedToolHash
Definition: RotateAction.cs:25
void SetToolPosition()
void RefreshTargetDisplay()
string selectedHash
Definition: RotateAction.cs:24
override void Triggered(string id)
IEnumerator SetGameObjectJob(string hash)
bool InGoodPos(Transform t)
void onTaktTimeChanged(string value)
override void Start()
Definition: RotateAction.cs:42
static SoundManager instance
Definition: SoundManager.cs:8
void PlaySuccessSound()
Definition: SoundManager.cs:33
Definition: ToolGO.cs:6
GameObject GetToolBlue(GameObject tool)
static ToolPositioner instance
static TorqueWrenchDigital instance
UnityEvent screwedIn
Definition: TorqueWrench.cs:18
static TorqueWrench instance
Definition: TorqueWrench.cs:13
static TorqueWrenchSmol instance