71 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | namespace TPSBR | ||
|  | { | ||
|  | 	using UnityEngine; | ||
|  | 	using UnityEngine.Playables; | ||
|  | 	using Fusion.Addons.KCC; | ||
|  | 	using Fusion.Addons.AnimationController; | ||
|  | 
 | ||
|  | 	public sealed class ShootState : MultiClipState | ||
|  | 	{ | ||
|  | 		// PRIVATE MEMBERS | ||
|  | 
 | ||
|  | 		[SerializeField] | ||
|  | 		private float _animationPower = 1.0f; | ||
|  | 
 | ||
|  | 		private KCC     _kcc; | ||
|  | 		private Weapons _weapons; | ||
|  | 
 | ||
|  | 		// MultiClipState INTERFACE | ||
|  | 
 | ||
|  | 		protected override int GetClipID() | ||
|  | 		{ | ||
|  | 			int currentWeaponSlot = _weapons.CurrentWeaponSlot; | ||
|  | 			if (currentWeaponSlot > 2) | ||
|  | 			{ | ||
|  | 				currentWeaponSlot = 1; // For grenades we use pistol set | ||
|  | 			} | ||
|  | 
 | ||
|  | 			if (currentWeaponSlot < 0) | ||
|  | 				return 0; | ||
|  | 
 | ||
|  | 			return currentWeaponSlot * 2 + 1; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// AnimationState INTERFACE | ||
|  | 
 | ||
|  | 		protected override void OnInitialize() | ||
|  | 		{ | ||
|  | 			base.OnInitialize(); | ||
|  | 
 | ||
|  | 			_kcc     = Controller.GetComponentNoAlloc<KCC>(); | ||
|  | 			_weapons = Controller.GetComponentNoAlloc<Weapons>(); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		protected override void OnFixedUpdate() | ||
|  | 		{ | ||
|  | 			base.OnFixedUpdate(); | ||
|  | 
 | ||
|  | 			int clipID = GetClipID(); | ||
|  | 			int idleID = clipID - 1; | ||
|  | 
 | ||
|  | 			Mixer.SetInputWeight(idleID, 1.0f - _animationPower); | ||
|  | 			Mixer.SetInputWeight(clipID, _animationPower); | ||
|  | 
 | ||
|  | 			Nodes[idleID].PlayableClip.SetTime(AnimationTime); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		protected override void OnInterpolate() | ||
|  | 		{ | ||
|  | 			base.OnInterpolate(); | ||
|  | 
 | ||
|  | 			int clipID = GetClipID(); | ||
|  | 			int idleID = clipID - 1; | ||
|  | 
 | ||
|  | 			Mixer.SetInputWeight(idleID, 1.0f - _animationPower); | ||
|  | 			Mixer.SetInputWeight(clipID, _animationPower); | ||
|  | 
 | ||
|  | 			Nodes[idleID].PlayableClip.SetTime(InterpolatedAnimationTime); | ||
|  | 		} | ||
|  | 	} | ||
|  | } |