using System; using UnityEngine; namespace Script.Gameplay.Connect { // 只负责在场景中绘制连接线,并处理信号传递 public class ConnectionLine : MonoBehaviour { [SerializeField] private MonoBehaviour monoPointA; [SerializeField] private MonoBehaviour monoPointB; private IConnectable _pointA; private IConnectable _pointB; private LineRenderer line; private void Awake() { _pointA = monoPointA as IConnectable; _pointB = monoPointB as IConnectable; line = GetComponent(); SetLineRendererPositions(); } public void SetConnectable(IConnectable pointA, IConnectable pointB) { if(pointA == null || pointB == null) { Debug.Log("ConnectionLine requires two valid IConnectable points."); return; } if (pointA == pointB) { Debug.Log("ConnectionLine cannot connect the same point."); return; } _pointA = pointA; _pointB = pointB; pointA.ConnectionLines.Add(this); pointB.ConnectionLines.Add(this); SetLineRendererPositions(); } private void SetLineRendererPositions() { if (_pointA != null && _pointB != null) { line.SetPositions(new Vector3[] { _pointA.GetPosition(), _pointB.GetPosition() }); } } public void SignalActive(bool active, GameObject sender) { if (_pointA != null && _pointB != null) { if (sender == _pointA.GetGameObject()) { _pointB.SignalActive(active, sender); } else if (sender == _pointB.GetGameObject()) { _pointA.SignalActive(active, sender); } } } private void OnDestroy() { _pointA.ConnectionLines.Remove(this); _pointB.ConnectionLines.Remove(this); } } }