using UnityEngine; namespace NBF { public class FishingLineTestController : MonoBehaviour { [Header("References")] [SerializeField] private FishingLineSolver solver; [Header("Length Test")] [Min(0f)] [SerializeField] private float initialFirstSegmentLength = 1.2f; [Min(0f)] [SerializeField] private float minFirstSegmentLength = 0.1f; [Min(0f)] [SerializeField] private float maxFirstSegmentLength = 5f; [Min(0f)] [SerializeField] private float lineAdjustSpeed = 1f; [Header("Input")] [SerializeField] private KeyCode extendKey = KeyCode.UpArrow; [SerializeField] private KeyCode retractKey = KeyCode.DownArrow; private float targetFirstSegmentLength; private void Reset() { if (solver == null) { solver = GetComponent(); } } private void Start() { if (solver == null) { return; } targetFirstSegmentLength = Mathf.Clamp(initialFirstSegmentLength, minFirstSegmentLength, maxFirstSegmentLength); solver.SetLenght(targetFirstSegmentLength); solver.BuildLine(); solver.OnLineBreakRequested += OnLineBreakRequested; } private void OnLineBreakRequested(FishingLineSolver lineSolver) { Debug.LogError( $"当前拉力达到极限,切线,极限时间={lineSolver.LimitStateTime} CurrentStretchLength={lineSolver.CurrentStretchLength} CurrentTensionRatio={lineSolver.CurrentTensionRatio}"); var endNode = lineSolver.GetEndNode(); if (endNode != null) { endNode.Body.isKinematic = false; } } private void Update() { if (solver == null) { return; } var input = 0f; if (Input.GetKey(extendKey)) { input += 1f; } if (Input.GetKey(retractKey)) { input -= 1f; } if (!Mathf.Approximately(input, 0f)) { targetFirstSegmentLength += input * lineAdjustSpeed * Time.deltaTime; targetFirstSegmentLength = Mathf.Clamp(targetFirstSegmentLength, minFirstSegmentLength, maxFirstSegmentLength); solver.SetLenght(targetFirstSegmentLength); } if (solver.CurrentBreakStretchPercent > 0) { // Debug.LogError(solver.CurrentBreakStretchPercent); } // if (solver.IsAtLimit) // { // if (solver.CurrentStretchLength > 0.04) // Debug.LogError($"CurrentStretchLength={solver.CurrentStretchLength}"); // if (solver.CurrentStretchLength > 0.1 && solver.LimitStateTime > 2f) // { // Debug.LogError( // $"当前拉力达到极限,切线,极限时间={solver.LimitStateTime} CurrentStretchLength={solver.CurrentStretchLength} CurrentTensionRatio={solver.CurrentTensionRatio}"); // var endNode = solver.GetEndNode(); // if (endNode != null) // { // endNode.Body.isKinematic = false; // } // } // } } } }