Files
F2RopeLine/Assets/Scripts/FishingLineNode.cs
2026-04-06 20:03:36 +08:00

67 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
public enum FishingLineNodeType
{
Start,
Float,
Weight,
Terminal,
Normal
}
[Serializable]
public class FishingLineLogicalNodeDefinition
{
[SerializeField] private string id = "Node";
[SerializeField] private FishingLineNodeType nodeType = FishingLineNodeType.Normal;
[SerializeField] [Min(0f)] private float distanceFromPrevious = 1f;
[SerializeField] [Min(0)] private int virtualNodeCount = 3;
[SerializeField] [Min(0f)] private float gravityScale = 1f;
[SerializeField] [Range(0f, 1f)] private float damping = 0.04f;
[SerializeField] private Color debugColor = Color.white;
public string Id => id;
public FishingLineNodeType NodeType => nodeType;
public float DistanceFromPrevious => distanceFromPrevious;
public int VirtualNodeCount => virtualNodeCount;
public float GravityScale => gravityScale;
public float Damping => damping;
public Color DebugColor => debugColor;
public void ConfigurePrototype(
string newId,
FishingLineNodeType newNodeType,
float newDistanceFromPrevious,
int newVirtualNodeCount,
float newGravityScale,
float newDamping,
Color newDebugColor)
{
id = newId;
nodeType = newNodeType;
distanceFromPrevious = Mathf.Max(0f, newDistanceFromPrevious);
virtualNodeCount = Mathf.Max(0, newVirtualNodeCount);
gravityScale = Mathf.Max(0f, newGravityScale);
damping = Mathf.Clamp01(newDamping);
debugColor = newDebugColor;
}
}
[Serializable]
public class FishingLineAttachmentBinding
{
[SerializeField] [Min(0)] private int logicalNodeIndex;
[SerializeField] private List<Transform> targets = new List<Transform>();
[SerializeField] private bool alignToLine = true;
[SerializeField] private Vector3 localForwardAxis = Vector3.forward;
[SerializeField] private Vector3 upAxis = Vector3.up;
public int LogicalNodeIndex => logicalNodeIndex;
public IReadOnlyList<Transform> Targets => targets;
public bool AlignToLine => alignToLine;
public Vector3 LocalForwardAxis => localForwardAxis;
public Vector3 UpAxis => upAxis;
}