/
SceneReferenceResolverEditor.cs
126 lines (103 loc) · 4.95 KB
/
SceneReferenceResolverEditor.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using Bayat.Core.EditorWindows;
using UnityEditor;
using UnityEngine;
namespace Bayat.Core
{
[CustomEditor(typeof(SceneReferenceResolver), true)]
public class SceneReferenceResolverEditor : Editor
{
protected SceneReferenceResolver sceneReferenceResolver;
protected SerializedProperty mode;
protected SerializedProperty updateOnEnteringPlayMode;
protected SerializedProperty updateOnSceneSaving;
protected SerializedProperty refreshDependenciesTimeoutInSeconds;
protected SerializedProperty ignoredTags;
protected SerializedProperty ignoreStatic;
protected bool foldout = false;
private void OnEnable()
{
this.sceneReferenceResolver = (SceneReferenceResolver)target;
this.mode = this.serializedObject.FindProperty("mode");
this.updateOnEnteringPlayMode = this.serializedObject.FindProperty("updateOnEnteringPlayMode");
this.updateOnSceneSaving = this.serializedObject.FindProperty("updateOnSceneSaving");
this.refreshDependenciesTimeoutInSeconds = this.serializedObject.FindProperty("refreshDependenciesTimeoutInSeconds");
this.ignoredTags = this.serializedObject.FindProperty("ignoredTags");
this.ignoreStatic = this.serializedObject.FindProperty("ignoreStatic");
}
public override void OnInspectorGUI()
{
//base.OnInspectorGUI();
if (sceneReferenceResolver == null)
{
return;
}
this.serializedObject.Update();
EditorGUILayout.Space();
EditorGUILayout.PropertyField(this.mode);
EditorGUILayout.PropertyField(this.ignoredTags);
EditorGUILayout.PropertyField(this.ignoreStatic);
EditorGUI.BeginDisabledGroup(this.sceneReferenceResolver.Mode == ReferenceResolverMode.Manual);
EditorGUILayout.PropertyField(this.updateOnEnteringPlayMode);
EditorGUILayout.PropertyField(this.updateOnSceneSaving);
EditorGUI.EndDisabledGroup();
EditorGUILayout.PropertyField(this.refreshDependenciesTimeoutInSeconds);
GUILayout.Label(string.Format("{0} references", this.sceneReferenceResolver.GuidToReference.Count), EditorStyles.boldLabel);
if (GUILayout.Button("Open Reference Manager"))
{
new SceneReferenceManagerWindow().Show();
}
if (GUILayout.Button("Refresh References"))
{
this.sceneReferenceResolver.RefreshDependencies();
}
if (GUILayout.Button("Remove Invalid References"))
{
this.sceneReferenceResolver.RemoveInvalidReferences();
}
//var availableDependencies = this.sceneReferenceResolver.AvailableDependencies;
//var currentDependencies = this.sceneReferenceResolver.SceneDependencies;
//GUILayout.Label(string.Format("Available: {0}", availableDependencies.Count));
//GUILayout.Label(string.Format("Current: {0}", currentDependencies.Count));
//if (availableDependencies.Count > 0)
//{
// EditorGUILayout.HelpBox(string.Format("There are {0} more dependencies available to reference.", availableDependencies.Count), MessageType.Warning);
//}
//if (GUILayout.Button("Refresh Available Dependencies"))
//{
// this.sceneReferenceResolver.GetAvailableDependencies();
//}
//if (this.sceneReferenceResolver.HasNullReferences())
//{
// EditorGUILayout.HelpBox("There are null references in the scene dependencies, remove them to stop causing further issues and errors.", MessageType.Warning);
// if (GUILayout.Button("Remove Null References"))
// {
// this.sceneReferenceResolver.RemoveNullReferences();
// }
//}
this.serializedObject.ApplyModifiedProperties();
}
public virtual void MigrateDatabase()
{
}
//public List<UnityObject> GetAvailableDependencies()
//{
// var sceneDependencies = new List<UnityObject>();
// var sceneObjects = SceneManager.GetActiveScene().GetRootGameObjects();
// var dependencies = EditorUtility.CollectDependencies(sceneObjects);
// foreach (var dependency in dependencies)
// {
// if (EditorUtility.IsPersistent(dependency))
// {
// continue;
// }
// sceneDependencies.Add(dependency);
// }
// return sceneDependencies;
//}
//public UnityObject[] GetAvailableHierarchyDependencies()
//{
// var sceneObjects = SceneManager.GetActiveScene().GetRootGameObjects();
// return EditorUtility.CollectDeepHierarchy(sceneObjects);
//}
}
}