//RandomWay//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    Transform RandomWay(Transform node, int maxWays)
    {
        WaysControl waysControl = currentNode.GetComponent <WaysControl>();


        while (wayActive == false)
        {
            if (maxWays == 1)
            {
                randomWays = 1;
                wayActive  = true;
            }
            else
            {
                randomWays = Random.Range(1, maxWays + 1);

                switch (randomWays)
                {
                case 1:

                    if (waysControl.way1 != lastNode)
                    {
                        oneWay = waysControl.way1Mode == 0 ? true : false;

                        if (int.Parse(waysControl.way1.name) > 1)
                        {
                            wayMove = WayMove.Left;
                        }
                        else
                        {
                            wayMove = WayMove.Right;
                        }

                        node     = waysControl.way1;
                        myStatue = waysControl.way1.GetComponent <Node>().nodeState;

                        wayActive = true;
                    }
                    break;

                case 2:

                    if (waysControl.way2 != lastNode)
                    {
                        oneWay = waysControl.way2Mode == 0 ? true : false;

                        if (int.Parse(waysControl.way2.name) > 1)
                        {
                            wayMove = WayMove.Left;
                        }
                        else
                        {
                            wayMove = WayMove.Right;
                        }

                        node     = waysControl.way2;
                        myStatue = waysControl.way2.GetComponent <Node>().nodeState;

                        wayActive = true;
                    }
                    break;

                case 3:
                    if (waysControl.way3 != lastNode)
                    {
                        oneWay = waysControl.way3Mode == 0 ? true : false;

                        if (int.Parse(waysControl.way3.name) > 1)
                        {
                            wayMove = WayMove.Left;
                        }
                        else
                        {
                            wayMove = WayMove.Right;
                        }

                        node     = waysControl.way3;
                        myStatue = waysControl.way3.GetComponent <Node>().nodeState;

                        wayActive = true;
                    }
                    break;

                case 4:
                    if (waysControl.way4 != lastNode)
                    {
                        oneWay = waysControl.way4Mode == 0 ? true : false;

                        if (int.Parse(waysControl.way4.name) > 1)
                        {
                            wayMove = WayMove.Left;
                        }
                        else
                        {
                            wayMove = WayMove.Right;
                        }

                        node     = waysControl.way4;
                        myStatue = waysControl.way4.GetComponent <Node>().nodeState;

                        wayActive = true;
                    }
                    break;
                }
            }
        }


        wayActive = false;

        maxWidthDistance = maxWidthDistance - 0.1f;

        if (lastNode != null)
        {
            widthDistanceRefrash(lastNode.GetComponent <Node>());
        }

        return(node);
    }
Ejemplo n.º 2
0
    void AIControl()
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////

        if (nextNode)
        {
            if (nextNode.GetComponent <WaysControl>())
            {
                if (Vector3.Distance(raycastPoint.position, nextNode.position) < nextNodeDistance && currentNode != nextNode)
                {
                    currentNode = nextNode;
                }
            }
            else
            {
                if (Vector3.Distance(raycastPoint.position, nextNode.position) < nextNodeDistance && nextNode != currentNode)
                {
                    currentNode = nextNode;
                }
            }
        }


        //////////////////////////////////////////////////////////////////////////////////////////////////


        if (currentNode != null)
        {
            if (currentNode.GetComponent <WaysControl>())
            {
                if (!waysActive)
                {
                    var waysScript = currentNode.GetComponent <WaysControl>();
                    //nextNode = RandomWay(nextNode, waysScript.ways);
                    wayMove    = nextWayMove;
                    nextNode   = nextWay;
                    waysActive = true;
                }
            }
            else
            {
                nodeComponenet = currentNode.GetComponent <Node>();
                widthDistanceRefrash(currentNode.GetComponent <Node>());


                if (nodeComponenet)
                {
                    if (((nodeComponenet.nodeState == "NextPoint" && myStatue == "PreviousPoint") ||
                         (nodeComponenet.nodeState == "PreviousPoint" && myStatue == "NextPoint")) && nodeComponenet.trafficMode != TrafficMode.Go)
                    {
                        trafficStop     = true;
                        AIBrake         = true;
                        currentFwdSpeed = -1.0f;
                    }
                }

                if (wayMove == WayMove.Right)
                {
                    lastNode = currentNode; nextNode = nodeComponenet.nextNode;
                }
                else if (wayMove == WayMove.Left)
                {
                    lastNode = currentNode; nextNode = nodeComponenet.previousNode;
                }

                waysActive = false;
            }
        }
    }