Exemplo n.º 1
0
    public void FindClosestNodes(NodeSearchSettings searchSettings)
    {
        Node[] nodeArray      = FindObjectsOfType <Node>();
        int    numRailsWeNeed = _maxRails - rails.Count;
        List <NodeAndDistance> closestNodes = GetListOfClosestNodes(nodeArray, numRailsWeNeed, searchSettings);

        ConnectMeToListOfNodes(closestNodes);
    }
Exemplo n.º 2
0
 protected bool PassesRailLimitCheck(Node n, NodeSearchSettings searchSettings)
 {
     if (searchSettings.includeRegardlessOfMaxRails)
     {
         return(true);
     }
     else
     {
         return(!n.HasFullRails());
     }
 }
Exemplo n.º 3
0
    protected bool IsNodeOkayToConnectTo(Node n, NodeSearchSettings searchSettings)
    {
        if (PassesRailLimitCheck(n, searchSettings))
        {
            if (n != this)
            {
                if (!IsConnectedTo(n))
                {
                    if (!(n is PortalNode))
                    {
                        return(true);
                    }
                }
            }
        }

        return(false);
    }
Exemplo n.º 4
0
    private List <NodeAndDistance> GetListOfClosestNodes(Node[] nodeArray, int numRailsWeNeed, NodeSearchSettings searchSettings)
    {
        List <NodeAndDistance> closestNodes = new List <NodeAndDistance>();

        for (int i = 0; i < nodeArray.Length; i++)
        {
            if (IsNodeOkayToConnectTo(nodeArray[i], searchSettings))
            {
                float distance = Vector3.Distance(transform.position, nodeArray[i].transform.position);

                if (distance < _maxNodeDistance)
                {
                    if (closestNodes.Count < numRailsWeNeed)
                    {
                        closestNodes.Add(new NodeAndDistance(nodeArray[i], distance));
                        continue;
                    }
                    else
                    {
                        for (int j = 0; j < closestNodes.Count; j++)
                        {
                            // hmmm we can make this part better eventually by replacing the one that's furthest away instead of the first one we happen to find...
                            if (distance < closestNodes[j].distance)
                            {
                                closestNodes[j] = new NodeAndDistance(nodeArray[i], distance);
                                break;
                            }
                        }

                        continue;
                    }
                }
            }
        }

        return(closestNodes);
    }