public void MouseDown(Vector2 mouseFieldPos) { _mouseDownPos = ToDiscret(mouseFieldPos); foreach (var streamingVis in StreamingComponents) { if (streamingVis.Hit(mouseFieldPos)) { int pin; if (streamingVis.MouseSelectInput(_mouseDownPos, out pin)) { _wireCreator = new InputWireCreator(streamingVis, pin, EmploymentMatrix); Childrens.Insert(0, _wireCreator.Wire); return; } if (streamingVis.MouseSelectOutput(_mouseDownPos, out pin)) { _wireCreator = new OutputWireCreator(streamingVis, pin, EmploymentMatrix); Childrens.Insert(0, _wireCreator.Wire); return; } _dragStreamingVisual = new MouseDragVisualObject(streamingVis, _mouseDownPos); streamingVis.IsSelect = !streamingVis.IsSelect; return; } } SelectRectangle.Translate = ToDiscret(mouseFieldPos); SelectRectangle.IsVisible = true; SelectRectangle.Shape = new Vector2[0]; }
public void MouseUp(Vector2 mouseFieldPos) { SelectRectangle.IsVisible = false; var discratePos = ToDiscret(mouseFieldPos); foreach (var streamingVis in StreamingComponents) { if (streamingVis.Hit(discratePos, SelectRectangle.Translate)) { streamingVis.IsSelect = true; } } var mouseUpPos = ToDiscret(mouseFieldPos); if (_dragStreamingVisual != null) { _dragStreamingVisual.MouseMovePos = mouseUpPos; _dragStreamingVisual.Dispose(); _dragStreamingVisual = null; } if (_wireCreator != null) { _wireCreator.MouseMovePos = mouseUpPos; _wireCreator.Connecting(); var wire = _wireCreator.Wire; var isOutputWireCreator = _wireCreator is OutputWireCreator; var isInputWireCreator = _wireCreator is InputWireCreator; _wireCreator.Dispose(); _wireCreator = null; foreach (var streamingVis in StreamingComponents) { if (!streamingVis.Hit(mouseFieldPos)) { continue; } if (isOutputWireCreator) { for (int i = 0; i < streamingVis.InCount; i++) { var div = streamingVis.InputPosition(i) - _mouseDownPos; if (streamingVis.Inputs[i] == null && Math.Abs(div.X) * 2 < Delta && Math.Abs(div.Y) * 2 < Delta) { wire.ConnectTo(0, streamingVis, i); Wires.Add(wire); break; } } } else if (isInputWireCreator) { for (int i = 0; i < streamingVis.OutCount; i++) { var div = streamingVis.OutputPosition(i) - _mouseDownPos; if (streamingVis.Outputs[i] == null && Math.Abs(div.X) * 2 < Delta && Math.Abs(div.Y) * 2 < Delta) { streamingVis.ConnectTo(i, wire, 0); Wires.Add(wire); break; } } } } } }
void Awake() { instance = (WireCreator)Singleton.Setup(this, instance); }