This repository has been archived on 2023-09-13. You can view files and clone it, but cannot push or open issues or pull requests.
station_obscurum_unity/Assets/FishNet/Runtime/InstanceFinder.cs

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
}
}