using System; using System.Collections; using System.Collections.Generic; using System.Linq; using NBC; // using Obi; using UnityEngine; namespace NBF { public enum LineType { Hand, HandDouble, Spinning, SpinningFloat, } public class FLine : FGearBase { public LineType LineType; [SerializeField] private bool isLureConnect; [SerializeField] private RodLine rodLine; /// /// 主线 /// [SerializeField] private RopeBase fishingRope; /// /// 浮漂和鱼钩线 /// [SerializeField] private RopeBase bobberRope; public LureController Lure; public BobberController Bobber; public JointPinchController PinchController; public float LinelenghtDiferent; protected override void OnInit() { var tipRb = Rod.Asset.LineConnectorRigidbody; if (isLureConnect) { Lure.SetJoint(tipRb); Lure.EnableCollision(false); } else { fishingRope.startAnchor = tipRb; Bobber.SetJoint(tipRb); Lure.SetJoint(Bobber.rbody); Lure.gameObject.SetActive(true); Lure.EnableCollision(false); Lure.SetKinematic(false); } GetComponentsInChildren(includeInactive: true).ToList().ForEach(delegate(Transform i) { i.gameObject.SetActive(true); }); StartCoroutine(LureUseGravity()); if (isLureConnect) { fishingRope.Init(Rod); } else { fishingRope.Init(Rod); bobberRope.Init(Rod); } // rodLine.GenerateLineRendererRope(guides.ToArray(), _LineThickness); } public void InitTest(Rigidbody tipRb) { if (isLureConnect) { Lure.SetJoint(tipRb); Lure.EnableCollision(false); } else { fishingRope.startAnchor = tipRb; Bobber.SetJoint(tipRb); Lure.SetJoint(Bobber.rbody); Lure.gameObject.SetActive(true); Lure.EnableCollision(false); Lure.SetKinematic(false); } GetComponentsInChildren(includeInactive: true).ToList().ForEach(delegate(Transform i) { i.gameObject.SetActive(true); }); StartCoroutine(LureUseGravity()); if (isLureConnect) { fishingRope.Init(Rod); } else { fishingRope.Init(Rod); bobberRope.Init(Rod); } } private IEnumerator LureUseGravity() { yield return 1; Lure.gameObject.SetActive(false); Lure.gameObject.SetActive(true); yield return 1; Lure.RBody.useGravity = true; } public void SetTargetLength(float value) { Log.Error($"SetObiRopeStretch={value}"); if (value > 3) { // value -= 0.2f; } fishingRope.SetLineLength(value); } public void SetLureLength(float value) { Log.Error($"SetObiRopeStretch={value}"); bobberRope.SetLineLength(value); } private void Update() { LinelenghtDiferent = GetLineDistance(); //非钓鱼状态 Rod.PlayerItem.Tension = Mathf.Clamp(LinelenghtDiferent, 0f, 0.05f); } #region Tension private float GetLineDistance() { if (!Bobber.JointRb) { return 0; } // return 0; //第一个节点到竿稍的位置-第一段鱼线长度 return Vector3.Distance(Bobber.transform.position, Bobber.JointRb.transform.position) - fishingRope.GetCurrentLength(); } public float GetTension(float weight) { return weight * GetLineDistance(); } #endregion } }