58 lines
1.2 KiB
C#
Raw Normal View History

2021-05-03 20:27:52 +01:00
using QuantumUNET;
using UnityEngine;
2021-05-03 20:13:03 +01:00
using UnityEngine.Networking;
2021-04-26 14:30:21 +01:00
namespace QSB.Animation.Player
{
2020-12-23 12:58:45 +00:00
public class CrouchSync : QNetworkBehaviour
2020-12-02 21:29:53 +00:00
{
public AnimFloatParam CrouchParam { get; } = new AnimFloatParam();
2020-12-02 21:29:53 +00:00
private const float CrouchSmoothTime = 0.05f;
private const int CrouchLayerIndex = 1;
2020-12-02 21:29:53 +00:00
private PlayerCharacterController _playerController;
private Animator _bodyAnim;
2021-05-03 20:13:03 +01:00
[SyncVar]
private float _crouchValue;
public void Init(PlayerCharacterController playerController, Animator bodyAnim)
2020-12-02 21:29:53 +00:00
{
_playerController = playerController;
_bodyAnim = bodyAnim;
}
2020-12-14 21:41:56 +01:00
public void Update()
2020-12-02 21:29:53 +00:00
{
if (IsLocalPlayer)
{
SyncLocalCrouch();
return;
}
SyncRemoteCrouch();
}
2020-12-02 21:29:53 +00:00
private void SyncLocalCrouch()
{
if (_playerController == null)
{
return;
}
var jumpChargeFraction = _playerController.GetJumpChargeFraction();
2021-05-03 20:13:03 +01:00
_crouchValue = jumpChargeFraction;
2020-12-02 21:29:53 +00:00
}
2020-12-02 21:29:53 +00:00
private void SyncRemoteCrouch()
{
if (_bodyAnim == null)
{
return;
}
2021-05-03 20:13:03 +01:00
CrouchParam.Target = _crouchValue;
2020-12-02 21:29:53 +00:00
CrouchParam.Smooth(CrouchSmoothTime);
var jumpChargeFraction = CrouchParam.Current;
_bodyAnim.SetLayerWeight(CrouchLayerIndex, jumpChargeFraction);
}
}
2020-11-08 16:13:10 +00:00
}