quantum-space-buddies/QSB/Animation/Player/CrouchSync.cs

59 lines
1.2 KiB
C#
Raw Normal View History

using Mirror;
using QSB.Utility.VariableSync;
using UnityEngine;
2022-03-03 03:46:33 +00:00
namespace QSB.Animation.Player;
public class CrouchSync : NetworkBehaviour
{
2022-03-03 03:46:33 +00:00
public AnimFloatParam CrouchParam { get; } = new AnimFloatParam();
2022-03-03 03:46:33 +00:00
private const float CrouchSmoothTime = 0.05f;
public const int CrouchLayerIndex = 1;
2022-03-03 03:46:33 +00:00
private PlayerCharacterController _playerController;
private Animator _bodyAnim;
2021-05-03 19:13:03 +00:00
2022-03-03 03:46:33 +00:00
public FloatVariableSyncer CrouchVariableSyncer;
2022-03-03 03:46:33 +00:00
public void Init(PlayerCharacterController playerController, Animator bodyAnim)
{
_playerController = playerController;
_bodyAnim = bodyAnim;
}
2022-03-03 03:46:33 +00:00
public void Update()
{
if (isLocalPlayer)
{
2022-03-03 03:46:33 +00:00
SyncLocalCrouch();
return;
}
2022-03-03 03:46:33 +00:00
SyncRemoteCrouch();
}
2022-03-03 03:46:33 +00:00
private void SyncLocalCrouch()
{
if (_playerController == null)
{
return;
2020-12-02 21:29:53 +00:00
}
2022-03-03 03:46:33 +00:00
var jumpChargeFraction = _playerController.GetJumpCrouchFraction();
CrouchVariableSyncer.Value = jumpChargeFraction;
}
private void SyncRemoteCrouch()
{
if (_bodyAnim == null)
{
2022-03-03 03:46:33 +00:00
return;
}
2022-03-03 03:46:33 +00:00
CrouchParam.Target = CrouchVariableSyncer.Value;
CrouchParam.Smooth(CrouchSmoothTime);
var jumpChargeFraction = CrouchParam.Current;
_bodyAnim.SetLayerWeight(CrouchLayerIndex, jumpChargeFraction);
2020-12-02 21:29:53 +00:00
}
2020-11-08 16:13:10 +00:00
}