forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			219 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using FishNet.Component.ColliderRollback;
 | 
						|
using FishNet.Managing;
 | 
						|
using FishNet.Managing.Client;
 | 
						|
using FishNet.Managing.Predicting;
 | 
						|
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;
 | 
						|
using System.Linq;
 | 
						|
using UnityEngine;
 | 
						|
 | 
						|
namespace FishNet
 | 
						|
{
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Used to globally get information from the first found instance of NetworkManager.
 | 
						|
    /// </summary>
 | 
						|
    public static class InstanceFinder
 | 
						|
    {
 | 
						|
 | 
						|
        #region Public.
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the first found NetworkManager instance.
 | 
						|
        /// </summary>
 | 
						|
        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)
 | 
						|
                            _networkManager.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;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the first instance of ServerManager.
 | 
						|
        /// </summary>
 | 
						|
        public static ServerManager ServerManager
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                NetworkManager nm = NetworkManager;
 | 
						|
                return (nm == null) ? null : nm.ServerManager;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the first instance of ClientManager.
 | 
						|
        /// </summary>
 | 
						|
        public static ClientManager ClientManager
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                NetworkManager nm = NetworkManager;
 | 
						|
                return (nm == null) ? null : nm.ClientManager;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the first instance of TransportManager.
 | 
						|
        /// </summary>
 | 
						|
        public static TransportManager TransportManager
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                NetworkManager nm = NetworkManager;
 | 
						|
                return (nm == null) ? null : nm.TransportManager;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the first instance of TimeManager.
 | 
						|
        /// </summary>
 | 
						|
        public static TimeManager TimeManager
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                NetworkManager nm = NetworkManager;
 | 
						|
                return (nm == null) ? null : nm.TimeManager;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the first instance of SceneManager.
 | 
						|
        /// </summary>
 | 
						|
        public static SceneManager SceneManager
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                NetworkManager nm = NetworkManager;
 | 
						|
                return (nm == null) ? null : nm.SceneManager;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the first instance of RollbackManager.
 | 
						|
        /// </summary>
 | 
						|
        public static RollbackManager RollbackManager
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                NetworkManager nm = NetworkManager;
 | 
						|
                return (nm == null) ? null : nm.RollbackManager;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the first instance of PredictionManager.
 | 
						|
        /// </summary>
 | 
						|
        public static PredictionManager PredictionManager
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                NetworkManager nm = NetworkManager;
 | 
						|
                return (nm == null) ? null : nm.PredictionManager;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the first instance of StatisticsManager.
 | 
						|
        /// </summary>
 | 
						|
        public static StatisticsManager StatisticsManager
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                NetworkManager nm = NetworkManager;
 | 
						|
                return (nm == null) ? null : nm.StatisticsManager;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// True if the server is active.
 | 
						|
        /// </summary>
 | 
						|
        public static bool IsServer => (NetworkManager == null) ? false : NetworkManager.IsServer;
 | 
						|
        /// <summary>
 | 
						|
        /// True if only the server is active.
 | 
						|
        /// </summary>
 | 
						|
        public static bool IsServerOnly => (NetworkManager == null) ? false : NetworkManager.IsServerOnly;
 | 
						|
        /// <summary>
 | 
						|
        /// True if the client is active and authenticated.
 | 
						|
        /// </summary>
 | 
						|
        public static bool IsClient => (NetworkManager == null) ? false : NetworkManager.IsClient;
 | 
						|
        /// <summary>
 | 
						|
        /// True if only the client is active and authenticated.
 | 
						|
        /// </summary>
 | 
						|
        public static bool IsClientOnly => (NetworkManager == null) ? false : NetworkManager.IsClientOnly;
 | 
						|
        /// <summary>
 | 
						|
        /// True if client and server are active.
 | 
						|
        /// </summary>
 | 
						|
        public static bool IsHost => (NetworkManager == null) ? false : NetworkManager.IsHost;
 | 
						|
        /// <summary>
 | 
						|
        /// True if client nor server are active.
 | 
						|
        /// </summary>
 | 
						|
        public static bool IsOffline => (_networkManager == null) ? true : (!NetworkManager.IsServer && !NetworkManager.IsClient);
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Private.
 | 
						|
        /// <summary>
 | 
						|
        /// NetworkManager instance.
 | 
						|
        /// </summary>
 | 
						|
        private static NetworkManager _networkManager;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Registered components
 | 
						|
        /// <summary>
 | 
						|
        /// Registers to invoke an action when a specified component becomes registered. Action will invoke immediately if already registered.
 | 
						|
        /// </summary>
 | 
						|
        /// <typeparam name="T">Component type.</typeparam>
 | 
						|
        /// <param name="handler">Action to invoke.</param>
 | 
						|
        public static void RegisterInvokeOnInstance<T>(Action<UnityEngine.Component> handler) where T : UnityEngine.Component => NetworkManager?.RegisterInvokeOnInstance<T>(handler);
 | 
						|
        /// <summary>
 | 
						|
        /// Unrgisters to invoke an action when a specified component becomes registered. Action will invoke immediately if already registered.
 | 
						|
        /// </summary>
 | 
						|
        /// <typeparam name="T">Component type.</typeparam>
 | 
						|
        /// <param name="handler">Action to invoke.</param>
 | 
						|
        public static void UnregisterInvokeOnInstance<T>(Action<UnityEngine.Component> handler) where T : UnityEngine.Component => NetworkManager?.UnregisterInvokeOnInstance<T>(handler);
 | 
						|
        /// <summary>
 | 
						|
        /// Returns class of type if found within CodegenBase classes.
 | 
						|
        /// </summary>
 | 
						|
        /// <typeparam name="T"></typeparam>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static T GetInstance<T>() where T : UnityEngine.Component => NetworkManager?.GetInstance<T>();
 | 
						|
        /// <summary>
 | 
						|
        /// Registers a new component to this NetworkManager.
 | 
						|
        /// </summary>
 | 
						|
        /// <typeparam name="T">Type to register.</typeparam>
 | 
						|
        /// <param name="component">Reference of the component being registered.</param>
 | 
						|
        /// <param name="replace">True to replace existing references.</param>
 | 
						|
        public static void RegisterInstance<T>(T component, bool replace = true) where T : UnityEngine.Component => NetworkManager?.RegisterInstance<T>(component, replace);
 | 
						|
        /// <summary>
 | 
						|
        /// Unregisters a component from this NetworkManager.
 | 
						|
        /// </summary>
 | 
						|
        /// <typeparam name="T">Type to unregister.</typeparam>
 | 
						|
        public static void UnregisterInstance<T>() where T : UnityEngine.Component => NetworkManager?.UnregisterInstance<T>();
 | 
						|
        #endregion
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
} |