2using System.Collections;
3using System.Collections.Generic;
5using System.Runtime.Serialization;
7using JetBrains.Annotations;
19 [SerializeField]
internal GameObject selectedGO;
20 private GameObject canvasSelector;
21 private GameObject canvasHierarchy;
22 private Canvas canvas;
24 private Coroutine mouseOver;
25 private GameObject highlightObject;
28 private GameObject canvasGo;
29 private GameObject handPrefab, leftHandPrefab;
30 private GameObject handInstance;
31 private Transform attachPoint;
32 private bool editingLeft =
false;
33 private Canvas canvasOffsetEditor;
44 handPrefab = Resources.Load(
"OffsetEditorHand_new") as GameObject;
45 leftHandPrefab = Resources.Load(
"OffsetEditorLeftHand_new") as GameObject;
47 handPrefab = Resources.Load(
"OffsetEditorHand_WebGL") as GameObject;
48 leftHandPrefab = Resources.Load(
"OffsetEditorLeftHand_WebGL") as GameObject;
56 canvasGo = GameObject.Find(
"Canvas");
57 canvas = canvasGo.GetComponent<Canvas>();
58 canvas.enabled =
false;
60 GameObject canvasOffsetGo = GameObject.Find(
"Canvas_OffsetEditor");
61 canvasOffsetEditor = canvasOffsetGo.GetComponent<Canvas>();
62 canvasOffsetEditor.enabled =
true;
64 var saveBtn = canvasOffsetGo.GetComponentInChildren<
Button>();
67 Debug.Log(
"save btn not found");
69 saveBtn.onClick.RemoveAllListeners();
71 saveBtn.onClick.AddListener(ExitOffsetEditor);
76 void OnRemovedFromSelection(IEnumerable<GameObject> selection)
80 private new void OnDestroy()
82 Destroy(highlightObject);
86 void ExitOffsetEditor()
95 if (handPrefab ==
null)
97 Debug.LogError(
"couldn't find glove, offset editor cannot be entered");
102 if (go ==
null)
return;
103 Vector3 scale = go.transform.localScale;
104 if (scale.x == 0f || scale.y == 0f || scale.z == 0f)
106 Debug.LogError(
"object has at least one scale component set to 0, offset editor cannot be entered");
109 StartCoroutine(SpawnHand());
114 if (leftHandPrefab ==
null)
116 Debug.LogError(
"couldn't find glove, offset editor cannot be entered");
120 if (go ==
null)
return;
121 Vector3 scale = go.transform.localScale;
122 if (scale.x == 0f || scale.y == 0f || scale.z == 0f)
124 Debug.LogError(
"object has at least one scale component set to 0, offset editor cannot be entered");
127 StartCoroutine(SpawnHand(
true));
130 IEnumerator SpawnHand(
bool left =
false)
134 handInstance = Instantiate(left ? leftHandPrefab : handPrefab, Vector3.zero,
new Quaternion(),
null);
137 attachPoint = handInstance.transform.Find(
"AttachPoint");
138 attachPoint.transform.SetParent(
null,
true);
141 handInstance.transform.SetParent(attachPoint,
true);
144 attachPoint.transform.SetParent(
GetGameObject().transform,
true);
148 attachPoint.transform.localRotation = left ? Quaternion.Euler(
LeftRotation) : Quaternion.Euler(
Rotation);
151 var scale = attachPoint.transform.localScale;
153 if (scale.x != scale.y || scale.x != scale.z)
155 attachPoint.transform.SetParent(
null,
true);
158 attachPoint.transform.localScale = Vector3.one;
160 attachPoint.transform.localScale = Vector3.one * 0.09f;
180 if (go ==
null)
return;
197 var goName = goRo ?
string.IsNullOrEmpty(goRo.NewName) ? go.name : goRo.
NewName : go.name;
199 GetComponentInChildren<ObjectDroppedEvent>().NameText.text = goName;
212 yield
return new WaitForEndOfFrame();
219 if (hash ==
"")
return;
237 var goName = goRo ?
string.IsNullOrEmpty(goRo.NewName) ?
gop.
asset.name : goRo.NewName :
gop.
asset.name;
239 GetComponentInChildren<ObjectDroppedEvent>().NameText.text = goName;
246 private void OnAssetIsNullCallback()
254 canvasSelector.GetComponent<Canvas>().enabled =
false;
255 GetComponentInParent<Canvas>().enabled =
true;
256 canvasSelector.transform.GetChild(0).GetComponent<
Button>().onClick.RemoveListener(
SetSelectedGO);
263 canvasHierarchy.transform.SetParent(canvas.transform,
false);
268 canvasSelector.GetComponent<Canvas>().enabled =
false;
269 GetComponentInParent<Canvas>().enabled =
true;
270 canvasSelector.transform.GetChild(0).GetComponent<
Button>().onClick.RemoveListener(
SetSelectedGO);
277 canvasHierarchy.transform.SetParent(canvas.transform,
false);
291 GetComponentInParent<Canvas>().enabled =
false;
292 canvasSelector.transform.GetChild(0).GetComponent<
Button>().onClick.AddListener(
SetSelectedGO);
294 canvasSelector.GetComponent<Canvas>().enabled =
true;
297 GetComponentInChildren<GameObjectPreview>().GetComponent<
Image>().enabled =
false;
298 var canvasGo = GameObject.Find(
"Canvas");
299 canvas = canvasGo.GetComponent<Canvas>();
302 Debug.LogError(
"canvas not found!");
306 canvasHierarchy = GameObject.Find(
"Hierarchy");
307 if (canvasHierarchy ==
null)
309 Debug.LogError(
"Hierarchy not found!");
313 canvasHierarchy.transform.SetParent(canvasSelector.transform,
false);
320 return outIDs.Keys.ToList()[0];
328 internal GameObject GetOutputAction()
346 if (selectedGO ==
null)
356 mouseOver = StartCoroutine(ShowHighLight());
362 if (mouseOver !=
null)
363 StopCoroutine(mouseOver);
364 Destroy(highlightObject);
369 private IEnumerator ShowHighLight()
371 if (highlightObject) Destroy(highlightObject);
380 yield
return new WaitForEndOfFrame();
385 highlightObject = Instantiate(cachedGO, cachedGO.transform.position, cachedGO.transform.rotation,
null);
386 highlightObject.transform.position = cachedGO.transform.position;
387 highlightObject.transform.rotation = cachedGO.transform.rotation;
388 highlightObject.transform.localScale = cachedGO.transform.lossyScale;
396 var allCollider = highlightObject.GetComponentsInChildren<Collider>();
397 var allRb = highlightObject.GetComponentsInChildren<Rigidbody>();
399 foreach (var c
in allCollider)
402 foreach (var c
in allRb)
405 Destroy(highlightObject.GetComponent<
HashHolder>());
407 yield
return new WaitForEndOfFrame();
410 highlightObject.transform.localScale *= 1.001f;
412 highlightObject.SetActive(
true);
414 MatChange(highlightObject);
416 private void MatChange(GameObject go)
418 var mrs = go.GetComponentsInChildren<MeshRenderer>();
419 foreach (var meshRenderer
in mrs)
421 var list =
new System.Collections.Generic.List<Material>();
422 for (var i = 0; i < meshRenderer.materials.Length; i++)
424 meshRenderer.materials = list.ToArray();
429 public new void GetObjectData(SerializationInfo info, StreamingContext context)
431 base.GetObjectData(info, context);
432 info.AddValue(
"selectedGO",
GetGameObject(), typeof(GameObject));
436 info.AddValue(
"selectedGOHash", selectedGO.GetComponent<
HashHolder>().
Hash, typeof(
string));
440 info.AddValue(
"selectedGOHash", selectedGO.GetComponent<
HashHolder>().
Hash, typeof(
string));
444 info.AddValue(
"selectedGOHash",
selectedHash, typeof(
string));
451 info.AddValue(
"offset", (Vector3)
Offset, typeof(Vector3));
452 info.AddValue(
"rotoffset", (Vector3)
Rotation, typeof(Vector3));
453 info.AddValue(
"leftoffset", (Vector3)
LeftOffset, typeof(Vector3));
454 info.AddValue(
"leftrotoffset", (Vector3)
LeftRotation, typeof(Vector3));
457 public GameObjectAction(SerializationInfo info, StreamingContext context) : base(info, context)
459 selectedGO = (GameObject) info.GetValue(
"selectedGO", typeof(GameObject));
461 foreach (var e
in info)
463 if (e.Name ==
"selectedGOHash")
468 if (e.Name ==
"offset")
470 Offset = (Vector3)info.GetValue(
"offset", typeof(Vector3));
473 if (e.Name ==
"leftoffset")
475 LeftOffset = (Vector3)info.GetValue(
"leftoffset", typeof(Vector3));
478 if (e.Name ==
"rotoffset")
480 Rotation = (Vector3)info.GetValue(
"rotoffset", typeof(Vector3));
483 if (e.Name ==
"leftrotoffset")
485 LeftRotation = (Vector3)info.GetValue(
"leftrotoffset", typeof(Vector3));
UnityEngine.UI.Button Button
System.Drawing.Image Image
void TriggerOutput(string id)
virtual void Triggered(string id)
Connection GetConnectionByEndPointId(string id)
ActionObject GetActionByInOut(string id)
static Controller Instance
static void AddOnRemovedFromSelectionListener(Callback< IEnumerable< GameObject > > del)
static void SetSelection(IEnumerable< GameObject > selection)
static GameObject activeGameObject
override void OnPointerEnter(PointerEventData eventData)
GameObject GetGameObject()
void SetGameObject(string hash)
GameObjectAction(SerializationInfo info, StreamingContext context)
string canvasSelectorName
new void GetObjectData(SerializationInfo info, StreamingContext context)
override void OnPointerExit(PointerEventData eventData)
void IfTrigger(string id)
void EnterLeftOffsetEditor()
Material highlightMaterial
void SetGameObject(GameObject go)
IEnumerator SetGameObjectJob(string hash)
void Initialize(bool reinitialize=false)
static void SetStatic(GameObject go)