using FishNet.Component.ColliderRollback; using FishNet.Managing; using FishNet.Managing.Client; using FishNet.Managing.Logging; using FishNet.Managing.Scened; using FishNet.Managing.Server; using FishNet.Managing.Statistic; using FishNet.Managing.Timing; using FishNet.Managing.Transporting; using FishNet.Utility; using System.Linq; using UnityEngine; namespace FishNet { /// /// Used to globally get information from the first found instance of NetworkManager. /// public static class InstanceFinder { #region Public. /// /// Returns the first found NetworkManager instance. /// public static NetworkManager NetworkManager { get { if (_networkManager == null) { int managersCount = NetworkManager.Instances.Count; //At least one manager. if (managersCount > 0) { _networkManager = NetworkManager.Instances.First(); if (managersCount > 1) { if (_networkManager.CanLog(LoggingType.Warning)) Debug.LogWarning($"Multiple NetworkManagers found, the first result will be returned. If you only wish to have one NetworkManager then uncheck 'Allow Multiple' within your NetworkManagers."); } } //No managers. else { //If application is quitting return null without logging. if (ApplicationState.IsQuitting()) return null; Debug.Log($"NetworkManager not found in any open scenes."); } } return _networkManager; } } /// /// Returns the first instance of ServerManager. /// public static ServerManager ServerManager { get { NetworkManager nm = NetworkManager; return (nm == null) ? null : nm.ServerManager; } } /// /// Returns the first instance of ClientManager. /// public static ClientManager ClientManager { get { NetworkManager nm = NetworkManager; return (nm == null) ? null : nm.ClientManager; } } /// /// Returns the first instance of TransportManager. /// public static TransportManager TransportManager { get { NetworkManager nm = NetworkManager; return (nm == null) ? null : nm.TransportManager; } } /// /// Returns the first instance of TimeManager. /// public static TimeManager TimeManager { get { NetworkManager nm = NetworkManager; return (nm == null) ? null : nm.TimeManager; } } /// /// Returns the first instance of SceneManager. /// public static SceneManager SceneManager { get { NetworkManager nm = NetworkManager; return (nm == null) ? null : nm.SceneManager; } } /// /// Returns the first instance of RollbackManager. /// public static RollbackManager RollbackManager { get { NetworkManager nm = NetworkManager; return (nm == null) ? null : nm.RollbackManager; } } /// /// Returns the first instance of StatisticsManager. /// public static StatisticsManager StatisticsManager { get { NetworkManager nm = NetworkManager; return (nm == null) ? null : nm.StatisticsManager; } } /// /// True if the server is active. /// public static bool IsServer => (NetworkManager == null) ? false : NetworkManager.IsServer; /// /// True if only the server is active. /// public static bool IsServerOnly => (NetworkManager == null) ? false : NetworkManager.IsServerOnly; /// /// True if the client is active and authenticated. /// public static bool IsClient => (NetworkManager == null) ? false : NetworkManager.IsClient; /// /// True if only the client is active and authenticated. /// public static bool IsClientOnly => (NetworkManager == null) ? false : NetworkManager.IsClientOnly; /// /// True if client and server are active. /// public static bool IsHost => (NetworkManager == null) ? false : NetworkManager.IsHost; /// /// True if client nor server are active. /// public static bool IsOffline => (NetworkManager == null) ? true : (!NetworkManager.IsServer && !NetworkManager.IsClient); #endregion #region Private. /// /// NetworkManager instance. /// private static NetworkManager _networkManager; #endregion } }