refactor(Facility): 使用继承让所有机关都拥有了独自的 可交互 可编辑 可连接设定。大面积重构

This commit is contained in:
2025-10-22 17:34:58 +08:00
parent 3cdd41ea49
commit 3a0b202325
61 changed files with 1516 additions and 889 deletions

View File

@@ -1,10 +1,11 @@
using System;
using UnityEngine;
using Script.Gameplay.Interface;
namespace Script.Gameplay.Connect
{
// 只负责在场景中绘制连接线,并处理信号传递
public class ConnectionLine : MonoBehaviour
public class ConnectionLine : MonoBehaviour, ISignalReceiver, ISignalSender
{
[SerializeField] private MonoBehaviour monoPointA;
[SerializeField] private MonoBehaviour monoPointB;
@@ -25,7 +26,7 @@ namespace Script.Gameplay.Connect
public void SetConnectable(IConnectable pointA, IConnectable pointB)
{
if(pointA == null || pointB == null)
if (pointA == null || pointB == null)
{
Debug.Log("ConnectionLine requires two valid IConnectable points.");
return;
@@ -41,7 +42,7 @@ namespace Script.Gameplay.Connect
pointB.ConnectionLines.Add(this);
SetLineRendererPositions();
}
private void SetLineRendererPositions()
{
if (_pointA != null && _pointB != null)
@@ -53,26 +54,46 @@ namespace Script.Gameplay.Connect
});
}
}
public void SignalActive(bool active, GameObject sender)
{
if (_pointA != null && _pointB != null)
{
if (sender == _pointA.GetGameObject())
{
_pointB.OnSignalReceived(active, sender);
}
else if (sender == _pointB.GetGameObject())
{
_pointA.OnSignalReceived(active, sender);
}
}
}
// public void SignalActive(bool active, GameObject sender)
// {
// if (_pointA != null && _pointB != null)
// {
// if (sender == _pointA.GetGameObject())
// {
// _pointB.OnSignalReceived(active, sender);
// }
// else if (sender == _pointB.GetGameObject())
// {
// _pointA.OnSignalReceived(active, sender);
// }
// }
// }
private void OnDestroy()
{
_pointA.ConnectionLines.Remove(this);
_pointB.ConnectionLines.Remove(this);
}
public void OnSignalReceived(bool active, GameObject sender)
{
SendSignal(active,this.gameObject);
}
public void SendSignal(bool active,GameObject sender)
{
var a = _pointA as ISignalReceiver;
var b = _pointB as ISignalReceiver;
ISignalReceiver senderR = sender.GetComponent<ISignalReceiver>();
if (a != senderR)
{
a.OnSignalReceived(active, this.gameObject);
}
if (b != senderR)
{
b.OnSignalReceived(active, this.gameObject);
}
}
}
}