175 lines
3.9 KiB
C#
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;
|
|
}
|
|
} |