2using System.Collections;
3using System.Collections.Generic;
5using System.Runtime.Serialization;
6using JetBrains.Annotations;
7using NaughtyAttributes;
12 private GameObject weldedGO;
13 private List<Transform> originalParents =
new List<Transform>();
14 private List<Vector3> originalPositions =
new List<Vector3>();
15 private List<Vector3> originalRotations =
new List<Vector3>();
16 private GameObject[] cachedList;
17 private bool welded =
false;
23 var latereparent =
true;
27 StartCoroutine(LateReparent());
39 originalParents =
new List<Transform>();
40 originalPositions =
new List<Vector3>();
41 originalRotations =
new List<Vector3>();
42 if (cachedList ==
null) cachedList = GetInputGOs();
45 IEnumerator LateReparent()
47 yield
return new WaitForEndOfFrame();
52 internal void Reparent()
54 var list = GetInputGOs();
59 Debug.LogError(
"Weld ERROR: double parenting!");
63 if (list !=
null && list.Length > 1)
65 var parent = list[0].transform;
67 for (var i = 1; i < list.Length; i++)
69 if (list[i] ==
null)
continue;
70 originalParents.Add(list[i].transform.parent);
71 originalPositions.Add(list[i].transform.position);
72 originalRotations.Add(list[i].transform.eulerAngles);
73 list[i].transform.SetParent(parent,
true);
81 if (cachedList !=
null)
83 for (var i = 1; i < cachedList.Length; i++)
85 if (cachedList[i] ==
null)
continue;
86 cachedList[i].transform.SetParent(originalParents[i - 1],
true);
87 cachedList[i].transform.position = originalPositions[i - 1];
88 cachedList[i].transform.eulerAngles = originalRotations[i - 1];
91 originalParents.Clear();
92 originalPositions.Clear();
93 originalRotations.Clear();
101 GameObject[] GetInputGOs()
106 var retval =
new List<GameObject>();
107 foreach (var s
in list)
110 if (conn.toId ==
inPuts[1].name)
continue;
112 var goname =
"UNKNOWN";
115 retval.Add(objectAction.GetGameObject());
116 goname = objectAction.GetGameObject().name;
120 if (weldAction ==
this)
123 retval.Add(weldAction.GetGameObject());
124 goname = weldAction.GetGameObject().name;
129 retval.Add(toolAction.GetGameObject());
130 goname = toolAction.GetGameObject().name;
133 Debug.Log($
"Weld requested: \"{s}\" ({goname})");
136 return retval.ToArray();
149 return inIDs.Keys.ToList()[0];
157 public WeldAction(SerializationInfo info, StreamingContext context) : base(info, context)
164 if (!weldedGO)
return GetInputGOs()?[0];
UnityEngine.UI.Button Button
void TriggerOutput(string id)
List< GameObject > inPuts
List< GameObject > outPuts
List< string > GetConnectionsToObject(string id)
Connection GetConnectionById(string id)
ActionObject GetActionByInOut(string id)
static Controller Instance
GameObject GetGameObject()
WeldAction(SerializationInfo info, StreamingContext context)
override void Triggered(string id)