/*public RoadPoint[] RequestForRoadPoints() * { * if (!name.Contains("StartPoint")) * { * return null; * } * if (RoadNumber == -1) * { * RoadNumber = Random.Range(0, RoadLists.Length); * } * if (RoadNumber == 0) * { * RoadNumber = -1; * return RoadLists[0].ToArray(); * } * if (TrafficLightController?.CheckLightStatus(IsNS) == TrafficLight.LightStatus.Green) * { * var returnValue = RoadNumber; * RoadNumber = -1; * return RoadLists[returnValue].ToArray(); * } * return null; * }*/ public RoadPoint RequestForRoadPoints(Car sender, out int roadNumber , out TrafficLightRoadController controller, out bool isNS, out bool isRestricted) { isNS = default; controller = default; isRestricted = default; roadNumber = Random.Range(0, NextRoadPoints.Length); if (NextRoadPoints[roadNumber] == null) { return(null); } if (IsTrafficLightRoad) { Police.Enqueue(sender, NextRoadPoints[roadNumber], IsRestricted || roadNumber != 0 , IsNS); return(null); } controller = /*NextRoadPoints[roadNumber].*/ TrafficLightController; isNS = /*NextRoadPoints[roadNumber].*/ IsNS; isRestricted = /*NextRoadPoints[roadNumber].*/ IsRestricted; return(NextRoadPoints[roadNumber]); }
private bool CheckMovable() { if (IsWaiting) { return(false); } //if(!CheckGreenLight()) //{ // return false; //} TrafficLightController = null; int count = 0; foreach (var angleItem in Angles) { foreach (var offetItem in Offsets) { var ray = new Ray(transform.position + transform.right * offetItem, Quaternion.Euler(0, angleItem, 0) * transform.forward); if (Physics.Raycast(ray, //CalculateSpeedPerSecond() * 1.5f 1f , CarMask)) { count++; } if (count >= 1) { IsWaiting = true; Invoke(nameof(Wait), WaitTime); return(false); } } } return(true); }