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; /// /// 相机挂点 /// 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 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(); if (PlayerAnimatorCtrl == null) { PlayerAnimatorCtrl = gameObject.AddComponent(); } Gears = gameObject.GetComponent(); if (Gears == null) { Gears = gameObject.AddComponent(); } LineRenderer = gameObject.GetComponent(); LureTrajectorySimulator = gameObject.AddComponent(); PlayerAnimatorCtrl.Player = this; Arms = GetComponentsInChildren(); } private void Start() { ChangeArm(); InteractiveMainHand(null); Init(); } public void InitData(FPlayerData data) { Data = data; if (data.PlayerID == GameModel.RoleID) { var mainSync = gameObject.AddComponent(); BaseCamera.Main.transform.SetParent(CameraRoot); BaseCamera.Main.transform.localPosition = Vector3.zero; } else { var otherSync = gameObject.AddComponent(); } } #region 初始化相关 private void Init() { InitFsm(); } private void InitFsm() { Fsm = new Fsm("Player", this, true); Fsm.RegisterState(); Fsm.RegisterState(); Fsm.RegisterState(); Fsm.RegisterState(); Fsm.RegisterState(); Fsm.RegisterState(); Fsm.Start(); } #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; } }