This commit is contained in:
2026-01-01 23:57:29 +08:00
parent 04dd4a23b2
commit bfdfcfe2cd
13 changed files with 407 additions and 180 deletions

View File

@@ -14,6 +14,7 @@ namespace NBF
private bool _isInit;
private PlayerIK _IK;
private MagicBlending _magicBlending;
private bool _IsInVehicle;
#region
@@ -58,12 +59,12 @@ namespace NBF
_IK = GetComponent<PlayerIK>();
_isInit = true;
// Player.Data.OnStateChange += PlayerFSMState_OnValueChanged;
Player.Data.OnStateChange += PlayerFSMState_OnValueChanged;
}
private void OnDestroy()
{
// Player.Data.OnStateChange += PlayerFSMState_OnValueChanged;
Player.Data.OnStateChange += PlayerFSMState_OnValueChanged;
}
// private void OnEnable()
@@ -76,158 +77,164 @@ namespace NBF
// 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 OnFishingSetUnequip()
{
_isTorsoLayerEnabled = false;
_IK.SetBipedLeftHandIK(enabled: false, null);
}
private void OnCastLure()
{
Player.Data.State = PlayerState.baitFlies;
// SFXGameManagement.PlaySound("Cast Fishing Rod", base.transform);
}
private void OnBailUnnarm()
{
// if (IsThrowButtonPressed.Value)
// {
// _Animator.SetBool(ThrowFar, value: true);
// Player.Data.State = 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));
// var reel = Player.Rod.Reel;
// // _IK.SetBipedLeftHandIK(enabled: false, reel.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 (Player.Data.PreviousState)
{
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 (Player.Data.State == PlayerState.swiming)
{
float value = Mathf.Lerp(_Animator.GetFloat(Forward), Player.Data.Speed / 2.5f,
Time.deltaTime * 5f);
float value2 = Mathf.Lerp(_Animator.GetFloat(Turn), Player.Data.RotationSpeed, 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), Player.Data.Speed / 5f,
Time.deltaTime * 20f);
float value4 = Mathf.Lerp(_Animator.GetFloat(Turn), Player.Data.RotationSpeed, Time.deltaTime * 15f);
_Animator.SetFloat(Forward, Mathf.Clamp01(value3));
_Animator.SetFloat(Turn, Mathf.Clamp(value4, -1f, 1f));
}
var rod = Vector3.zero;
if (Player.Rod)
{
rod = Player.Rod.transform.position;
}
_Animator.SetBool(OnGround, _IsInVehicle || Player.Data.IsGrounded);
_Animator.SetFloat(RodRight, rod.x);
_Animator.SetFloat(RodForward, rod.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;