82 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using FishNet.Connection;
 | |
| using FishNet.Managing.Server;
 | |
| using FishNet.Object;
 | |
| using UnityEngine;
 | |
| 
 | |
| namespace FishNet.Observing
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Condition a connection must meet to be added as an observer.
 | |
|     /// This class can be inherited from for custom conditions.
 | |
|     /// </summary>
 | |
|     public abstract class ObserverCondition : ScriptableObject
 | |
|     {
 | |
|         #region Public.
 | |
|         /// <summary>
 | |
|         /// NetworkObject this condition is for.
 | |
|         /// </summary>
 | |
|         [HideInInspector]
 | |
|         public NetworkObject NetworkObject;
 | |
|         #endregion
 | |
| 
 | |
|         #region Private.
 | |
|         /// <summary>
 | |
|         /// True if this condition is enabled.
 | |
|         /// </summary>
 | |
|         private bool _isEnabled = true;
 | |
|         /// <summary>
 | |
|         /// Gets the enabled state of this condition.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public bool GetIsEnabled() => _isEnabled;
 | |
|         /// <summary>
 | |
|         /// Sets the enabled state of this condition.
 | |
|         /// If the state has changed observers will be rebuilt
 | |
|         /// for this object.
 | |
|         /// </summary>
 | |
|         /// <param name="value"></param>
 | |
|         public void SetIsEnabled(bool value)
 | |
|         {
 | |
|             if (value == GetIsEnabled())
 | |
|                 return;
 | |
| 
 | |
|             _isEnabled = value;
 | |
|             //No object to rebuild for.
 | |
|             if (NetworkObject == null)
 | |
|                 return;
 | |
| 
 | |
|             ServerObjects so = NetworkObject?.ServerManager?.Objects;
 | |
|             if (so != null)
 | |
|                 so.RebuildObservers(NetworkObject);
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Initializes this script for use.
 | |
|         /// </summary>
 | |
|         /// <param name="networkObject"></param>
 | |
|         public virtual void InitializeOnce(NetworkObject networkObject)
 | |
|         {
 | |
|             NetworkObject = networkObject;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// Returns if the object which this condition resides should be visible to connection.
 | |
|         /// </summary>
 | |
|         /// <param name="connection">Connection which the condition is being checked for.</param>
 | |
|         /// <param name="currentlyAdded">True if the connection currently has visibility of this object.</param>
 | |
|         /// <param name="notProcessed">True if the condition was not processed. This can be used to skip processing for performance. While output as true this condition result assumes the previous ConditionMet value.</param>
 | |
|         public abstract bool ConditionMet(NetworkConnection connection, bool currentlyAdded, out bool notProcessed);
 | |
|         /// <summary>
 | |
|         /// True if the condition requires regular updates.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public abstract bool Timed();
 | |
|         /// <summary>
 | |
|         /// Creates a clone of this condition to be instantiated.
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public abstract ObserverCondition Clone();
 | |
| 
 | |
|     }
 | |
| }
 |