/*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]);
    }
示例#2
0
    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);
    }