You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/Plugins/Easy Save 3/Scripts/ES3ReferenceMgr.cs

118 lines
4.1 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();
RemoveNullValues();
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
}