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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
            }
+1 −1
Original line number Diff line number Diff line
@@ -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);
            }
+60 −13
Original line number Diff line number Diff line
@@ -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;
        }
    }
+15 −0
Original line number Diff line number Diff line
@@ -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
+3428 −2010

File changed.

Preview size limit exceeded, changes collapsed.

Loading