Exemple #1
0
        public static IRecordable FixPrioritySigns(
            PrioritySignsTool.PrioritySignsMassEditMode massEditMode,
            List <ushort> segmentList)
        {
            if (segmentList == null || segmentList.Count == 0)
            {
                return(null);
            }

            IRecordable record = RecordRoad(segmentList);

            var primaryPrioType   = PriorityType.None;
            var secondaryPrioType = PriorityType.None;

            switch (massEditMode)
            {
            case PrioritySignsTool.PrioritySignsMassEditMode.MainYield: {
                primaryPrioType   = PriorityType.Main;
                secondaryPrioType = PriorityType.Yield;
                break;
            }

            case PrioritySignsTool.PrioritySignsMassEditMode.MainStop: {
                primaryPrioType   = PriorityType.Main;
                secondaryPrioType = PriorityType.Stop;
                break;
            }

            case PrioritySignsTool.PrioritySignsMassEditMode.YieldMain: {
                primaryPrioType   = PriorityType.Yield;
                secondaryPrioType = PriorityType.Main;
                break;
            }

            case PrioritySignsTool.PrioritySignsMassEditMode.StopMain: {
                primaryPrioType   = PriorityType.Stop;
                secondaryPrioType = PriorityType.Main;
                break;
            }
            }

            IExtSegmentEndManager segEndMan = Constants.ManagerFactory.ExtSegmentEndManager;

            void ApplyPrioritySigns(ushort segmentId, bool startNode)
            {
                ushort nodeId = netService.GetSegmentNodeId(
                    segmentId,
                    startNode);

                TrafficPriorityManager.Instance.SetPrioritySign(
                    segmentId,
                    startNode,
                    primaryPrioType);

                for (int i = 0; i < 8; ++i)
                {
                    ushort otherSegmentId = nodeId.ToNode().GetSegment(i);
                    if (otherSegmentId == 0 ||
                        otherSegmentId == segmentId ||
                        segmentList.Contains(otherSegmentId))
                    {
                        continue;
                    }

                    TrafficPriorityManager.Instance.SetPrioritySign(
                        otherSegmentId,
                        (bool)netService.IsStartNode(otherSegmentId, nodeId),
                        secondaryPrioType);
                }
            }

            // TODO avoid settin up the same node two times.
            foreach (ushort segId in segmentList)
            {
                ApplyPrioritySigns(segId, true);
                ApplyPrioritySigns(segId, false);
            }

            return(record);
        }
Exemple #2
0
        public static IRecordable FixPrioritySigns(
            PrioritySignsTool.PrioritySignsMassEditMode massEditMode,
            List <ushort> segmentList)
        {
            if (segmentList == null || segmentList.Count == 0)
            {
                return(null);
            }

            IRecordable record = RecordRoad(segmentList);

            var primaryPrioType   = PriorityType.None;
            var secondaryPrioType = PriorityType.None;

            switch (massEditMode)
            {
            case PrioritySignsTool.PrioritySignsMassEditMode.MainYield: {
                primaryPrioType   = PriorityType.Main;
                secondaryPrioType = PriorityType.Yield;
                break;
            }

            case PrioritySignsTool.PrioritySignsMassEditMode.MainStop: {
                primaryPrioType   = PriorityType.Main;
                secondaryPrioType = PriorityType.Stop;
                break;
            }

            case PrioritySignsTool.PrioritySignsMassEditMode.YieldMain: {
                primaryPrioType   = PriorityType.Yield;
                secondaryPrioType = PriorityType.Main;
                break;
            }

            case PrioritySignsTool.PrioritySignsMassEditMode.StopMain: {
                primaryPrioType   = PriorityType.Stop;
                secondaryPrioType = PriorityType.Main;
                break;
            }
            }

            IExtSegmentEndManager segEndMan = Constants.ManagerFactory.ExtSegmentEndManager;

            void ApplyPrioritySigns(ushort segmentId, bool startNode)
            {
                ref NetSegment netSegment = ref segmentId.ToSegment();
                ushort         nodeId     = startNode ? netSegment.m_startNode : netSegment.m_endNode;

                TrafficPriorityManager.Instance.SetPrioritySign(
                    segmentId,
                    startNode,
                    primaryPrioType);

                ExtSegmentManager extSegmentManager = ExtSegmentManager.Instance;

                for (int i = 0; i < 8; ++i)
                {
                    ushort otherSegmentId = nodeId.ToNode().GetSegment(i);
                    if (otherSegmentId == 0 ||
                        otherSegmentId == segmentId ||
                        segmentList.Contains(otherSegmentId))
                    {
                        continue;
                    }

                    TrafficPriorityManager.Instance.SetPrioritySign(
                        otherSegmentId,
                        (bool)extSegmentManager.IsStartNode(otherSegmentId, nodeId),
                        secondaryPrioType);
                }
            }