/// <summary> /// Connects this terminal to another terminal via a wire. /// </summary> /// <param name="wire">The wire to connect the terminals with.</param> /// <param name="otherTerminal">The terminal to wire to.</param> public override void ConnectWire(WireModel wire, TerminalModel otherTerminal) { if (ConnectedWires.Contains(wire)) { throw new ModelValidationException(this, "Remove this wire from a terminal before connecting it again"); } if (otherTerminal is InputTerminalModel) { throw new ModelValidationException(this, "Connect this terminal to an output instead of an input"); } wire.SinkTerminal = this; wire.SourceTerminal = otherTerminal; otherTerminal.ConnectedWires.Add(wire); ConnectedWires.Add(wire); wire.PropagateData(); }
public override void OnMove(int dx, int dy) { //check for merge var a = new Vector2(Graphics.Position.X + dx, Graphics.Position.Y + dy); Joint j; if ((j = MicroWorld.Logics.GameInputHandler.HasJointAtCoord((int)a.X, (int)a.Y)) != null && ContainingComponents.Count == 0 && j.ContainingComponents.Count == 0) { for (int i = 0; i < ConnectedWires.Count; i++) { if (ConnectedWires[i].J1.ID == ID) { ConnectedWires[i].J1 = j; } else { ConnectedWires[i].J2 = j; } //if (ConnectedWires[i].Graphics.Visible) //{ ConnectedWires[i].RemoveComponentFromVisibilityMap(); if (ConnectedWires[i].J1.ID == ConnectedWires[i].J2.ID) { ConnectedWires[i].Remove(); ConnectedWires.RemoveAt(i); i--; continue; } ConnectedWires[i].Initialize(); if ((ConnectedWires[i].Graphics as Graphics.WireGraphics).DrawPath.Count == 0) { ConnectedWires[i].Remove(); ConnectedWires.RemoveAt(i); i--; continue; } ConnectedWires[i].SetComponentOnVisibilityMap(); //} j.ConnectedWires.Add(ConnectedWires[i]); ConnectedWires.RemoveAt(0); i--; } Remove(); return; } base.OnMove(dx, dy); for (int i = 0; i < ConnectedWires.Count; i++) { if (ConnectedWires[i].Graphics.Visible) { ConnectedWires[i].RemoveComponentFromVisibilityMap(); if (ConnectedWires[i].J1.Graphics.Position == ConnectedWires[i].J2.Graphics.Position) { ConnectedWires[i].Remove(); ConnectedWires.RemoveAt(i); i--; continue; } ConnectedWires[i].Graphics.Initialize(); if ((ConnectedWires[i].Graphics as Graphics.WireGraphics).DrawPath.Count == 0) { int t = ConnectedWires.Count; ConnectedWires[i].Remove(); if (t == ConnectedWires.Count) { ConnectedWires.RemoveAt(i); } i--; continue; } ConnectedWires[i].SetComponentOnVisibilityMap(); } } }