using System; using System.Collections.Generic; using System.Text; using UnityEngine; namespace NBF { public enum LineType { Hand, HandDouble, Spinning, SpinningFloat, } public class FishingLineSolver : FGearBase { [SerializeField] public LineType LineType; [Header("References")] [SerializeField] private Transform anchorTransform; [SerializeField] private FishingLineNode[] logicalNodes = Array.Empty(); public JointPinchController PinchController; #region LineNode /// /// 当前配置的逻辑节点只读列表。 /// 外部可读取节点顺序,但不应直接修改数组内容。 /// public IReadOnlyList LogicalNodes => logicalNodes; /// /// 获取指定顺序索引的逻辑节点。 /// 索引基于 logicalNodes 配置顺序;超出范围或节点为空时返回 null。 /// public FishingLineNode GetLogicalNode(int logicalIndex) { if (logicalNodes == null || logicalIndex < 0 || logicalIndex >= logicalNodes.Length) { return null; } return logicalNodes[logicalIndex]; } /// /// 获取当前起点逻辑节点。 /// 会返回配置顺序中第一个非空节点。 /// public FishingLineNode GetStartNode() { return FindFirstValidLogicalNode(); } /// /// 获取当前终点逻辑节点。 /// 会返回配置顺序中最后一个非空节点。 /// public FishingLineNode GetEndNode() { return FindLastValidLogicalNode(); } private FishingLineNode FindFirstValidLogicalNode() { if (logicalNodes == null) { return null; } for (var i = 0; i < logicalNodes.Length; i++) { if (logicalNodes[i] != null) { return logicalNodes[i]; } } return null; } private FishingLineNode FindLastValidLogicalNode() { if (logicalNodes == null) { return null; } for (var i = logicalNodes.Length - 1; i >= 0; i--) { if (logicalNodes[i] != null) { return logicalNodes[i]; } } return null; } #endregion protected override void OnInit() { var tipRb = Rod.Asset.LineConnectorRigidbody; anchorTransform = tipRb.transform; } } }