public bool ToggleLaneArrows(uint laneId, bool startNode, LaneArrows flags, out LaneArrowChangeResult res)
 {
     if (Flags.toggleLaneArrowFlags(laneId, startNode, flags, out res))
     {
         SubscribeToSegmentGeometry(Singleton <NetManager> .instance.m_lanes.m_buffer[laneId].m_segment);
         return(true);
     }
     return(false);
 }
Beispiel #2
0
 public bool ToggleLaneArrows(uint laneId, bool startNode, LaneArrows flags, out LaneArrowChangeResult res)
 {
     if (Flags.toggleLaneArrowFlags(laneId, startNode, flags, out res))
     {
         OnLaneChange(laneId);
         return(true);
     }
     return(false);
 }
Beispiel #3
0
        public static bool toggleLaneArrowFlags(uint laneId, bool startNode, LaneArrows flags, out LaneArrowChangeResult res)
        {
            if (!mayHaveLaneArrows(laneId))
            {
                removeLaneArrowFlags(laneId);
                res = LaneArrowChangeResult.Invalid;
                return(false);
            }

            if (highwayLaneArrowFlags[laneId] != null)
            {
                res = LaneArrowChangeResult.HighwayArrows;
                return(false);                // disallow custom lane arrows in highway rule mode
            }

            if (LaneConnectionManager.Instance().HasConnections(laneId, startNode))               // TODO refactor
            {
                res = LaneArrowChangeResult.LaneConnection;
                return(false);                // custom lane connection present
            }

            LaneArrows?arrows = laneArrowFlags[laneId];

            if (arrows == null)
            {
                // read currently defined arrows
                uint laneFlags = (uint)Singleton <NetManager> .instance.m_lanes.m_buffer[laneId].m_flags;
                laneFlags &= lfr;                 // filter arrows
                arrows     = (LaneArrows)laneFlags;
            }

            arrows ^= flags;
            laneArrowFlags[laneId] = arrows;
            applyLaneArrowFlags(laneId, false);
            res = LaneArrowChangeResult.Success;
            return(true);
        }