Files
Fishing2/Assets/Scripts/Fishing/Player/FPlayer.cs
2025-05-10 12:49:47 +08:00

175 lines
3.9 KiB
C#

using System.Collections.Generic;
using NBC;
using NBF;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using RootMotion.FinalIK;
using UnityEngine;
public partial class FPlayer : MonoBehaviour
{
public FPlayerData Data;
/// <summary>
/// 相机挂点
/// </summary>
public Transform CameraRoot;
public Transform rHandRodJoiner => MainArm.RodContainer;
public FRod assignRod;
// [HideInInspector] public FRod currentRod;
private CCDIK interactionCCDIK;
private float interactionTargetWeight;
public bool isLeftHandVisable;
[HideInInspector] public float handPullUp;
public Fsm<FPlayer> Fsm { get; private set; }
private PlayArm[] Arms;
public PlayArm MainArm { get; private set; }
public PlayArm MinorArm { get; private set; }
public PlayerAnimator PlayerAnimatorCtrl;
public FPlayerUseGear Gears;
public LineRenderer LineRenderer;
public LureTrajectorySimulator LureTrajectorySimulator;
private void Awake()
{
PlayerAnimatorCtrl = gameObject.GetComponent<PlayerAnimator>();
if (PlayerAnimatorCtrl == null)
{
PlayerAnimatorCtrl = gameObject.AddComponent<PlayerAnimator>();
}
Gears = gameObject.GetComponent<FPlayerUseGear>();
if (Gears == null)
{
Gears = gameObject.AddComponent<FPlayerUseGear>();
}
LineRenderer = gameObject.GetComponent<LineRenderer>();
LureTrajectorySimulator = gameObject.AddComponent<LureTrajectorySimulator>();
PlayerAnimatorCtrl.Player = this;
Arms = GetComponentsInChildren<PlayArm>();
}
private void Start()
{
ChangeArm();
InteractiveMainHand(null);
Init();
}
public void InitData(FPlayerData data)
{
Data = data;
if (data.PlayerID == GameModel.RoleID)
{
var mainSync = gameObject.AddComponent<FPlayerMainSync>();
BaseCamera.Main.transform.SetParent(CameraRoot);
BaseCamera.Main.transform.localPosition = Vector3.zero;
}
else
{
var otherSync = gameObject.AddComponent<FPlayerOtherSync>();
}
}
#region
private void Init()
{
InitFsm();
}
private void InitFsm()
{
Fsm = new Fsm<FPlayer>("Player", this, true);
Fsm.RegisterState<PlayerIdle>();
Fsm.RegisterState<PlayerThrow>();
Fsm.RegisterState<PlayerFishing>();
Fsm.RegisterState<PlayerFight>();
Fsm.RegisterState<PlayerShowFish>();
Fsm.RegisterState<PlayerWaitThrow>();
Fsm.Start<PlayerIdle>();
}
#endregion
public void ChangeArm()
{
var isLeftHand = PlayerAnimatorCtrl.LeftHand;
foreach (var arm in Arms)
{
if (isLeftHand)
{
if (arm.IsLeft)
{
MainArm = arm;
}
else
{
MinorArm = arm;
}
}
else
{
if (!arm.IsLeft)
{
MainArm = arm;
}
else
{
MinorArm = arm;
}
}
}
}
private void Update()
{
Fsm?.Update();
// CheckAndConnectRod();
MoveTowardsInteraction();
if (CanChangeGear())
{
Gears?.Update();
}
if (Input.GetKeyDown(KeyCode.F))
{
var points = LureTrajectorySimulator.Test(BaseCamera.Main.transform);
// FishingCastInput exampleInput = FishingCastInput.Default();
// points = LureTrajectorySimulator.CalculateTrajectory(exampleInput);
}
}
public bool CanChangeGear()
{
return true;
}
}