Esempio n. 1
0
 /// <summary>
 ///     Construtor.
 /// </summary>
 /// <param name="console">Define as cores padrão no console.</param>
 /// <param name="translate">Manipula traduções de texto.</param>
 /// <param name="loaderAssembly">Carregador de assembly em disco para a memória.</param>
 /// <param name="multipleInput">Gerencia múltiplos IInput.</param>
 /// <param name="multipleOutput">Gerencia múltiplos IOutput.</param>
 /// <param name="multipleModule">Gerencia múltiplos IModule.</param>
 public Engine(
     IConsole console,
     ITranslate translate,
     ILoaderAssembly loaderAssembly,
     IMultipleInput multipleInput,
     IMultipleOutput multipleOutput,
     IMultipleModule multipleModule)
 {
     _console        = console;
     _translate      = translate;
     _loaderAssembly = loaderAssembly;
     _multipleInput  = multipleInput;
     _multipleOutput = multipleOutput;
     _multipleModule = multipleModule;
 }
Esempio n. 2
0
        public virtual Node NextNode()
        {
            IOutput sOutputNode = this as IOutput;

            if (sOutputNode != null)
            {
                return(CheckNextNodePort(sOutputNode.OutputPort));
            }

            IMultipleOutput mOutputNode = this as IMultipleOutput;

            if (mOutputNode != null)
            {
                return(mOutputNode.NextNode());
            }

            return(null);
        }
        public void OnBeforeSerialize()
        {
            if (_endNode == null && End != null && End.Node != null)
            {
                _endNode = End.Node;
            }
            if (_startNode == null && Start != null && Start.Node != null)
            {
                _startNode = Start.Node;
            }

            if (_startNode == null)
            {
                //Debug.Log("Null shit node");
                return;
            }

            if (Start == null)
            {
                //Debug.Log("Null output port?");
                return;
            }

            IMultipleOutput mOutput = _startNode.PortHandler.multipleOutputNode;

            if (mOutput != null)
            {
                //OutputPort[] outputs = mOutput.GetOutputs().ToArray();
                //_contingencyPlan = Array.IndexOf(outputs, Start);
                //List<OutputPort> outputs = mOutput.GetOutputs().ToList();
                //_contingencyPlan = outputs.IndexOf(Start);

                List <int> outputs = ElementsOf(mOutput.GetOutputs(), outputPort => outputPort.ID).ToList();
                _contingencyPlan = outputs.IndexOf(Start.ID);

                //if (_contingencyPlan != -1)
                //Debug.Log(mOutput + " " + _contingencyPlan);
                //else Debug.LogError("WHY!?");
            }
        }
        public static void FixNodeOutput(OutputPort output, int contingencyPlan)
        {
            Node node = output.Node;

            if (node == null)
            {
                Debug.LogWarning("Null node on attempt to fix output port.");
                return;
            }

            if (node.PortHandler.outputNode != null)
            {
                node.PortHandler.outputNode.OutputPort = output;
            }
            else if (node.PortHandler.multipleOutputNode != null)
            {
                IMultipleOutput mOutput = node.PortHandler.multipleOutputNode;
                OutputPort[]    outputs = mOutput.GetOutputs().ToArray();
                if (contingencyPlan >= 0 && contingencyPlan < outputs.Length)
                {
                    mOutput.ReplacePort(outputs[contingencyPlan], output);
                }
            }
        }
