Files
Fishing2/Assets/Scripts/Fishing/Player/PlayerAnimator.cs
2026-01-01 23:09:08 +08:00

265 lines
10 KiB
C#

using System;
using KINEMATION.MagicBlend.Runtime;
using NBC;
using UnityEngine;
namespace NBF
{
public class PlayerAnimator : MonoBehaviour
{
public Animator _Animator;
public FPlayer Player { get; private set; }
private bool _isTorsoLayerEnabled;
private bool _isInit;
private PlayerIK _IK;
private MagicBlending _magicBlending;
#region
public static readonly int IsSwiming = Animator.StringToHash("Swim");
public static readonly int ThrowFar = Animator.StringToHash("ThrowFar");
public static readonly int BoatDriving = Animator.StringToHash("BoatDriving");
public static readonly int BaitInWater = Animator.StringToHash("BaitInWater");
public static readonly int HeldRod = Animator.StringToHash("HeldRod");
public static readonly int RodArming = Animator.StringToHash("RodArming");
public static readonly int Forward = Animator.StringToHash("Forward");
public static readonly int Turn = Animator.StringToHash("Turn");
public static readonly int OnGround = Animator.StringToHash("OnGround");
public static readonly int RodRight = Animator.StringToHash("rod right");
public static readonly int RodForward = Animator.StringToHash("rod forward");
public static readonly int PreciseCast = Animator.StringToHash("Precise Cast");
public static readonly int PreciseIdle = Animator.StringToHash("Precise Idle");
public static readonly string Torso = "Torso";
#endregion
private void Awake()
{
Player = GetComponentInParent<FPlayer>();
_magicBlending = GetComponent<MagicBlending>();
_Animator = GetComponent<Animator>();
_Animator.keepAnimatorStateOnDisable = true;
_IK = GetComponent<PlayerIK>();
_isInit = true;
// Player.Data.OnStateChange += PlayerFSMState_OnValueChanged;
}
private void OnDestroy()
{
// Player.Data.OnStateChange += PlayerFSMState_OnValueChanged;
}
// private void OnEnable()
// {
// playerFSMState.OnValueChanged += PlayerFSMState_OnValueChanged;
// }
//
// private void OnDisable()
// {
// playerFSMState.OnValueChanged -= PlayerFSMState_OnValueChanged;
// }
// private void OnFishingSetUnequip()
// {
// _isTorsoLayerEnabled = false;
// _IK.SetBipedLeftHandIK(enabled: false, null);
// }
//
// private void OnCastLure()
// {
// playerFSMState.Value = PlayerState.baitFlies;
// SFXGameManagement.PlaySound("Cast Fishing Rod", base.transform);
// }
//
// private void OnBailUnnarm()
// {
// if (IsThrowButtonPressed.Value)
// {
// _Animator.SetBool(ThrowFar, value: true);
// playerFSMState.Value = PlayerState.casting;
// OnBailOpen?.Invoke();
// }
// }
//
// private void OnFishingSetEquiped_OnRaised(FishingSetController set)
// {
// _isTorsoLayerEnabled = true;
// _IK.SetBipedLeftHandIK(enabled: false, set.AttachedReel.FingersIKAnchor);
// }
//
// private void PlayAnimation(string state, string layer)
// {
// _Animator.CrossFade(state, 0.3f, _Animator.GetLayerIndex(layer));
// }
//
// public void PlayPreciseCastAnimation()
// {
// _Animator.SetBool(PreciseIdle, value: false);
// _Animator.SetTrigger(PreciseCast);
// }
//
// public void SetLayerWeight(string layer, float weight)
// {
// _Animator.SetLayerWeight(_Animator.GetLayerIndex(layer), weight);
// }
//
// private void PlayerFSMState_OnValueChanged(PlayerState state)
// {
// switch (playerFSMState.PreviousValue)
// {
// case PlayerState.vehicle:
// _IsInVehicle = false;
// _Animator.SetBool(BoatDriving, value: false);
// break;
// case PlayerState.swiming:
// _Animator.SetBool(IsSwiming, value: false);
// break;
// case PlayerState.preciseCastIdle:
// _Animator.SetBool(PreciseIdle, value: false);
// break;
// case PlayerState.prepare:
// _Animator.SetBool(RodArming, value: false);
// break;
// case PlayerState.casting:
// _Animator.SetBool(ThrowFar, value: false);
// break;
// case PlayerState.collectFish:
// _magicBlending.BlendAsset.globalWeight = 0f;
// break;
// }
//
// switch (state)
// {
// case PlayerState.idle:
// case PlayerState.move:
// _Animator.SetBool(BaitInWater, value: false);
// _Animator.SetBool(HeldRod, value: false);
// _Animator.SetBool(ThrowFar, value: false);
// _Animator.SetBool(RodArming, value: false);
// break;
// case PlayerState.prepare:
// _Animator.SetBool(RodArming, value: true);
// _Animator.SetBool(HeldRod, value: true);
// break;
// case PlayerState.fishing:
// _Animator.SetBool(HeldRod, value: true);
// _Animator.SetBool(BaitInWater, value: true);
// break;
// case PlayerState.vehicle:
// _Animator.SetBool(BaitInWater, value: false);
// _Animator.SetBool(HeldRod, value: false);
// _Animator.SetBool(ThrowFar, value: false);
// _Animator.SetBool(RodArming, value: false);
// _Animator.SetBool(BoatDriving, value: true);
// _IK.SetBipedLeftHandIK(enabled: true);
// _IsInVehicle = true;
// break;
// case PlayerState.vehicleFishing:
// _Animator.SetBool(BaitInWater, value: false);
// _Animator.SetBool(HeldRod, value: false);
// _Animator.SetBool(ThrowFar, value: false);
// _Animator.SetBool(RodArming, value: false);
// _IsInVehicle = true;
// break;
// case PlayerState.swiming:
// _Animator.SetBool(IsSwiming, value: true);
// break;
// case PlayerState.collectFish:
// _Animator.SetBool(BaitInWater, value: false);
// _IK.SetAimIK(enabled: false);
// _magicBlending.BlendAsset.globalWeight = 1f;
// break;
// case PlayerState.preciseCastIdle:
// _Animator.SetBool(PreciseIdle, value: true);
// break;
// case PlayerState.casting:
// case PlayerState.baitFlies:
// case PlayerState.fight:
// case PlayerState.fishView:
// case PlayerState.throwFish:
// case PlayerState.flyModeDebug:
// break;
// }
// }
//
// private void LateUpdate()
// {
// if (playerFSMState.Value == PlayerState.swiming)
// {
// float value = Mathf.Lerp(_Animator.GetFloat(Forward), currentMoveSpeed.Value / 2.5f,
// Time.deltaTime * 5f);
// float value2 = Mathf.Lerp(_Animator.GetFloat(Turn), RotationSpeed.Value, Time.deltaTime * 5f);
// _Animator.SetFloat(Forward, Mathf.Clamp01(value));
// _Animator.SetFloat(Turn, Mathf.Clamp(value2, -1f, 1f));
// }
// else
// {
// float value3 = Mathf.Lerp(_Animator.GetFloat(Forward), currentMoveSpeed.Value / 5f,
// Time.deltaTime * 20f);
// float value4 = Mathf.Lerp(_Animator.GetFloat(Turn), RotationSpeed.Value, Time.deltaTime * 15f);
// _Animator.SetFloat(Forward, Mathf.Clamp01(value3));
// _Animator.SetFloat(Turn, Mathf.Clamp(value4, -1f, 1f));
// }
//
// _Animator.SetBool(OnGround, _IsInVehicle || isGrounded.Value);
// _Animator.SetFloat(RodRight, rodPosition.Value.x);
// _Animator.SetFloat(RodForward, rodPosition.Value.y);
// float layerWeight = _Animator.GetLayerWeight(_Animator.GetLayerIndex("Torso"));
// SetLayerWeight("Torso",
// Mathf.MoveTowards(layerWeight, _isTorsoLayerEnabled ? 1f : 0f, Time.deltaTime * 3f));
// }
// private void LateUpdate()
// {
// if (!_isInit) return;
// UpdateAnimator();
// }
//
//
// private void UpdateAnimator()
// {
// Animator.SetBool(OnGround, Player.Data.IsGrounded);
// float value3 = Mathf.Lerp(Animator.GetFloat(Forward), Player.Data.Speed / 5f, Time.deltaTime * 20f);
// Animator.SetFloat(Forward, value3);
//
// // 平滑处理
// // float smoothedTurn = Mathf.SmoothDamp(Animator.GetFloat(Turn),
// // MapUnit.RotationSpeed,
// // ref turnSmoothVelocity,
// // smoothingTime
// // );
//
// float smoothedTurn = Mathf.Lerp(Animator.GetFloat(Turn), Player.Data.RotationSpeed, Time.deltaTime * 10f);
// Animator.SetFloat(Turn, smoothedTurn);
//
//
// float layerWeight = Animator.GetLayerWeight(Animator.GetLayerIndex(Torso));
// SetLayerWeight(Torso,
// Mathf.MoveTowards(layerWeight, _isTorsoLayerEnabled ? 1f : 0f, Time.deltaTime * 3f));
// }
//
// public void SetLayerWeight(string layer, float weight)
// {
// Animator.SetLayerWeight(Animator.GetLayerIndex(layer), weight);
// }
}
}