public override void OnInspectorGUI() { DrawDefaultInspector(); AutoProjector projector = target as AutoProjector; Component predictor = (Component)EditorGUILayout.ObjectField("Predictor", projector.predictor as Component, typeof(Component), true); if (predictor != projector.predictor) { if (predictor == null) { Undo.RecordObject(projector, "Inspector"); projector.predictor = null; EditorUtility.SetDirty(projector); } else { Component[] components = predictor.GetComponents <Component>(); for (int i = 0; i < components.Length; ++i) { if (components[i] is ITransformPredictor) { Undo.RecordObject(projector, "Inspector"); projector.predictor = components[i] as ITransformPredictor; EditorUtility.SetDirty(projector); break; } } } } }
bool OnGUIAttachAutoProjectorToSceneObjects() { if (m_sceneProjectors == null) { m_sceneProjectors = Object.FindObjectsOfType <Projector>(); } if (m_sceneProjectors != null && 0 < m_sceneProjectors.Length) { GUILayout.TextArea("AutoProjector component is necessary for a projector to work with ProjectorManager.\n" + "Check the checkboxes below to add AutoProjector component."); } else { GUILayout.TextArea("AutoProjector component is necessary for a projector to work with ProjectorManager."); } EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("List of Projectors in the Scene"); if (GUILayout.Button("Update")) { m_sceneProjectors = Object.FindObjectsOfType <Projector>(); } EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel++; m_scrollPosition = EditorGUILayout.BeginScrollView(m_scrollPosition); bool allProjectorsHaveAutoProjector = true; if (m_sceneProjectors != null && 0 < m_sceneProjectors.Length) { { var __array6 = m_sceneProjectors; var __arrayLength6 = __array6.Length; for (int __i6 = 0; __i6 < __arrayLength6; ++__i6) { var projector = (Projector)__array6[__i6]; { EditorGUILayout.BeginHorizontal(); AutoProjector autoProjector = projector.GetComponent <AutoProjector>(); bool bAdded = autoProjector != null; if (!bAdded) { allProjectorsHaveAutoProjector = false; } EditorGUILayout.ObjectField(projector, typeof(Projector), true); bool b = EditorGUILayout.Toggle(bAdded); if (b != bAdded) { if (b) { Undo.AddComponent <AutoProjector>(projector.gameObject); } else { Undo.DestroyObjectImmediate(autoProjector); } EditorUtility.SetDirty(projector.gameObject); } EditorGUILayout.EndHorizontal(); } } } } EditorGUILayout.EndScrollView(); EditorGUI.indentLevel--; if (m_sceneProjectors != null && 0 < m_sceneProjectors.Length) { EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (allProjectorsHaveAutoProjector) { GUI.enabled = false; } if (GUILayout.Button("Add AutoProjector component to all the projectors in the scene")) { { var __array7 = m_sceneProjectors; var __arrayLength7 = __array7.Length; for (int __i7 = 0; __i7 < __arrayLength7; ++__i7) { var projector = (Projector)__array7[__i7]; { AutoProjector autoProjector = projector.GetComponent <AutoProjector>(); if (autoProjector == null) { Undo.AddComponent <AutoProjector>(projector.gameObject); EditorUtility.SetDirty(projector.gameObject); } } } } } GUI.enabled = true; EditorGUILayout.EndHorizontal(); } m_isAbleToGoNext = true; return(true); }
bool OnGUIAttachAutoProjectorToPrefabs() { m_searchFolder = EditorGUILayout.TextField("Search Folder", m_searchFolder); EditorGUILayout.TextArea("Use semicolon \";\" as a separator to specify multiple folders"); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Search for Prefab")) { string[] searchFolders = m_searchFolder.Split(new char[] { ',', ';' }); for (int i = 0; i < searchFolders.Length; ++i) { searchFolders[i] = searchFolders[i].Trim(); } string[] gameObjects = AssetDatabase.FindAssets("t:GameObject", searchFolders); if (m_projectorPrefabs == null) { m_projectorPrefabs = new List <GameObject>(); } m_projectorPrefabs.Clear(); m_scrollPosition = new Vector2(0, 0); { var __array3 = gameObjects; var __arrayLength3 = __array3.Length; for (int __i3 = 0; __i3 < __arrayLength3; ++__i3) { var guid = (string)__array3[__i3]; { string path = AssetDatabase.GUIDToAssetPath(guid); GameObject prefab = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)) as GameObject; GameObject go = PrefabUtility.InstantiatePrefab(prefab) as GameObject; Projector[] projectors = go.GetComponentsInChildren <Projector>(true); if (projectors != null && 0 < projectors.Length) { { var __array10 = projectors; var __arrayLength10 = __array10.Length; for (int __i10 = 0; __i10 < __arrayLength10; ++__i10) { var projector = (Projector)__array10[__i10]; { m_projectorPrefabs.Add(PrefabUtility.GetPrefabParent(projector.gameObject) as GameObject); } } } } Object.DestroyImmediate(go); } } } } EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); if (m_projectorPrefabs != null && 0 < m_projectorPrefabs.Count) { GUILayout.TextArea("AutoProjector component is necessary for a projector to work with ProjectorManager.\n" + "Check the checkboxes below to add AutoProjector component."); } else { GUILayout.TextArea("AutoProjector component is necessary for a projector to work with ProjectorManager."); } EditorGUI.indentLevel++; m_scrollPosition = EditorGUILayout.BeginScrollView(m_scrollPosition); bool allProjectorsHaveAutoProjector = true; if (m_projectorPrefabs != null) { { var __list4 = m_projectorPrefabs; var __listCount4 = __list4.Count; for (int __i4 = 0; __i4 < __listCount4; ++__i4) { var go = (GameObject)__list4[__i4]; { EditorGUILayout.BeginHorizontal(); AutoProjector autoProjector = go.GetComponent <AutoProjector>(); bool bAdded = autoProjector != null; if (!bAdded) { allProjectorsHaveAutoProjector = false; } EditorGUILayout.ObjectField(go, typeof(GameObject), true); GUILayout.Label("in"); EditorGUILayout.ObjectField(PrefabUtility.FindPrefabRoot(go), typeof(GameObject), true); bool b = EditorGUILayout.Toggle(bAdded); if (b != bAdded) { if (b) { Undo.AddComponent <AutoProjector>(go); } else { Undo.DestroyObjectImmediate(autoProjector); } EditorUtility.SetDirty(go); } EditorGUILayout.EndHorizontal(); } } } if (m_projectorPrefabs.Count == 0) { EditorGUILayout.LabelField("Nothing found."); } } EditorGUILayout.EndScrollView(); EditorGUI.indentLevel--; if (m_projectorPrefabs != null && 0 < m_projectorPrefabs.Count) { EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (allProjectorsHaveAutoProjector) { GUI.enabled = false; } if (GUILayout.Button("Add AutoProjector component to all the projector prefabs")) { { var __list5 = m_projectorPrefabs; var __listCount5 = __list5.Count; for (int __i5 = 0; __i5 < __listCount5; ++__i5) { var go = (GameObject)__list5[__i5]; { AutoProjector autoProjector = go.GetComponent <AutoProjector>(); if (autoProjector == null) { Undo.AddComponent <AutoProjector>(go); EditorUtility.SetDirty(go); } } } } } GUI.enabled = true; EditorGUILayout.EndHorizontal(); } m_isAbleToGoNext = true;//m_projectorPrefabs != null; return(true); }