Esempio n. 5
0
 /// <summary>
 ///     Construtor.
 /// </summary>
 /// <param name="multipleOutput">Gerencia múltiplas instâncias da mesma interface: IOutput</param>
 /// <param name="multipleInput">Gerencia múltiplas instâncias da mesma interface: IInput</param>
 public Interaction(IMultipleOutput multipleOutput, IMultipleInput multipleInput)
 {
     _multipleOutput = multipleOutput;
     _multipleInput  = multipleInput;
 }
        private void CheckHoveringAndSelection()
        {
            if (_isLayoutEvent)
            {
                return;
            }

            ResetHover();

            bool isDraggingGrid = _currentActivity == Activity.DraggingGrid;

            Rect          selectionRect = _selectionRect;
            Vector2       mousePosition = _mousePosition;
            List <Object> boxSelected   = new List <Object>();

            //TODO Investigate reverse recognition not working!?
            //Never mind it works, it's just my architecture works bottom-top,
            //instead of top-bottom-or-stop
            //Why? Cause hovering
            //TODO Investigate alternatives for conversion
            for (int i = 0; i < Graph.NodeCount; i++)
            {
                Node       node       = Graph.GetNode(i);
                NodeEditor nodeEditor = NodeEditor.GetEditor(node);

                Vector2 size;
                if (_nodeSizes.TryGetValue(node, out size))
                {
                    Rect nodeRect = new Rect(node.Position, size);
                    nodeRect = GridToWindowRect(nodeRect);
                    if (nodeRect.Contains(mousePosition))
                    {
                        _hoveredNode = node;
                    }
                    if (isDraggingGrid && nodeRect.Overlaps(selectionRect))
                    {
                        boxSelected.Add(node);
                    }
                }

                //Check hovering over ports
                var inputNode = node as IInput;
                if (inputNode != null)
                {
                    InputPort input     = inputNode.InputPort;
                    Rect      inputRect = nodeEditor.GetPortRect(input);
                    //inputRect.position += node.Position;
                    inputRect = GridToWindowRect(inputRect);
                    if (inputRect.Contains(mousePosition))
                    {
                        HoveredPort = input;
                    }
                }

                IOutput sOutputNode = node as IOutput;
                if (sOutputNode != null)
                {
                    OutputPort output     = sOutputNode.OutputPort;
                    Rect       outputRect = nodeEditor.GetPortRect(output);
                    //outputRect.position += node.Position;
                    outputRect = GridToWindowRect(outputRect);
                    if (outputRect.Contains(mousePosition))
                    {
                        HoveredPort = output;
                    }
                }

                IMultipleOutput mOutputNode = node as IMultipleOutput;
                if (mOutputNode != null)
                {
                    var outputs = mOutputNode.GetOutputs();
                    foreach (OutputPort output in outputs)
                    {
                        Rect outputRect = nodeEditor.GetPortRect(output);
                        //outputRect.position += node.Position;
                        outputRect = GridToWindowRect(outputRect);
                        if (outputRect.Contains(mousePosition))
                        {
                            HoveredPort = output;
                        }
                    }
                }
            }

            for (int i = 0; i < Graph.ConnectionCount; i++)
            {
                Connection connection = Graph.GetConnection(i);
                if (connection == null)
                {
                    Debug.Log("Null connection at index " + i);
                    OnNull(Graph);
                    continue;
                }

                Vector2 start = NodeEditor.FindPortRect(connection.Start).center;
                Vector2 end   = NodeEditor.FindPortRect(connection.End).center;
                start = GridToWindowPosition(start);
                end   = GridToWindowPosition(end);

                //if (OtherUtilities.PointOverlapBezier(mousePosition, start, end, NodePreferences.CONNECTION_WIDTH))
                if (LineSegment.WideLineSegmentPointCheck(mousePosition, start, end, NodePreferences.CONNECTION_WIDTH * 2 / Zoom))
                {
                    _hoveredConnection = connection;
                }

                //DONE: Add range percentage overlap check, as just overlapping might be too annoying.
                if (isDraggingGrid && LineSegment.LineRectOverlapPercentageCheck(selectionRect, start, end) > 0.3f)
                {
                    boxSelected.Add(connection);
                }


                Rect[] modifierRects;
                if (!_connectionModifierRects.TryGetValue(connection, out modifierRects))
                {
                    continue;
                }

                for (int j = 0; j < connection.InstructionCount; j++)
                {
                    Instruction mod  = connection.GetInstruction(j);
                    Rect        rect = GridToWindowRect(modifierRects[j]);
                    if (rect.Contains(mousePosition))
                    {
                        _hoveredInstruction = mod;
                    }
                    if (isDraggingGrid && rect.Overlaps(selectionRect))
                    {
                        boxSelected.Add(mod);
                    }
                }
            }

            //return;
            if (isDraggingGrid)
            {
                if (_cachedEvent.control || _cachedEvent.shift)
                {
                    boxSelected.AddRange(_cachedSelectedObjects);
                }
                Selection.objects = boxSelected.ToArray();
            }
            else
            {
                _selectionRect = Rect.zero;
            }
        }
Esempio n. 7
0
 public PortHandler(Node node)
 {
     inputNode          = node as IInput;
     outputNode         = node as IOutput;
     multipleOutputNode = node as IMultipleOutput;
 }