128 lines
3.9 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|