47 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| namespace Fusion.Addons.InterestManagement
 | |
| {
 | |
| 	using UnityEngine;
 | |
| 
 | |
| 	/// <summary>
 | |
| 	/// Provides interest to players in certain distance from this object.
 | |
| 	/// </summary>
 | |
| 	public sealed class InterestByDistance : InterestProvider
 | |
| 	{
 | |
| 		// PUBLIC MEMBERS
 | |
| 
 | |
| 		[InlineHelp][Tooltip("Minimum distance from player camera to this object.")]
 | |
| 		public float MinDistance;
 | |
| 		[InlineHelp][Tooltip("Maximum distance from player camera to this object.")]
 | |
| 		public float MaxDistance;
 | |
| 
 | |
| 		// InterestProvider INTERFACE
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Returns whether this provider should be processed for given player.
 | |
| 		/// </summary>
 | |
| 		/// <param name="playerView">Player interest view with player information used for filtering.</param>
 | |
| 		public override bool IsPlayerInterested(PlayerInterestView playerView)
 | |
| 		{
 | |
| 			// We compare player camera position against transform of this object.
 | |
| 			// It is enough for relatively small objects, bigger objects might need a special handling - distance from a closest point on bounding box for example.
 | |
| 			Vector3 positionDifference = Transform.position - playerView.CameraPosition;
 | |
| 			float sqrDistance = Vector3.SqrMagnitude(positionDifference);
 | |
| 			return sqrDistance <= MaxDistance * MaxDistance && sqrDistance >= MinDistance * MinDistance;
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Called when an object with InterestByDistance or PlayerInterestManager component is selected.
 | |
| 		/// </summary>
 | |
| 		/// <param name="playerView">Provides player information, is valid only if the selected object has PlayerInterestManager component.</param>
 | |
| 		/// <param name="isSelected">True if the selected object has this component, false otherwise.</param>
 | |
| 		protected override void OnDrawGizmosForPlayer(PlayerInterestView playerView, bool isSelected)
 | |
| 		{
 | |
| 			if (isSelected == true)
 | |
| 			{
 | |
| 				InterestUtility.DrawWireSphere(Transform.position, MinDistance, Color.red);
 | |
| 				InterestUtility.DrawWireSphere(Transform.position, MaxDistance, Color.green);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 |