//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); }
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; } } }