Skip to content
Snippets Groups Projects
Commit ce629e27 authored by Sylvain Renault's avatar Sylvain Renault
Browse files

New editor stuffs.

Draw gizmo for WorldLinks.
From/To link endpoints can now directly be selected in the scene.
parent 3b84e2ca
No related branches found
No related tags found
1 merge request!4Add GraphView module & the World Storage inspector window into the main branch
......@@ -193,7 +193,7 @@ namespace ETSI.ARF.WorldStorage.UI
GUI.backgroundColor = ori;
GUI.backgroundColor = WorldStorageWindow.arfColors[5];
if (GUILayout.Button("Generate GameObject"))
if (GUILayout.Button("Generate/Update GameObject"))
{
GenerateAndUpdateVisual(UUID, customName, localCRS_pos, localCRS_rot);
}
......
......@@ -189,7 +189,7 @@ namespace ETSI.ARF.WorldStorage.UI
GUI.backgroundColor = ori;
GUI.backgroundColor = WorldStorageWindow.arfColors[5];
if (GUILayout.Button("Generate GameObject"))
if (GUILayout.Button("Generate/Update GameObject"))
{
GenerateAndUpdateVisual(UUID, customName, localCRS_pos, localCRS_rot);
}
......
......@@ -40,7 +40,7 @@ namespace ETSI.ARF.WorldStorage.UI
{
public class WorldLinkWindow : EditorWindow
{
private class Element
public class Element
{
public string UUID = System.Guid.Empty.ToString();
public string name = "(none)";
......@@ -94,24 +94,43 @@ namespace ETSI.ARF.WorldStorage.UI
}
}
public static GameObject GenerateAndUpdateVisual(string UUID, string from, string to, Vector3 pos, Vector3 rot)
public static GameObject GenerateAndUpdateVisual(string UUID, Element from, Element to)
{
ETSI.ARF.WorldStorage.UI.Prefabs.WorldStoragePrefabs prefabs;
prefabs = (Prefabs.WorldStoragePrefabs)Resources.Load("ARFPrefabs");
GameObject arf = GameObject.Find("ARF Visuals");
GameObject visual = GameObject.Find(UUID);
//Value between from and to
Vector3 centerPos = (from.pos + to.pos) * 0.5f;
Vector3 rot = Vector3.zero; // Direction
if (arf == null) arf = new GameObject("ARF Visuals");
if (visual == null)
{
visual = SceneAsset.Instantiate<GameObject>(prefabs.worldLinkPrefab, pos, Quaternion.Euler(rot), arf.transform); // TODO rot
visual = SceneAsset.Instantiate<GameObject>(prefabs.worldLinkPrefab, centerPos, Quaternion.Euler(rot), arf.transform); // TODO rot
visual.name = UUID;
}
else
{
visual.transform.SetPositionAndRotation(pos, Quaternion.Euler(rot));
visual.transform.SetPositionAndRotation(centerPos, Quaternion.Euler(rot));
}
// Update the gizno, if GaneObject are founds!!!
GameObject go1 = GameObject.Find(from.UUID);
GameObject go2 = GameObject.Find(to.UUID);
if (go1 && go2)
{
LinkVisual gizmo = visual.GetComponent<LinkVisual>();
if (gizmo)
{
gizmo.fromElement = go1;
gizmo.toElement = go2;
}
}
visual.transform.Find("Canvas/Text").GetComponent<TextMeshProUGUI>().text = $"UUID: { UUID }\nFrom: { from }\nTo: { to }";
// Update the annotation
visual.transform.Find("Canvas/Text").GetComponent<TextMeshProUGUI>().text = $"UUID: { UUID }\nFrom: { from.name }\nTo: { to.name }";
return visual;
}
......@@ -270,12 +289,9 @@ namespace ETSI.ARF.WorldStorage.UI
GUI.backgroundColor = ori;
GUI.backgroundColor = WorldStorageWindow.arfColors[5];
if (GUILayout.Button("Generate GameObject"))
if (GUILayout.Button("Generate/Update GameObject"))
{
//TODO: Value between from and to
Vector3 pos = (FROM.pos + TO.pos) * 0.5f;
Vector3 rot = Vector3.zero; // Direction
GenerateAndUpdateVisual(UUID, FROM.name, TO.name, pos, rot);
GenerateAndUpdateVisual(UUID, FROM, TO);
}
GUI.backgroundColor = ori;
EditorGUILayout.EndHorizontal();
......@@ -284,12 +300,39 @@ namespace ETSI.ARF.WorldStorage.UI
// ---------------------
// Params
// ---------------------
string lastFromUUID = FROM.UUID;
string lastToUUID = TO.UUID;
if (GUILayout.Button("Get From/To Elements from Scene Selection"))
{
GameObject from, to;
GameObject[] SelectedObjects = Selection.gameObjects;
if (SelectedObjects.Length == 2)
{
Debug.Log("Creation du lien (Many thanks Eric ;-)");
from = SelectedObjects[0];
to = SelectedObjects[1];
FROM.UUID = from.name;
TO.UUID = to.name;
}
else
{
EditorUtility.DisplayDialog("Selection", "Please select exactly 2 elements in the scene!", "OK");
}
}
showListFrom = EditorGUILayout.Foldout(showListFrom, "From (parent object)");
if (showListFrom)
{
EditorGUILayout.BeginHorizontal();
string lastFromUUID = FROM.UUID;
FROM.UUID = EditorGUILayout.TextField("UUID:", FROM.UUID);
if (FROM.UUID.Contains("["))
{
// extract the UUID
FROM.UUID = FROM.UUID.Split('[', ']')[1];
}
GUI.backgroundColor = WorldStorageWindow.arfColors[1];
if (GUILayout.Button("Request", EditorStyles.miniButtonLeft, miniButtonWidth) || lastFromUUID != FROM.UUID)
{
......@@ -306,8 +349,12 @@ namespace ETSI.ARF.WorldStorage.UI
if (showListTo)
{
EditorGUILayout.BeginHorizontal();
string lastToUUID = TO.UUID;
TO.UUID = EditorGUILayout.TextField("UUID:", TO.UUID);
if (TO.UUID.Contains("["))
{
// extract the UUID
TO.UUID = TO.UUID.Split('[', ']')[1];
}
GUI.backgroundColor = WorldStorageWindow.arfColors[1];
if (GUILayout.Button("Request", EditorStyles.miniButtonLeft, miniButtonWidth) || lastToUUID != TO.UUID)
{
......@@ -390,7 +437,7 @@ namespace ETSI.ARF.WorldStorage.UI
System.Guid _creator = System.Guid.Parse(worldStorageUser.UUID);
System.Guid _from = System.Guid.Parse(FROM.UUID);
System.Guid _to = System.Guid.Parse(TO.UUID);
WorldLink t = new WorldLink(_uuid, _creator, _to, _from, FROM.type, TO.type, _transform3d, unit, keyValueTags);
WorldLink t = new WorldLink(_uuid, _creator, _from, _to, FROM.type, TO.type, _transform3d, unit, keyValueTags);
return t;
}
}
......
......@@ -9,6 +9,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 1814829793678878270}
- component: {fileID: 2766171691247251799}
m_Layer: 0
m_Name: ARFWorldLink
m_TagString: Untagged
......@@ -33,6 +34,20 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2766171691247251799
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1239500166128132140}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 33fce8a1d8d349d47b8565dfe031b6b1, type: 3}
m_Name:
m_EditorClassIdentifier:
mFrom: {fileID: 0}
mTo: {fileID: 0}
--- !u!1 &4451045791079530586
GameObject:
m_ObjectHideFlags: 0
......
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace ETSI.ARF.WorldStorage.UI
{
[ExecuteAlways]
public class LinkVisual : MonoBehaviour
{
public GameObject fromElement, toElement;
private void Update()
{
#if UNITY_EDITOR
if (fromElement != null && toElement != null) transform.position = (fromElement.transform.position + toElement.transform.position) / 2;
#endif
}
void OnDrawGizmos()
{
#if UNITY_EDITOR
if (fromElement != null && toElement != null)
{
// Draws a blue line from this transform to the target
Gizmos.color = Color.blue;
Gizmos.DrawLine(fromElement.transform.position, toElement.transform.position);
}
else
{
Debug.Log("Rien tracer");
}
}
#endif
}
}
fileFormatVersion: 2
guid: 33fce8a1d8d349d47b8565dfe031b6b1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment