forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			126 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
//#if UNITY_EDITOR
 | 
						|
//using FishNet.Managing.Object;
 | 
						|
//using FishNet.Object;
 | 
						|
//using System.Collections.Generic;
 | 
						|
//using System.IO;
 | 
						|
//using UnityEditor;
 | 
						|
//using UnityEngine;
 | 
						|
 | 
						|
//namespace FishNet.Editing
 | 
						|
//{
 | 
						|
 | 
						|
//    [InitializeOnLoad]
 | 
						|
//    internal static class DefaultPrefabsFinder
 | 
						|
//    {
 | 
						|
//        /// <summary>
 | 
						|
//        /// True if initialized.
 | 
						|
//        /// </summary>
 | 
						|
//        [System.NonSerialized]
 | 
						|
//        private static bool _initialized;
 | 
						|
//        /// <summary>
 | 
						|
//        /// Found default prefabs.
 | 
						|
//        /// </summary>
 | 
						|
//        private static DefaultPrefabObjects _defaultPrefabs;
 | 
						|
 | 
						|
//        static DefaultPrefabsFinder()
 | 
						|
//        {
 | 
						|
//            EditorApplication.update += InitializeOnce;
 | 
						|
//        }
 | 
						|
 | 
						|
//        /// <summary>
 | 
						|
//        /// Finds and sets the default prefabs reference.
 | 
						|
//        /// </summary>
 | 
						|
//        internal static DefaultPrefabObjects GetDefaultPrefabsFile(out bool justPopulated)
 | 
						|
//        {
 | 
						|
//            if (_defaultPrefabs == null)
 | 
						|
//            {
 | 
						|
//                List<UnityEngine.Object> results = Finding.GetScriptableObjects<DefaultPrefabObjects>(true, true);
 | 
						|
//                if (results.Count > 0)
 | 
						|
//                    _defaultPrefabs = (DefaultPrefabObjects)results[0];
 | 
						|
//            }
 | 
						|
 | 
						|
//            justPopulated = false;
 | 
						|
//            //If not found then try to create file.
 | 
						|
//            if (_defaultPrefabs == null)
 | 
						|
//            {
 | 
						|
//                if (DefaultPrefabObjects.CanAutomate)
 | 
						|
//                {
 | 
						|
//                    DefaultPrefabObjects dpo = ScriptableObject.CreateInstance<DefaultPrefabObjects>();
 | 
						|
//                    //Get save directory.
 | 
						|
//                    string savePath = Finding.GetFishNetRuntimePath(true);
 | 
						|
//                    AssetDatabase.CreateAsset(dpo, Path.Combine(savePath, $"{nameof(DefaultPrefabObjects)}.asset"));
 | 
						|
//                }
 | 
						|
//                else
 | 
						|
//                {
 | 
						|
//                    Debug.LogError($"Cannot create DefaultPrefabs because auto create is blocked.");
 | 
						|
//                }
 | 
						|
//            }
 | 
						|
 | 
						|
//            //If still null.
 | 
						|
//            if (_defaultPrefabs == null)
 | 
						|
//                Debug.LogWarning($"DefaultPrefabObjects not found. Prefabs list will not be automatically populated.");
 | 
						|
//            else
 | 
						|
//                justPopulated = PopulateDefaultPrefabs();
 | 
						|
 | 
						|
//            return _defaultPrefabs;
 | 
						|
//        }
 | 
						|
 | 
						|
//        /// <summary>
 | 
						|
//        /// Initializes the default prefab.
 | 
						|
//        /// </summary>
 | 
						|
//        private static void InitializeOnce()
 | 
						|
//        {
 | 
						|
//            if (_initialized)
 | 
						|
//                return;
 | 
						|
//            _initialized = true;
 | 
						|
 | 
						|
//            Finding.GetFishNetRuntimePath(false);
 | 
						|
//            GetDefaultPrefabsFile(out _);
 | 
						|
 | 
						|
//            if (_defaultPrefabs != null)
 | 
						|
//            {
 | 
						|
//                //Populate any missing.
 | 
						|
//                if (_defaultPrefabs.GetObjectCount() == 0)
 | 
						|
//                    PopulateDefaultPrefabs();
 | 
						|
//            }
 | 
						|
//        }
 | 
						|
 | 
						|
 | 
						|
//        /// <summary>
 | 
						|
//        /// Finds all NetworkObjects in project and adds them to defaultPrefabs.
 | 
						|
//        /// </summary>
 | 
						|
//        /// <returns>True if was populated from assets.</returns>
 | 
						|
//        internal static bool PopulateDefaultPrefabs(bool log = true, bool clear = false)
 | 
						|
//        {
 | 
						|
//            if (_defaultPrefabs == null)
 | 
						|
//                return false;
 | 
						|
//            if (!DefaultPrefabObjects.CanAutomate)
 | 
						|
//                return false;
 | 
						|
//            if (clear)
 | 
						|
//                _defaultPrefabs.Clear();
 | 
						|
//            if (_defaultPrefabs.GetObjectCount() > 0)
 | 
						|
//                return false;
 | 
						|
 | 
						|
//            List<GameObject> gameObjects = Finding.GetGameObjects(true, true, false);
 | 
						|
//            foreach (GameObject go in gameObjects)
 | 
						|
//            {
 | 
						|
//                if (go.TryGetComponent(out NetworkObject nob))
 | 
						|
//                    _defaultPrefabs.AddObject(nob);
 | 
						|
//            }
 | 
						|
 | 
						|
//            _defaultPrefabs.Sort();
 | 
						|
 | 
						|
//            int entriesAdded = _defaultPrefabs.GetObjectCount();
 | 
						|
//            //Only print if some were added.
 | 
						|
//            if (log && entriesAdded > 0)
 | 
						|
//                Debug.Log($"Default prefabs was populated with {entriesAdded} prefabs.");
 | 
						|
 | 
						|
//            EditorUtility.SetDirty(_defaultPrefabs);
 | 
						|
//            return true;
 | 
						|
//        }
 | 
						|
 | 
						|
//    }
 | 
						|
 | 
						|
 | 
						|
//}
 | 
						|
//#endif |