Esempio n. 1
0
        /// <summary>
        /// Configures traffic light for and for all lane types at input segmentId, nodeId, and step.
        /// </summary>
        /// <param name="step"></param>
        /// <param name="nodeId"></param>
        /// <param name="segmentId"></param>
        /// <param name="m">Determines which directions are green</param>
        private static void SetupHelper(ITimedTrafficLightsStep step, ushort nodeId, ushort segmentId, GreenDir m)
        {
            bool startNode = (bool)netService.IsStartNode(segmentId, nodeId);

            //get step data for side seg
            ICustomSegmentLights liveSegmentLights = customTrafficLightsManager.GetSegmentLights(segmentId, startNode);

            //for each lane type
            foreach (ExtVehicleType vehicleType in liveSegmentLights.VehicleTypes)
            {
                //set light mode
                ICustomSegmentLight liveSegmentLight = liveSegmentLights.GetCustomLight(vehicleType);
                liveSegmentLight.CurrentMode = LightMode.All;

                TimedLight(nodeId).ChangeLightMode(
                    segmentId,
                    vehicleType,
                    liveSegmentLight.CurrentMode);

                // set light states
                var green = RoadBaseAI.TrafficLightState.Green;
                var red   = RoadBaseAI.TrafficLightState.Red;
                switch (m)
                {
                case GreenDir.AllRed:
                    liveSegmentLight.SetStates(red, red, red);
                    break;

                case GreenDir.AllGreen:
                    liveSegmentLight.SetStates(green, green, green);
                    break;

                case GreenDir.ShortOnly: {
                    // calculate directions
                    ref ExtSegmentEnd segEnd = ref segEndMan.ExtSegmentEnds[segEndMan.GetIndex(segmentId, nodeId)];
                    ref NetNode       node   = ref Singleton <NetManager> .instance.m_nodes.m_buffer[nodeId];
                    segEndMan.CalculateOutgoingLeftStraightRightSegments(ref segEnd, ref node, out bool bLeft, out bool bForward, out bool bRight);
                    bool bShort = RHT ? bRight : bLeft;
                    bool bLong  = RHT ? bLeft : bRight;

                    if (bShort)
                    {
                        SetStates(liveSegmentLight, red, red, green);
                    }
                    else if (bLong)
                    {
                        // go forward instead of short
                        SetStates(liveSegmentLight, green, red, red);
                    }
                    else
                    {
                        Debug.LogAssertion("Unreachable code.");
                        liveSegmentLight.SetStates(green, green, green);
                    }
                    break;
                }
Esempio n. 2
0
 /// <summary>
 /// Configures traffic light for and for all lane types at input segmentId, nodeId, and step.
 /// </summary>
 /// <param name="step"></param>
 /// <param name="nodeId"></param>
 /// <param name="segmentId"></param>
 /// <param name="m">Determines which directions are green</param>
 private static void SetupHelper(ITimedTrafficLightsStep step, ushort nodeId, ushort segmentId, GreenDir m)
 {
     bool        startNode = (bool)ExtSegmentManager.Instance.IsStartNode(segmentId, nodeId);
     ref NetNode netNode   = ref nodeId.ToNode();