//#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
// {
// ///
// /// True if initialized.
// ///
// [System.NonSerialized]
// private static bool _initialized;
// ///
// /// Found default prefabs.
// ///
// private static DefaultPrefabObjects _defaultPrefabs;
// static DefaultPrefabsFinder()
// {
// EditorApplication.update += InitializeOnce;
// }
// ///
// /// Finds and sets the default prefabs reference.
// ///
// internal static DefaultPrefabObjects GetDefaultPrefabsFile(out bool justPopulated)
// {
// if (_defaultPrefabs == null)
// {
// List results = Finding.GetScriptableObjects(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();
// //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;
// }
// ///
// /// Initializes the default prefab.
// ///
// 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();
// }
// }
// ///
// /// Finds all NetworkObjects in project and adds them to defaultPrefabs.
// ///
// /// True if was populated from assets.
// 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 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