91 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| namespace Fusion.Addons.InterestManagement
 | |
| {
 | |
| 	using System.Collections.Generic;
 | |
| 	using UnityEngine;
 | |
| 
 | |
| 	/// <summary>
 | |
| 	/// Interest shape that provides configuration for cone and its convertion to interest cells.
 | |
| 	/// Supports interest cells caching - cells from previous evaluation are reused until properties or transform change.
 | |
| 	/// </summary>
 | |
| 	public class InterestCone : InterestShape
 | |
| 	{
 | |
| 		// PUBLIC MEMBERS
 | |
| 
 | |
| 		[InlineHelp][Tooltip("Only enabled shapes are evaluated and contribute to player interest.")]
 | |
| 		public bool IsEnabled = true;
 | |
| 		[InlineHelp][Tooltip("Length of the cone.")]
 | |
| 		public float Length = 1.0f;
 | |
| 		[InlineHelp][Tooltip("Width(x) and height(y) at the start of the cone.")]
 | |
| 		public Vector2 StartSize;
 | |
| 		[InlineHelp][Tooltip("Width(x) and height(y) at the end of the cone.")]
 | |
| 		public Vector2 EndSize = Vector2.one;
 | |
| 		[InlineHelp][Tooltip("Minimum width(x) or height(y) of the cone at any distance. If set, StartSize and EndSize are clamped to this value.")]
 | |
| 		public Vector2 MinSize;
 | |
| 		[InlineHelp][Tooltip("Maximum width(x) or height(y) of the cone at any distance. If set, StartSize and EndSize are clamped to this value.")]
 | |
| 		public Vector2 MaxSize;
 | |
| 		[InlineHelp][Tooltip("Color used for rendering shape gizmos.")]
 | |
| 		public Color GizmoColor = Color.white;
 | |
| 
 | |
| 		// PRIVATE MEMBERS
 | |
| 
 | |
| 		private HashSet<int> _cachedCells = new HashSet<int>();
 | |
| 		private Vector3      _cachedPosition;
 | |
| 		private Quaternion   _cachedRotation;
 | |
| 		private int          _cachedCellSize;
 | |
| 		private float        _cachedLength;
 | |
| 		private Vector2      _cachedStartSize;
 | |
| 		private Vector2      _cachedEndSize;
 | |
| 		private Vector2      _cachedMinSize;
 | |
| 		private Vector2      _cachedMaxSize;
 | |
| 		private long         _cachedVersion;
 | |
| 
 | |
| 		// InterestShape INTERFACE
 | |
| 
 | |
| 		public override void GetCells(PlayerInterestView playerView, HashSet<int> cells, EInterestMode interestMode)
 | |
| 		{
 | |
| 			if (IsEnabled == false || Length <= 0.0f)
 | |
| 				return;
 | |
| 
 | |
| 			Transform.GetPositionAndRotation(out Vector3 position, out Quaternion rotation);
 | |
| 
 | |
| 			if (position.Equals(_cachedPosition) == false || rotation.Equals(_cachedRotation) == false || Length != _cachedLength || StartSize.Equals(_cachedStartSize) == false || EndSize.Equals(_cachedEndSize) == false || MinSize.Equals(_cachedMinSize) == false || MaxSize.Equals(_cachedMaxSize) == false || Fusion.Simulation.AreaOfInterest.CELL_SIZE != _cachedCellSize || Version != _cachedVersion)
 | |
| 			{
 | |
| 				_cachedCells.Clear();
 | |
| 
 | |
| 				InterestConeUtility.GetCells(position, rotation, Length, StartSize, EndSize, MinSize, MaxSize, _cachedCells);
 | |
| 
 | |
| 				_cachedPosition  = position;
 | |
| 				_cachedRotation  = rotation;
 | |
| 				_cachedCellSize  = Fusion.Simulation.AreaOfInterest.CELL_SIZE;
 | |
| 				_cachedLength    = Length;
 | |
| 				_cachedStartSize = StartSize;
 | |
| 				_cachedEndSize   = EndSize;
 | |
| 				_cachedMinSize   = MinSize;
 | |
| 				_cachedMaxSize   = MaxSize;
 | |
| 				_cachedVersion   = Version;
 | |
| 			}
 | |
| 
 | |
| 			CombineCells(_cachedCells, cells, interestMode);
 | |
| 		}
 | |
| 
 | |
| 		public override void DrawGizmo(PlayerInterestView playerView)
 | |
| 		{
 | |
| 			if (IsEnabled == false || Length <= 0.0f)
 | |
| 				return;
 | |
| 
 | |
| 			Transform.GetPositionAndRotation(out Vector3 position, out Quaternion rotation);
 | |
| 			InterestConeUtility.DrawGizmo(position, rotation, Length, StartSize, EndSize, MinSize, MaxSize, GizmoColor);
 | |
| 		}
 | |
| 
 | |
| 		// PROTECTED METHODS
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Marks cached interest cells as invalid, forcing new shape => cells conversion when the shape is evaluated next time.
 | |
| 		/// </summary>
 | |
| 		protected void InvalidateCache()
 | |
| 		{
 | |
| 			_cachedVersion = default;
 | |
| 		}
 | |
| 	}
 | |
| }
 |