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(); _weapons = Controller.GetComponentNoAlloc(); } 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); } } }