53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using Fusion; | ||
|  | using UnityEngine; | ||
|  | using DG.Tweening; | ||
|  | 
 | ||
|  | namespace TPSBR | ||
|  | { | ||
|  | 	public sealed class AgentSenses : NetworkBehaviour | ||
|  | 	{ | ||
|  | 		[Networked, HideInInspector] | ||
|  | 		public float  EyesFlashValue { get; set; } | ||
|  | 
 | ||
|  | 		[SerializeField] | ||
|  | 		private Ease  _eyesFlashFalloff; | ||
|  | 
 | ||
|  | 		private float _eyesFlashStartValue; | ||
|  | 		private int   _eyesFlashStartTick; | ||
|  | 		private int   _eyesFlashEndTick; | ||
|  | 
 | ||
|  | 		public void SetEyesFlash(float value, float duration, float falloffDelay) | ||
|  | 		{ | ||
|  | 			if (HasStateAuthority == false) | ||
|  | 				return; | ||
|  | 
 | ||
|  | 			if (falloffDelay > duration - 0.1f) | ||
|  | 			{ | ||
|  | 				falloffDelay = duration - 0.1f; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			_eyesFlashStartTick = Runner.Tick + (int)(falloffDelay / Runner.DeltaTime); | ||
|  | 			_eyesFlashEndTick   = _eyesFlashStartTick + (int)(duration / Runner.DeltaTime); | ||
|  | 
 | ||
|  | 			_eyesFlashStartValue = value; | ||
|  | 			EyesFlashValue       = value; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		public override void FixedUpdateNetwork() | ||
|  | 		{ | ||
|  | 			if (HasStateAuthority == false) | ||
|  | 				return; | ||
|  | 
 | ||
|  | 			var currentTick = Runner.Tick; | ||
|  | 			if (currentTick >= _eyesFlashEndTick) | ||
|  | 			{ | ||
|  | 				EyesFlashValue = 0f; | ||
|  | 				return; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			var progress   = (currentTick - _eyesFlashStartTick) / (float)(_eyesFlashEndTick - _eyesFlashStartTick); | ||
|  | 			EyesFlashValue = Mathf.Lerp(_eyesFlashStartValue, 0f, DOVirtual.EasedValue(0f, 1f, progress, _eyesFlashFalloff)); | ||
|  | 		} | ||
|  | 	} | ||
|  | } |