2022-01-16 05:40:49 +03:00

100 lines
4.0 KiB
C#

using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System;
using System.Linq;
namespace HeurekaGames.AssetHunterPRO
{
public class AH_SceneReferenceWindow : EditorWindow
{
private static AH_SceneReferenceWindow m_window;
private Vector2 scrollPos;
[SerializeField]
private float btnMinWidthSmall = 50;
private List<String> m_allScenesInProject;
private List<String> m_allScenesInBuildSettings;
private List<String> m_allEnabledScenesInBuildSettings;
private List<String> m_allUnreferencedScenes;
private List<String> m_allDisabledScenesInBuildSettings;
private static readonly string WINDOWNAME = "AH Scenes";
[MenuItem("Tools/Asset Hunter PRO/Scene overview")]
[MenuItem("Window/Heureka/Asset Hunter PRO/Scene overview")]
public static void Init()
{
m_window = AH_SceneReferenceWindow.GetWindow<AH_SceneReferenceWindow>(WINDOWNAME, true, typeof(AH_Window));
m_window.titleContent.image = AH_EditorData.Instance.SceneIcon.Icon;
m_window.GetSceneInfo();
}
private void GetSceneInfo()
{
m_allScenesInProject = AH_Utils.GetAllSceneNames().ToList<string>();
m_allScenesInBuildSettings = AH_Utils.GetAllSceneNamesInBuild().ToList<string>();
m_allEnabledScenesInBuildSettings = AH_Utils.GetEnabledSceneNamesInBuild().ToList<string>();
m_allDisabledScenesInBuildSettings = SubtractSceneArrays(m_allScenesInBuildSettings, m_allEnabledScenesInBuildSettings);
m_allUnreferencedScenes = SubtractSceneArrays(m_allScenesInProject, m_allScenesInBuildSettings);
}
//Get the subset of scenes where we subtract "secondary" from "main"
private List<String> SubtractSceneArrays(List<String> main, List<String> secondary)
{
return main.Except<string>(secondary).ToList<string>();
}
private void OnFocus()
{
GetSceneInfo();
}
private void OnGUI()
{
if (!m_window)
Init();
scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
Heureka_WindowStyler.DrawGlobalHeader(Heureka_WindowStyler.clr_Dark, "SCENE REFERENCES");
//Show all used types
EditorGUILayout.BeginVertical();
//Make sure this window has focus to update contents
Repaint();
if (m_allEnabledScenesInBuildSettings.Count == 0)
Heureka_WindowStyler.DrawCenteredMessage(m_window, AH_EditorData.Instance.WindowHeaderIcon.Icon, 310f, 110f, "There are no enabled scenes in build settings");
drawScenes("These scenes are added and enabled in build settings", m_allEnabledScenesInBuildSettings);
drawScenes("These scenes are added to build settings but disabled", m_allDisabledScenesInBuildSettings);
drawScenes("These scenes are not referenced anywhere in build settings", m_allUnreferencedScenes);
EditorGUILayout.EndVertical();
EditorGUILayout.EndScrollView();
}
private void drawScenes(string headerMsg, List<string> scenes)
{
if (scenes.Count > 0)
{
EditorGUILayout.HelpBox(headerMsg, MessageType.Info);
foreach (string scenePath in scenes)
{
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("Ping", GUILayout.Width(btnMinWidthSmall)))
{
Selection.activeObject = AssetDatabase.LoadAssetAtPath(scenePath, typeof(UnityEngine.Object));
EditorGUIUtility.PingObject(Selection.activeObject);
}
EditorGUILayout.LabelField(scenePath);
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.Separator();
}
}
}
}