2025-09-24 11:24:38 +05:00

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);
}
}
}