首次提交

This commit is contained in:
Bob.Song
2026-03-05 18:07:55 +08:00
commit e125bb869e
4534 changed files with 563920 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
namespace NBF
{
public class PlayerFight : PlayerStateBase
{
public override uint StateId => States.Player.Fight;
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 270296b331144c239f35a1c94c1d158c
timeCreated: 1733200075

View 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
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a7b4c15a41e54f1fa6241d0ed1841154
timeCreated: 1733200048

View 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;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 894c08d7fbf442adae3342038110aa6a
timeCreated: 1733198057

View File

@@ -0,0 +1,7 @@
namespace NBF
{
public class PlayerShowFish : PlayerStateBase
{
public override uint StateId => States.Player.ShowFish;
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 043b3856636e4706a2382a544bec14c8
timeCreated: 1733199961

View 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);
// }
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8e5ecd3ff4134eec876e22cd708a9615
timeCreated: 1732849520

View 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
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 0ace9df53d3743589fe68b456596eda9
timeCreated: 1733199798

View 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
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8fad82651b44492eaad947108a421c36
timeCreated: 1743687572