3 using System.Collections.Generic;
5 using Microsoft.Xna.Framework;
10 internal class CircuitBoxInputConnection : CircuitBoxConnection
16 public override bool IsOutput =>
true;
17 public readonly List<CircuitBoxConnection> ExternallyConnectedTo =
new();
19 public CircuitBoxInputConnection(Vector2 position,
Connection connection, CircuitBox box) : base(position, connection, box) { }
21 public override void ReceiveSignal(
Signal signal)
23 foreach (CircuitBoxConnection connector
in ExternallyConnectedTo)
25 if (connector is CircuitBoxOutputConnection output)
27 output.ReceiveSignal(signal);
35 internal class CircuitBoxOutputConnection : CircuitBoxConnection
41 public override bool IsOutput =>
false;
43 public CircuitBoxOutputConnection(Vector2 position,
Connection connection, CircuitBox circuitBox) : base(position, connection, circuitBox) { }
45 public override void ReceiveSignal(
Signal signal) => CircuitBox.Item.SendSignal(signal,
Connection);
48 internal class CircuitBoxNodeConnection : CircuitBoxConnection
52 public CircuitBoxComponent Component;
56 public CircuitBoxNodeConnection(Vector2 position, CircuitBoxComponent component,
Connection connection, CircuitBox circuitBox) : base(position, connection, circuitBox)
58 Component = component;
64 internal abstract partial class CircuitBoxConnection
68 public abstract bool IsOutput {
get; }
70 public RectangleF Rect;
72 private Vector2 position;
74 public readonly List<CircuitBoxConnection> ExternallyConnectedFrom =
new();
76 public static readonly
float Size = CircuitBoxSizes.ConnectorSize;
78 public Vector2 Position
83 Rect.X = value.X - Rect.Width / 2f;
84 Rect.Y = value.Y - Rect.Height / 2f;
89 public float Length {
get;
private set; }
91 public Vector2 AnchorPoint
92 =>
new Vector2(IsOutput ? Rect.Right + CircuitBoxSizes.AnchorOffset : Rect.Left - CircuitBoxSizes.AnchorOffset, Rect.Center.Y);
94 public readonly CircuitBox CircuitBox;
96 protected CircuitBoxConnection(Vector2 position,
Connection connection, CircuitBox circuitBox)
99 Rect.Width = Rect.Height = Size;
101 CircuitBox = circuitBox;
102 InitProjSpecific(circuitBox);
105 private partial
void InitProjSpecific(CircuitBox circuitBox);
107 public abstract void ReceiveSignal(
Signal signal);
109 public bool Contains(Vector2 pos)
112 y = -(Rect.Y + Rect.Height),
114 height = Rect.Height;
116 RectangleF rect =
new(x, y, width, height);
118 return rect.Contains(pos);
static void SendSignalIntoConnection(Signal signal, Connection conn)
bool WireSlotsAvailable()