Esempio n. 1
0
 public void RemoveConnections()
 {
     if (myConnection != null)
     {
         myConnection.DeleteSelf();
         myMaster.RemoveConnectionAtPort(myType, myIndex);
     }
     myConnection   = null;
     myRend.enabled = false;
     pathActive     = false;
 }
    public override void BeginClickConnect(NodeGfx node, NodePortGfx port)
    {
        if (prevNode == null)
        {
            prevPort = port;
            prevNode = node;
        }
        else if (prevPort == port)
        {
            prevNode = null;
            prevPort.ClickConnectDone();
            prevPort = null;
        }
        else
        {
            bool canConnect = false;

            switch (port.myType)
            {
            case NodePortGfx.PortType.craftInput:
                if (prevPort.myType == NodePortGfx.PortType.itemOutput)
                {
                    canConnect = true;
                }
                break;

            case NodePortGfx.PortType.craftOutput:
                if (prevPort.myType == NodePortGfx.PortType.itemInput)
                {
                    canConnect = true;
                }
                break;

            case NodePortGfx.PortType.itemInput:
                if (prevPort.myType == NodePortGfx.PortType.craftOutput)
                {
                    canConnect = true;
                }
                break;

            case NodePortGfx.PortType.itemOutput:
                if (prevPort.myType == NodePortGfx.PortType.craftInput)
                {
                    canConnect = true;
                }
                break;
            }

            if (canConnect)
            {
                CraftingNode craft;
                ItemNode     item;
                bool         isInput;

                // Figure out what port is which, and whether we are dealing with an input or not
                if (prevNode is CraftingNodeGfx)
                {
                    craft = prevNode.myNode as CraftingNode;
                    item  = node.myNode as ItemNode;
                    if (prevPort.myType == NodePortGfx.PortType.craftInput)
                    {
                        isInput = true;
                    }
                    else
                    {
                        isInput = false;
                    }
                }
                else
                {
                    craft = node.myNode as CraftingNode;
                    item  = prevNode.myNode as ItemNode;
                    if (port.myType == NodePortGfx.PortType.craftInput)
                    {
                        isInput = true;
                    }
                    else
                    {
                        isInput = false;
                    }
                }

                bool isPrevConnected = prevPort.myConnection != null;
                bool isThisConnected = port.myConnection != null;


                // Actually add the input/ outputs as necessary.

                ConnectPorts(prevPort, port);

                if (prevNode is CraftingNodeGfx)
                {
                    if (!isPrevConnected)
                    {
                        (prevNode as CraftingNodeGfx).AddPort(isInput);
                    }
                    if (!isThisConnected)
                    {
                        (node as ItemNodeGfx).AddPort(isInput);
                    }
                }
                else
                {
                    if (!isThisConnected)
                    {
                        (node as CraftingNodeGfx).AddPort(isInput);
                    }
                    if (!isPrevConnected)
                    {
                        (prevNode as ItemNodeGfx).AddPort(isInput);
                    }
                }

                if (isInput)
                {
                    craft.inputs.Add(new CountedItemNode(item, 1));
                    item.outputs.Add(craft);
                }
                else
                {
                    craft.outputs.Add(new CountedItemNode(item, 1));
                    item.inputs.Add(craft);
                }

                if (prevNode is CraftingNodeGfx)
                {
                    (prevNode as CraftingNodeGfx).UpdateVisuals();
                }
                else
                {
                    (node as CraftingNodeGfx).UpdateVisuals();
                }

                prevNode = null;
                prevPort = null;
            }
            else
            {
                port.ClickConnectDone();
                bool isDeletion = false;
                if (prevPort)
                {
                    prevPort.ClickConnectDone();
                    if (prevNode = node)
                    {
                        //If we have selected another port on the same node, delete the port if its not the last port
                        if (prevPort.transform.GetSiblingIndex() + 1 < prevPort.transform.parent.childCount)
                        {
                            prevPort.RemoveConnections();
                            prevPort.DeleteSelf();
                            isDeletion = true;
                        }
                    }
                }

                if (!isDeletion)
                {
                    prevPort = port;
                    prevNode = node;
                    prevPort.BeginClickConnect();
                }
                else
                {
                    prevPort = null;
                    prevNode = null;
                }
            }
        }
    }