首次提交
This commit is contained in:
7
Assets/Scripts/Fishing~/Player/States/PlayerFight.cs
Normal file
7
Assets/Scripts/Fishing~/Player/States/PlayerFight.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace NBF
|
||||
{
|
||||
public class PlayerFight : PlayerStateBase
|
||||
{
|
||||
public override uint StateId => States.Player.Fight;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 270296b331144c239f35a1c94c1d158c
|
||||
timeCreated: 1733200075
|
||||
135
Assets/Scripts/Fishing~/Player/States/PlayerFishing.cs
Normal file
135
Assets/Scripts/Fishing~/Player/States/PlayerFishing.cs
Normal file
@@ -0,0 +1,135 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public class PlayerFishing : PlayerStateBase
|
||||
{
|
||||
public override uint StateId => States.Player.Fishing;
|
||||
|
||||
|
||||
protected override void onExit()
|
||||
{
|
||||
_owner.PlayerAnimatorCtrl.PodsakAction = false;
|
||||
}
|
||||
|
||||
protected override void onEnter()
|
||||
{
|
||||
Debug.Log("进入钓鱼中");
|
||||
|
||||
if (_owner.PlayerAnimatorCtrl.ThrowMode == ThrowModeEnum.Spin)
|
||||
{
|
||||
_owner.PlayerAnimatorCtrl.PodsakAction = true;
|
||||
_owner.PlayerAnimatorCtrl.Telestick = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
_owner.PlayerAnimatorCtrl.PodsakAction = false;
|
||||
_owner.PlayerAnimatorCtrl.Telestick = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected override uint onUpdate()
|
||||
{
|
||||
var ret = States.None;
|
||||
var isUpRod = false;
|
||||
var isSubLine = false;
|
||||
|
||||
if (Input.GetKeyDown(KeyCode.P))
|
||||
{
|
||||
return States.Player.Idle;
|
||||
}
|
||||
|
||||
if (InputManager.IsOp1)
|
||||
{
|
||||
if (_owner.PlayerAnimatorCtrl.ThrowMode == ThrowModeEnum.Float)
|
||||
{
|
||||
//抬杆
|
||||
isUpRod = true;
|
||||
}
|
||||
else if (_owner.PlayerAnimatorCtrl.ThrowMode == ThrowModeEnum.Spin)
|
||||
{
|
||||
//收线
|
||||
isSubLine = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (InputManager.IsOp2)
|
||||
{
|
||||
if (_owner.PlayerAnimatorCtrl.ThrowMode == ThrowModeEnum.Spin)
|
||||
{
|
||||
//抬杆
|
||||
isUpRod = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (isUpRod || _owner.PlayerAnimatorCtrl.FishingFinal > 0)
|
||||
{
|
||||
var upForce = 1;
|
||||
var addNum = upForce * Time.deltaTime;
|
||||
if (!isUpRod)
|
||||
{
|
||||
addNum *= -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
addNum *= 0.5f;
|
||||
}
|
||||
|
||||
// Debug.Log($"addNum={addNum}");
|
||||
_owner.PlayerAnimatorCtrl.FishingFinal += addNum;
|
||||
Debug.LogError($"ishingFinal={_owner.PlayerAnimatorCtrl.FishingFinal}");
|
||||
if (_owner.PlayerAnimatorCtrl.FishingFinal >= 1)
|
||||
{
|
||||
_owner.PlayerAnimatorCtrl.FishingFinal = 1;
|
||||
}
|
||||
else if (_owner.PlayerAnimatorCtrl.FishingFinal < 0)
|
||||
{
|
||||
_owner.PlayerAnimatorCtrl.FishingFinal = 0;
|
||||
}
|
||||
|
||||
if (_owner.PlayerAnimatorCtrl.FishingFinal >= 0.8f)
|
||||
{
|
||||
ret = CheckTackFish();
|
||||
}
|
||||
|
||||
_owner.PlayerAnimatorCtrl.PullUpRod = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_owner.PlayerAnimatorCtrl.PullUpRod = false;
|
||||
}
|
||||
|
||||
if (isSubLine)
|
||||
{
|
||||
var subLineSpeed = 2;
|
||||
var addNum = subLineSpeed * Time.deltaTime;
|
||||
if (_owner.Data.lineLength > 0.4f)
|
||||
{
|
||||
_owner.Data.lineLength -= addNum;
|
||||
}
|
||||
|
||||
_owner.Data.reelSpeed = 1;
|
||||
if (_owner.Data.lineLength <= 0.4f)
|
||||
{
|
||||
_owner.Data.lineLength = 0.4f;
|
||||
ret = CheckTackFish();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_owner.Data.reelSpeed = 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#region 检查上鱼或者返回待机
|
||||
|
||||
private uint CheckTackFish()
|
||||
{
|
||||
return States.Player.Idle;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a7b4c15a41e54f1fa6241d0ed1841154
|
||||
timeCreated: 1733200048
|
||||
117
Assets/Scripts/Fishing~/Player/States/PlayerIdle.cs
Normal file
117
Assets/Scripts/Fishing~/Player/States/PlayerIdle.cs
Normal file
@@ -0,0 +1,117 @@
|
||||
using NBC;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
/// <summary>
|
||||
/// 闲置状态
|
||||
/// </summary>
|
||||
public class PlayerIdle : PlayerStateBase
|
||||
{
|
||||
public override uint StateId => States.Player.Idle;
|
||||
|
||||
public enum Phase
|
||||
{
|
||||
/// <summary>
|
||||
/// 完全闲置的
|
||||
/// </summary>
|
||||
Idle,
|
||||
|
||||
/// <summary>
|
||||
/// 准备拿东西
|
||||
/// </summary>
|
||||
PrepareTake,
|
||||
|
||||
/// <summary>
|
||||
/// 拿着东西
|
||||
/// </summary>
|
||||
TakeItem,
|
||||
}
|
||||
|
||||
public Phase Stage = Phase.Idle;
|
||||
|
||||
private bool _nextState = false;
|
||||
|
||||
protected override void onEnter()
|
||||
{
|
||||
_nextState = false;
|
||||
_owner.Data.reelSpeed = 0;
|
||||
_owner.PlayerAnimatorCtrl.LureThrown = false;
|
||||
_owner.MinorArm.IK.enabled = false;
|
||||
if (_owner.Gears.Rod && _owner.Gears.Reel)
|
||||
{
|
||||
_owner.Gears.Reel.Unlock(false);
|
||||
}
|
||||
|
||||
|
||||
Stage = Phase.Idle;
|
||||
|
||||
InputManager.OnOp1Action += OnOp1Action;
|
||||
}
|
||||
|
||||
protected override void onExit()
|
||||
{
|
||||
base.onExit();
|
||||
InputManager.OnOp1Action -= OnOp1Action;
|
||||
}
|
||||
|
||||
private void OnOp1Action(bool performed)
|
||||
{
|
||||
if (Stage == Phase.TakeItem)
|
||||
{
|
||||
if (_owner.Gears.Rod)
|
||||
{
|
||||
//如果准备好了杆子,则可进入抛竿
|
||||
if (performed)
|
||||
{
|
||||
_nextState = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override uint onUpdate()
|
||||
{
|
||||
if (Stage == Phase.Idle)
|
||||
{
|
||||
if (_owner && _owner.Gears.Rod)
|
||||
{
|
||||
Stage = Phase.PrepareTake;
|
||||
}
|
||||
}
|
||||
else if (Stage == Phase.PrepareTake)
|
||||
{
|
||||
if (_owner.Data.currentGear.Type == GearType.Pole)
|
||||
{
|
||||
var handPoint = _owner.MinorArm.LeftRigMagnet;
|
||||
var ret = _owner.PutLineToLeftHandHelper(handPoint, 3f);
|
||||
|
||||
if (ret)
|
||||
{
|
||||
_owner.PlayerAnimatorCtrl.RodReady = true;
|
||||
Stage = Phase.TakeItem;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_owner.PlayerAnimatorCtrl.RodReady = true;
|
||||
Stage = Phase.TakeItem;
|
||||
}
|
||||
}
|
||||
else if (Stage == Phase.TakeItem)
|
||||
{
|
||||
if (_owner.Gears.Rod)
|
||||
{
|
||||
//如果准备好了杆子,则可进入抛竿
|
||||
// if (_nextState)
|
||||
// {
|
||||
// return States.Player.WaitThrow;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return States.None;
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Fishing~/Player/States/PlayerIdle.cs.meta
Normal file
3
Assets/Scripts/Fishing~/Player/States/PlayerIdle.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 894c08d7fbf442adae3342038110aa6a
|
||||
timeCreated: 1733198057
|
||||
7
Assets/Scripts/Fishing~/Player/States/PlayerShowFish.cs
Normal file
7
Assets/Scripts/Fishing~/Player/States/PlayerShowFish.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace NBF
|
||||
{
|
||||
public class PlayerShowFish : PlayerStateBase
|
||||
{
|
||||
public override uint StateId => States.Player.ShowFish;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 043b3856636e4706a2382a544bec14c8
|
||||
timeCreated: 1733199961
|
||||
57
Assets/Scripts/Fishing~/Player/States/PlayerStateBase.cs
Normal file
57
Assets/Scripts/Fishing~/Player/States/PlayerStateBase.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using NBC;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public abstract class PlayerStateBase : FsmBaseState<FPlayer>
|
||||
{
|
||||
protected FPlayer Fish => _owner;
|
||||
|
||||
|
||||
protected void SetArm()
|
||||
{
|
||||
if (_owner.Gears.Reel)
|
||||
{
|
||||
_owner.MinorArm.SetReelHandle(_owner.Gears.Reel.reelAsset);
|
||||
// _owner.MinorArm.IK.solver.target = _owner.Gears.Reel.reelAsset.handle;
|
||||
// _owner.MinorArm.IK.enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查状态超时
|
||||
/// </summary>
|
||||
public void CheckStateTimeout(float time)
|
||||
{
|
||||
if (Time.time - EnterTime >= time)
|
||||
{
|
||||
Root.Start<PlayerIdle>();
|
||||
}
|
||||
}
|
||||
|
||||
protected void TakeLineToHand()
|
||||
{
|
||||
// GameInput.isPullUpRod = true;
|
||||
// // if(_owner.HandsAnimator.GetCurrentAnimatorClipInfo().)
|
||||
// _owner.HandsAnimator.SetBool(Anim.RightFingersOnRodPowered, true);
|
||||
// _owner.HandsAnimator.SetBool(Anim.LHandPreCast, true);
|
||||
|
||||
|
||||
// if (_owner.handPullUp >= 1)
|
||||
// {
|
||||
// // var connector = _owner.currentRod.currentLine.currentLineHandler.LineConnector_1.transform;
|
||||
// // var handPoint = _owner.lHandPlayerHelperLinePoint;
|
||||
//
|
||||
// // _owner.PutLineToLeftHandHelper(connector, handPoint, 3f);
|
||||
// }
|
||||
}
|
||||
|
||||
// protected void OutLineToHand()
|
||||
// {
|
||||
// // GameInput.isPullUpRod = false;
|
||||
//
|
||||
// var connector = _owner.currentRod.currentLine.currentLineHandler.LineConnector_1.transform;
|
||||
// _owner.OutLineFromLeftHandHelper(connector);
|
||||
// }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8e5ecd3ff4134eec876e22cd708a9615
|
||||
timeCreated: 1732849520
|
||||
154
Assets/Scripts/Fishing~/Player/States/PlayerThrow.cs
Normal file
154
Assets/Scripts/Fishing~/Player/States/PlayerThrow.cs
Normal file
@@ -0,0 +1,154 @@
|
||||
using NBC;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
/// <summary>
|
||||
/// 抛竿中
|
||||
/// </summary>
|
||||
public class PlayerThrow : PlayerStateBase
|
||||
{
|
||||
public override uint StateId => States.Player.Throw;
|
||||
|
||||
public enum Phase
|
||||
{
|
||||
/// <summary>
|
||||
/// 等待动画事件回调
|
||||
/// </summary>
|
||||
Waiting,
|
||||
|
||||
/// <summary>
|
||||
/// 前摇动画
|
||||
/// </summary>
|
||||
AnimBegin,
|
||||
|
||||
/// <summary>
|
||||
/// 抛线动画
|
||||
/// </summary>
|
||||
ThrowAnim,
|
||||
|
||||
/// <summary>
|
||||
/// 结束
|
||||
/// </summary>
|
||||
Done,
|
||||
ErrorDone
|
||||
}
|
||||
|
||||
public Phase Stage = Phase.Waiting;
|
||||
|
||||
public float ChargedProgress;
|
||||
|
||||
protected override void onEnter()
|
||||
{
|
||||
_owner.PlayerAnimatorCtrl.StartThrow = true;
|
||||
|
||||
ChargedProgress = (float)Params.Get(0);
|
||||
Debug.Log($"PlayerThrow ChargedProgress={ChargedProgress}");
|
||||
Stage = Phase.Waiting;
|
||||
|
||||
_owner.Gears.Reel?.Unlock();
|
||||
}
|
||||
|
||||
protected override uint onUpdate()
|
||||
{
|
||||
CheckStateTimeout(10);
|
||||
if (Stage == Phase.AnimBegin)
|
||||
{
|
||||
AnimBegin();
|
||||
ThrowPosition();
|
||||
}
|
||||
else if (Stage == Phase.ThrowAnim)
|
||||
{
|
||||
ThrowAnim();
|
||||
}
|
||||
else if (Stage == Phase.Done)
|
||||
{
|
||||
return States.Player.Fishing;
|
||||
}
|
||||
else if (Stage == Phase.ErrorDone)
|
||||
{
|
||||
return States.Player.Idle;
|
||||
}
|
||||
|
||||
return base.onUpdate();
|
||||
}
|
||||
|
||||
#region 动画回调
|
||||
|
||||
/// <summary>
|
||||
/// 抛竿动画事件
|
||||
/// </summary>
|
||||
public void RodForceThrowStart()
|
||||
{
|
||||
// Debug.LogError($"RodForceThrowStart==");
|
||||
_owner.PlayerAnimatorCtrl.PrepareThrow = false;
|
||||
_owner.PlayerAnimatorCtrl.StartThrow = false;
|
||||
Stage = Phase.AnimBegin;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 抛线前摇动画
|
||||
|
||||
private void AnimBegin()
|
||||
{
|
||||
_owner.PlayerAnimatorCtrl.PrepareThrow = false;
|
||||
_owner.PlayerAnimatorCtrl.StartThrow = false;
|
||||
_owner.PlayerAnimatorCtrl.LureThrown = true;
|
||||
Stage = Phase.ThrowAnim;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 抛竿线飞出相关动画
|
||||
|
||||
private NTask _throwAnim;
|
||||
|
||||
private void ThrowPosition()
|
||||
{
|
||||
if (_owner.PlayerAnimatorCtrl.ThrowMode == ThrowModeEnum.Float)
|
||||
{
|
||||
_owner.Gears.Rod.lineHandler.pinchController?.ReleasePinch();
|
||||
_throwAnim = new BobThrowAnim(_owner);
|
||||
_throwAnim.Run(DefRunner.Scheduler);
|
||||
// var lureHookWaterDisplacement = _owner.Gears.Rod.LureHookWaterDisplacement;
|
||||
// var angle = 25;
|
||||
// Vector3 forward = _owner.transform.forward; // 角色的前方向
|
||||
// Vector3 up = _owner.transform.up; // 角色的上方向
|
||||
// Vector3 forwardUpDirection =
|
||||
// (forward * Mathf.Cos(angle * Mathf.Deg2Rad) + up * Mathf.Sin(angle * Mathf.Deg2Rad)).normalized;
|
||||
//
|
||||
// // 施加力
|
||||
// lureHookWaterDisplacement.rigidbody.AddForce(forwardUpDirection * 320, ForceMode.Impulse);
|
||||
}
|
||||
else
|
||||
{
|
||||
_throwAnim = new LureThrowAnim(_owner);
|
||||
_throwAnim.Run(DefRunner.Scheduler);
|
||||
}
|
||||
}
|
||||
|
||||
private void ThrowAnim()
|
||||
{
|
||||
if (_throwAnim.IsDone)
|
||||
{
|
||||
if (_throwAnim.Status == NTaskStatus.Success)
|
||||
{
|
||||
if (_owner.PlayerAnimatorCtrl.ThrowMode == ThrowModeEnum.Spin)
|
||||
{
|
||||
SetArm();
|
||||
}
|
||||
|
||||
Stage = Phase.Done;
|
||||
Debug.LogError($"抛线后,线长度={_owner.Data.lineLength}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Stage = Phase.ErrorDone;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0ace9df53d3743589fe68b456596eda9
|
||||
timeCreated: 1733199798
|
||||
76
Assets/Scripts/Fishing~/Player/States/PlayerWaitThrow.cs
Normal file
76
Assets/Scripts/Fishing~/Player/States/PlayerWaitThrow.cs
Normal file
@@ -0,0 +1,76 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
/// <summary>
|
||||
/// 等待抛竿,蓄力中
|
||||
/// </summary>
|
||||
public class PlayerWaitThrow : PlayerStateBase
|
||||
{
|
||||
public enum Phase
|
||||
{
|
||||
/// <summary>
|
||||
/// 蓄力
|
||||
/// </summary>
|
||||
Charged,
|
||||
|
||||
/// <summary>
|
||||
/// 确认蓄力结果
|
||||
/// </summary>
|
||||
Confirm,
|
||||
}
|
||||
|
||||
public Phase Stage = Phase.Charged;
|
||||
|
||||
public override uint StateId => States.Player.WaitThrow;
|
||||
|
||||
|
||||
public float ChargedProgress;
|
||||
|
||||
protected override void onEnter()
|
||||
{
|
||||
Stage = Phase.Charged;
|
||||
_owner.PlayerAnimatorCtrl.PrepareThrow = true;
|
||||
_owner.PlayerAnimatorCtrl.FishingFinal = 0;
|
||||
}
|
||||
|
||||
protected override uint onUpdate()
|
||||
{
|
||||
if (Stage == Phase.Charged)
|
||||
{
|
||||
ThrowPowerCharged();
|
||||
}
|
||||
else if (Stage == Phase.Confirm)
|
||||
{
|
||||
//确认蓄力结果,
|
||||
Debug.Log($"确认蓄力结果,ChargedProgress={ChargedProgress}");
|
||||
Params.Add(ChargedProgress);
|
||||
return States.Player.Throw;
|
||||
}
|
||||
|
||||
return base.onUpdate();
|
||||
}
|
||||
|
||||
|
||||
#region 蓄力中
|
||||
|
||||
private void ThrowPowerCharged()
|
||||
{
|
||||
if (ChargedProgress < 1)
|
||||
{
|
||||
ChargedProgress += Time.deltaTime;
|
||||
}
|
||||
else if (ChargedProgress > 1)
|
||||
{
|
||||
ChargedProgress = 1;
|
||||
}
|
||||
|
||||
if (!InputManager.IsOp1)
|
||||
{
|
||||
Stage = Phase.Confirm;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8fad82651b44492eaad947108a421c36
|
||||
timeCreated: 1743687572
|
||||
Reference in New Issue
Block a user