Files
F2RopeLine2/Assets/Scripts/FishingLine/FishingLineTestController.cs
2026-04-06 22:12:41 +08:00

128 lines
3.9 KiB
C#

using UnityEngine;
namespace F2RopeLine2.FishingLine
{
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;
[SerializeField] private KeyCode rebuildKey = KeyCode.R;
[Header("Debug")]
[SerializeField] private bool showGui = true;
private float targetFirstSegmentLength;
private void Reset()
{
if (solver == null)
{
solver = GetComponent<FishingLineSolver>();
}
}
private void Start()
{
if (solver == null)
{
return;
}
targetFirstSegmentLength = Mathf.Clamp(initialFirstSegmentLength, minFirstSegmentLength, maxFirstSegmentLength);
solver.SetFirstSegmentLength(targetFirstSegmentLength);
solver.BuildLine();
}
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.SetFirstSegmentLength(targetFirstSegmentLength);
}
if (Input.GetKeyDown(rebuildKey))
{
solver.RebuildNow();
}
}
private void OnGUI()
{
if (!showGui || solver == null)
{
return;
}
GUILayout.BeginArea(new Rect(16f, 16f, 280f, 180f), GUI.skin.box);
GUILayout.Label("Fishing Line Test");
GUILayout.Label($"First Segment Length: {solver.FirstSegmentLength:F2} m");
GUILayout.Label($"Total Line Length: {solver.TotalLineLength:F2} m");
GUILayout.Label($"Keys: {extendKey} / {retractKey} / {rebuildKey}");
var nextLength = GUILayout.HorizontalSlider(
targetFirstSegmentLength,
minFirstSegmentLength,
maxFirstSegmentLength);
if (!Mathf.Approximately(nextLength, targetFirstSegmentLength))
{
targetFirstSegmentLength = nextLength;
solver.SetFirstSegmentLength(targetFirstSegmentLength);
}
if (GUILayout.Button("Rebuild Line"))
{
solver.RebuildNow();
}
GUILayout.BeginHorizontal();
if (GUILayout.Button("Retract"))
{
targetFirstSegmentLength = Mathf.Max(minFirstSegmentLength, targetFirstSegmentLength - 0.1f);
solver.SetFirstSegmentLength(targetFirstSegmentLength);
}
if (GUILayout.Button("Extend"))
{
targetFirstSegmentLength = Mathf.Min(maxFirstSegmentLength, targetFirstSegmentLength + 0.1f);
solver.SetFirstSegmentLength(targetFirstSegmentLength);
}
GUILayout.EndHorizontal();
GUILayout.EndArea();
}
}
}