using System.Collections.Generic; using UnityEngine; using UnityEditor; namespace Passer { using Humanoid; [CustomEditor(typeof(SiteNavigator))] public class SiteNavigator_Editor : Editor { protected SiteNavigator siteNavigator; protected string[] siteNames; #region Enable protected virtual void OnEnable() { siteNavigator = (SiteNavigator)target; InitializeSiteNames(); } protected virtual void InitializeSiteNames() { HumanoidVisitors.CheckScenes(); List humanoidVisitors = HumanoidVisitors.visitors; EditorBuildSettingsScene[] editorBuildSettingsScenes = EditorBuildSettings.scenes; int siteCount = editorBuildSettingsScenes.Length; // - HumanoidVisitors.visitors.Count; List siteList = new List(); siteList.Add("-none-"); for (int i = 0; i < siteCount; i++) { if (!editorBuildSettingsScenes[i].enabled) { continue; } string sceneName = editorBuildSettingsScenes[i].path; int lastSlash = sceneName.LastIndexOf('/'); sceneName = sceneName.Substring(lastSlash + 1); sceneName = sceneName.Substring(0, sceneName.Length - 6); // remove .unity // Does not work at the moment the visitors are all scenes //bool isVisitor = IsHumanoidVisitor(sceneName, humanoidVisitors); //if (!isVisitor) { siteList.Add(sceneName); //} } siteNames = siteList.ToArray();//new string[siteCount]; } private bool IsHumanoidVisitor(string sceneName, List humanoidVisitors) { foreach(string visitor in humanoidVisitors) { int lastSlash = visitor.LastIndexOf('/'); string visitorSceneName = visitor.Substring(lastSlash + 1, visitor.Length - lastSlash - 7); if (visitorSceneName == sceneName) return true; } return false; } #endregion Enable #region Inspector public override void OnInspectorGUI() { serializedObject.Update(); LoadSiteAtStartInspector(); StartSiteInspector(); StartSceneInspector(); serializedObject.ApplyModifiedProperties(); } protected void LoadSiteAtStartInspector() { GUIContent text = new GUIContent( "Load Site at Start", "" ); SerializedProperty loadSiteAtStartProp = serializedObject.FindProperty(nameof(siteNavigator.loadSiteAtStart)); loadSiteAtStartProp.boolValue = EditorGUILayout.Toggle(text, loadSiteAtStartProp.boolValue); } protected void StartSiteInspector() { GUIContent text = new GUIContent( "Start Site", "" ); SerializedProperty startSiteProp = serializedObject.FindProperty(nameof(siteNavigator.startSite)); startSiteProp.stringValue = EditorGUILayout.TextField(text, startSiteProp.stringValue); } protected void StartSceneInspector() { GUIContent text = new GUIContent( "Start Scene", "" ); SerializedProperty startSceneProp = serializedObject.FindProperty(nameof(siteNavigator.startScene)); if (siteNames == null || siteNames.Length == 0) { startSceneProp.stringValue = ""; return; } int ix = 0; for (; ix < siteNames.Length; ix++) { if (siteNames[ix] == startSceneProp.stringValue) break; } if (ix == siteNames.Length) ix = 0; if (Application.isPlaying) { using (new EditorGUI.DisabledScope(true)) { EditorGUILayout.Popup(text, ix, siteNames); } } else { ix = EditorGUILayout.Popup(text, ix, siteNames); startSceneProp.stringValue = siteNames[ix]; } } #endregion Inspector } }