private static void InitOccluderBoundsIfUnset(SerializedDataSetTrackable serializedDst)
 {
     if (serializedDst.SmartTerrainOccluderBoundsMin == Vector3.zero && serializedDst.SmartTerrainOccluderBoundsMax == Vector3.zero)
     {
         SmartTerrainInitializationTargetEditorExtension.SetOccluderBoundsDefaultValues(serializedDst);
     }
 }
 internal static void DrawSceneGUIForInitializationTarget(SerializedDataSetTrackable serializedDst, bool sizeOnlyKnownAtRuntime)
 {
     if (SmartTerrainInitializationTargetEditorExtension.sTransformHandle != SmartTerrainInitializationTargetEditorExtension.TransformHandle.NONE && Tools.current != Tool.None && Tools.current != Tool.View)
     {
         SmartTerrainInitializationTargetEditorExtension.sTransformHandle = SmartTerrainInitializationTargetEditorExtension.TransformHandle.NONE;
     }
     using (serializedDst.Edit())
     {
         if (serializedDst.InitializeSmartTerrain && serializedDst.ReconstructionToInitialize != null && (!sizeOnlyKnownAtRuntime || !serializedDst.AutoSetOccluderFromTargetSize) && serializedDst.IsSmartTerrainOccluderOffset)
         {
             using (List <GameObject> .Enumerator enumerator = serializedDst.GetGameObjects().GetEnumerator())
             {
                 while (enumerator.MoveNext())
                 {
                     Transform transform = enumerator.Current.transform;
                     if (SmartTerrainInitializationTargetEditorExtension.sTransformHandle == SmartTerrainInitializationTargetEditorExtension.TransformHandle.TRANSLATION)
                     {
                         Handles.matrix = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one);
                         Vector3 smartTerrainOccluderOffset = serializedDst.SmartTerrainOccluderOffset;
                         Vector3 vector = Handles.PositionHandle(smartTerrainOccluderOffset, serializedDst.SmartTerrainOccluderRotation);
                         if (vector != smartTerrainOccluderOffset)
                         {
                             serializedDst.SmartTerrainOccluderOffset = vector;
                         }
                     }
                     if (SmartTerrainInitializationTargetEditorExtension.sTransformHandle == SmartTerrainInitializationTargetEditorExtension.TransformHandle.ROTATION)
                     {
                         Vector3 vector2 = transform.rotation * serializedDst.SmartTerrainOccluderOffset;
                         Handles.matrix = Matrix4x4.TRS(transform.position + vector2, transform.rotation, Vector3.one);
                         Quaternion smartTerrainOccluderRotation = serializedDst.SmartTerrainOccluderRotation;
                         Quaternion quaternion = Handles.RotationHandle(smartTerrainOccluderRotation, Vector3.zero);
                         if (quaternion != smartTerrainOccluderRotation)
                         {
                             serializedDst.SmartTerrainOccluderRotation = quaternion;
                         }
                     }
                     Handles.matrix = Matrix4x4.identity;
                 }
             }
         }
     }
 }
        public static void DrawTrackableOptions(SerializedDataSetTrackable serializedObject, bool drawPreserveChildSize = true, bool drawExtendedTracking = true, bool drawSmartTerrain = true)
        {
            if (drawPreserveChildSize)
            {
                EditorGUILayout.PropertyField(serializedObject.PreserveChildSizeProperty, new GUIContent("Preserve child size"), new GUILayoutOption[0]);
            }
            bool flag = SceneManager.Instance.SmartTerrainInitializationEnabled();

            if (drawExtendedTracking)
            {
                if (flag)
                {
                    EditorGUILayout.HelpBox("Extended Tracking cannot be enabled at the same time as Smart Terrain.", MessageType.Info);
                }
                bool enabled = GUI.enabled;
                GUI.enabled = enabled && !flag;
                EditorGUILayout.PropertyField(serializedObject.ExtendedTrackingProperty, new GUIContent("Enable Extended Tracking"), new GUILayoutOption[0]);
                GUI.enabled = enabled;
            }
            if (drawSmartTerrain)
            {
                SmartTerrainInitializationTargetEditorExtension.DrawInspectorForInitializationTarget(serializedObject, false);
            }
        }
        public static bool DrawDatasetTrackableInspector(SerializedDataSetTrackable serializedObject, bool resetTrackable, Func <ConfigData, string[]> getTrackableNamesFunc, string trackableLabel)
        {
            bool result = false;

            string[] array = new string[ConfigDataManager.Instance.NumConfigDataObjects];
            ConfigDataManager.Instance.GetConfigDataNames(array);
            int num = -1;

            if (!serializedObject.DataSetPathProperty.hasMultipleDifferentValues)
            {
                num = VuforiaUtilities.GetIndexFromString(serializedObject.GetDataSetName(), array);
                if (num < 0)
                {
                    num = 0;
                }
            }
            EditorGUI.BeginChangeCheck();
            int  num2 = EditorGUILayout.Popup("Database", num, array, new GUILayoutOption[0]);
            bool flag = EditorGUI.EndChangeCheck();

            if (resetTrackable && num2 < 0)
            {
                num2 = 0;
                flag = true;
            }
            if (num2 >= 0)
            {
                string     dataSetName = array[num2];
                ConfigData configData  = ConfigDataManager.Instance.GetConfigData(dataSetName);
                string[]   array2      = getTrackableNamesFunc(configData);
                int        num3        = -1;
                if (!serializedObject.TrackableNameProperty.hasMultipleDifferentValues)
                {
                    num3 = VuforiaUtilities.GetIndexFromString(serializedObject.TrackableName, array2);
                    if (num3 < 0)
                    {
                        num3 = 0;
                    }
                }
                if (flag)
                {
                    num3 = 0;
                }
                EditorGUI.BeginChangeCheck();
                int  num4  = EditorGUILayout.Popup(trackableLabel, num3, array2, new GUILayoutOption[0]);
                bool flag2 = EditorGUI.EndChangeCheck();
                if (array2.Length != 0 && (flag | flag2 | resetTrackable))
                {
                    result = true;
                    serializedObject.DataSetPath = "";
                    serializedObject.DataSetPath = VuforiaRuntimeUtilities.StripStreamingAssetsFromPath(ConfigDataManager.Instance.GetConfigData(array[num2]).FullPath);
                    if (num4 >= 0)
                    {
                        string trackableName = array2[num4];
                        serializedObject.TrackableName = "";
                        serializedObject.TrackableName = trackableName;
                    }
                }
            }
            else
            {
                EditorGUILayout.Popup(trackableLabel, -1, new string[0], new GUILayoutOption[0]);
            }
            return(result);
        }
 private static void SetOccluderBoundsDefaultValues(SerializedDataSetTrackable serializedDst)
 {
     serializedDst.SetDefaultOccluderBounds();
 }
        internal static void DrawInspectorForInitializationTarget(SerializedDataSetTrackable serializedDst, bool sizeOnlyKnownAtRuntime)
        {
            if (serializedDst.InitializeSmartTerrain)
            {
                GUILayout.Box("", new GUILayoutOption[]
                {
                    GUILayout.ExpandWidth(true),
                    GUILayout.Height(1f)
                });
            }
            bool flag = SceneManager.Instance.ExtendedTrackingEnabledOnATarget();

            if (flag)
            {
                EditorGUILayout.HelpBox("Smart Terrain cannot be enabled at the same time as Extended Tracking.", MessageType.Info);
            }
            EditorGUILayout.BeginHorizontal(new GUILayoutOption[0]);
            bool enabled = GUI.enabled;

            GUI.enabled = enabled && !flag;
            bool initializeSmartTerrain = serializedDst.InitializeSmartTerrain;

            EditorGUILayout.PropertyField(serializedDst.InitializeSmartTerrainProperty, new GUIContent("Enable Smart Terrain"), new GUILayoutOption[0]);
            GUI.enabled = enabled;
            bool flag2 = false;

            if (initializeSmartTerrain != serializedDst.InitializeSmartTerrain && serializedDst.InitializeSmartTerrain && serializedDst.ReconstructionToInitialize == null)
            {
                ReconstructionFromTargetAbstractBehaviour[] array = (ReconstructionFromTargetAbstractBehaviour[])UnityEngine.Object.FindObjectsOfType(typeof(ReconstructionFromTargetAbstractBehaviour));
                if (array.Length != 0)
                {
                    serializedDst.ReconstructionToInitialize = array[0];
                    SmartTerrainInitializationTargetEditorExtension.InitOccluderBoundsIfUnset(serializedDst);
                }
                else
                {
                    flag2 = true;
                }
            }
            if (serializedDst.InitializeSmartTerrain)
            {
                if (GUILayout.Button("NEW", new GUILayoutOption[0]))
                {
                    flag2 = true;
                }
                if (flag2)
                {
                    UnityEngine.Object @object = AssetDatabase.LoadAssetAtPath("Assets/Vuforia/Prefabs/SmartTerrain/SmartTerrain.prefab", typeof(ReconstructionAbstractBehaviour));
                    if (@object != null)
                    {
                        ReconstructionAbstractBehaviour reconstructionAbstractBehaviour = PrefabUtility.InstantiatePrefab(@object) as ReconstructionAbstractBehaviour;
                        if (reconstructionAbstractBehaviour != null)
                        {
                            ReconstructionFromTargetAbstractBehaviour component = reconstructionAbstractBehaviour.GetComponent <ReconstructionFromTargetAbstractBehaviour>();
                            if (component != null)
                            {
                                GameObject gameObject = serializedDst.GetGameObjects()[0];
                                float      x          = gameObject.transform.lossyScale.x;
                                reconstructionAbstractBehaviour.ScaleEditorMeshesByFactor(x);
                                reconstructionAbstractBehaviour.ScaleEditorPropPositionsByFactor(x);
                                reconstructionAbstractBehaviour.gameObject.name = "SmartTerrain_" + gameObject.name;
                                reconstructionAbstractBehaviour.gameObject.transform.position = gameObject.transform.position;
                                reconstructionAbstractBehaviour.gameObject.transform.rotation = gameObject.transform.rotation;
                                serializedDst.ReconstructionToInitialize = component;
                                SmartTerrainInitializationTargetEditorExtension.InitOccluderBoundsIfUnset(serializedDst);
                                ReconstructionEditor.EditorConfigureTarget(reconstructionAbstractBehaviour, null);
                            }
                        }
                    }
                }
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.Space();
                if (serializedDst.ReconstructionToInitialize != null)
                {
                    EditorGUILayout.HelpBox("Press 'NEW' to instantiate a new Smart Terrain prefab in the scene.", MessageType.None);
                }
                ReconstructionFromTargetAbstractBehaviour reconstructionFromTargetAbstractBehaviour = (ReconstructionFromTargetAbstractBehaviour)EditorGUILayout.ObjectField("Smart Terrain Instance", serializedDst.ReconstructionToInitialize, typeof(ReconstructionFromTargetAbstractBehaviour), true, new GUILayoutOption[0]);
                if (reconstructionFromTargetAbstractBehaviour != serializedDst.ReconstructionToInitialize)
                {
                    serializedDst.ReconstructionToInitialize = reconstructionFromTargetAbstractBehaviour;
                    if (reconstructionFromTargetAbstractBehaviour != null)
                    {
                        SmartTerrainInitializationTargetEditorExtension.InitOccluderBoundsIfUnset(serializedDst);
                    }
                }
                if (!(reconstructionFromTargetAbstractBehaviour != null))
                {
                    serializedDst.InitializeSmartTerrain = false;
                    return;
                }
                if (!sizeOnlyKnownAtRuntime || !serializedDst.AutoSetOccluderFromTargetSize)
                {
                    EditorGUILayout.HelpBox("Change these values to the size of the object you initialize from, e.g. if there is a border around your target.\n The stage inside the occluder box will be ignored during scanning", MessageType.None);
                    serializedDst.SmartTerrainOccluderBoundsMin = EditorGUILayout.Vector3Field("Occluder Bounds Min", serializedDst.SmartTerrainOccluderBoundsMin, new GUILayoutOption[0]);
                    serializedDst.SmartTerrainOccluderBoundsMax = EditorGUILayout.Vector3Field("Occluder Bounds Max", serializedDst.SmartTerrainOccluderBoundsMax, new GUILayoutOption[0]);
                    if (sizeOnlyKnownAtRuntime)
                    {
                        EditorGUILayout.HelpBox("Check this box to automatically set the occluder box depending on the cloud target size at runtime.", MessageType.None);
                        EditorGUILayout.PropertyField(serializedDst.AutoSetOccluderFromTargetSizeProperty, new GUIContent("Automatically to cloud target size"), new GUILayoutOption[0]);
                    }
                    else
                    {
                        EditorGUILayout.Space();
                        if (GUILayout.Button("Reset occluder bounds to target size", new GUILayoutOption[0]))
                        {
                            SmartTerrainInitializationTargetEditorExtension.SetOccluderBoundsDefaultValues(serializedDst);
                        }
                        EditorGUILayout.Space();
                    }
                    EditorGUILayout.HelpBox("Use the surface offset below if the primary surface is not co-planar with the initialization target", MessageType.None);
                    bool isSmartTerrainOccluderOffset = serializedDst.IsSmartTerrainOccluderOffset;
                    EditorGUILayout.PropertyField(serializedDst.IsSmartTerrainOccluderOffsetProperty, new GUIContent("Enable Offset Surface"), new GUILayoutOption[0]);
                    if (isSmartTerrainOccluderOffset != serializedDst.IsSmartTerrainOccluderOffset && serializedDst.IsSmartTerrainOccluderOffset)
                    {
                        Quaternion smartTerrainOccluderRotation = serializedDst.SmartTerrainOccluderRotation;
                        if (smartTerrainOccluderRotation.x == 0f && smartTerrainOccluderRotation.y == 0f && smartTerrainOccluderRotation.z == 0f && smartTerrainOccluderRotation.w == 0f)
                        {
                            serializedDst.SmartTerrainOccluderRotation = Quaternion.identity;
                        }
                    }
                    if (serializedDst.IsSmartTerrainOccluderOffset)
                    {
                        if (SmartTerrainInitializationTargetEditorExtension.sTransformHandle != SmartTerrainInitializationTargetEditorExtension.TransformHandle.NONE && Tools.current != Tool.None && Tools.current != Tool.View)
                        {
                            SmartTerrainInitializationTargetEditorExtension.sTransformHandle = SmartTerrainInitializationTargetEditorExtension.TransformHandle.NONE;
                        }
                        EditorGUILayout.BeginHorizontal(new GUILayoutOption[0]);
                        serializedDst.SmartTerrainOccluderOffset = EditorGUILayout.Vector3Field("Translation", serializedDst.SmartTerrainOccluderOffset, new GUILayoutOption[0]);
                        if (GUILayout.Button(((SmartTerrainInitializationTargetEditorExtension.sTransformHandle == SmartTerrainInitializationTargetEditorExtension.TransformHandle.TRANSLATION) ? "Hide" : "Show") + " Gizmo", new GUILayoutOption[0]))
                        {
                            if (SmartTerrainInitializationTargetEditorExtension.sTransformHandle != SmartTerrainInitializationTargetEditorExtension.TransformHandle.TRANSLATION)
                            {
                                Tools.current = 0;
                                SmartTerrainInitializationTargetEditorExtension.sTransformHandle = SmartTerrainInitializationTargetEditorExtension.TransformHandle.TRANSLATION;
                            }
                            else
                            {
                                SmartTerrainInitializationTargetEditorExtension.sTransformHandle = SmartTerrainInitializationTargetEditorExtension.TransformHandle.NONE;
                            }
                        }
                        EditorGUILayout.EndHorizontal();
                        EditorGUILayout.BeginHorizontal(new GUILayoutOption[0]);
                        Vector3 eulerAngles = serializedDst.SmartTerrainOccluderRotation.eulerAngles;
                        Vector3 vector      = EditorGUILayout.Vector3Field("Rotation", eulerAngles, new GUILayoutOption[0]);
                        if (vector != eulerAngles)
                        {
                            serializedDst.SmartTerrainOccluderRotation = Quaternion.Euler(vector);
                        }
                        if (GUILayout.Button(((SmartTerrainInitializationTargetEditorExtension.sTransformHandle == SmartTerrainInitializationTargetEditorExtension.TransformHandle.ROTATION) ? "Hide" : "Show") + " Gizmo", new GUILayoutOption[0]))
                        {
                            if (SmartTerrainInitializationTargetEditorExtension.sTransformHandle != SmartTerrainInitializationTargetEditorExtension.TransformHandle.ROTATION)
                            {
                                Tools.current = 0;
                                SmartTerrainInitializationTargetEditorExtension.sTransformHandle = SmartTerrainInitializationTargetEditorExtension.TransformHandle.ROTATION;
                            }
                            else
                            {
                                SmartTerrainInitializationTargetEditorExtension.sTransformHandle = SmartTerrainInitializationTargetEditorExtension.TransformHandle.NONE;
                            }
                        }
                        EditorGUILayout.EndHorizontal();
                        return;
                    }
                }
            }
            else
            {
                EditorGUILayout.EndHorizontal();
            }
        }