119 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| using ES3Internal;
 | |
| using UnityEngine.SceneManagement;
 | |
| #if UNITY_EDITOR
 | |
| using UnityEditor;
 | |
| using UnityEditor.SceneManagement;
 | |
| using System.Reflection;
 | |
| using System;
 | |
| #endif
 | |
| 
 | |
| public class ES3ReferenceMgr : ES3ReferenceMgrBase
 | |
| {
 | |
| #if UNITY_EDITOR
 | |
|     [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | |
|     public void RefreshDependencies(bool isEnteringPlayMode = false)
 | |
|     {
 | |
|         ES3ReferenceMgrBase.isEnteringPlayMode = isEnteringPlayMode;
 | |
| 
 | |
|         // If we're not adding all prefabs to the manager, clear the prefabs array each time we refresh the dependencies.
 | |
|         if (!ES3Settings.defaultSettingsScriptableObject.addAllPrefabsToManager)
 | |
|             prefabs.Clear();
 | |
| 
 | |
|         // This will get the dependencies for all GameObjects and Components from the active scene.
 | |
|         AddDependencies(this.gameObject.scene.GetRootGameObjects());
 | |
|         AddPrefabsToManager();
 | |
|         RemoveNullOrInvalidValues();
 | |
| 
 | |
|         ES3ReferenceMgrBase.isEnteringPlayMode = false;
 | |
|     }
 | |
| 
 | |
|     [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | |
|     public void Optimize()
 | |
|     {
 | |
|         var dependencies = CollectDependencies(this.gameObject.scene.GetRootGameObjects());
 | |
|         var notDependenciesOfScene = new HashSet<UnityEngine.Object>();
 | |
| 
 | |
|         foreach (var kvp in idRef)
 | |
|             if (!dependencies.Contains(kvp.Value))
 | |
|                 notDependenciesOfScene.Add(kvp.Value);
 | |
| 
 | |
|         foreach (var obj in notDependenciesOfScene)
 | |
|         {
 | |
|             Remove(obj);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | |
|     public void AddDependencies(UnityEngine.Object[] objs)
 | |
|     {
 | |
|         for (int i = 0; i < objs.Length; i++)
 | |
|         {
 | |
|             var obj = objs[i];
 | |
| 
 | |
|             if (obj.name == "Easy Save 3 Manager")
 | |
|                 continue;
 | |
| 
 | |
|             var dependencies = CollectDependencies(obj);
 | |
| 
 | |
|             foreach (var dependency in dependencies)
 | |
|             {
 | |
|                 if (dependency != null)
 | |
|                 {
 | |
|                     Add(dependency);
 | |
| 
 | |
|                     // Add the prefab if it's referenced by this scene.
 | |
|                     if (dependency.GetType() == typeof(ES3Prefab))
 | |
|                         AddPrefabToManager((ES3Prefab)dependency);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         Undo.RecordObject(this, "Update Easy Save 3 Reference List");
 | |
|     }
 | |
| 
 | |
|     [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | |
|     public void AddDependencies(UnityEngine.Object obj)
 | |
|     {
 | |
|         AddDependencies(new UnityEngine.Object[] { obj });
 | |
|     }
 | |
| 
 | |
|     [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | |
|     public void GeneratePrefabReferences()
 | |
|     {
 | |
|         AddPrefabsToManager();
 | |
|         foreach (var es3Prefab in prefabs)
 | |
|             es3Prefab.GeneratePrefabReferences();
 | |
|     }
 | |
| 
 | |
|     [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | |
|     public void AddPrefabsToManager()
 | |
|     {
 | |
|         if (ES3Settings.defaultSettingsScriptableObject.addAllPrefabsToManager)
 | |
|         {
 | |
|             // Clear any null values. This isn't necessary if we're not adding all prefabs to manager as the list is cleared each time.
 | |
|             if (this.prefabs.RemoveAll(item => item == null) > 0)
 | |
|                 Undo.RecordObject(this, "Update Easy Save 3 Reference List");
 | |
| 
 | |
|             foreach (var es3Prefab in Resources.FindObjectsOfTypeAll<ES3Prefab>())
 | |
|                 AddPrefabToManager(es3Prefab);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 | |
|     private void AddPrefabToManager(ES3Prefab es3Prefab)
 | |
|     {
 | |
|             try
 | |
|             {
 | |
|                 if (es3Prefab != null && EditorUtility.IsPersistent(es3Prefab))
 | |
|                     if(AddPrefab(es3Prefab))
 | |
|                         Undo.RecordObject(this, "Update Easy Save 3 Reference List");
 | |
|                 es3Prefab.GeneratePrefabReferences();
 | |
|             }
 | |
|             catch { }
 | |
|     }
 | |
| #endif
 | |
| }
 |